PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Rc5-Sender/-Empfänger in Bascom programmieren



derfagottist
09.04.2014, 14:55
Moin zusammen!

Ich habe folgendes Problem:

Wenn ich über meinen IR-Sender ein Rc5 Signal an meinen IR-Empfänger (Schaltpläne siehe Anhang) schicken, erkennt der Empfänger dieses Signal nur sehr selten und auch mit keiner Regelmäßigkeit. Das Bedeutet: der Empfänger zeigt mit verschiedenen LEDs an, ob er auf ein Rc5 Signal wartet, eins empfangen hat, das "richtige" Signal empfangen hat oder kein Signal empfangen hat. Mit dem Sender möchte ich später insgesamt mindestens 4 verschiedene Signale senden und mit dem Empfänger diese Signal eben auswerten/empfangen und etwas steuern.

Hier jetzt die Schaltpläne und Programme zum Sender/Empfänger:
IR-Sender:
27942


Config Portd.0 = Output 'Konfiguration der
Config Pinc.0 = Input 'Out- und
Config Pinc.1 = Input 'der Inputports
Config Pinc.2 = Input 'Dito
Config Pinc.3 = Input 'Dito
Portd.0 = 0 'PortD.0 Ausschalten

Portc.0 = 1 'Pullups Einschalten
Portc.1 = 1 'Dito
Portc.2 = 1 'Dito
Portc.3 = 1 'Dito

Dim Togbit1 As Byte 'Dimensioniern der
Dim Togbit2 As Byte 'Variablen
Dim Command As Byte 'Dito
Dim Address As Byte 'Dito
Dim I As Long 'dito

I = 0 'Setzen der Variblen
Command = 16 'Dito
Togbit1 = 0 'Dito
Togbit2 = 32 'Dito
Address = 17 'dito

Main: 'Hauptprogramm
Do

If Pinc.0 = 0 Then
Portd = 1
Waitms 50
For I = 1 To 10 'Sende den Code I-mal
Rc5send Togbit1 , Address , Command 'Senden des
Rc5send Togbit2 , Address , Command 'Rc5-Codes
Waitus 100
Next I
Portd = 0
Else
Portd = 0
End If

Loop
End


IR-Empfänger:
27941


Config Rc5 = Pinb.1 'Rc5 konfigurieren
Enable Interrupts 'Interrupts erlauben

Config Portd = Output 'Konfiguration der
Config Pinc.0 = Input 'Out- und
Config Pinc.1 = Input 'der Inputports
Config Pinc.2 = Input 'Dito
Config Pinc.3 = Input 'Dito
Config Pinc.4 = Input 'Dito
Config Pinc.5 = Input 'Dito
Portd = 0 'Ausschalten von
'PortD

Dim Address As Byte 'Variablen
Dim Command As Byte 'dimensionieren
Dim I As Long 'Dito
I = 0 'Variablen setzen
Address = 0 'Dito
Command = 0 'Dito

Main: 'Hauptprogramm
Do
Portd = 1
For I = 1 To 100
Getrc5(address , Command) 'Auf Rc5 Signal warten
Next I
If Address < 255 Then
Command = Command And &B10111111 'Lösche Toggle-Bit
Portd = 2
Waitms 100
If Address = 17 And Command = 16 Then
Portd = 4
Waitms 100
Else
Portd = 2
Waitms 100
End If
'Waitms 10
Else
Portd = 8
Waitms 100
End If

Loop
End



Vielen Dank schon jetzt für eure Hilfe!

LG
Jonas

Searcher
09.04.2014, 15:33
Hallo





Config Rc5 = Pinb.1 'Rc5 konfigurieren
Enable Interrupts 'Interrupts erlauben

Config Portd = Output 'Konfiguration der
Config Pinc.0 = Input 'Out- und
Config Pinc.1 = Input 'der Inputports
Config Pinc.2 = Input 'Dito
Config Pinc.3 = Input 'Dito
Config Pinc.4 = Input 'Dito
Config Pinc.5 = Input 'Dito
Portd = 0 'Ausschalten von
'PortD

Dim Address As Byte 'Variablen
Dim Command As Byte 'dimensionieren
Dim I As Long 'Dito
I = 0 'Variablen setzen
Address = 0 'Dito
Command = 0 'Dito

Main: 'Hauptprogramm
Do
Portd = 1
For I = 1 To 100
Getrc5(address , Command) 'Auf Rc5 Signal warten
Next I
If Address < 255 Then
Command = Command And &B10111111 'Lösche Toggle-Bit
Portd = 2
Waitms 100
If Address = 17 And Command = 16 Then
Portd = 4
Waitms 100
Else
Portd = 2
Waitms 100
End If
'Waitms 10
Else
Portd = 8
Waitms 100
End If

Loop
End



Denke, daß Du das Rote im Empfängerprogramm ersatzlos streichen kannst. Die do-loop sorgt ja dafür, daß getrc5 immer wieder ausgeführt wird. Wird zu Beginn der for-next Schleife ein RC5 Rahmen erkannt, wird address und command entsprchend belegt. Die Schleife wird aber wieder durchlaufen und liegt kein RC5-Rahmen an wird address und command wieder mit 255 überschrieben und die folgende Auswertung nach der for-next "sieht" keinen Empfang.

Gruß
Searcher

derfagottist
09.04.2014, 15:42
Okay, ich werde das nochmal ausprobieren. Ich hatte allerdings das auch schon ohne diese Schleife ausprobiert und auch viele andere Varianten...

Aber trotzdem danke für deine schnelle Antwort

Searcher
09.04.2014, 16:14
Oh, noch was:
Das

Command = Command And &B10111111
sollte doch zum Togglebit löschen so sein
"Command = Command And &B01111111"
zumindest der BASCOM Hilfe nach.

Gruß
Searcher

derfagottist
09.04.2014, 16:30
Oh, noch was:
Das

sollte doch zum Togglebit löschen so sein
"Command = Command And &B01111111"
zumindest der BASCOM Hilfe nach.

Gruß
Searcher

Ja das soll zum löschen des Togglebits sein. Ich habe selbst leider keine Ahnung wofür das genau sein soll aber in der "Anleitung" zu diesen IR-Sender/Empfänge wars halt dabei...

Searcher
09.04.2014, 16:37
Ja das soll zum löschen des Togglebits sein.
Ja, das funktioniert auch. Hab selbst den Teil aus der BASCOM Hilfe abgeschrieben und hat auch immer funktioniert. In Deinem Programm kann es durchaus diesen sporadischen Fehlereffekt haben. Nimm das Bitpattern, wie es in der BASCOM Hilfe unter GETRC5 zu finden ist.

Gruß
Searcher

radbruch
09.04.2014, 16:37
Hallo

Hast du das abgeschnitten oder fehlen die Angaben zum Kontroller und der eingestellten Taktfrequenz in deinen Programmen?

Gruß

mic

derfagottist
09.04.2014, 17:44
Hallo

Hast du das abgeschnitten oder fehlen die Angaben zum Kontroller und der eingestellten Taktfrequenz in deinen Programmen?

Gruß

mic

Ja, die habe ich abgeschnitten:

Controller: Atmega8
Takt: 3,579545Mhz

LG
Jonas

- - - Aktualisiert - - -

Hey,

also, ich habe das ganze nochmal auprobiert, mit "richtigem" löschen des Togglebits und ohne der Schleife und, siehe da, es funktioniert! Wahrscheinlich hats also am Löschen des Togglebits gelegen. :confused:

Aber jetzt funktionierts ja zum Glück! Vielen Dank nochmal. ;)

LG
Jonas

PS: Vielleicht stelle ich dann ja mal mein fertiges Projekt vor. Wer weiß, wer weiß...

Searcher
10.04.2014, 07:45
also, ich habe das ganze nochmal auprobiert, mit "richtigem" löschen des Togglebits und ohne der Schleife und, siehe da, es funktioniert! Wahrscheinlich hats also am Löschen des Togglebits gelegen. :confused:

*Daumen hoch* und wo es dran gelegen hat kannst Du ja ausprobieren indem Du den Code schrittweise wieder zurück änderst. Ich vermute daß beides einen Einfluß hatte.

Vielleicht noch ein Tip aufgrund radbruchs Nachfrage: Im BASCOM Programm immer den kompletten Header mit regfile, crystal, hwstack, swstack, framesize aufnehmen und auch posten, da sich auch dort Fehler verstecken können bzw wenn ein Eintrag nicht vorhanden ist, die Defaulteinstellungen von BASCOM einen Bug beinhalten können.


PS: Vielleicht stelle ich dann ja mal mein fertiges Projekt vor. Wer weiß, wer weiß...
Das wär nett. Ich sehe mir gerne Projekte an, wenn möglich mit Bild oder sogar mit Video.

Gruß
Searcher

derfagottist
10.04.2014, 09:16
*Daumen hoch* und wo es dran gelegen hat kannst Du ja ausprobieren indem Du den Code schrittweise wieder zurück änderst. Ich vermute daß beides einen Einfluß hatte.

Vielleicht noch ein Tip aufgrund radbruchs Nachfrage: Im BASCOM Programm immer den kompletten Header mit regfile, crystal, hwstack, swstack, framesize aufnehmen und auch posten, da sich auch dort Fehler verstecken können bzw wenn ein Eintrag nicht vorhanden ist, die Defaulteinstellungen von BASCOM einen Bug beinhalten können.


Das wär nett. Ich sehe mir gerne Projekte an, wenn möglich mit Bild oder sogar mit Video.

Gruß
Searcher

Vielen Dank für deinen Tipp. Aber bisher hatte ich darin noch keine Probleme, aber in Zukunft werde ich dann den kompletten Code posten.

Und wenn ich das Projekt dann vorstelle, dann natürlich auch mit Bildern, aber im Moment hab ich halt relativ viel Stress in der Schule und so. Aber mal gucken was sich machen lässt... ;)

LG
Jonas