Ich habe ein Komplexeres Programm geschrieben, habe aber das Problem auf
diesen Einfachen Fall reduzieren können.
Das ist der Code von einen Attiny45 und soll einfach nach Überlaufen des
Timers0 einen Interrupt auslößen welcher die Variable i auf 1 setst.
Das wiederum sollte in der main schleife dazu führen das der Ausgang
(PINB4)
auf HIGH geschaltet wird.
Das ist nicht der Fall und deshalb würde ich gerne wissen was ich falsch
gemacht habe, bzw. wie es richtig geht.
---
Ich habe den Ausgang geprüft er funtioniert.
Wenn ich den PORTB Befehl in den Interrupt schreibe geht der Ausgang an.
1 | #define F_CPU 1000000
|
2 | #include <avr/io.h>
|
3 | #include <avr/interrupt.h>
|
4 |
|
5 | uint8_t i = 0;
|
6 |
|
7 | int main(void)
|
8 | {
|
9 | sei(); //Enable Global Interupt
|
10 | TCCR0B |= (1<<CS00); //Timer set Prescaler 1
|
11 | TIMSK |= (1<<TOIE0); //Enable Overflow Interrupt
|
12 |
|
13 | DDRB |= (1<<PINB4); //Output PINB4
|
14 |
|
15 | while (1)
|
16 | {
|
17 | if(i == 1)
|
18 | {
|
19 | PORTB |= (1<<PINB4); //Set PINB4 High
|
20 | }
|
21 | }
|
22 | }
|
23 |
|
24 | ISR(TIMER0_OVF_vect)
|
25 | {
|
26 | i = 1;
|
27 | }
|