Forum: Mikrocontroller und Digitale Elektronik RGB-Fernbedienung am AVR - Problem mit IRMP


von Martin R. (martin84)


Angehängte Dateien:

Lesenswert?

Guten Abend,

ich versuche gerade eine 44-Tasten-RGB-Fernbedienung eines 5m 
LED-Streifens am Atmega88 zum laufen zu kriegen. Der RGB Streifen wurde 
in der Bucht gekauft und beinhaltet bereits einen Controller und eine 
Fernbedienung.

Ich will nun den Streifen und die Fernbedienung am Atmega einsetzen.

Das IR-Protokoll ist das NEC-Protokoll. Im Anhang habe ich das Timing 
für die "Rot"-Taste.
In der IRMPconfig.h wurde nur das NEC-Protokoll aktiviert.

Der Atmega88 wurde, wie in der main.c beschrieben, für interne 8MHz 
gefused. Für die Übertragung der "Rot"-Taste habe ich folgende Werte 
erhalten:

Startbit > 0x00 (Adressbyte) > 0xFF (inv. Adressbyte) > 0x1A 
(Commandbyte) > 0xE5 (inv. Commandbyte) > Stopbit

Könnt ihr bitte mal über meine Switch-Case-Anweisung drüber schauen, ob 
die Abfrage des irmp_data.command richtig ist?
1
Gruß Martin
2
#define F_CPU 8000000UL
3
#include <inttypes.h>
4
#include <avr/io.h>
5
#include <util/delay.h>
6
#include <avr/pgmspace.h>
7
#include <avr/interrupt.h>
8
9
#include "irmpconfig.h"
10
#include "irmp.c"
11
12
...
13
14
int
15
main (void)
16
{
17
    IRMP_DATA irmp_data;
18
19
    irmp_init();                                                            // initialize irmp
20
    timer1_init();                                                          // initialize timer 1
21
    sei ();                                                                 // enable interrupts
22
23
  DDRC |= (1 << DDC1) | (1 << DDC2) | (1<<DDC3);
24
25
    for (;;)
26
    {
27
        if (irmp_get_data (&irmp_data))
28
        {
29
            //if (irmp_data.protocol == IRMP_NEC_PROTOCOL)// &&     // NEC-Protokoll
30
        //irmp_data.address == 0x00FF)                   // Adresse 0x1234
31
        //{
32
          switch (irmp_data.command)
33
          {
34
            case 0x9A65: PORTC|=(1<<PC1); break;          // Taste grün
35
            case 0x18E7: PORTC|=(1<<PC2); break;          // Taste gelb
36
            case 0x1AE5: PORTC|=(1<<PC3); break;          // Taste rot
37
          }
38
  }
39
    }
40
}

von Martin R. (martin84)


Lesenswert?

Das "Gruß Martin" sollte nicht mit in den C-Code sondern an den Schluß 
;-)

von Martin R. (martin84)


Lesenswert?

In der IRMPconfig.h habe ich den Pin für den Empfänger auf PB.5 gesetzt 
und den Empfänger auch an diesen angeschlossen, könnte das Probleme 
bereiten?

von Thomas B. (nichtessbar)


Lesenswert?

Hm... wo liegt dein Problem und was geht nicht?

Warum sollte das Probleme bereiten wenn du den Empfänger dort anschließt 
wo auch in der Headerdatei eingestellt wird? Das muss so sein, ist ja 
der Sinn hinter der Einstellmöglichkeit im Header... oder hab ich deinen 
Post missverstanden?

von Martin (Gast)


Lesenswert?

Guten Morgen Thomas,

du hast recht, am PB.5 liegts bestimmt nicht. Ich vermute mal, dass die 
Case Abfrage meines irmp_data.command nicht stimmt. Frank schrieb in 
seinem Thread, dass command mit 8 Bit abgefragt werden muss. Ich frage 
ja das Commandbyte und das invertierte Commandbyte ab. Ich werde gleich 
mal probieren ob es mit nur einem von beiden funktioniert.

Frohe Ostern

Martin

von Thomas B. (nichtessbar)


Lesenswert?

Aus irmp.h
1
typedef struct
2
{
3
  uint8_t               protocol;    // protocol, i.e. NEC_PROTOCOL
4
  uint16_t              address;     // address
5
  uint16_t              command;     // command
6
  uint8_t               flags;      // flags, e.g. repetition
7
} IRMP_DATA;

Mit 8 Bit nicht unbedingt, da command 16 Bit sind. Aber aus dem 
Codebeispiel hier http://www.mikrocontroller.net/articles/IRMP wird 
ersichtlich, dass du nicht das invertierte Signal mitbetrachten musst 
sondern einfach die ersten zwei Stellen 0 setzt.


Probiers mal mit 0x0065, 0x00E7 und 0x00E5

von Martin (Gast)


Lesenswert?

Jetzt hab ichs. Ich darf nur das 8-Bit-Commandbyte verwenden. Jetzt 
gehts:-) Das IRMP ist ein Spitzenprojekt!!:-) Danke an dieser Stelle an 
Frank M.

Frohe Ostern

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.