Bascom RC5 Code unterschiedlich je nach Abfrage

H0_Bastler

Neues Mitglied
26. Nov. 2020
6
0
1
Sprachen
  1. Pascal
  2. BascomAVR
  3. Python
Hallo Zusammen,

BASCOM
Compiler Version : 2.0.8.3
Compiler Build: 2.0.8.3.005
IDE Version: 2.0.8.3.003
Windows OS: Windows 10 Pro
Registrierte Version:

ich befasse mich erst seit ein paar Wochen mit BASCOM und AVR ich möchte hier einige Sachen für meine Märklin Modellbahn machen. Z. B. den Kran per Fernbedienung steuern.

LC-Display (Bahnsteiginfo und oder Uhr) usw. es geht auch bisher alles.


Was mir aber aufgefallen ist,

die RC5 Code Abfrage liefert unterschiedliche Ergebnisse je nachdem ob ich mit

Config Rc5 = Pinb.0 , Timer = 1 , Mode = Background
oder über
Getrc5(Address , Command) abfrage.

Habe die jetzt mal in einer EXCEL Tabelle gegenübergestellt.

Kennt jemand den Grund oder weiß wie man das beheben kann?
 

Anhänge

  • Infrarot_Test_Getrc5.BAS
    2,9 KB · Aufrufe: 5
  • Infrarot_Test_RC5_Background.BAS
    2,6 KB · Aufrufe: 5
Excel ging nicht hier als PDF

Danke für Infos
 

Anhänge

  • Pilips SRP620_Codes.pdf
    666,9 KB · Aufrufe: 5
Gnargl...
Auf'm Mobile kann ich die Programm nicht einfach sehen, der PC will sie ausführen... müßte man runterladen und umbenennen. DAs PDF könnte man nach dem Download zumindest ansehen.
Warum nicht einfach beides direkt hier einstellen?
Variante I (ohne Background)


CodeBox BascomAVR
$regfile "m328pdef.dat"                                                         ' Definiert den Prozessor als Atmega8
$crystal = 8000000                                                              ' Gibt die Quarzfrequenz an in Herz
$hwstack = 100                                                                  ' default use 100 for the hardware stack
$swstack = 100                                                                  ' default use 100 for the SW stack
$framesize = 100                                                                ' default use 100 for the frame space
$lib "mcsbyte.lbx"                                                              ' Library für LCD Display laden

' Konfiguration fürs Display
' LCD  Liquid Drystal Display
' 4 Bit Text-LCD mit 2 mal 16 Zeichen benutzen
' Anschluß Pins des Display's konfigurieren
' Nur zum Test bis I2C lief, kann entfallen
Config Lcd = 16 * 2                                                             ' Text-Display mit 2 mal 16 Zeichen benutzen
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , _
Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0                                      ' "_"  =  nächste Zeile !! hinter dem "_" darf nicht weiter geschrieben werden, auch kein Kommentar

' 4 Bit Text-LCD initialisieren
' folgen 4 Zeilen nur zum Test bis I2C lief, kann entfallen
Wait 2                                                                          ' Warte 2 Sekunden bevor Display initialisiert wird
Initlcd                                                                         ' LCD initialisieren
Cursor Off                                                                      ' Cursor aus
Cls

' Eingang für IR Signal   TSOP4836
Dim Address As Byte                                                             ' Variable definieren
Dim Command As Byte                                                             ' Variable definieren
Config Rc5 = Pind.2 , Wait = 500                                                ' Pind.2 als Eingang für IR Signal
Enable Interrupts                                                              ' Interrupts Global freigeben


Do
'  Anfang der Programm-Schleife
   Getrc5(address , Command)                                                    ' RC5 Adresse und Kommando wird abgefragt
      Reset Command.7
   If Address <> 255 Then                                                       ' Bei erkannter Adresse
     Cls
'    Zum Test kann entfallen  begin
     Locate 1 , 1                                                                ' Cursor im Display auf Zeile1 Spalte 1 setzen
     Lcd "Adr: " ; Address                                                       ' Cursor im Display auf Zeile1 Spalte 1 setzen
     Locate 2 , 1                                                                ' Cursor im Display auf Zeile 2 Spalte 1 setzen
     Lcd "Kom: " ; Command
     Toggle Portb.1
     Wait 1
   End If
Loop
End


Variante II (Background)


CodeBox BascomAVR
$regfile "m328pdef.dat"                                                         ' Definiert den Prozessor als Atmega8
$crystal = 8000000                                                              ' Gibt die Quarzfrequenz an in Herz
$hwstack = 100                                                                  ' default use 100 for the hardware stack
$swstack = 100                                                                  ' default use 100 for the SW stack
$framesize = 100                                                                ' default use 100 for the frame space
$lib "mcsbyte.lbx"                                                              ' Library für LCD Display laden

' Konfiguration fürs Display
' LCD  Liquid Drystal Display
' 4 Bit Text-LCD mit 2 mal 16 Zeichen benutzen
' Anschluß Pins des Display's konfigurieren
' Nur zum Test bis I2C lief, kann entfallen
Config Lcd = 16 * 2                                                             ' Text-Display mit 2 mal 16 Zeichen benutzen
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , _
Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0                                      ' "_"  =  nächste Zeile !! hinter dem "_" darf nicht weiter geschrieben werden, auch kein Kommentar

' 4 Bit Text-LCD initialisieren
' folgen 4 Zeilen nur zum Test bis I2C lief, kann entfallen
Wait 2                                                                          ' Warte 2 Sekunden bevor Display initialisiert wird
Initlcd                                                                         ' LCD initialisieren
Cursor Off                                                                      ' Cursor aus
Cls
Enable Interrupts

' Eingang für IR Signal   TSOP4836
Config Rc5 = Pinb.0 , Timer = 1 , Mode = Background
Do
'  Anfang der Programm-Schleife
   If _rc5_bits.4 = 1 Then                                                      ' RC5 Code wurde empfangen
     Cls
'    Zum Test kann entfallen  begin
     Locate 1 , 1                                                               ' Cursor im Display auf Zeile1 Spalte 1 setzen
     Lcd "Adr: " ; Rc5_address                                                  ' Cursor im Display auf Zeile1 Spalte 1 setzen
     Locate 2 , 1                                                               ' Cursor im Display auf Zeile 2 Spalte 1 setzen
     Lcd "Kom: " ; Rc5_command
     Toggle Portb.1
'    Zum Test kann entfallen  ende
     Wait 1
     _rc5_bits.4 = 0                                                             ' Für nächsten Empfang freigeben
   End If

Loop
End


Die Tabelle hätteste hier auch als (*Trommelwirbel*) Tabelle einfügen können - die PDF 'nehm ich jetzt aber nicht auseinander...

Zum eigentlichen Problem: Hast Du mal versucht herauszubekommen, welche Version korrekt ist (also 'n LogicAnalyzer an den TSOP und dann ausgewertret, was tatsächlich bei einer Taste gesendet wird, und was die beiden Programme (auf zwei Controllern) daraus machen?

Soweit ich das gesehen habe, unterstützt die FB auch RC-6...
 
Zuletzt bearbeitet:
Hallo LotadaC,
nein LogicAnalyzer hab ich nicht.

Sorry, bin neu hier, was meinst Du mit als (*Trommelwirbel*) einfügen?
Habe das als Datei anhängen gemacht, habe jetzt gesehen es gibt noch Code einfügen hätte das vermutlich nehmen sollen.
Aber ich lerne gerne immer dazu.

 
was meinst Du mit als (*Trommelwirbel*) einfügen?
Tabelle Einfügen -> Tabelle Einfügen halt
abcd
1234
blablub

Bild geht natürlich auch.

Zum Thema:
Bascom unterstützt zumindest für Variante I auch extendet-RC-5 (mit zwei-mal-6Bit Command). Dabei wird das ursprüngliche zweite Startbit als Field-Bit interpretiert, quasi als siebentes Command-Bit.
Bascom legt das Toggle-Bit in Command.7 ab, in Variante I löschst Du dieses jedesmal vor der Auswertung.
Das Field-Bit wird als Command.6 abgelegt (genau genommen invertiert, das normale zweite Start-Bit ist ja 'ne "1", wenn's "0" ist, soll das sechste CMD-Bit 'ne "1" sein).

Bei beiden Programmen sagst Du Bascom, daß der Controller mit 8MHz taktet - laufen die mit dem internen RC-Oscillator, oder mit einer genauen Taktquelle?

Nachtrag: (mal nach den Protokollen gegurgelt... - vielleicht könnte mal wer die Seiten konservieren (sofern das legal ist))
RC-5 (und ähnliche)
RC-6

P.S.: Willkommen im Forum

P.P.S. @Dirk : Die Tabellenköpfe sind jetzt weiß als Hintergrund, der Text aber ebenso (zumindest im Dark-Theme)- da sieht man nichts. Beim vertaggen (? - @username halt) Deines Namens wars eben auch so (ok, ich erkenne Deinen Avatar)...
 
nein LogicAnalyzer hab ich nicht.
Hmm... mal so auf die Schnelle 'n Programm dafür zu schreiben... nee.. heute nicht mehr...
Im Prinzip sollte man einfach mal nach (etwa) 2666ms langen high-Pegeln suchen können, die sollte es ja beim RC-5 nicht geben. (hmm... hat so'n TSOPxxxx nicht invertiert?.. is schon so lange her)
 
Hallo LotadaC,

danke für die Informationen.
Interne Frequenz 8 MHz, Habe es auch mit Atmega8 und Atmega328P getestet immer die selben Unterschiede zwischen Background und GetRC5.
Werde mich in die Protokollbeschreibung weiter einlesen.
Ich dachte, es müsste bei beiden Lesearten das selbe herauskommen.

Danke für die Infos
 
Ich werde die jetzt nicht reassemblieren, aber vorstellbar ist, daß ein Algorithmus nach der Detektion der ersten steigenden Flanke etwa 400µs wartet, und dann einfach alle 1778µs Samples einliest, statt die Pulslängen tatsächlich zu lesen. Oder beide das mit leicht unterschiedlichen "400µs".

Und wenn jetzt statt RC-5 tatsächlich RC-6 gesendet wird, geht das bei den kürzeren Timings durcheinander.
 
Ähm...
ich glaub(*), ich hab's...

Schreib Dir Deine Kommandos einfach mal binär hin, dann sollte es mit meiner Antwort #6 klar werden)

(*) hab jetzt nicht alle Fehler durchprobiert, aber bei denen ich es tat, paßts

P.S.: oder berechne die Differenz der beiden Algorithmen, und überlege, was das binär ist...;)
 
Hallo LotadaC,
ja bei GetRC5 ist das Bit Command.6 mit gesetzt. Das gibt es bei Background nicht.
Die Command's von RC5 gehen ja auch nur bis Dez 63 = BIN 11 1111 Bit 0 bis 5.
Danke, so ein Schubs in die richtige Richtung ist doch hilfreich.
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)