so nun habe ich den code mit verschiedenen Empfängern erfolglos getestet.
Was ist falsch?
Habe schon mit den Einstellungen am Sender gespielt hab verschiedene Prescaler / Integer ausprobiert. Was kann ich noch machen?Code:#define F_CPU 1200000UL //Taktfrequenz CPU 1,2MHz #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #include <stdio.h> //LED-Ports #define LED1 1 #define LED2 2 #define LED3 3 #define LED4 4 uint16_t C; //Integer einfügen und Variable für Zählerstand festlegen int main(void) { DDRB = 0b00011110; //Eingänge und Ausgänge definieren PORTB = 0b00000000; //Pullups setzen //Einstellungen für PCINT MCUCR = (1<<ISC00); //Jede logische Änderung an INT0 erzeugt eine Interrupt-Anforderung GIMSK = (1<<PCIE); //PCINT aktivieren PCMSK = (1<<PCINT0); //PCINT0 Eingang wird genutzt //Einstellungen Timer / PWM TCCR0A = ((1<<WGM00) | (1<<WGM01)); //FastPWM (Top=0xFF Update of OCRx at = TOP TOV Flag Set on = MAX) TCCR0B = (1<<CS01); //Prescaler clk/8 sei(); //globale Interrupts aktivieren while(1) { if (C < 80) { PORTB &= ~((1<<LED1) | (1<<LED2) | (1<<LED3) | (1<<LED4)); sei(); } else if((C > 80) & (C < 190)) { PORTB &= ~((1<<LED2) | (1<<LED4)); PORTB |= (1<<LED1); PORTB &= ~(1<<LED3); _delay_ms(500); PORTB |= (1<<LED3); PORTB &= ~(1<<LED1); sei(); _delay_ms(500); } else if (C > 190) { PORTB |= ((1<<LED2) | (1<<LED4)); PORTB |= (1<<LED1); PORTB &= ~(1<<LED3); _delay_ms(500); PORTB |= (1<<LED3); PORTB &= ~(1<<LED1); sei(); _delay_ms(500); } } } ISR(PCINT0_vect) { if(PINB & (1<<PB0)) //erkennung steigender Flanke { TCNT0 = 0; } else //ansonsten { C = TCNT0; //Zählerstand auslesen und in variable schreiben cli(); } }
Gruß
Lichti01







Zitieren


Lesezeichen