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; } }; }







Zitieren

Lesezeichen