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...
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
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
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.
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 ?
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.
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
@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? :-/
"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
" 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 ! :-)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.