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:
Code:
#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 type
  • main.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.