Forum: Mikrocontroller und Digitale Elektronik ir senden mit tiny2313


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Dedo F. (entenhausen)


Angehängte Dateien:

Lesenswert?

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

von Dedo F. (entenhausen)


Lesenswert?

Kann mir keiner helfen oder finden alle den Code zu Primitiv?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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.

von Dedo F. (entenhausen)


Angehängte Dateien:

Lesenswert?

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

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Mit der Erklärung macht die Bugsuche gleich mehr Lust. Mal sehen, ob ich 
heute abend in Ruhe dazu komme mir das anzusehen.

von Dedo F. (entenhausen)


Lesenswert?

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

von Dedo F. (entenhausen)


Lesenswert?

Hallo hast du dir das schon angesehen und den oder die Fehler gefunden?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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.

von Dedo F. (entenhausen)


Lesenswert?

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).

von Stefan B. (stefan) Benutzerseite


Angehängte Dateien:

Lesenswert?

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.

von Dedo F. (entenhausen)


Lesenswert?

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.

von Jean P. (fubu1000)


Angehängte Dateien:

Lesenswert?

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ß.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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?

von spess53 (Gast)


Lesenswert?

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

von Stefan B. (stefan) Benutzerseite


Lesenswert?


von Dedo F. (entenhausen)


Lesenswert?

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.

von Jean P. (fubu1000)


Lesenswert?

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ß

von Dedo F. (entenhausen)


Lesenswert?

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?

von Jean P. (fubu1000)


Lesenswert?

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ß

von Dedo F. (entenhausen)


Lesenswert?

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.

von Jean P. (fubu1000)


Angehängte Dateien:

Lesenswert?

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ß

von Jean P. (fubu1000)


Angehängte Dateien:

Lesenswert?

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.

von Dedo F. (entenhausen)


Lesenswert?

HI

Danke erstmal das Programm hatte ich auch schon gefunden und damit 
gespielt.

von Dedo F. (entenhausen)


Lesenswert?

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).

von Dominique G. (dgoersch)


Lesenswert?

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

von Jean P. (fubu1000)


Lesenswert?

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.

von Dedo F. (entenhausen)


Angehängte Dateien:

Lesenswert?

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.

von Jean P. (fubu1000)


Lesenswert?

Nabend,
du hast im achten Aufruf des RC5_decide nen "rjmp" benutzt, das gibt nen 
Stack Overflow, weil das "ret" springt ins Nirvana.

Gruß

von Dedo F. (entenhausen)


Lesenswert?

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.

von Dedo F. (entenhausen)


Lesenswert?

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.

von Jean P. (fubu1000)


Lesenswert?

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ß

von Dedo F. (entenhausen)


Lesenswert?

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.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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.

von Jean P. (fubu1000)


Lesenswert?

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ß

von Dedo F. (entenhausen)


Lesenswert?

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.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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.

von Dedo F. (entenhausen)


Lesenswert?

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.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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.

von Stefan B. (stefan) Benutzerseite


Angehängte Dateien:

Lesenswert?

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

von Dedo F. (entenhausen)


Lesenswert?

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).

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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.

von Dedo F. (entenhausen)


Lesenswert?

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.

von Dedo F. (entenhausen)


Lesenswert?

okay ich konnte gerade mein Multimeter doch nochmal überreden und das 
ist so angeschlossen wie du gesagt hast.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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.

von Dedo F. (entenhausen)


Lesenswert?

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?

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Ja, das passt.

von Dedo F. (entenhausen)


Lesenswert?

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.

von Dedo F. (entenhausen)


Lesenswert?

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.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Klasse! Gutes Nächtle dann!

von Dedo F. (entenhausen)


Lesenswert?

ja eben so gute Nacht und vielen dank

von Dedo F. (entenhausen)


Lesenswert?

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.

von Dedo F. (entenhausen)


Angehängte Dateien:

Lesenswert?

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.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.