Mist wo ist der Fehler?
der Timer Interrupt kommt nicht
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <stdint.h>
#include <Stdio.h>
#include "BinaryNr.h"
#define F_CPU 1000000 // Interner Takt 1MHz
#define Prescaler 8; // Timer 1 Vorteiler
#define startwert 65537-625; // Zähler Startwert, 5ms
#define u8 unsigned char
#define u16 unsigned int
/* Variablen */
u8 periode=0;
/* INIT */
void port_init(void){ // initialize ports
DDRC = B00110000; // PORTC 4 und 5 als Ausgang
}
void timer_start(int zeit){
TIMSK |= (1 << TOIE1); // Timer 1 Overflow Interrupt enable
TCNT1 = 65537-zeit; // 625 = 5ms;
}
//Analog-Comparator Interrupt Routine
SIGNAL (ANA_COMP_vect){
cli();
periode++;
if (periode==1){
PORTC |= (1 << 5); // einschalten
timer_start(625); // 5ms warten 1/2 Halbwellen (Triggerimpuls Triac)
ACSR=B00001011; // umschalten auf steigende Flanke
}
if (periode==2){ //
ACSR=B00001010; // umschalten auf fallende Flanke
}
if (periode==3){ //
ACSR=B00001011; // umschalten auf steigende Flanke
}
if (periode==4){ //
PORTC |= (1 << 5); // einschalten
timer_start(625); // 5ms warten 1/2 Halbwellen (Triggerimpuls Triac)
ACSR=B00001010; // umschalten auf fallende Flanke
}
if (periode==3){ //
ACSR=B00001011; // umschalten auf steigende Flanke
}
if (periode==2){ //
ACSR=B00001010; // umschalten auf fallende Flanke
periode=0;
}
sei(); // enable interrupts
}
//Timer Interrupt
SIGNAL (TIMER1_OVF_vect){ // Timer1 overflow nach 5ms
PORTC &= ~(1 << 5); // abschalten
}
/*********************/
int main(){
port_init(); // Ports initialisieren
ACSR=B00001010; // analog-Komparator fallende Flanke
periode = 0;
sei(); // enable interrupts
for(;;){ // tue nix Schleife
}
}
Lesezeichen