Forum: Mikrocontroller und Digitale Elektronik RC5 Universal-Fernbedienung mit ATMega128


von micha b (Gast)


Lesenswert?

Stehe vor dem Problem, daß ich neben anderen Funktionen eine
Universalfernbedienung implementieren möchte. Hierzu soll der M128 eine
Empfängerdiode und eine Sendediode erhalten. Dank der Infos hier im
Forum funktionieren beide Baugruppen für sich bereits.

Jetzt möchte ich auf Tastendruck in einen Modus gehen, in dem ich über
die Empfängerdiode den FB-Code einer fremden FB auslese / abspeichere
und nach Aufruf durch ein Programm wieder ausgeben kann. Das Ganze soll
nicht flüchtig, also im EEPROM gespeichert werden.
Ich programmiere in BASCOM mit einem M128.

- WIE speichere ich den fremden Code sauber im EEPROM ?
- Insgesamt 8 verschiedene Codes sollen gespeichert werden
- Es kann,muß aber kein RC5-Code sein...
- Interupt hab ich noch einen frei...

Mir fehlen sowohl Grundidee als auch die Infos über Vorgehensweise zum
Abspeichern im EEPROM. Keine Angst - möchte kein fertiges Programm
haben :-) Nur den Weg zum Ziel angedeutet...

von Hagen (Gast)


Lesenswert?

Ich kenne eigentlich kein IR Fernbedienungsprotokoll das NICHT mit
Pulslängen arbeitet. Ergo: basiert deine Routine darauf die Pulszeiten
zu messen und dann als Zahlenwerte abzuspeichern. Die Auflösung dieser
Messung basiert auf der Annahme des kleinsten geinsammen Nenners, der
wohl bei 100µs minimal liegen dürfte. Die meisten Protokolle haben nach
10-30ms alles gesendet und fange an den Pulsstrom zu wiederholen. Also
ist die max. Auflösung ca. 10-30ms. Du misst also nur die Pulslängen
als Zeitwerte und speichert diese ab.

Gruß Hagen

von Hagen (Gast)


Lesenswert?

Ein Problem dürfte aber nicht so einfach zu lösen sein. RC5 zb.
überträgt merhmals nacheinander ein Pulsstrom zu einer gedrückten
Taste. Das Problem ist das sich der erste Pulsstrom von
dennachfolgenden um 1 Bit unterscheidet. Diese Bit sagt aus das es eine
Wiederholung des ersten Pulsstromes ist und NICHT das die Taste schnell
nacheinander mehrmals gedrückt wurde.

Berücksichtigst du das aber bei deiner FB nicht dann erkennt der
Empfänger deine Codes als das mehrfache Drücken einer Taste.

Gruß Hagen

von Lupin (Gast)


Lesenswert?

Außerdem musst du ja noch wissen wie lang so ein code ist, du musst also
im Programm heraus finden, wann er sich wiederholt ansonsten hast du auf
einen Tastendruck mehrere Codes.

von micha b (Gast)


Lesenswert?

Hmmmm ....

@Hagen I: Ich könnte doch in einem möglichst hohen Takt (10 Samples pro
bit) den Eingang abfragen und dann entsprechend (ohne Triggerung) die
Samples speichern. Da es ja nur bits sind hält sich der Speicherbedarf
wohl in Grenzen. Reicht das dann? Bzw. wie fehlertolerant ist das
RC5-Protokoll?

@Hagen II:
Soweit MIR bekannt ist, sieht zumindest das RC5 so aus:
2 Startbits , immer auf 1
1 "toggelndes" Bit
5 Adressbits (Markenspezifisch, z.B. Blaupunkt, Sony etc.)
6 Kommandobits

Da lässt sich bestimmt der "richtige" Code aus den Samples
herausrechnen.

@Lupin: DAS wird hingegen schwierig... Muß ich da dann manuell ran ?
Any Ideas ?

von Läubi (Gast)


Lesenswert?

Oder du spielst es so abwie dues aufgenommen hast.
Ist zwar nicht sooo toll aber könnte funktionieren, dansendest du halt
nenn "langen" Tastendruck sollte aber auch kein abbruch sein.

von sven f. (Gast)


Lesenswert?

Hallo da gibt schon ein schönes projekt von andre hab selbst den yard
hier und muß sagen super. ist aber auf einen PIC pasierent aber eine
anpassung an den atmega wäre klasse!
schau dir  mal diese seite an http://eldo.gotdns.com/yard/index.html

mlg sven

von micha b (Gast)


Lesenswert?

@Läubi: War eher mein Gedanke... Um die ganzen Protokollarten und deren
Interpretation zu umgehen einfach alles "hochgesamplet" aufzeichnen
und wieder abspielen. Bei der Aufnahme kann ich meinem M128 ja schon
sagen, ob dies ein "Dauerdrücken" sein soll (lauter/leiser) oder
einmalig (Next etc)... Dem entsprechend kann ich ja auch bei der
Ausgabe verfahren: Dauerausgabe oder Einmalig :-)

Nicht elegant aber "universell" einsetzbar :-)

@Sven: Schönes Projekt :-) Muss mich mal reinarbeiten.


Und was könnt ihr mir zu Speicherung im EEPROM sagen? Ich möchte mir
zudem die "führenden Nullen" bevor an der FB gedrückt wird bei der
Aufzeichnung ersparen...

also mal schematisch gesagt:
Eeprom_Speicherort = "Next" 'Z.B.


if ir_input = 1 then
  ...Speicherbeginn....
  if IR_Input = schon_laenger_0 then 'über Schleifenzähler
  ...Speicherstop...
end if
Gosub speichern / Eeprom_speicherort
end if

Aber WIE speicher ich das Ganze? :-/

von Hagen (Gast)


Lesenswert?

"War eher mein Gedanke... Um die ganzen Protokollarten und deren
Interpretation zu umgehen einfach alles "hochgesamplet" aufzeichnen
und wieder abspielen"

Und exakt das würde ich nicht machen. Stattdessen eben pro Bit zwei
Bytewerte. Die Zeitspanne von H-Pegel und die Zeitspannne von L-Pegel.

Auf diese Weise hast du auch lange Off Phasen mit drinnen, oder wie
beim SIRC Protokoll die unterschiedlich langen ON/OFF Phase mit
drinnen. Zusätzlich dürfte es so auch einfacher sein sich wiederholende
Sequenzen zu erkennen.

Eine "Fehlerkorrektur" von Spikes ist damit dann auch einfach. Zu
kurze H->L Zeiten werden einfach aus den Samples entfernt und deren
kummulierte Zeitspanne auf den nachfolgenden oder vorherigen kürzeren
Impuls hinzu addiert.

Auf alle Fälle benötigst du noch ein bischen Intelligenz bei der
Nachbearbeitung der Samples beim Aufzeichnen.

Gruß Hagen

von micha b (Gast)


Lesenswert?

" Stattdessen eben pro Bit zwei
Bytewerte. Die Zeitspanne von H-Pegel und die Zeitspannne von
L-Pegel."

Super Idee ! DAS macht die Sache viel einfacher, muß dann nur noch
wissen, wie kurz der kürzeste Sendebit ist, dann kann ich alles andere
rausrechnen.

MERCI ! :-)

von Carsten Broers (Gast)


Lesenswert?

Ich baue grad ne Relaiskarte, die per RC5-Fernbedienung angelernt werden
kann, dazu noch in 3 verschiedenen Modi später fernbedienbar, die beim
anlernen per DIP eingestellt werden.
Ein - Aus, Ein solange gedrückt, Ein und nach einstellbarer Zeit aus.
Jeder Kanal kann seine eigene Modi haben, und auch eigene FB.
Quasi thereotisch 8 FBs für 8 Kanäle.
Die angelernten Funktionen werden im ROM abgelegt, also auch bei
Spannungslosigkeit erhalten.
Das alles allerdings nur dank der RC5-Funktion von Bascom, hehe.
Musste nur das Togglebit isolieren, weil das leider sonst untergeht.

Wolltes nur mal loswerden, wo ich den Beitrag grade las ;-)
Gruß, Carsten www.DO2SHA.de

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.