@askezo: Herzlichen Dank für die Erklärung. Das hat mein Problem direkt auf den Kopf getroffen.
@021aet04: Welches Kapitel im DB meinst du? Was meinst du mit DB? Einfach bei rn-wissen.de den Artikel Timer/Counter (Avr)
Ich hab mir nur die Artikel bei mikrocontroller.net angeschaut und wusste dann nicht mehr welche Bit(s) in welchen Registern ich setzen muss damit es funktioniert. War mir etwas zu viel Input - ahhhh, Overflow!!!
Hab den Code von askazo noch ein wenig umgeschrieben. Für mich etwas übersichtlicher, weil ich die Bits konkret benenne und nicht hiner 0x0b verstecke (ist nicht böse gemeint, bin nur nicht so schnell im Umrechnen auf Binär). Sind das Codes gleicher Wirkung?
Code:
#include <avr/io.h>
#include <stdint.h>
#include <avr/interrupt.h>
#define LEDon PORTC &= ~(1<<5);
#define LEDoff PORTC |= (1<<5);
#define LEDchange PORTC ^= (1<<5);
void initialize();
int main(void)
{
initialize();
while(1)
{
}
return 0;
}
void initialize()
{
DDRC = (1<<5); //Ausgang an Port C, Pin 5
DDRD = 0x00; //Eingang an Port D
PORTD = (1<<2); //Port (PullUp) für Port D, Pin 2
TCCR1A = 0x00; //Timer steuert nicht den Pin an und benutzt kein PWM
TCCR1B = (1<<CS11)|(1<<CS10)|(1<<CTC1); //Prescaler mit CPU/64 und CTC (max-Wert für OCR=65.536)
TIMSK |= (1<<OCIE1A); //Vergleichsregister aktivieren
OCIE1A = 15625; //Vergleichswert für CTC => (Prescaler*OCR)/F_CPU=1s
sei();
LEDoff;
}
ISR(TIMER0_COMPA_vect)
{
LEDchange;
}
[Müsste es nicht ISR(TIMER1_COMPA-vect){} heißen, weil ich benutze ja Timer1]
Und zum Abschluss - herzlichen Dank für eure Antworten !!
Lesezeichen