PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : externen RC5 decodiert Code ... von Bascom AVR Version



spatz2222
02.11.2005, 21:33
Hallo,

da ich wie schon geschrieben nach einem extern Interrupt ein RC5 Signal decodieren möchte und das warscheinlich mit dem Befehl GETRC5 nicht so recht funkt. (siehe Beitrag von gestern)
habe ich in der Hilfe von Bascom bei Getrc5 folgendes gefunden :

"GETRC5 supports extended RC5 code form version 1.11.6.9 thanks to Gert Boer..."


also wer hat noch diesen Quelltext für das extern. RC5 decodieren ?
oder wer hat noch die Beispieldateien von der Version 1.11.6.9 - da sollte das doch auch drinn sein oder ?

vielen Dan im vorraus

Rudi Ratlos
03.11.2005, 14:21
Hallo gleichfalls,

diese Versuche habe ich auch gerade hinter mir ...

Das RC5READ in der ISR kann so nicht funktionieren, da während des Ablaufes der Routine alle Interrupts disabled sind !! Und RC5READ benötigt nun einmal den Timer-Interrupt.
Der ist aber - wie gesagt - disabled.
Ergo müsste man in der ISR zunächst ein ENABLE INTERRUPT setzen.

Ausserdem sollte die ISR möglichst kurz sein (sonst wird der Anfang der Sendung verpasst).
Ich habe gar keine ISR definiert !
Der INT hebt nur den IDLE-Zustand auf, in dem der Prozessor auf ein Signal wartet.

CONFIG INTO = FALLING
ENABLE INTO
ENABLE INTERRUPTS
.......

IDLE ' Hier wartet das Programm auf den INT
RC5READ(Address, Command)

Trotzdem waren die Probleme aber noch nicht ganz gelöst.
Zwar kann ich damit die Signal einer Fernbedienung empfangen, einen anderen Microcontroller aber nicht
(die Ursache habe ich noch nicht weiter untersucht - ich vermute, dass die Fernbedienung mehrfach sendet, der Controller ab nur 1mal - und RC5READ hat die erste Flanke des Sendung bereits verpasst, da diese zur Auslösung des INT diente).

Als Lösung des Problems schicke ich vor dem RC5-Code sozusagen einen "Vorblitz", einen kurzen Impuls, der den INT auslöst und RC5READ anstartet. Das funktioniert reibungslos.

03.11.2005, 17:53
so sieht das ir-rc5-dateneinlesen bei mir aus mit int0.
ich benutze fastavr-basic. vielleicht kann man das in bascom übertragen.

Interrupt Int0(), Save 2
Disable Int0
Enable Interrupts
RC5(ir_adr, ir_Command)
If ir_command=62 Then
motor_wert=120
robby_vor()
End If
If ir_command=61 Then
motor_wert=80
robby_zurueck()
End If
If ir_command=60 Then
motor_wert=60
robby_links_encoder()
End If
If ir_command=59 Then
motor_wert=60
robby_rechts_encoder()
End If
If ir_command=63 Then robby_aus()
Reset Int0
Enable Int0
End Interrupt

mfg pst