So der Atmega funktioniert dank Fred wieder. Meine Selbst-Test-Funktion für die LEDs und Taster funktioniert prima. Leider bekomme ich den 16bit Timer1 nicht in Gang
Bis jetzt sieht mein code so aus:
Das Einstellen der Uhrzeit über die Taster funktioniert einwandfrei. Leider Funktioniert der Timer nicht. Eigentlich wollte ich das jede sekunde ein Interrupt kommt und dann die Variablen entsprechend erhöht werden.Code:#include <avr/io.h> #include <avr/interrupt.h> #include <inttypes.h> #include <util/delay.h> //... #define B_OPT !(PIN_BUT & (1<<PIN_OPT)) #define B_STD !(PIN_BUT & (1<<PIN_STD)) #define B_MIN !(PIN_BUT & (1<<PIN_MIN)) #define B_SEK !(PIN_BUT & (1<<PIN_SEK)) //... //Zeit-Variablen unsigned char std; unsigned char min; unsigned char sek; //Timer-Interrupt ISR(TIMER1_COMPA_vect) { sek = sek+1; if( sek == 60 ) { sek = 0; min = min+1; if( min == 60 ) { min = 0; std = std+1; if( std == 24 ) { std = 0; } } } } //... void InitTimer() { TCCR1B |= (1<<CS12) | (1<<WGM12);//Prescaler = 256; CTC-Mode OCR1AH = 0x7A; // 8MHz/256 = 31250 <= wert nach 1 Sek. OCR1AL = 0x12; // " TIMSK |= (1<<OCIE1A); std = 0; min = 0; sek = 0; sei(); //Interrupts aktivieren } //... int main(void) { Init(); SelfTest(); InitTimer(); while(1) { //Uhrzeit anzeigen PORT_SEK = sek; PORT_MIN = min; PORT_STD = std; //Uhr stellen if( B_SEK ) { _delay_ms(100); sek = sek+1; if( sek == 60 ) sek = 0; } if( B_MIN ) { _delay_ms(100); min = min+1; if( min == 60 ) min = 0; } if( B_STD ) { _delay_ms(100); std = std+1; if( std == 24 ) std = 0; } } return 0; }
Was hab ich falsch gemacht beim Timer? Vielleicht habe ich ja das Datenblatt falsch verstanden...
Gruß Luz
Lesezeichen