Bascom + RC5

Gast #68830
Lesenswert?

Hi Dieter,

es ist ein TSOP 1736 an 5V und GND.
der code lautet :

$regfile = "8535def.dat"
$crystal = 4194304
$baud = 9600

$lib "mcsbyte.lbx"

Config Rc5 = Pind.2

Enable Interrupts


Dim Address As Byte , Command As Byte
Print "Waiting for RC5..."

Do

  Config Pind.2 = Input
  Getrc5(address , Command)


  If Address = 0 Then


     Print Address ; "  " ; Command
  End If
Loop
End

Wenn ich das Terminal programm starte, dann kommt nur Waiting for RC5,
wenn ich ne Taste drücke, dann passiert nix. mit FastAVR funzt es.
würde aber gerne RC5 nehemen.

mfg Kay
Gast #68832
Lesenswert?

Hallo Kay

Hast du einen externen Pullup Widerstand am PIND.2 ?

Wenn nicht, schalte den internen mal ein mit

Portd.2 = 1  ein.

Config Pind.2 = Input  brauchst du nicht, macht config RC5 für dich.

MFG

Dieter
Gast #68834
Lesenswert?

Hallo Kay

Probier mal das Programm aus.

Config Rc5 = Pind.2
Portd.2 = 1

Enable Interrupts


Dim Address As Byte , Command As Byte
Print "Waiting for RC5..."

Do


  Getrc5(address , Command)
    Print Address
    Print Command
Loop
End


MFG
Dieter
Gast #68835
Lesenswert?

also es passiert mal was ;-)

ich bekomm im Terminal Programm jetzt folgendes: 255 255 255 255 255
255 ....

wenn ich auf die FB drücke, dann gehts schneller. also es tut sich was,
aber ich bekomm immer nur 255 255 255 ... auch ohne wenn ich was mach.

mfg Kay
Gast #68842
Lesenswert?

@Kay
Ich habe gerade das gleiche versucht.
Hatte erst den selben Effekt -> Immer nur $FF und bei drücken der FB
kammen die Werte nur schneller.
Ich habe jetzt mal eine Phillips Fernbedienung probiert und es hat auf
anhieb geklappt.

Vielleicht hat Deine FB auch kein RC5 ?!

MfG
formtapez
Gast #68843
Lesenswert?

Um generell erst mal etwas zu empfangen kann man die capture-Funktion
des Timer/Counter1 benutzen. Man kann dann die Zeitabstände zwischen
zwei Flanken messen und z.B. über das UART ausgeben. So bekommt man
auch exotische Fernbedienungscodes in den AVR. Ich habe so die Codes
einer Klimaanlagen-FB aufgezeichnet, die pro Tastendruck über 100
Flanken erzeugt.
Gast #670997
Lesenswert?

Ich lese mich gerade in die Materie ein.
Da ich in Visual Basic recht fit bin, habe ich gemerkt dass ich mit der 
Programmierung über BASCOM am schnellsten rein kommen werde.
Nun jetzt kucke ich mir immer die CodeSchnippsel für die RC5 Abfrage an 
aber muss mich folgendes fragen.
Wie erzeugt der Befehl GETRC5 ein brauchbares Ergebnis.
Scheinbar steht dahinter ja eine externe Prozedur, wo aber ist diese? In 
welcher Datei?
DEnn diese Prozedur würde ich mir gerne anschauen, da ich über die 
Umsetzung nicht so recht bescheid weiß.
Ist diese auch in BASCOM programmiert oder is des in 
Assembler(Maschinensprache) und somit eh nicht verständlich für mich?

mit freundlichen Grüßen

Daniel
Gast #671059
Lesenswert?

hmm entweder hab ich noch nicht genug darüber gelesen und gelernt oder 
ich raffs einfach nicht.
Wie soll die GETRC5 Funktion zu einem Ergebnis kommen.

Ich mein ich muss doch das RC5 Signal erstmal dekodieren, da auf einer 
Leitung die Daten ja seriell hintereinander ankommen.
So wie ich den obigen Code verstanden habe macht mir das ja praktisch 
die GETRC5 anweisung aus dem Code. Jedoch muss sich dahinter ja noch 
irgendetwas verstecken, oder?

Vielen Dank für die Geduld
#671069
Lesenswert?

Stell es dir so vor.
In Visual Basic hast du jede Menge COM Elemente benutzt
um Dinge zu erledigen, über die sich bereits ein anderer
den Kopf zerbrochen hat und der dir seine Ergüsse in
Form von fertigen Komponenten zur Verfügung stellt.

In BASCOM ist das nicht anders. BASCOM kommt mit einer
ganzen Menge Funktionalität daher, die die Entwickler
eingebaut haben.

In VB musstest du die COM Elemente aussuchen. In BASCOM
hast du die einfach zur Verfügung (sind als Schlüsselwörter
in die Sprache eingebaut).
Gast #671071
Lesenswert?

Jetzt hab ichs gerafft! Danke Herr Buchegger, diese Beschreibung des wie 
der Funktion war genau das was ich gebraucht habe.


Mit diesen Infos im Gepäck gehe ich nun wieder meiner Arbeit nach, und 
beende damit die Mittagspause.

Mit freundlichen Grüßen
Gast #671072
Lesenswert?

Das Toggle-Bit im Kommando-Byte muß nach jedem empfangenen Behehl 
zurückgesetzt werden.

Command = Command And &B01111111

Setze mal die Zeile noch hinter "If Address = 0 Then"

rein.

Freilich versteckt sich hinter "GETRC5" eine Assemblerroutine, die Du
damit benutzen kannst. Das ist ja das Schöne an Bascom, daß es eine 
ganze Menge vorgeferigter Funktionen gibt und man nicht alles "zu Fuß" 
programmieren muß.

MfG Paul
Gast #671827
Lesenswert?

Vielen Dank da werde ich mich Abends mal durchackern und sehen ob ich 
das verstehe.
Nur ne kurze Frage dazu, bei Beispiel 1 läuft der Timer ja ständig, wäre 
es nicht sinnvoller nach Eingang eines Codes den Timer zu stoppen und 
auf einen Signaleingang am TSOP zu warten? Ist nur so eine Idee von mir. 
Jedoch könnt ich den Code ja auch falsch interpretiert haben.

Mit freundlichen Grüßen

Daniel
Gast #671864
Lesenswert?

Wenn der Timer für nichts anderes da ist, dann könnte man ihn auch 
stoppen. Meistens benutzt man aber durchlaufende Timer, die für 
verschiedene Zwecke Zeiten messen. Dann kannst du natürlich nicht 
abschalten.
Dein Code sollte eh so geschrieben sein, dass die Ausführungszeit der 
Timer ISR keinen Einfluss auf den Rest hat. Sonst käme es beim Starten 
des Timers zu unerwünschten Reaktionen.
Ich denke übrigens, dass der Timer in beiden durchläuft.
Gast #672605
Lesenswert?

Jetzt habe ich viel über den RC5 Standard gesucht, aber entweder lags an 
der Tageszeit oder an was anderem, denn ich werd nicht schlau daraus. 
Auf jeder Seite steht etwas anderes.
Bedeutet jetzt ein Flankenwechsel von 1 auf 0 in der Mitte eines Bits 
eine 1 im übertragenen Code oder eine 0. Denn ich hatte allein heute 
morgen eine Seite die sich in der Sache sogar widersprochen hat.
Nur wäre dass noch sehr wichtig, denn dann entwickle ich mal meinen 
eigenen RC5 Dekoder zur Übung.

Bei Flankenwechsel will ich den wissen den mir mein TSOP ausgibt, sprich 
dessen moduliertes Signal, frage ich ja am Einang meines uC ab. Und die 
Bedeutung dieses Flankenwechsels ist mir noch nicht ganz klar, aber 
ichbin sicher dass mir das jemand zuvelässig sagen kann.

Mit freundlichen Grüßen

Daniel
Gast #672663
Lesenswert?

Na der Unterschied kommt halt, weil nicht jeder Empfänger in der 
gleichen Art das Signal ausgibt.
Auf der Sende-Seite arbeiten alle gleich, eine aufsteigende Flanke in 
der Mitte ist eine '1', eine fallende Flanke eine '0'.
Der Sender ist natürlich in der Regel aus, wenn kein Signal übertragen 
wird, d.h. er sendet nicht die ganze Zeit die Trägerfrequenz.
Anders die Empfänger. TSOP17** z.B. ziehen den Ausgang auf low-Pegel, 
wenn ein Impuls kommt, ohne Signal wird er durch pullup auf high 
gehalten. Damit invertieren sie das Signal. D.h. eine steigende Flanke 
am Sender wird zu einer fallenden am Empfänger. Schau mal in dem 
Datenblatt eines TSOP1736 bei Reichelt, da kannst du dies gut erkennen.
Bei anderen Empfängerchips kann das aber andersherum laufen, ist aber 
eher selten.

Gruß

Sebastian

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren