Hallo ihr beiden,
also ich hab noch ein bißchen was geändert... (wie Izeit_1 nicht in der while schleife auf 0 setzen
) Ich habe auch noch ne else schleife dazugefügt.
Das komische ist er geht anscheinend nur in die Else-Schleife, da die LED3 (PC2) immer wieder toggelt. Also funktioniert es irgendwie schon aber nicht wirklich befriedigend
Die Bedingung in der IF schleife führt er nicht aus....
Rahmenbedingungen: Atmega16 16 MHz
am PortC sind LEDs angeschlossen
Code:
#include <stdlib.h>
#include <avr/pgmspace.h>
#include <stdio.h>
#include <util/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>
uint16_t Izeit_1=0;
void Timer0_init(void) // Init Tmr/Cntr 0, 8-Bit auf 20 kHz = 50 µs
{
TCCR0 |= (1<<WGM01) | (1<<CS01); // Timer im CTC-Mode, Top=OCR2A Prescaler 1/8 / Clock <- CPU
OCR0 = 49; // Preset 48 für 50µs bei 16Mhz
TIMSK |= (1<<OCIE0); // Tmr/Cntr CompareA interrupt enabled
}
/* Routine zählt hoch im Takt 20 kHz = 50 µs. */
ISR(TIMER0_COMP_vect) // Vektor 7
{
if (Izeit_1 <= 60000) //Timer bis 60 000 - 3 sec Datenerfassung möglich
Izeit_1 ++; // war: alle drei Sekunden wird 60000 erreicht
// und Izeit_1 bleibt in der uint16-Grenze
else
{
Izeit_1 = 0; // ansonsten: Rückstellen auf Null
PORTC ^= (1<<PC5); // Zur Anzeige gLED am PC5/SCL toggeln
}
}
int main(void)
{
Izeit_1=0;
Timer0_init();
DDRC |= 0xff;
PORTC=0x00;
while(1)
{
cli();
sei();
if (Izeit_1>2)
{
PORTC ^= (1<<PC0);
}
else
{
PORTC ^= (1<<PC2);
}
cli();
}
}
Danke schon mal im vorraus für die Mühe........
Gruß Anna[/code]
Lesezeichen