RGB-Fernbedienung am AVR - Problem mit IRMP

OP #2626952
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:
#2627065
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?
Gast #2627072
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
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
Gast #2627076
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.