Brands_Freund
22.04.2006, 16:30
Hallo habe mal ein paar Fragen zum dem Artikel RC5-Decoder für ATMega im RN-Wissen bzw auch nen kleines Problem. Ich verwende einen Mega8 mit 16Mhz. Wie angegeben und kann einen Hardware defekt ausschließen.
Mein Ziel ist, bevor ich mein Bot steuern will, erstmal den Code über Uart auf dem Rechner auszugeben. Benutze die Uart-Libary von Peter Fleury. Hat bereits in anderen Projekten super funktioniert. Hier meine Main.c:
#include <avr/io.h>
#include <avr/interrupt.h>
#include "rc5.h"
#include "uart.h"
#ifndef F_CPU
#define F_CPU 16000000UL
#endif
#define UART_BAUD_RATE 9600
int main (void)
{
char s[30];
DDRD = 0x00;
// der ensprechende INT-Port muss INPUT sein
// RC5 initialisieren, alle Adressen zulassen
rc5_init (RC5_ALL);
// Interrupts zulassen
sei();
// FIXME: ei2gentlich sollte es nicht nötig sein, das atomar zu machen
// Code atomar machen
uart_puts("Reddy");
uint8_t sreg = SREG;
cli();
// Gibt's was Neues?
if (-1 == rc5.flip)
{
// Nein, dann
// atomaren Block beenden
SREG = sreg;
// ...und zurück (oder sonst was machen)
//return;
}
// Ja, dann code merken, und evtl. rc5.addr, falls man die nicht sowieso kennt
uint8_t code = rc5.code;
// und auf nächstes Zeichen warten
rc5.flip = -1;
// atomaren Block beenden
SREG = sreg;
// code (evtl. addr) auswerten
itoa( code , s , 10);
uart_puts("Code:");
uart_puts( s );
}
Jetzt zu meinen Fragen:Enthält Code die Geräteadresse oder nur die Tastencode? Was macht SREG, was beduetet Atomar machen und FIXME? Außerdem folgende warnings
rc5.c:101: warning: comparison is always false due to limited range of data typemain.c:30: warning: comparison is always false due to limited range of data type
main.c:50: warning: implicit declaration of function `itoa'
Habe da nen Bett vorm Kopf.Naja schonmal danke für Denkanstöße. ](*,)
Mein Ziel ist, bevor ich mein Bot steuern will, erstmal den Code über Uart auf dem Rechner auszugeben. Benutze die Uart-Libary von Peter Fleury. Hat bereits in anderen Projekten super funktioniert. Hier meine Main.c:
#include <avr/io.h>
#include <avr/interrupt.h>
#include "rc5.h"
#include "uart.h"
#ifndef F_CPU
#define F_CPU 16000000UL
#endif
#define UART_BAUD_RATE 9600
int main (void)
{
char s[30];
DDRD = 0x00;
// der ensprechende INT-Port muss INPUT sein
// RC5 initialisieren, alle Adressen zulassen
rc5_init (RC5_ALL);
// Interrupts zulassen
sei();
// FIXME: ei2gentlich sollte es nicht nötig sein, das atomar zu machen
// Code atomar machen
uart_puts("Reddy");
uint8_t sreg = SREG;
cli();
// Gibt's was Neues?
if (-1 == rc5.flip)
{
// Nein, dann
// atomaren Block beenden
SREG = sreg;
// ...und zurück (oder sonst was machen)
//return;
}
// Ja, dann code merken, und evtl. rc5.addr, falls man die nicht sowieso kennt
uint8_t code = rc5.code;
// und auf nächstes Zeichen warten
rc5.flip = -1;
// atomaren Block beenden
SREG = sreg;
// code (evtl. addr) auswerten
itoa( code , s , 10);
uart_puts("Code:");
uart_puts( s );
}
Jetzt zu meinen Fragen:Enthält Code die Geräteadresse oder nur die Tastencode? Was macht SREG, was beduetet Atomar machen und FIXME? Außerdem folgende warnings
rc5.c:101: warning: comparison is always false due to limited range of data typemain.c:30: warning: comparison is always false due to limited range of data type
main.c:50: warning: implicit declaration of function `itoa'
Habe da nen Bett vorm Kopf.Naja schonmal danke für Denkanstöße. ](*,)