Hi,
ich habe ein kleines Board mit Infrarotempfänger Keyestudio
(http://www.keyestudio.cc/h-pd-78.html) an meinen Arduino gehängt und
lese ihn mit der IRLib2 von Chris Young aus.
Anfangs läuft alles recht gut, gelegentlich aber "verhustet" sich der
Empfänger und empfängt ab dann die Keys wiederholt anders.
Beispiel: Die Taste "OK" der mitgelieferten Fernbedienung empfängt er
nach dem Start als "0x20D93043".
20D93043 = 100000110110010011000001000011
Tippt man aber ein wenig auf der Fernbedienung herum oder auch nur nach
längerer Pause, kommt die Taste "OK" reproduzierbar als
D7E84B1B = 11010111111010000100101100011011
Auch alle anderen Tasten sind dann "verschoben".
Nach einem Arduino-Neustart kommt wieder die erste Variante.
Offenbar gibt es noch weitere "Verschiebungen", jetzt im Produktivmodus
(ohne Debugger) hat er einmal anhaltend gar keine der beiden obigen
Varianten erkannt (ich weiß aber nicht, was diesmal wirklich ankam,
mangels Serial). Nach Restart des Gesamtsystems ging es dann wieder.
Kennt von euch einer den Effekt? Muss ich die IRLib2 gelegentlich
"resetten"? Falls ja, habe ich noch keinen entsprechenden Befehl
gefunden.
myReceiver.enableIRIn() rufe ich beim Aufwachen aus dem Ruhezustand aus.
Ich habe auch schon versucht, nach jedem empfangenen "Befehl" ein
enableIRIn() aufzurufen, aber das hat auch nicht geholfen.
1
#include<IRLibDecodeBase.h>
2
#include<IRLib_HashRaw.h> //Must be last protocol
3
#include<IRLibCombo.h> // After all protocols, include this
4
// Include a receiver either this or IRLibRecvPCI or IRLibRecvLoop
5
#include<IRLibRecv.h>
6
7
#define IR_PIN 2
8
9
IRdecodemyDecoder;
10
11
IRrecvmyReceiver(IR_PIN);//create a receiver on pin number 2
Kennt den Effekt jemand, oder riecht das nach irgendeiner Fehlbedienung
meinerseits? Ich verwende das Pin auch zum Aufwachen aus dem Schlafmodus
(genau um per Fernbedienung Aktionen auslösen zu können).
Danke für jeden Hinweis!
Liebe Grüße
Marco
Marco G. schrieb:> "... mit der IRLib2 von Chris Young ..."
Muss man die kennen?
Statt eines Links auf das Breakout-Board wäre ein Link auf die von dir
verwendete Bibliothek wesentlich hilfreicher - oder soll da jeder
erstmal googlen?
https://github.com/cyborg5/IRLib2/tree/master/IRLib2
Funktioniert denn beim Board angegebene Code wie erwartet?
Wolfgang schrieb:> Marco G. schrieb:>> "... mit der IRLib2 von Chris Young ...">> Muss man die kennen?>> Statt eines Links auf das Breakout-Board wäre ein Link auf die von dir> verwendete Bibliothek wesentlich hilfreicher - oder soll da jeder> erstmal googlen?> https://github.com/cyborg5/IRLib2/tree/master/IRLib2
Sorry, den Link wollte ich dazupacken, war dann aber von enableIRIn()
abgelenkt... genau die ist es.
> Funktioniert denn beim Board angegebene Code wie erwartet?
Hm, was meinst du genau? Beim Test und nach dem Neustart liefert der OK-
Knopf reproduzierbar den ersten Code.
Nach einigen verschiedenen Klicks (anderer Tasten) liefert er immer
wieder den zweiten Code.
Alle anderen Signale werden ebenfalls in mindestens zwei verschiedenen
Varianten erkannt. "*" im "sauberen" Zustand nach dem Start immer wieder
0x7BB7E31F, im verrutschten Zustand immer wieder als 32C6FDF7.
Da ich keine vordefinierten Sony- oder Siemens- Fernbedienungen erkennen
oder bedienen will, ist so eine "große" Lib vielleicht Overkill. Ich
brauche nur einen (ausreichend toleranten) Vergleich mit zwei (oder an
anderen Basteleien auch mal 6) vorgegebenen Signalen. Aber die gesamte
Timing- und Signallogik zu implementieren (inklusive aller
Anfängerfehler) wollte ich mir durch den Einsatz einer gut getesteten
Lib ersparen.
Gruß
Marco
Wolfgang schrieb:> Statt eines Links auf das Breakout-Board wäre ein Link auf die von dir> verwendete Bibliothek wesentlich hilfreicher - oder soll da jeder> erstmal googlen?> https://github.com/cyborg5/IRLib2/tree/master/IRLib2
Genau unter dem angegebenen Link gibt es den im Folgepost genannten
Link.
Ich frage mich warum die Leute hier im Forum immer erst mal dumm
angemacht werden. Das geht schon hiermit
Wolfgang schrieb:> Muss man die kennen?
los.
Wer keine Lust hat sich mit dem Thema zu befassen, sollte es doch
generell sein lassen.
Marco hatte doch detailiert beschrieben was er möchte, das sollte für
Leute die das Board/die Lib kennen ausreichend sein.
@Grundschüler: danke, fertiger Code auf dem Silbertablett...
Das heißt, im Wesentlichen auf die Library verzichten. Dein Code mit dem
Tick-Zählen sieht aber dann doch überschaubar aus.
Dann werde ich heute das fertige "Kunstwerk" noch mal auseinander nehmen
und mit Hilfe deines Codes debuggen.
Offenbar gibt es hier erst mal wenig Erfahrungen mit dieser konkreten
Library (IRLib / IRLib2). Falls jemand eine bessere (einfache) Lib
kennt, nehme ich auch gern Empfehlungen entgegen.
@Zeno: Danke für die Fürsprache! Ich kann andererseits die Genervtheit
der "Profis" bei vielen Anfängerfragen verstehen und kenne auch die
Sicht des Programmierers, der mit schlechten Fehlermeldungen
konfrontiert wird ("irgendwas geht nicht!").
Marco G. schrieb:> Offenbar gibt es hier erst mal wenig Erfahrungen mit dieser konkreten> Library (IRLib / IRLib2). Falls jemand eine bessere (einfache) Lib> kennt, nehme ich auch gern Empfehlungen entgegen.IRMP
Marco G. schrieb:> @Zeno: Danke für die Fürsprache! Ich kann andererseits die Genervtheit> der "Profis" bei vielen Anfängerfragen verstehen und kenne auch die> Sicht des Programmierers, der mit schlechten Fehlermeldungen> konfrontiert wird ("irgendwas geht nicht!").
Das haben nun mal Anfänger - genauso wie Lehrlinge - an sich, daß sie
erst einmal lernen müssen. Dies bedeutet auch das Fragen aus Sicht des
Profis nervig gestellt werden, weil es der Fragesteller einfach nicht
besser weiß. Man kann dann den Fragesteller auch in einer anständigen
Art und Weise darauf hinweisen - ohne beleidigend oder überheblich rüber
zu kommen. Leider vergessen viele das sie irgendwann auch mal angefangen
haben und über jede Hilfestellung froh waren.
Andere User User zeigen doch auf das es auch anders geht. Leider gibt es
davon viel zu wenige.
Falls jemand über diesen Thread hier auf Infrarot-Probleme stößt:
Wow, der Artikel zu IRMP (https://www.mikrocontroller.net/articles/IRMP)
erklärt alles sehr gut, vielen Dank für den Tip und vor allem diese
Seite!
Sobald der neue Empfänger da ist (die üblichen Wochen Anreisezeit),
werde ich damit mal die Billigfernbedienung untersuchen und hier die
Ergebnisse eintragen. Das "Altsystem" muss bis dahin mit gelegentlichen
Neustarts betrieben werden, deshalb bis auf Weiteres nichts Neues von
mir.
Moin,
Ich hatte mal was ähnliches gebaut und die Fernbedienung hatte ein
Protokoll, das ich ums verrecken nicht sinnvoll zuordnen konnte.
Die Pakete hatten eine maximale Länge aber ich konnte nichtmal erkennen,
wieviele Bits das sein sollen.
Ok, ich war auch faul, sicherlich hätte man das rauskriegen können.
Was zu sehen war, waren "kurz" und "lang", entweder auf high oder low.
Ich wollte nur zwei Tasten erkennen, um die Glotze zu drehen.
Also habe ich das ganz eklig primitiv gemacht:
Ab dem ersten Wackeln am Pin wird einfach der Zustand des Pins und die
Zeit seit dem letzten Toggeln aufgezeichnet. Jedes Toggeln ein Byte.
Beim Toggeln also 0 und Zeit kurz = 0, 0 und Zeit lang = 1, 1 und Zeit
kurz = 2, 1 und Zeit lang = 3.
Das habe ich in ein Array gepackt, die gespeicherten Tasten ins Eeprom.
Wenn ein Array empfangen wurde, hab ich einfach die Arrays Element für
Element verglichen und feddich.
Mehr Speicherverschwendung und langsamer geht wohl kaum aber das war
extrem einfach zu programmieren.
Wenn ein ATmega 8 aber sonst nichts tun muß, ist es ja egal.
Als Endschalter habe ich den Motorstrom über ein Stück dünne lange
Leiterbahn gemessen (Shunt) und ab einer bestimmten Stromgrenze wurde
abgeschaltet.
Das war vielleicht das übelste Stück Quick'n'Dirty was ich je verbrochen
habe aber es hat prima funktioniert.
Gruß,
Norbert
Ja, mein Controller macht so wenig, dass ich normalerweise mal einen
attiny probieren würde. Absurderweise (kleine Grenzfälle der
Marktwirtschaft) finde ich die in kleinen Mengen aber nur für mehr Geld
als die Atmega (328p für 5 Stück 4 Euro, die attiny ab > 1,70/Stück).
Eigentlich macht er nur eins: Lämpchen an oder Lämpchen aus. Aber
Lämpchen aus dann mit Tiefschlaf, und per IR- Interrupt aus dem
Tiefschlaf erwachend.
Moin,
Für Bastler macht es bis auf Ausnahmen keinen Sinn, sich einen Tiny
anzutun, also verwenden die meisten Mega 328 oder aufwärts.
Deswegen sind die in Kleinmengen billiger. Da muß der Bastelshop nicht
soviel draufschlagen, weil sie in Massen gehen.
Tiny wird erst interessant, wenn Du ein paar k/a brauchst.
Ich löte die Dinger auch nicht mehr selbst. Der Frust bis das Ding dann
läuft ist zwar zu 95% nahe null aber nachdem ich einmal zwei Platinen
hintereinander nicht zum Laufen bekommen habe, hatte ich die Faxen
dicke. Für Basteleien nur noch Arduinoboards vom Chinamann. Die sind
auch so billig (inkl Quarz und U-Regler), da kriegt man kaum die Teile
für und man kann sich immer ein paar hinlegen.
Bei mir ist das alles mit Elektronik und µC immer nur noch Mittel zum
Zweck, nicht Bastelei als Selbstzweck.
Gruß,
Norbert
Wird zwar langsam extrem Offtopic, aber: kennst du ein preiswertes
Arduino-Teil, wo man den Spannungsregler und die Power-LED nicht erst
rauslöten muss? Der Pro Mini braucht ja auch noch 10x so viel Strom wie
nötig im Tiefschlaf...
Liebe Grüße,
Marco
So, falls noch jemand "On Air" ist: ich habe mal mit einer kleinen
Interrupt-Routine die An- und Aus- Zeiten des IR- Moduls gemessen.
Gerundet:
Startimpuls: ca. 9.3 ms an, 4.5 ms aus.
Dann haben die Impulse ca. 0.6 ms Länge, die Info scheint in der Pause
zu liegen. Die Pause ist entweder knapp 0.6ms oder etwas über 1.8ms.
8x 0.6ms, dann 8x 1.7ms, 6x 0.6ms, 1.7ms, ...
0
9304 4512
572 556
600 552
572 580
572 552
596 552
576 580
576 552
604 552
576 1684
608 1712
548 1692
572 1688
600 1692
572 1692
572 1684
608 1688
576 548
608 552
576 576
576 552
604 552
576 580
572 1688
576 576
576 1688
572 1688
604 1684
576 1692
572 1688
600 1688
572 552
600 1688
576
Ich schau mal in der IRMP nach, was das ist.
Also, die Dokumentation zum Infrarot in IRMP ist wirklich super! Damit
ist prinzipiell alles erklärt, Pulse Distance Coding, ziemlich
wahrscheinlich NEC.
Auch das Konzept von IRMP sieht genial aus, dynamisch rauszufinden, was
bei aktueller Datenlage noch so alles in Frage kommt. Wirklich Respekt!
Was mir leider komplett fehlt, ist ein Einstieg in die Lib per Arduino.
:-(
Das Pin steht in der irmpconfig.h, B6 ist aber am Crystal. Setze ich es
um, z.B. auf B4, komme ich auch nicht weiter. Serial funktioniert nicht,
wenn ich irmp.h einbinde. Irgendwie habe ich die Lib offenbar falsch
eingebunden. :-(
Ich werde jetzt für diese eine Fernbedienung einfach mit den Interrupts
(Change von Pin2) eine einfache, schlechte kleine Klasse bauen und
hoffen, dass ich richtig schätze, wann ein Signal wirklich beendet ist
und so.
Oder hat noch jemand einen Arduino-Port zur Hand? Die Links aus den
anderen Forumsartikeln waren jetzt auch nicht so hilfreich...