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:
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;
}
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.
Was hab ich falsch gemacht beim Timer? Vielleicht habe ich ja das Datenblatt falsch verstanden...
Gruß Luz
Lesezeichen