Forum: Mikrocontroller und Digitale Elektronik Wie implementiert man RC-5?


von Fabian S. (jacky2k)


Lesenswert?

Hallo,
ich muss auf einem Parallax Propeller, die RC-5 Codes beibringen.
Ich weiß im Prinzip, wie die Codes aufgebaut sind, aber ich habe keine 
Ahnung wie man das nun implementieren kann/sollte.
Hier ist das ganz gut beschreiben, wie das Protokoll aufgebaut ist: 
http://www.sprut.de/electronic/ir/rc5.htm
Also ich würde gerne wissen was es da für Ansätze gibt usw.
Auf dem Propeller kann ich einen eigenen Kern mit 80Mhz spendieren, der 
sich ausschließlich darum kümmert, sollte wohl reichen. Ich habe keine 
Interrupts oder ähnliches! Ich habe praktisch nur nen Inputpin und muss 
den pollen ;)

von hans (Gast)


Lesenswert?

Hier findest du auch Angaben zu dem Protokoll (und vielen
anderen):

http://www.sbprojects.com/knowledge/ir/ir.htm

Und hier einen Ansatz als state machine (PIC aber gut umsetzbar):

http://www.sbprojects.com/projects/ircontrol/picir/rc5.htm

Bei 80 MHz kannst du ja nebenher noch ne kleine FFT machen ;)

gruß hans

von Peter D. (peda)


Lesenswert?


von Michael H* (Gast)


Lesenswert?

> Wie implementiert man RC-5?
am besten so wie peter =)
Beitrag "Fernbedien RC5 Empfänger"

nachtrag: zu langsam für den chef ^^

von Fabian S. (jacky2k)


Lesenswert?

Ufff.... glaube da ist es ja einfacher das komplett neu zu machen.
Mir geht es ja nicht um den Code, da ich den sowieso nicht gebrauchen 
kann, da ich das ganze in Spin programmieren muss. Mir geht es um das 
System und das System Timer/Interrupt hatte ich ja nun schon 
ausgeschlossen :(

von Peter D. (peda)


Lesenswert?

Fabian S. wrote:
> Ufff.... glaube da ist es ja einfacher das komplett neu zu machen.
> Mir geht es ja nicht um den Code, da ich den sowieso nicht gebrauchen
> kann, da ich das ganze in Spin programmieren muss.

Also nen MC, den man nichtmal in C programmieren kann, würde ich nicht 
anfassen.


> Mir geht es um das
> System und das System Timer/Interrupt hatte ich ja nun schon
> ausgeschlossen :(

Was, das Ding hat 8 Kerne und die haben nichtmal jeder ihren eigenen 
Timerinterrupt ???

Du kannst keinen Code einlesen, der seine Information in der Pulslänge 
hat, wenn Du keinen Timer hast, um sie zu messen.


Ich kann da nur noch mit dem Kopf schütteln, einen ganzen 80MHz 
32Bit-Kern für so ne läppische Task zu vergeuden, die jeder 1MHz 8Bitter 
(mit Timer)  so nebenbei macht.


Peter

von Fabian S. (jacky2k)


Lesenswert?

Das Konzept dieses µCs ist halt ein gänzlich anderes. Da kann man einen 
Kern für nen Timer verwenden...
Und ich muss ihn verwenden, also auch hier keine weitere Diskusion :(

von Matthias L. (Gast)


Lesenswert?

>also auch hier keine weitere Diskusion :(

Nur mal so zur Info:

Du willst Hilfe haben, nicht wir....

von Peter D. (peda)


Lesenswert?

Fabian S. wrote:
> Das Konzept dieses µCs ist halt ein gänzlich anderes. Da kann man einen
> Kern für nen Timer verwenden...

Na dann brauchst Du eben 2 Kerne, einen als Timer und den anderen zur 
Dekodierung.


Peter

von Fabian S. (jacky2k)


Lesenswert?

Ja gut, dann halt 2, ist auch kein Problem...
Nur wie macht man das dann? Soll ich einfach mit ner Schleife warten bis 
der Pin auf High geht (sollte dann ja das erste der drei 
Initialisierungsbits sein) und dann auf den Timer horchen um alle 889µs 
den Pin wieder abzufragen?
Wie baut man das am besten, denn wenn ich den Timer starte sobald ich 
das erste High bekommen habe und die Fernbedienung etwas zu langsam ist 
werde ich beim nächsten Tick noch immer den gleichen Status abfragen wie 
zuvor...

Btw: Es gibt zwar keinen Timer in dem µC, aber einen System-Counter, den 
könnte ich dafür doch genausogut nutzen oder?
Wenn ich das erste Bit bekomme kann ich doch ausrechnen wann die anderen 
kommen müssten und dann immer mit ner Schleife drauf warten bis er dort 
abgekommen ist?

von Harry S. (littlegonzo)


Lesenswert?

Also an deiner Stelle würde ich mal in einem Parallax Forum stöbern, ich 
wette mit Dir dort haben sie bereits einen fertigen Code für RC5.
Ich möchte Dich um Gottes Willen hier nicht vertreiben, aber hier sind 
die Propeller-Nutzer nicht all zu viel vetreten. Ich hatte auch schon 
mal mit dem Parallax geliebeugelt aber bin dann doch beim AVR hängen 
geblieben ;-)

von Fabian S. (jacky2k)


Lesenswert?

Ja es gibt ja diese Codesammlung, jedoch gibts da nix mit RC5 :(
Werde mein Glück mal probieren....

von Harry S. (littlegonzo)


Lesenswert?

War bzw. ist auch nicht bös gemeint, aber hier tummeln sich echt super 
Leute, nur die kennen sich meistens am besten mit AVR aus.
Also was ich eben auf die schnelle entdeckt habe, die nutzen für RC5 
wohl eher Assembler auf dem Propeller. Aber leider kein Beispiel-Code 
bisher entdeckt^^

von Peter D. (peda)


Lesenswert?

Fabian S. wrote:
> Btw: Es gibt zwar keinen Timer in dem µC, aber einen System-Counter, den
> könnte ich dafür doch genausogut nutzen oder?

Ja.

Macht man bei 8Bittern auch so, daß man einen der Timer als Systemtimer 
benutzt und der macht dann zyklische Interrupts.

In meinem Code habe ich etwa 50µS benutzt.
Und dann wird eben getestet, ob der Input gewechselt hat und 
dementsprechend ausgewertet (0-Bit, 1-Bit oder Störung) und die 14 Bits 
gesammelt.


Peter

von Fabian S. (jacky2k)


Lesenswert?

Jo da habe ich nun auch implementiert, aber irgendwie braucht der 10 
Jahre um eine Übertragung einzulesen, also irgendwas klappt da mit den 
Sleeps noch nicht so wie es soll...

von Christian R. (supachris)


Lesenswert?

Hat der Timer denn keine Hardware-Features wie Bit-Latching und Capture 
von Signalen? Auf dem MSP430 ging das relativ leicht mit dem Timer, fast 
ohne CPU-Intervention: Beitrag "Fernbedien RC5 Empfänger mit MSP430"

von Fabian S. (jacky2k)


Lesenswert?

Was für ein Timer?

von Fabian S. (jacky2k)


Lesenswert?

Öhhh, ich glaube ich weiß jetzt warum meine Implementation icht 
läuft...die Sprache in der man den normal Programmiert ist glaube ich 
extremst langsam. Habe hier ne Funktion in der eine kleine Schleife ist 
von 28 Durchläufen und einer kleinen Rechnung und er braucht dafür 
irgendwas zwischen 70 und 80 TAUSEND! Takte.... weiß nicht ob das normal 
ist, oder ob ich nen Fehler drin habe...
Naja, da ein halbes Bit nur 35560 Takte lang ist wird das natürlich 
nichts, da der Counter nach dem Berechnen längst über den nächsten 
Haltepunkt geschossen ist...werde mich wohl mal mit dem Spin Assembler 
auseinandersetzen müssen :(

von Michael H* (Gast)


Lesenswert?

einen eigenen kleinen attiny dafür zu verwenden scheidet aus? kostet 
weder wirklich platz noch geld und schafft dir alle probleme vom hals.
vergleich mal deine entwicklungskosten für deine zauber-cpu mit dem 
dauereinsatz des attinys (bei kopiertem "peter-code") =)

von Fabian S. (jacky2k)


Lesenswert?

Kommt jetzt eigentlich nicht mehr in Frage...
Das Board ist fertig geätzt, bestück und läuft super, mal ganz 
absgesehen davon, dass darauf für ein Tiny kein Platz mehr wäre, habe 
die vollen 10x10cm von Eagle ausgeschöpft, ist echt kein mm Platz übrig 
:D
Dann müsste ich mir für ... öhh 150€ oder so die einfache Eagle Version 
holen, das lohnt sich sicher nicht :D

von Gast (Gast)


Lesenswert?

>Habe hier ne Funktion in der eine kleine Schleife ist
>von 28 Durchläufen und einer kleinen Rechnung und er braucht dafür
>irgendwas zwischen 70 und 80 TAUSEND! Takte...

Macht ja nix, wenn die Performance mit 80 MHz und 8 Kernen wieder 
wettgemacht wird... wechlach

von Fabian S. (jacky2k)


Lesenswert?

Ja ich denke mal, dass desshalb die ganzen Treiber in Assembler 
geschrieben sind...

von Fabian S. (jacky2k)


Lesenswert?

Ahh... habe eine fertige Lib gefunden, heißt "IR Kit" und gibts beim 
Parallay Object Exchange.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.