RGB-Fernbedienung am AVR - Problem mit IRMP

#2626952
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
}
Angehängte Dateien:
Gast #2627072
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
#2627075
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren