Hallo,
wenn ich das Sample "RC5" von Bascom benutze klappt es nicht. benutze
ich FastAVR mit dem RC5 Sample, dann klappt es. ich benutze nen TSOP
1736. er hängt an Pind.2 ! kann mir jemand helfen ?
mfg Kay
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
>If Address = 0 Then> Print Address ; " " ; Command
Sendet die FB denn RC5 für TV (Adresse = 0) ?
Wenn es eine FB für Videorecorder o.ä. ist die Abfrage einfach
weglassen.
Bernd
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
Hi Dieter,
geht als noch nicht. hab jetzt mal das gemacht was du und Bernd gesagt
hast, aber hilft nix. Die FB sendet RC5 ( ist von nem Sat-Reciever also
SysAdr = 0 )
mfg Kay
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
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
also, ich hab' das auch mal probiert und es ging....
aber ich hatte einen anderen sensor. kannste das signal vom sensor mit
einem oszi darstellen?
tschaui
"ok werde ich bei der nächsten Bestellung machen."
Das bringt nichts !
Die Sensoren arbeiten alle gleich.
Höchstens in der Reichweite können kleine Unterschiede bestehen.
Peter
@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
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.
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
ach und dort ist auch die Funktion dann drinnen oder?
Des heißt die .lip Datei muss mit rüber in des Chipchen und dann
funktioniert das mit dem schönen GETRC5 Befehl
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
Na die GetRC5 Routine ist doch im Compiler schon verankert und wird beim
compilieren mit in die End-Datei eingebunden.
Wenn Du die Funktion von GetRC5 genau analysieren möchtest, dann bist du
bei Bascom eigentlich falsch.
Schau mal nach ATMEL in die AVR410...
http://www.atmel.com/dyn/resources/prod_documents/doc1473.pdf
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).
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
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
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
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.
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
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
Eine eigene Frage?
Dieser Thread ist über 22 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.