www.mikrocontroller.net

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


Autor: Fabian S. (jacky2k)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Michael H* (Gast)
Datum:

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

nachtrag: zu langsam für den chef ^^

Autor: Fabian S. (jacky2k)
Datum:

Bewertung
0 lesenswert
nicht 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 :(

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Fabian S. (jacky2k)
Datum:

Bewertung
0 lesenswert
nicht 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 :(

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>also auch hier keine weitere Diskusion :(

Nur mal so zur Info:

Du willst Hilfe haben, nicht wir....

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Fabian S. (jacky2k)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Harry S. (littlegonzo)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: Fabian S. (jacky2k)
Datum:

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

Autor: Harry S. (littlegonzo)
Datum:

Bewertung
0 lesenswert
nicht 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^^

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Fabian S. (jacky2k)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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"

Autor: Fabian S. (jacky2k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was für ein Timer?

Autor: Fabian S. (jacky2k)
Datum:

Bewertung
0 lesenswert
nicht 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 :(

Autor: Michael H* (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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") =)

Autor: Fabian S. (jacky2k)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Fabian S. (jacky2k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja ich denke mal, dass desshalb die ganzen Treiber in Assembler 
geschrieben sind...

Autor: Fabian S. (jacky2k)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.