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 befriedigendDie Bedingung in der IF schleife führt er nicht aus....
Rahmenbedingungen: Atmega16 16 MHz
am PortC sind LEDs angeschlossen
Danke schon mal im vorraus für die Mühe........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(); } }
Gruß Anna[/code]







Zitieren

Lesezeichen