Sorry, hatte nicht gesehen dass du dort gepostet hattest! Habe dor mittlerweile geantwortet, hier der aktualisierte Code, der aber leider immer noch nicht funktioniert:
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <math.h>
#include <inttypes.h>
#include <compat/deprecated.h>
volatile char s_bit;
volatile uint8_t addresse;
volatile uint8_t code;
volatile char rdy;
volatile uint16_t gesamt[16];
volatile char last_bit = 1;
volatile uint8_t bitnummer = 1;
volatile char ergebnis[20] = "RC5 fertig!";
void init_rc5()
{
MCUCR |= (1<<ISC01) | (1<<ISC00);; //wait rising edge
GICR |= (1<<INT0); //enable INT0
TCCR0 |= (1<<CS02); //Prescaler 256
cbi(DDRD,PD2);
}
//****************************************************USART******************************
void init_usart(void)
{
UBRRL |= 0b01100111;
UCSRB = (1<<TXEN) | (1<<RXEN);
UCSRC = (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0);
}
void send_char(unsigned char s)
{
while (!(UCSRA & (1<<UDRE)));
UDR = s;
}
void send_string(char *s)
{
while(*s != '\0')
{
send_char(*s);
s++;
}
}
//**********************************************************USART-ENDE********************
SIGNAL(SIG_INTERRUPT0)
{
char test[3];
uint8_t i;
if(last_bit == 1) {
if(TCNT0<139 && bitnummer <= 14) {
gesamt[bitnummer] = 1;
last_bit = 1;
TCNT0 = 0;
bitnummer++;
}
if(TCNT0>139 && TCNT0<194 && bitnummer <= 14) {
gesamt[bitnummer] = 0;
last_bit = 0;
TCNT0 = 0;
bitnummer++;
}
}
if(last_bit == 0) {
if(TCNT0<139 && bitnummer <= 14) {
gesamt[bitnummer] = 0;
last_bit = 0;
TCNT0 = 0;
bitnummer++;
}
if(TCNT0>139 && TCNT0<194 && bitnummer <= 14) {
gesamt[bitnummer] = 1;
last_bit = 1;
TCNT0 = 0;
bitnummer++;
}
}
if(bitnummer == 14) {
gesamt[1] = 1;
last_bit = 1;
bitnummer = 1;
TCNT0 = 0;
rdy = 1;
}
}
int main(void)
{
init_usart();
init_rc5();
sei();
uint8_t i;
char test[10];
char wert[10] = "RC5:";
for(;;)
{
if(rdy==1) {
send_string(wert);
for(i=9;i<=14;i++) { // datenbits auslesen
itoa(gesamt[i],test,2);
send_string(test);
}
rdy = 0;
}
};
}
Lesezeichen