Forum: Mikrocontroller und Digitale Elektronik Atmega16 mit iPod kommunizieren lassen


von Tobi R. (tr123456789)


Angehängte Dateien:

Lesenswert?

Hallo,

ich sitze seit ein paar Tagen daran meinen atmega16 über die serielle 
Schnittstelle mit dem iPod zu verbinden.

Hier im Forum scheinen einige Leute zu sein, die dies schon geschafft 
haben.

Allerdings gibt es hier nirgendwo Code, den ich einfach kopieren könnte.

Mein Programm soll dem iPod den Befehl "play" übermitteln.


Seht ihr einen offensichtlichen Fehler?


Mein iPod ist folgendermaßen verschaltet:
http://stud3.tuwien.ac.at/~e0026607/ipod_remote/ipod_dock_pinout.html


Viele Grüße
Tobi

von ... .. (docean) Benutzerseite


Lesenswert?

F_CPU gesetzt?

von Tobi R. (tr123456789)


Lesenswert?

das ist von der ide definiert

von ... .. (docean) Benutzerseite


Lesenswert?

auch richtig? und läuft der Atmega auch wirklich damit? lass mal ne LED 
im sekundentakt blinken...

von Christian R. (supachris)


Angehängte Dateien:

Lesenswert?

Wieso eigentlich die Delays nach jedem Byte? Das ist nicht nötig. Ich 
hatte das mal auf einem MSP430 gemacht, ging auf Anhieb. Ich bild mir 
auch ein, den Code hier schon mal gepostet zu haben....im Anhang nochmal 
aus meinem Projekt. Wichtig sind die Konstanten-Arrays und die 
BuildIPodMessage() Funktion. Der Rest gehört zu einem RC5 -> IPod 
Umsetzer. Vielleicht hilft es. Achso, PutSingleChar() musst du natürlich 
passend implementieren, oder durch dein uart_put_char ersetzen.

von Tobi R. (tr123456789)


Lesenswert?

So... ich hatte ein anderes "play" als christian.
Der Befehl von Christian ist um ein byte länger. einmal 0x00 mehr.

http://nuxx.net/wiki/Apple_Accessory_Protocol#Advanced_Remote_.28Mode_4.29
auf dieser Seite ist "play" mit nur zwei byte angegeben.

Hab's verändert. Funktioniert immernoch nicht.

Ich glaube auch eher, dass mein "play" richtig ist.

Also die F_CPU hab ich mit großer Sicherheit richtig eingestellt. 
Sämtliche andere Projekte funktionieren. Auch LED-blinken im 
Ein-Sekunden-Takt.

Eine Kommunikation zwischen zwei Mikrocontrollern funktioniert auch.

Hm... Da keiner sagt, dass mein Code falsch ist, denke ich, dass die 
Kontakte am iPod nicht korrekt sind.

Was ich mich die ganze Zeit schon Frage ist: Muss der iPod wissen, mit 
welcher Baudrate der Befehl ankommt? Mein Mikrocontroller muss das 
nämlich wissen, aber auf allen Internetseiten für iPod Accessory 
Protocol steht, dass 19200 Baud normal sind, aber dass auch ander 
Baudraten funktionieren.

@christian: Welche Baudrate benutzt du eigentlich?


p.s: schonmal vielen Dank für die ersten Tipps.

von Christian R. (supachris)


Lesenswert?

Ich habe 19200 Baud benutzt. Generiert aus einem 3,6867 MHZ Quarz auf 
dem MSP430. Da ich die Timer-UART genommen habe, hab ich da den 
Baudratenquarz verwendet. Hast du auch richtig gezählt am Stecker? Und 
der Widerstand, mal einen anderen probiert? Ist deine Spannung am AVR 
auch 3,3V? Der IPod hat ein 3,3V Interface da dran.

Nochmal hier: http://pinouts.ru/PortableDevices/ipod_pinout.shtml und 
hier: http://www.adriangame.co.uk/ipod-acc-pro.html vergleichen, ob das 
alles passt.

von Tobi R. (tr123456789)


Lesenswert?

ich hab einfach einen poti als spannungsteiler genommen.... das liegen 
jetz ungefähr 3,4V an. am tx vom µc bzw. am rx vom iPod.

ich hab mal am tx vom iPod gemessen... da liegen weniger als 3V an... 
ist das falsch?

Ich glaube den Widerstand zu wechseln macht keinen sinn... das sind 
definitiv 500k

von Christian R. (supachris)


Lesenswert?

Stimmt, 500k ist korrekt, das hab ich nochmal nachgeschaut. Dann wirds 
am Protokoll liegen. Mein Code den ich gepostet habe, funktioniert auf 
jeden Fall mit dem IPod Touch. Wieso da jetzt einen Längendiskrepanz 
ist, weiß ich aus dem Stegreif jetzt auch gerade nicht mehr. Müsste ich 
zu Hause nochmal nachschauen, ob das wirklich der aktuelle Code war.
Hast du mal andere Kommandos getestet?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.