PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Click Wheel (von Ipod Nano 3rd Gen) am AVR



KR-500
26.07.2011, 13:47
Hallo zusammen,

hier beschreibe ich wie versprochen (hat etwas länger gedauert aber hab jetzt endlich Ferien *freu*) wie ich das Click Wheel an den AVR angeschlossen habe. Als erstes hier zwei Bilder:
19443 19444

Wie auf dem ersten Bild schon zu sehen ist, ist der Connector leider in SMD, ich habe einfach an jede Kupferbahn ein Stückchen Kufperdraht angelötet (eine Faser aus einer Kupferlitze), das hat mit meinem Lötkolben mässig gut geklappt, aber nach zwei Versuchen hat es dann alles Funtkionert. Ich habe immer ein Stückkupferdraht nach vorne und eins nach hinten angelötet und dann zum schluss in eine Richtung gebogen. Eleganter wäre es wahrscheinliche einen SMD connector zu verwenden :).
Das Wheel funktioniert mit 3,3 Volt und die Pinbelgung ist wie folgt:


1 - VCC
2 - Clock vom Click Wheel
3 - muss mit VCC verbunden sein
4 - nicht angeschlossen
5 - nicht angeschlossen
6 - muss mit VCC verbunden sein
7 - Daten vom Click Wheel
8 - GND

Der erste Pin ist im Bild rot markiert und die Leiterbahn ist etwas dicker als alle anderen.

So weit zur Hardware, als nächstes habe ich mir einen kleinen Logic Analyser gebaut um mir das Protokoll an zu gucken. Hier noch einmal ein Bild von dem Signal:
19445 Im Anhang ist auch noch mal ein Zip-File mit dem C-Prog und der Excel Tabelle. Die Daten habe ich von dem AVR mit HTerm empfangen und dann als Output gespeichert.

Kommen wir nun zum eigentlichen Programm, dass das Signal auswertet. Wie hier https://www.roboternetz.de/community/showthread.php?53933-Funkwecker-R8C-13-GLCD-SD-Card-ClickWheel-Musik-ausgabe schon geschrieben, sendet das Click Wheel immer 4 Byte an den µc, davon sind erstes und letztes immer gleich. Im zweiten steht die Position des Fingers und im dritten ob ein Button gedrückt oder losgelassen wurde.
Das auswerten ist eigentlich recht einfach, da man immer bei der steigenden Flanke auf der Clock Leitung die Daten Leitung einlesen kann. Man muss also lediglich einen Externen Interrupt auf steigende Flanke stellen und dann in der Interrupt Routine die Daten einlesen. Im Code sieht das in etwa so aus:


#include <avr/io.h>
#include <avr/interrupt.h>

#define F_CPU 16000000

#include <util/delay.h>
#include "USART_Util.h"

volatile unsigned long data;
volatile int counter = 0;

int main (void){

USART_Init(USART_BAUD_SELECT);

USART_String("Hello World");

MCUCR |= (1<<ISC01) | (1<<ISC00); // steigende Flanke
GICR |= (1<<INT0); // Ext. Interrupt aktivieren
DDRD = 0x00; // PORTD auf Eingang
PORTD |= 0xFF; // Pullups aktivieren
sei(); // Globale Interrupts aktivieren

while(1){
}

return 0;
}

ISR( INT0_vect ) {
if(PIND & 0b00001000){
data |= 0x80000000; // eine Eins Speichern
}
data >>= 1; // weiter schieben
counter++; // Counter addieren

if(counter == 32){
USART_Transmit((data&0xFF000000)>>24);
USART_Transmit((data&0x00FF0000)>>16);
USART_Transmit((data&0x0000FF00)>>8);
USART_Transmit(data&0x000000FF);

USART_Transmit('\r');
USART_Transmit('\n');

counter=0;
data = 0;
}
}


Konnte den Code jetzt Leider nicht mehr Testen und weiß nicht genau ob zu 100% klappt, weil ich den Code anfangs für den R8C/13 geschrieben hab. Wenn es Verbesserungen gibt, immer her damit :).
(http://shop.ebay.de/i.html?_from=R40&_trksid=p5197.m570.l1313&_nkw=click+wheel&_sacat=See-All-Categories) <- Da hab ich meins auch her.

KR-500

lokirobotics
26.07.2011, 17:04
Tolles Projekt! Dann werd ich wohl mal mit meinen Prinzipien brechen und mir doch ein Apple-Produkt kaufen :D

KR-500
02.08.2011, 18:01
Hallo,


Dann werd ich wohl mal mit meinen Prinzipien brechen und mir doch ein Apple-Produkt kaufen :-)

Ging mir ähnlich ;) aber da hat Apple mal was wirklich, wirklich gutes gemacht und mit 9 Euro sehr erschwinglich. Das Teil ist genial, es funktioniert sogar noch durch 1mm Sperrholz, damit kann man tolle Sachen bauen. Außerdem gibt es sogar die aktuelle Position zurück und nicht nur den zurückgelegten Weg.

Falls noch jemand Fragen zu dem Teil hat kann ich gerne versuchen sie zu beantworten.

Viele Grüße
KR-500

Kampi
02.08.2011, 18:35
Coole Sache :)
Ich schau mal ob ich auch eins bekomme :D
Das hört sich klasse an!

lokirobotics
03.08.2011, 17:18
Ging mir ähnlich ;) aber da hat Apple mal was wirklich, wirklich gutes gemacht und mit 9 Euro sehr erschwinglich.
Ausnahmnsweise ja. XD

Mal schauen, wo's sich (sinnvoll) einsetzen lässt.

Kampi
03.08.2011, 19:04
Weißt du ob die Clickwheels der neueren iPods kompatibel zu deinem sind? Ich meinte von der Pinbelegung her.

KR-500
03.08.2011, 19:38
Hallo zusammen,


Mal schauen, wo's sich (sinnvoll) einsetzen lässt.

Hehe, konntest du das Click Wheel schon anschließen? Dann stell doch mal Bilder rein, wie du das mit dem SMD-Connector gelöst hast.


Weißt du ob die Clickwheels der neueren iPods kompatibel zu deinem sind? Ich meinte von der Pinbelegung her.

Also das Click Wheel der vierten Generation dürfte noch passen aber ich glaub danach die Click Wheels haben alle 14pins oder so, statt 8 deswegen glaub ich passt die Pinbelegung dort nicht ganz.

KR-500

Torrentula
05.08.2011, 07:45
Und die Amerikaner machen gleich wieder ein Arduino-Projekt daraus :D