PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : kleiner RC5 empfänger mit attiny13L und Bascom



rocketman123
23.11.2008, 11:07
Hallo,

ich möchte einene kleinen RC5-Infrarot Empfänger mit dem Attiny13 bauen. Dieser wird mit 2 Mignonbatterien (2,4V) versorgt.

Da die Bascom RC5 routinen beim tiny13 nicht funktionieren möchte möchte ich das selber für 2 Befehle schreiben.

wie kann ich das im Bascom realisieren?
Hat jemand einen link in dem z.B das senden bzw. das Empfangen von eigenen code's erklärt.

wäre es möglich das folgendermaßen zu machen...
if Pin...=0 waitms.. Pin...=1 waitms...Pin...=0 waitms......then toggle Port... end if

radbruch
23.11.2008, 11:33
Hallo

Ganz so einfach ist es nicht. Bei RC5-Signalen werden die eigentlichen Datenbits auf eine 36Khz-Trägerfrequenz gemischt. Beim Senden muss man diese Frequenz zusätzlich erzeugen, beim Empfangen filtert der IR-Empfänger die Trägerfrequenz aus und liefert die nackten Datenbits an den Mikrokontroller. Einen RC5 sendenden tiny13 haben wir hier mal in Bascom zusammengebastelt:

https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=36253

Das Empfangen ist deutlich einfacher. Die Daten sind manchestercodiert, das bedeutet, ein Flankenwechsel in der Mitte des Bits ist die eigentliche Information. Also wartet man nach dem Start des ersten Bits etwas, prüft dann den Flankenwechsel, wartet wieder bis kurz vor dem nächsten Flankenwechseln uswusw....

Noch einfacher, aber nicht ganz korrekt: Man ermittelt die Dauer eines Bits (weiß ich grad nicht auswendig, irgendwas mit Trägerfrequenz/6 oder so ähnlich) und wartet auf den Start der Übertragung. Wenn der Beginn des ersten Bits (es werden zwei Startbits, eigentlich zur Bitlängenmessung gedacht, vorrausgeschickt) erkannt wurde wartet man 2/3 der Bitdauer und liest den Pegel für das erste Bit ein. Dann wartet man jeweils eine Bitdauer für die restlichen Bits. Fertig. So erhält man immer den Pegel nach dem Flankenwechsel, Ungenauigkeiten im Takt addieren sich bei 14 Bits nicht so sehr. Man muss nur darauf achten, dass die Abfrage immer in der richtigen Hälfte des Bits geschied.

Achtung! Der IR-Empfänger invertiert dasSignal! Ob er mit 2,4V funktioniert bezweifle ich aber. 2 Mignonbatteriern liefern ja auch 3V. Vielleicht reicht das ja aus.

Gruß

mic

for_ro
23.11.2008, 12:02
Hallo,
muss es denn unbedingt RC5 sein? Dein Tiny13 hat ja nicht so viel an Ressourcen an Board.
Für mich klingt das so, als ob du Senden und Empfangen selber machen möchtest. Dann würde ich definitiv nicht RC5 als Protokoll verwenden, sondern ein eigenes stricken. Besonders wenn du eh nur 2 Befehle übertragen willst.
Dann kann der Tiny auch noch was anderes tun als nur IR.

Gruß

Rolf

rocketman123
23.11.2008, 13:06
danke für die schnellen antworten.

muss nicht unbedingt rc5 sein. mit den 2,4V am Tsop1736 hast du recht. das geht nicht aber vielleicht gibts da ja noch ne alternative.

das senden ist kein problem. aber wie kann ich die eingangsdaten abfragen. hat da jemand ein beispiel in bascom oder einene link in dem so etwas erklärt wird. Mir gehts eigentlich erstmal darum die empfangenen Werte auszuwerten.

Mic schreibt.....
"Also wartet man nach dem Start des ersten Bits etwas, prüft dann den Flankenwechsel, wartet wieder bis kurz vor dem nächsten Flankenwechseln uswusw.... "

kann mir jemand kurz erklären wie ich das in bascom machen kann.

Wsk8
24.11.2008, 14:10
Hallo,
die einfachste Möglichkeit in Bascom RC5 zu empfangen ist:

$lib "mcsbyte.lbx" 'für kleineren Code

Config Rc5 = Portb.0
Enable Interrupts

Config Portb.1 = Output 'TSOP an PB.1

Dim Address As Byte
Dim Command As Byte

Print "Warte auf RC5..."
Do
Getrc5(address , Command)
If Address < 255 Then
Print Address
Print Command
If Command = ??? Then
(Anweisung)
End If
End If
Loop

End

mfg

Wsk8
24.11.2008, 14:13
Fehler!!
Tsop muss an PB.0
PB.1 ist bei meinem programm für was anderes!!!

mfg

rocketman123
26.11.2008, 18:50
ja schon. nur ich hab gelesen das der rc5-Empfangbefehl beim Tiny nicht möglich ist.
Ich möchte ja auch lernen wie man code auswerten kann, d.h. wie ich z.B einen Eingangscode in einem Bus auswerten kann.

Muss ich da beim eintreffen eines bestimmten signals einen interrupt setzten und danach über den timer bei bestimmten Zeiten die pegel auswerten ob dieser high oder low ist?

Ich wollte auch noch fragen ob mir jemand sagen kann wie ich programmieren kann das z.B eine LED erst leuchtet wenn ich die Taste 3s gedrückt hab und nicht wenn ich sie nur kurz drücke diese nicht leuchtet?

schon mal danke für eure hilfe.

mfg