Forum: Mikrocontroller und Digitale Elektronik IRMP mag nicht - Hardware?


von Axel R. (axelroro)


Angehängte Dateien:

Lesenswert?

Hallo Forum,
versuche IRMP auf meinem Pollin Eval Board mit Add-on Board zum laufen 
zu bewegen, es klappt aber einfach nicht. Vielleicht mag einmal jemand 
schauen.

Symptom:
- Logging geht - er spukt Nullen und Einsen aus (recht viele).
- irmp_get_data löst aus mit verschiedenen Fernbedienungen - das sollte 
doch eigentlich eine erfolgreiche Erkennung signalisieren, oder?
- Aber irmp_data.protocol, irmp_data.address usw. immer = null !

Einzige Änderungen im Code:
- Eingangspin auf PORTD - Pin 3
- Logging dann mal rausgenommen (=0 in irmp_config.h), aber so 
umgeändert, dass ich UART nach wie vor benutzen kann.
- Primitive Ausgabe der Ergebnisse in der irmp_get_data

Nutze Atmega32 mit 16MHz und AVRStudio. Das Pollin add on nutzt den TSOP 
1136.

Schade, das ist so eine praktische Software - fuchst mich, dass ich das 
nicht zum Laufen bekomme. Hat jemand eine Idee oder ähnliche Erfahrungen 
mit der Pollin-Hardware?

Grüsse
Axel

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Axel Ro. schrieb:
> Hallo Forum,
> versuche IRMP auf meinem Pollin Eval Board mit Add-on Board zum laufen
> zu bewegen, es klappt aber einfach nicht. Vielleicht mag einmal jemand
> schauen.

Besser wäre es vielleicht gewesen, Dein Problem im dazugehörenden Thread

  Beitrag "IRMP - Infrared Multi Protocol Decoder"

darzustellen. Ich bin jetzt nur zufällig über Dein Posting gestolpert.

> Symptom:
> - Logging geht - er spukt Nullen und Einsen aus (recht viele).

Wo ist das Logging? Das wäre am interessantesten gewesen.

> - irmp_get_data löst aus mit verschiedenen Fernbedienungen - das sollte
> doch eigentlich eine erfolgreiche Erkennung signalisieren, oder?

Ja.

> - Aber irmp_data.protocol, irmp_data.address usw. immer = null !

Kann ich mir eigentlich nicht vorstellen. Wenn IRMP ein Protokoll 
erkennt, ist irmp_data.protocol immer größer als 0. Wie gibst Du denn 
das Protokoll, die Adresse und das Kommando aus? Vielleicht liegt ja 
dort der Hase im Pfeffer.

> Einzige Änderungen im Code:
> - Eingangspin auf PORTD - Pin 3

Diese Änderung + Deine Ausgaberoutine anzugeben hätte gereicht - warum 
Du jetzt das komplette IRMP-Software-Paket, welches über den Artikel

   http://www.mikrocontroller.net/articles/IRMP

herunterladbar ist, angehängt hast, verstehe ich nicht.

> - Primitive Ausgabe der Ergebnisse in der irmp_get_data

Du meinst hinter dem Aufruf von irmp_get_data() - in main.c

Hier Deine Passage zur Ausgabe des Protokolls:
1
    itoa((int)irmp_data.protocol,s,10);
2
    for (i=0;i<4;i++)
3
      {
4
      irmp_uart_putc(s[i]);
5
      }

Du gibst hier 4 Zeichen aus, auch wenn in s nur eine einzige Ziffer 
steht. Damit produzierst Du Müll. Der String s wird von itoa() 
automatisch 0-terminiert.

Deshalb müsste das eigentlich so aussehen:
1
     itoa((int)irmp_data.protocol,s,10);
2
     for (i=0; s[i]; i++)
3
     {
4
        irmp_uart_putc(s[i]);
5
     }

Dito für die Ausgabe der anderen Werte.

Sollte der Tipp allein nicht ausreichen, poste hier bitte einen Scan 
Deiner Fernbedienung - in der Form, wie die Scans im Unterverzeichnis 
IR-Data des IRMP-Pakets abgelegt sind.

Gruß,

Frank

von Axel R. (axelroro)


Lesenswert?

Hallo Frank,
danke erstmal für die Mühe und die Antwort.

Habe es eigentlich gut gemeint, mit meinem Problem nicht den 
Original-Thread zu belasten - auch wird hier im Forum immer mal wieder 
jemand geschimpft, wenn man nicht den kompletten Code zufügt. Im 
gegebenen Fall aber wohl richtig - wäre nicht nötig gewesen.

Die zugegebenermassen primitive Ausgaberoutine funktioniert eigentlich 
schon - es werden ja einfach nur die ersten 4 Characters in s[] 
ausgegeben. Ich hatte das auch schon im Verdacht und hab das dann 
ausprobiert mit einem Const Zahlenwert - geht. Klar - an Stelle 3-4 
steht Müll (genaugenommen "da" des vorher geladenen Strings "data") - 
das ignoriere ich dann einfach.

Ich fange jetzt einfach nochmal ganz von vorne an und füge dann den Scan 
an - wäre nett, wenn Du nochmal vorbei schautest. Dauert ein paar 
Minuten.

Danke und Gruss
Axel

von Axel R. (axelroro)


Lesenswert?

Noch ein Zusatz - habe bei dem erneuten Auspacken gesehen, dass da 
Beispiele anderer Fernbedienungen dabei sind - hier wird schon klar, 
dass da etwas schon nicht stimmen kann. Meine Scans (aus der Erinnerung) 
sind viel trivialer - schon auch Nullen und Einsen, aber bei weitem 
nicht so differenziert.

OK, egal, ich übersetze das jetzt noch mal neu und häng dann Scan an ...

von Axel R. (axelroro)


Angehängte Dateien:

Lesenswert?

Hallo Frank,
habe mal von vorne begonnnen - nur diesmal mit dem Tarball, welcher im 
Artikel verlinkt ist. Dieser Code scheint deutich weiter als das 
irmp.zip file, zumindest musste ich hier keine Anpassungen für UART und 
Timer-Interupt für den Atmega32 mehr machen.

OK, siehe bitte im Anhang die Scans meiner Samsung TV Fernbedienung - 
ganz klar stimmt da schon was nicht, verglichen mit den Beispielscans 
anbei. Diesmal triggert irmp_data_get nicht, erkennt also 
offensichtlich, dass dies nicht valide ist.

Die Anpassungen beschränkten sich diesmal nur auf diese Zeilen:
1
#define IRMP_PORT                               PORTD
2
#define IRMP_DDR                                DDRD
3
#define IRMP_PIN                                PIND
4
#define IRMP_BIT                                3       // use PD3 as IR input on AVR
und in main
1
    if (irmp_get_data (&irmp_data))
2
    {
3
    itoa(irmp_data.protocol, s, 10);
4
    irmp_uart_putc('\r');
5
    irmp_uart_putc('\n');
6
    for (i=0;s[i];i++)
7
      {
8
      irmp_uart_putc(s[i]);
9
      }
10
    irmp_uart_putc('\r');
11
    irmp_uart_putc('\n');
.

Ist Dir so etwas schon mal untergekommen? Mir fehlt im Moment jeglicher 
Ansatz, wo zu suchen. Bin für jeden Hinweis dankbar.

Grüsse
Axel

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Axel Ro. schrieb:
> OK, siehe bitte im Anhang die Scans meiner Samsung TV Fernbedienung -
> ganz klar stimmt da schon was nicht, verglichen mit den Beispielscans
> anbei.

Habe mir den Scan angeschaut, da sind lediglich 2 Pulslängen drin, 
nämlich

6,2msec Puls
2,7msec Pause

und davon auch nur eine Handvoll. Das ist nie und nimmer ein 
vollständiger IR-Frame, höchstens sind das ein paar Start-Bits, die 
meist mit längerer Pulslänge als die einzelnen Daten gesendet werden. 
Ich kenne den TSOP1136 nicht, vielleicht moduliert die SAMSUNG-FB das 
Signal mit 40kHz und der TSOP1136 packt die Abweichung nicht? Mit einem 
TSOP1736 konnte ich aber problemlos das Signal einiger 
SAMSUNG-Fernbedienungen über IRMP empfangen.

> Diesmal triggert irmp_data_get nicht, erkennt also
> offensichtlich, dass dies nicht valide ist.

Hm, das ist merkwürdig.

Leider habe ich keine Idee, woran das liegen könnte. Wie ist der TSOP 
denn angeschlossen? Ist der Tiefpassfilter mit 100R und 4,7µF auch an 
der Spannungsversorgung des TSOP?

Gruß,

Frank

von Axel R. (axelroro)


Lesenswert?

Hallo Frank,
danke für die Antwort.

Ich habe dies mit einer ganzen Latte von verschiedenen Fernbedienungen 
ausprobiert - alle sehen ähnlich simplistisch vom Scan her aus. 
Inzwischen habe ich auch mal einen 8Mhz Quartz genommen, ändert aber 
nichts am Symtom.

Ich tippe mehr und mehr auch auf ein Hardware-Problem mit dem TSOP1136. 
Der Tiefpass beim Pollin Add-on ist mit 100R und 47uF (also nicht 4,7uF) 
bestückt. Das ist ungewöhnlich, allerdings dachte ich, dass es sich hier 
nur um eine Entkopplung von irgendwelchen Störungen auf der 
Versorgungsleitung handelt. Oder könnten die 47uF das Problem sein??

Ich hänge jetzt mal mein Analog-Oszi dran, bezweifle allerdings, dass 
ich da viel erkennen kann.

Sehr seltsam. Die Software scheint ja inzwischen recht ausgereift - und 
viel falsch kann man ja auch nicht mehr machen.

Grüsse
Axel

von Axel R. (axelroro)


Angehängte Dateien:

Lesenswert?

Und hier das Oszi-Foto. Wie gesagt, ist ein Analog-Oszi. Nun ja, das 
sieht nicht nach einem kompletten Signal aus, oder? Vielleicht messe ich 
auch falsch oder das geht nicht mit Analog-Oszi.

Gruss
Axel

von holger (Gast)


Lesenswert?

>Und hier das Oszi-Foto. Wie gesagt, ist ein Analog-Oszi. Nun ja, das
>sieht nicht nach einem kompletten Signal aus, oder?

Doch, das sieht wie ein Signal aus. Der Pegel kommt nur nicht
hoch genug. Hängt da irgendwo ein Kondensator mit am Pin?
Oder vieleicht doch nicht auf Eingang geschaltet?

> Vielleicht messe ich
>auch falsch oder das geht nicht mit Analog-Oszi.

Geht. Nimm mal einen 10:1 Tastkopf. Dann sieht es evtl. besser aus;)

von Axel R. (axelroro)


Lesenswert?

Mensch, ist das peinlich. Sowas von peinlich. Ich mags gar nicht 
zugeben. Menschliches Versagen hoch 3. Setzen, 6. Reif für die Bild.

Holger, Du hast 100% recht mit dem Kondensator. Am Eval-Board war noch 
ein Jumper auf eine Taste gesetzt für den Eingangspin. Die ist zwar 
offen, aber daran hängt so eine R-C Kombination zum Entprellen.

So was doofes - meine mich. Sorry für Euren Zeitaufwand.

Nun ja, nun gehts - fast. Protokoll ist schon mal richtig. Bei einer 
Denon kommt immer (egal welche Taste) 5 12884 0. Bei Toshiba
2 -17851 49. Command ändert sich allerdings nicht, egal welche Taste. 
Jetzt mache ich das erstmal zurück auf 16Mhz und prüfe alles nochmal 
sorgfältig durch.

Danke!
Axel

von Axel R. (axelroro)


Lesenswert?

So, jetzt gehts - endlich. Muss wirklich übermüded gewesen sein.

Danke Holger und natürlich Dir, Frank, für die schöne Software!

Grüsse
Axel

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Axel Ro. schrieb:
> So, jetzt gehts - endlich.

Freut mich :-)

Solltest Du noch ein Problem mit einer bestimmten FB haben, dann mache 
einen Scan davon und hänge ihn hier an.

Gruß,

Frank

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.