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
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
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.
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.
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.
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.
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.
Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.
Wichtige Regeln - erst lesen, dann posten!
Groß- und Kleinschreibung verwenden
Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang