Hallo Ich versuche eine infrarot Fernbedienung mit 2 Signalen zu bauen. ich hab dazu auch mal den Code angehängt vielleicht kann sich das jemand ansehen und mir helfen das Richtig umzusetzen. die Trägerfrequenz soll 38khz sein und ich wollte eigentlich ein rc5 Signal senden nur wen das so wie es ist an meiner alten Philips Anlage ausprobiere zeigt zwar ein blinken an das was empfangen wird aber mehr auch nicht. ich hoffe mir kann geholfen werden und ihr verzeiht den doch eher primitiven Code ich bin noch Anfänger :) Dedo
Nicht primitiv, aber gruselig dokumentiert. Die Funktionsweise des Programms müsste man sich komplett aus dem Code zusammensuchen. Es wäre einfacher, wenn du bescheiben würdest, wie das Programm arbeiten soll und den Code zeigst und dann zu kontrollieren wäre, ob das Programm so arbeiten kann und ob der Code dazu passt. Dass bestimmte Register mit einem bestimmten Wert geladen werden sieht man in den Anweisungen und das braucht nicht im Kommentar nochmal beschrieben zu werden. Was beschrieben werden sollte ist, wie z.B. der Timer arbeiten soll, d.h. welcher Modus etc. Angaben zur Taktrate wären auch nicht schlecht, dann könnte man dein Timing nachrechnen. Irgendwie vermisse ich auch die Stelle, in der du die Enableflags für den Timer setzt. Die komischen Namen und Positionen für die beiden Interruptroutinen mit absoluten Wertangaben statt symbolischer Namen für die .org Anweisungen laden auch nicht zur Kontrolle ein. Ich reime mir zusammen, dass du mit zwei Tastern o.ä. INT0 oder INT1 auslöst, um was mit IR zu senden. Das Zeitverhalten beim Senden soll mit einem Timer kontrolliert werden. Dessen Interruptroutine vermisse ich und ich vermisse dessen korrekte Initialisierung. Das Zeitverhalten kann ich nicht nachkontrollieren.
Hallo JA mit der Dokumentation tut mir leid ich hab das nochmal versucht :) und ich beschreibe auch mal was den eigentlich Paserin soll. Der Takt ist 4mhz extern Also ich habe zwischen Pin PB3 und PB2 eine LED mit Sperrrichtung zu PB2. PB2 ist beim Attiny2313 der OC1A Pin und der soll über den Timer1 mit 38khz Toggeln. Wen ich jetzt Pin PB2 auf Low setze sollte die LED leuchte (mit 38khz Falkern aber das nimmt man ja nicht mehr wahr). Soweit klappt das auch. Jetzt habe ich je einen Taster an den Pins für externe Interrupts und je nachdem welcher gedrückt wird sollte einer der zwei ir codes gesendet werden. Da bei rc5 die LED für eine 1 889µs aus und anschließend 889µs eingeschaltet ist (bei 0 erst ein, dann aus) habe ich die Warteschleife die 3556 takte wartet was bei 4mhz eine zeit von 889µs sein sollte. Wen ich jetzt im rc5 Signal eine 1 haben möchte springt der Controller "send1" und die LED sollte 889µs aus sein und dann 889µs eingeschaltet bei 0 wird zu "send0" gesprungen und die LED ist erst an und dann aus. Wen der Taster immer noch gedrückt ist wen der rc5 code gesendet wurde wir wieder zum Anfang gesprungen und erneut gesendet. Das Problem ist das meine Philips Anlage zwar irgend was empfängt (sichtbar durch blinken einer LED) aber damit nichts anfangen kann. Ich danke das das am Timing liegt weis aber nicht wie ich das lösen kann bzw wie ich einen Timer dazu bringe das der das richtig macht. Auch damit das die Taster an den Interrupt Eingängen hängen bin ich eigentlich nicht so zufrieden aber ich weis nicht wie ich das ändern kann, wie gesagt bin noch ziemlicher Neuling aber ich denke jeder hat mal angefangen und hatte Fragen :) so ich hoffe das mir jetzt noch jemand helfen mag. Dedo
Mit der Erklärung macht die Bugsuche gleich mehr Lust. Mal sehen, ob ich heute abend in Ruhe dazu komme mir das anzusehen.
schon mal vielen dank im voraus und tut mir ehrlich leid mit der anfänglich doch eher weniger hilfreichen Beschreibung war gestern Abend wohl etwas schreib faul. Dedo
Sorry, ich hatte noch keine Muse für die ausführliche Kontrolle. Aber ich hatte mich gestern auf PWM "eingestimmt" und bin jetzt dabei RC5 nachzuschlagen. Mich hat zunächst beschäftigt, dass "der Philips" zwar empfängt, aber keine Kommandos ausführt. Deshalb habe ich mit dem beschäftigt, was du wie sendest - also dem RC5 Protokoll an sich. Du schreibst, dass du 38 kHz verwendest. Hat es einen besonderen Grund, dass du nicht die üblichen 36 kHz verwendest? Die beiden Datenworte habe ich mir auch angesehen: Die Geräteadresse ist beides mal 17, d.h. es wird ein Receiver/Tuner angesprochen, richtig? Der Taster an INT0 sendet Kommando 32 und der Taster an INT1 sendet Kommando 33. Ich habe an vier Stellen im Netz nachgesehen, was diese Kommandos bedeuten. Drei Stellen lieferten keine Erklärung. Eine stelle nannte Kanal+ (32) und Kanal-/Enter (33). Ist das deine Wunschfunktion? Zum Programmcode:
1 | ldi temp1, 0x40 ;toggeln an OC0A (PB3) |
2 | out tccr1a, temp1 |
3 | ... |
4 | |
5 | send1: |
6 | ldi temp1, (0 << PB2) ;Sende led ein |
7 | out portb, temp1 |
passt nicht zu > Also ich habe zwischen Pin PB3 und PB2 eine LED mit Sperrrichtung zu > PB2. PB2 ist beim Attiny2313 der OC1A Pin und der soll über den Timer1 > mit 38khz Toggeln. Wen ich jetzt Pin PB2 auf Low setze sollte die > LED leuchten Datenblatt Attiny2313 PB2: OC0A PB3: OC1A ldi temp1, 0x40 ; COM1A0 setzen => Toggle OC1A (PB3) out tccr1a, temp1 PB3 (OC1A) ----+ | V --- | PB2 ----###----+ Rv Die Funktion müsste trotz falschem Kommentar im ASM und der Erklärung gegeben sein. Ich habe das jetzt soweit verstanden, dass ich es aufbauen kann und mir das Timing im Oszi ansehen kann. Zwischen zwei Datenworten ist ja eine Pause von 113,778 ms (=64 Bits) vorgesehen, die du in deinem Programm nicht berücksichtigst. Du springst ja an dieser Stelle sbis pind, 2 ;wen taste 1 weiterhin gedr�ckt, rjmp int0_handler ;weiter senden i.U. sofort zum Senden des nächsten Datenwortes, wenn die Taste weiterhin gedrückt ist. Zum dem Tastendrücken selbst - ich hätte zunächst mit dem Pollingverfahren, d.h. ohne INTx gearbeitet. Oder wenigstens das Senden ausserhalb der INTx ISRs im Hauptprogramm gemacht. Also im INTx Fall Flag setzen "taste wurde gedrückt" und weitere INTx sperren. Dann in der Hauptschleife Flag prüfen, Senden, Pause, INTx freigeben. Im RC5-Protokoll ist auch ein sog. Togglebit vorgesehen (3. Bit im Datenwort). Du berücksichtigst das nicht, sondern benutzt immer 1 als Togglebit. Laut RC5 Spezifikation würde das bedeuten "ein langer Tastendruck", während ja eigentlich beim Wechsel der Kommandos 32 <-> 33 das Togglebit 0 gesendet werden müsste. Ich weiss aber nicht, wie allergisch der Empfänger darauf reagieren würde.
also 38khz benutze ich da ich eigentlich noch vorhatte einen Empfänger zu bauen und noch einen tsop1738 habe. Bei der Geräteadresse hab ich ziemlich viel durchprobiert weil ich mir nicht sicher war welcher richtig ist bei einer Kompaktanlage. Ich hab jetzt mal einen CD Player von Philips raus gekramt und die Geräteadresse entsprechend in 20 geändert und als Kommando, voriger (50) und nächster (52) Titel genommen. Ich habe auch noch eine Wartezeit von 113,778ms nach dem senden eingefügt aber ich habe immer noch keine Reaktion von seiten des CD Players. Das Toggle bit hab ich so verstanden das das Gerät weis ob eine taste dauerhaft oder erneut gedrückt wurde da beim CD Player beispielsweise das halten der "nächster titel taste" ein vorspulen im titel bewirkt. das mit dem Flag setzten werde ich mir nochmal ansehen (mal sehen ob ich das verstehe) und aus probieren. Mit Polling verfahren kann ich nicht soviel anfangen bzw. ich weis nicht was ich darunter verstehen soll. Eigentlich brauch ich auch kein rc5, da ich sowieso noch einen eigenen Empfänger bauen wollte der dann eine Kamera auslöst, es müssen 2 verschiedene Pins auf High gesetzt werden, je nachdem welcher Knopf auf der Fernbedienung gedrückt wurde (dabei könnte ich auch noch Hilfe gebrauchen).
Ich habe dein Programm auf ein Pollin Funk AVR Board portiert. Die Änderungen sind 1/ Nur ein Kommando (32) statt zwei Kommandos. Das Pollin Funk AVR Board hat nur einen Taster. 2/ Taster ist active-high an PB1 angeschlossen 3/ LED1 an PD6 und LED2 an PD5 habe ich als Lebenszeichenblinker und als simulierte Sende-LED angeschlossen. 4/ Statt Tastenabfrage im Interrupt, Tastenabfrage im Polling in der Hauptschleife 5/ Alle Timings von 4 MHz auf 8 MHz umgeschrieben 6/ Keine Sende-LED installiert, sondern Logikanalyzer an PB1, PB2 und PB3 angeschlossen. Die Signale sehen auf dem Logikanalyzer richtig aus, d.h. so wie es die Programmlogik verlangt. Es gibt geringe Abweichungen im Timing aufgrund von Rundungen (4/8 MHz => 38 kHz passt nicht doll) und die Warteschleifen sind nicht 100% exakt. Wenn du Werte findest, in welchem Rahmen die Abweichungen liegen dürfen, messe ich aus, ob das eingehalten wird. Leider ich habe ich keine Geräte mit RC5 FB, um das Senden praktisch zu testen. Vielleicht wäre es schlauer zuerst den RC5-Empfänger aufzubauen? Dann könntest du deine echte FB von den Philips-Geräten damit auslesen und mit dem Eigensender vergleichen. Eine andere Idee wäre mal probeweise von 38 kHz auf 36 kHz zu gehen. Ist ja nicht wild, das in der Software zu ändern.
ich hab das mit den 36khz mal ausprobiert ohne das sich was bei dem CD Player getan hat. Auf die Idee jetzt erst einmal einen Empfänger auf zu bauen bin ich auch schon gekommen nur weis ich absolut nicht wie ich da anfangen soll oder wie ich das umsetzen kann. Eventuell weist du das ja und kannst mir helfen, oder jemand anders der das hier liest weis wie ich den Empfang umsetzen kann. Ich hab mit schon die Appnote von Atmel dazu angesehen aber ich versteh nicht so ganz was am Portb passieren soll. Trotzdem danke dafür das du dir die zeit nimmst und dir das ansiehst.
Hi, bist du dir denn sicher das deine Anlage überhaupt mit RC5 arbeitet ? Ich hänge mal einen RC5 Code an, womit ich damals meinen MP3 Player an ner Anlage gesteuert habe (mittlerweile durch RFM12 ersetzt). Der Code ist zwar super primitiv ;-) , funktioniert aber garantiert, da mein Fernseher auch mit RC5 arbeitet. Achso, die Pausen sind für 16Mhz angepasst und µC ist ATmega8. Musst du halt noch anpassen. Viel Erfolg und gruß.
Ich habe doch noch ein Philips-VCR mit IR-FB bei mir gefunden, den hatte ich schon ganz vergessen... Ich ziehe gleich los zum Einkaufen und zum Conrad. Vielleicht hat der eine IR-Sendediode und einen TSOPschlagmichtot im Laden, > Ich hab mit schon die Appnote von Atmel dazu angesehen aber ich versteh > nicht so ganz was am Portb passieren soll. Bist du so nett und postest die Appnote Nummer oder den Titel zum Suchen oder den Link aufs PDF?
Hi >Ich hab mit schon die Appnote von Atmel dazu angesehen aber ich versteh >nicht so ganz was am Portb passieren soll. Auf PortB wird das Kommando binär ausgegeben. >Bist du so nett und postest die Appnote Nummer oder den Titel zum Suchen >oder den Link aufs PDF? AVR410 und AVR514 Empänger und Sender. MfG Spess
Danke Spess AVR410: RC5 IR Remote Control Reciever http://www.atmel.com/dyn/resources/prod_documents/doc1473.pdf http://www.atmel.com/dyn/resources/prod_documents/avr410.zip AVR415: RC5 IR Remote Control Transmitter http://www.atmel.com/dyn/resources/prod_documents/doc2534.pdf http://www.atmel.com/dyn/resources/prod_documents/AVR415.zip Übersicht Appnotes: http://www.atmel.com/dyn/products/app_notes.asp?family_id=607
Hallo Ist das der ganze Code Fabian? Ich versteh nicht so ganz warum die LED unterschiedlich lange an und aus ist ich dachte bei rc5 ist sie 889µs an und genauso lange aus. Und ich bin mir sicher das die Geräte rc5 benutzen ich hab nämlich mal die Fernbedienung geöffnet und da war ein rc5 sende Chip von Philips drin. mit den Appnote's ist mir spess53 ja jetzt zuvorgekommen aber das sind die die ich mir angesehen habe. und wen das Signal binär ausgegeben wird heist das ich kann an jeden Pin von PortB eine LED anschließen und dan leuchten die je nachdem welcher Code das ist? Weil das habe ich ausprobiert und die LED's machten garnichts. Jetzt stellt sich mir die frage ist mein tsop1738 Kaput oder hab ich das mit den LED's falsch verstanden.
Dedo Foltin wrote: > Hallo > > Ist das der ganze Code Fabian? Und ich bin mir sicher das die Geräte rc5 > benutzen ich hab nämlich mal die Fernbedienung geöffnet und da war ein > rc5 sende Chip von Philips drin. Also gut wenn deine Geräte RC5 verwenden, funzt der Code 100%. Du setzt R20, je nachdem ob du ne 1 oder 0 senden willst und rufst mit rcall RC5_decide auf. >Ich versteh nicht so ganz warum die LED unterschiedlich lange an und aus >ist ich dachte bei rc5 ist sie 889µs an > und genauso lange aus. Muß ich mir selbst noch mal anschauen, ist schon nen paar Jahre her ;-) Gruß
ich wohl erstmal die Warteschleifen ausrechnen und dan mal sehen wie das aussieht und mir scheint bei längerem betrachten das du auch die Trägerfrequenz über die Warteschleifen regelst oder geregelt hast kann das sein?
Hi nochmal, Gerade mal getestet schnell, damit ich hier keinen Dreck weitergebe. Also bei meinem Phillips (von denen ist RC5 erfunden) und bei meinem Löwe Fernseher funzt der Code einwandfrei. Wie gesagt der Atmega lief damals mit 16Mhz, auch keine Ahnung mehr warum? 14208 Zyklen = 888µs und 32Samples*(109 + 331)Zyklen = 888µs. Aber warum ich da die unterschiedlichen Zeiten drin habe, komm ich nicht mehr drauf. Vielleicht habe ich da rumexperementiert ? Gruß
ich denke die 2 Zeiten sind für die Trägerfrequenz sonst wird das ja vom Empfänger raus gefiltert. Ich werd jetzt erstmal versuchen das auf 4mhz umrechnen.
Dedo Foltin wrote: > ich wohl erstmal die Warteschleifen ausrechnen und dan mal sehen wie das > aussieht und mir scheint bei längerem betrachten das du auch die > Trägerfrequenz über die Warteschleifen regelst oder geregelt hast kann > das sein? Ja, für die Timer war ich zu faul, weils lief und ich andere Projekte hatte, die wichtiger waren. Die 14208 Zyklen PORT Pin Low = 0 und die gesampleten 1-->0 Übergange = 1 So hatte ich die 0 zu 1 Übergänge für nen High Bit und 1 zu 0 Übergänge für Low Bit. Zum rechnen und erstellen von Warteschleifen zum testen, bevor man die Tiemr nimmt, habe ich mal nen Proggi angehangen. Gruß
Lol nochmal Hi. Habe gerade wieder meine Doku gefunden. ;-) Und Bild im Anhang ;-) Die IR-Fernbedienung besitzt einen 36 kHz-Generator, der die IR-Sendediode ansteuert. Die Sendepulse sind 6,9444 µs lang. Zwischen den Sendepulsen ist jeweils eine Pause von 20,8332 µs. Für ein Bit mit dem Wert "1" wird der Sendergenerator für 889 µs ausgeschaltet und anschließend für 889 µs eingeschaltet (entspricht 32 IR-Impulse) . Ein "0"-Bit beginnt dagegen mit 889 µs Sendezeit (32 IR-Impulse), gefolgt von 889 µs Pause. Folglich dauert ein Bit 1,778 ms und die Übertragung eines kompletten 14-Bit Datenworts 24,889 ms. Falls man die Taste auf der Fernbedienung gedrückt hält, wird das Datenwort alle 113,778 ms wiederholt (entspricht der Dauer von 64 Bit). Wer sich dieses Timing mal genauer anschaut wird feststellen, das alles auf dem 36 kHz-Grundtakt aufbaut. Aber natürlich muß man das Timing nicht auf die dritte Stelle nach dem Komma genau einhalten.
HI Danke erstmal das Programm hatte ich auch schon gefunden und damit gespielt.
so wegen den warte schleifen bin cih nachdem ich alles um gerechnet hatte drauf gekommen das 4mhz ja 1/4 von 16mhz sind und man die takte daher einfach durch 4 teilen könte aber egal. ich hab das jetzt auf 4mhz umgerechnet nur wei ihc nicht wie du das mit dem senden gemacht hast. einfach so: Loop: sbic pind, 0 rjmp loop ldi r20, 0x01 rcall RC_5_decide ldi r20, 0x01 rcall RC_5_decide ldi r20, 0x01 rcall RC_5_decide ldi r20, 0x01 rcall RC_5_decide ldi r20, 0x00 rcall RC_5_decide ldi r20, 0x01 rcall RC_5_decide ldi r20, 0x00 rcall RC_5_decide ldi r20, 0x00 rjmp RC_5_decide ldi r20, 0x01 rcall RC_5_decide ldi r20, 0x01 rcall RC_5_decide ldi r20, 0x00 rcall RC_5_decide ldi r20, 0x01 rcall RC_5_decide ldi r20, 0x00 rcall RC_5_decide ldi r20, 0x01 rcall RC_5_decide rjmp loop oder wie? Ich hab das so wie oben probiert aber das klappt nicht (kann auch sein das ich mich bei der Geräteadresse vertan habe, die sollte 20 für CD Player sein und das Kommando 53 für Play).
Auch wenn es verhasst ist, vielleicht kann es bei der Fehlersuche etwas helfen: Bascom hat fertige Funktionen für RC5, damit kann man z.b. mal evaluieren ob der Hardwareaufbau funktioniert und ob das Gerät zur Reaktion überredet werden kann. Danach kann man weiter am eigenen ASM-Code basteln. Gruß Dominique Görsch
Hi, zeig mal deinen ganzen Code. So kann man nur raten, worans liegt. Z.B könnten deine Warteschleifen die gleichen Register benutzen, wie r19 oder r20, oder ..... Und wenn du schon dabei bist deine Schaltung auch gleich ;-) Gruß P.S: Haste ne Fernbedienung für den Player? Wenn ja schau doch mal nach welche Geräteaddresse das Ding hat (TSOP oder so). Andere Methode, du lässt dauernd senden. Timer laufen lassen und im Code alle 10sek oder so die Geräteaddresse um 1 erhöhen. Sobald funzt drückste deinen Taster oder so und die Geräteaddresse wird ins EEPROM gebrannt.
Guten Morgen Allen die Noch wach sind Im Anhang mal der gesamte Code. Die Hardware zeig ich morgen hab keine Digicam und mir ist grad nicht nach zeichnen. Aber ich kann das Beschreiben: Also die LED ist an PB0 ein Taster an PD0 und ich glaube das is alles.
Nabend, du hast im achten Aufruf des RC5_decide nen "rjmp" benutzt, das gibt nen Stack Overflow, weil das "ret" springt ins Nirvana. Gruß
ja da hatte ich wohl "rjmp" benutzt hab ich jetzt aber geendert. Der CD Player meint aber er muss immer noch nicht reagieren. Wehrend er auf die original Fernbedienung prima reagiert.
naja ich glaub ich sollte doch erst einmal den Empfänger aufbauen nur habe ich dazu irgendwie gar keinen Ansatz kann mir da jemand auf die Sprünge helfen? Wäre echt nett.
Hi, Tsop1736 oder sfh5110-36 an nen Port Pin knallen. Die funktionierende Fernbedienung nehmen und auf Play drücken. Empfangenen Code in EEPROM speichern. Geräteaddresse auslesen und voila. Gruß
so ich hab mich jetzt nochmal mit der Appnote 410 über den Empfang von rc5 auseinandergesetzt und hab es jetzt mit deinem code geschafft das die LED's an PortB das Kommando anzeigen . Jetzt will der Empfänger aber nicht auf die original Fernbedienung reagieren, also denke ich das die Geräteadresse falsch ist. Da werde ich jetzt mal verschiedene durch probiren.
Stefan B. wrote: > Ich habe doch noch ein Philips-VCR mit IR-FB bei mir gefunden, den hatte > ich schon ganz vergessen... Ich ziehe gleich los zum Einkaufen und zum > Conrad. Vielleicht hat der eine IR-Sendediode und einen > TSOPschlagmichtot im Laden, Beim Conrad habe ich einen IR-Empfänger TSOP1736 (36 kHz), einen TSOP4838 (38 kHz), zwei IR Sendedioden sowie eine 10€ Universalfernbedienung 8-in-1 (weil ich die Original-FB noch nicht gefunden habe) erstanden. In den Attiny2313 wurde der angepasste (Eingangspin PD2, XTAL 8e6, TCCR0 => TCCR0B) RC5-Empfängercode von Peter Dannegger geschrieben (Beitrag "Fernbedien RC5 Empfänger"). Der IR-Empfänger wurde mit 10 kOhm Pullup (wie Datenblatt) angeschlossen. Die U-FB konnte ich über das Setup im Manual der U-FB auf Adresse 17 (Amplifier/Tuner) einrichten. Die + und die - Taste produzieren die Kommandos 32/33 (Anhang). Die FB schickt übrigens nicht nur einen Sendeburst pro Kommando raus, sondern drei! Es ist egal, welchen IR-Empfänger ich anschliesse. Es funktionieren beide (zumindest auf Schreibtischdistanz). Ich will als nächstes mal schauen, wie ich den IR Sendeteil aufbaue.
Dedo Foltin wrote: > so ich hab mich jetzt nochmal mit der Appnote 410 über den Empfang von > rc5 auseinandergesetzt und hab es jetzt mit deinem code geschafft das > die LED's an PortB das Kommando anzeigen . Jetzt will der Empfänger aber > nicht auf die original Fernbedienung reagieren, also denke ich das die > Geräteadresse falsch ist. Da werde ich jetzt mal verschiedene durch > probiren. Ja das war auch zu vermuten, da braut sicher jeder seine eigene Suppe mit den Addressen. Wenn der Empfänger funzt ist jetzt ja nur nochn Klacks die Addresse herauszubekommen. Einfach das Empfangene ins EEPROM schreiben und auslesen. Gruß
Hallo Das Programm von Peter Dannegger ist leider in C und das kann ich garnicht. Gibts das eventuell in Assembler? Fabian Ostner wrote: > Ja das war auch zu vermuten, da braut sicher jeder seine eigene Suppe > mit den Addressen. Wenn der Empfänger funzt ist jetzt ja nur nochn > Klacks die Addresse herauszubekommen. Einfach das Empfangene ins EEPROM > schreiben und auslesen. > > Gruß Also ich hab beim dem Empfänger alle 32 Geräteadressen ausprobiert und bei keiner hat sich was mit der original Fernbedienung getan der Empfänger reagiert weiter hin nur auf meine "Fernbedienung" mit deinem Code. Ich habe im Empfänger die Adresse 20. Der Sender hat auch die Adresse 20 und das Kommando 53 (Play) und dieses Kommando wird mir vom Empfänger angezeigt. Achso in der original Fernbedienung ist ein PCA84C122AT (http://www.datasheetcatalog.org/datasheet/philips/PCA84C222A.pdf) das is ein rc5 sende IC von Philips also die original Fernbedienung ist ganz sicher rc5.
Dedo Foltin wrote: > Das Programm von Peter Dannegger ist leider in C und das kann ich > garnicht. Gibts das eventuell in Assembler? Nicht dass ich wüsste. Ich kann dir aber das Programm kompilieren und dir die HEX-Datei schicken. Ich brauche dann den Schaltplan, wie du den IR-Empfänger anschliesst, ob sonst was noch angeschlossen ist und die Taktrate (4 MHz?) und den Typ (Attiny2313?) deines µCs. Mittelfristig solletst du dir C mal ansehen.
also ich bin eigentlich flexibel was den Anschluss des Empfängers betrifft sagen wir einfach PD2. Und ja das soll auf einem Attiny2313 laufen mit 4mhz. Also wen du mir das Hex-file geben magst kann ich das bei mir mal ausprobieren. Mit C werde ich mich wohl auch mal auseinander setzen wen ich die zeit finde weil da müsste ich von Grund auf beginnen. Also eventuell Osterferien.
Das HEX-File mache ich dir heute abend fertig. PD2 ist OK, das habe ich auch. Ich hatte zuerst selbst versucht den IR-Code über INT0 (PS2) und Flankenerkennung einzulesen. Da störten aber gelegentlich unerwünschte Interrupts, so dass ich da noch nicht weitergemacht habe. Auf meinem Board ist eine LED zwischen PD5 (und PD6) und GND. Das ist praktisch, weil man damit eine Debugausgabe produzieren kann, wenn Impulse erkannt werden.
Hier ist das HEX-File inkl. Source mit den paar kleinen Anpassungen. Attiny2313 XTAL 4e6 (4 MHz) Debug-LED an PD6 active-high angeschlossen (PD6---###---->|---GND). Flackert bei jedem Bit, das über IR reinkommt IR-Empfänger an PD2 angeschlossen Ausgabe per UART 9600 Baud 8N1
Jetzt bin ich genervt ich hab das HEX-File in den µC gebrannt und alles angeschlossen also max202 an TX und RX, LED an PD6 und den tsop an PD2. Die LED flackert auch fleißig wen ich eine Taste auf der Fernbedienung drücke nur im HyperTerminal wird nicht angezeigt. Ich habe eigentlich den Aufbau schon 3 mal kontrolliere und keinen Fehler gefunden. Ich hoffe jetzt das der max202 nicht kaputt ist weil es bei mir in der nähe keinen Laden gibt der Elektobauteile führt (oder ich hab ihn noch nicht gefunden).
Probiere 2400 Baud auf dem PC. 2400 Baud bei 1 MHz ist die gleiche UBRR Einstellung wie 9600 Baud bei 4 MHz. Für den Fall, dass du die Fuses falsch gesetzt hast. Dann resette den AVR. Das Programm bringt am Anfang die Statusmeldung. Wenigstens die solltest du sehen egal ob ein RC5 Code erkannt wird. Du kannst auch die Fuses auslesen und hier zeigen. Checke die RS232 Verbindung. Messe dazu die Spannung zwischen Pin2 bzw. Pin3 und Pin5 am Stecker des RS232 Kabels, wenn es einseitig in den PC eingesteckt ist. Pinangaben sind für DB9-Stecker. Der Pin höherer Spannung (bei mir -11V) ist der TXD vom PC. Der andere mit der niedrigen Spannung (bei mir um 80 mV) ist der RXD vom PC. Die TXD-Leitung vom AVR muss über TXIN-MAX202-TXOUT auf die RXD zum PC gelangen.
also bei den fuse-bits ist sut0 und cksel0, 1 und 3 programmiert und ich habe einen externen Quarz mit 4mhz zwischen xtal0 und 1, mit jeweils einem 22pf Keramikkondensator zu GND. Da sich Grade die Batterie von meinem Multimeter verabschiedet hat und ich keine Ersatz 9v block habe kann ich die Spannung am Com Port erst Morgen. Ich hab das aber angeschlossen wie in der Tutorial unter UART und damals mit dem mega8 hat das auch prima geklappt.
okay ich konnte gerade mein Multimeter doch nochmal überreden und das ist so angeschlossen wie du gesagt hast.
Dedo Foltin wrote: > also bei den fuse-bits ist sut0 und cksel0, 1 und 3 programmiert Das ist Werkseinstellung, d.h. interner RC-Oszillator mit 1 MHz. http://www.engbedded.com/cgi-bin/fc.cgi?P_PREV=&P=ATtiny2313 BTW. Es ist sicherer einen Screenshot zu zeigen oder die Ausgabe von AVRDUDE.
ne is 8mhz aber du hast recht mit dem internen RC-Oszillator für 1mhz müsste noch der Vorteiler gesetzt werden (ckdiv8). Jetzt weiß ich auch warum der Empfänger den ich mit Hilfe von der Appnote aufgebaut habe nur auf den Sender mit Fabians Code reagiert hat, weil bei beide tiny2313 habe ich die fuse-bits gleich gesetzt. Ich werde dan mal die fuses so setzen: http://www.engbedded.com/cgi-bin/fc.cgi?P_PREV=ATtiny2313&P=ATtiny2313&V_LOW=CD&V_HIGH=DF&V_EXTENDED=FF&M_LOW_0x3F=0x1C&M_HIGH_0x0E=0x0E&M_HIGH_0x20=0x00&B_SUT1=P&B_SPIEN=P&B_SUT0=P&B_CKSEL1=P Wen ich das richtig sehe ist das dann externer Quarz oder?
ja nu klappt das jedenfalls mit dem anzeigen damit was gesendet wird und die original Fernbedienung und der Nachbau senden das gleich trotzdem reagiert der CD Player nur aufs Original. Aber ich oder wir (je nachdem wie man das betrachtet) sind ja damit schonmal ein stück weiter gekommen.
okay vergiss den letzten teil von dem was ich eben gesagt habe der Nachbau geht doch nur hat der nicht so eine gute Reichweite wie die original und ich musste sie auf den CD Player richten. Aber es geht.
so mich hatte jetzt doch nochmal der Ehrgeiz gepackt weil ich dachte mein Fernbedienung's Code muss doch auch Funktionierten. Also hab ich mir den noch mal angesehen und dann nach langen rumrechnen mit dem Timing ist mir aufgefallen das ich 1 und 0 vertauscht hatte bei mir war eine 1 erst 889µs an und anschließend 889µs aus und das ist die reinen folge für eine 0 also konnte der Empfänger damit einfach nichts anfangen, weil ja schon die Start bits gefehlt haben. nachdem ich das jetzt geädert habe geht mein Code auch.
So und hir nochmal der Code Fals den jemand haben möchte :) Die gewünschte Geräteadresse und das Kommando einfach im intX_handler einstellen von oben nach unten. So wie das ist bei int0_handler die Geräteadresse 20 und das Kommando 50. Bei int1_handler ist die Adresse 20 und das Kommando 52.
Der Empfänger auf dem Polling Funk AVR Board ist jetzt auch beschrieben: http://www.mikrocontroller.net/articles/Pollin_Funk-AVR-Evaluationsboard#RC5_Empf.C3.A4nger
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.