horst schrieb:
> Das Problem hat sich erledigt. Habe natürlich die IRMP-ISR nicht
> aktiviert ;-)
> Allerdings tut sich bei mir schon die nächste Frage auf.
>
> Wie kann ich jetzt den Protokoll Namen auf dem LCD ausgeben.
> Adresse und Befehl lassen sich ja ganz einfach per itoa umwandeln aber
> beim Protokoll hakts bei mir. Da weiss ich nicht wie ich das anfassen
> soll.
Ist etwas kompliziert bei den AVRs, aber geht:
Zuerst in irmpconfig.h IRMP_PROTOCOL_NAMES auf 1 setzen. Dann landen die
Protokoll-Namen als Strings im Flash. Diese werden durch ein Array
zusammengehalten, die auch im Flash liegen, da das RAM auf ATmegas meist
knapp bemessen ist.
Du musst also erst den pointer von irmp_protocol_names[irmp_data] aus
dem Flash holen, dann den String dazu auch nochmals.
Du findest dazu auch ein Beispiel in main.c. Auszug:
1 | uart_puts_P (pgm_read_word (&(irmp_protocol_names[irmp_data.protocol])));
|
Beachte, dass uart_puts_P eine Funktion ist, die eben nochmals aus dem
Flash liest.
Diese findest Du auch in main.c:
1 | static void
|
2 | uart_puts_P (PGM_P s)
|
3 | {
|
4 | uint8_t ch;
|
5 |
|
6 | while ((ch = pgm_read_byte(s)) != '\0')
|
7 | {
|
8 | uart_putc (ch);
|
9 | s++;
|
10 | }
|
11 | }
|
Daraus eine lcd_puts_P()-Funktion zu machen, sollte nicht allzu schwer
sein.