Forum: Mikrocontroller und Digitale Elektronik variablen Fehler


von Alexander M. (alexander_m738)


Lesenswert?

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
}

von MaWin (Gast)


Lesenswert?

Wie wäre es mit volatile ?

von Alexander M. (alexander_m738)


Lesenswert?

Danke, hätte nicht gedacht das es so ein extremer Anfängerfehler ist

von c-hater (Gast)


Lesenswert?

Alexander M. schrieb:

> Danke, hätte nicht gedacht das es so ein extremer Anfängerfehler ist

Warum nicht? Als Anfänger muss man damit rechnen, Anfängerfehler zu 
machen.

von Wolfgang (Gast)


Lesenswert?

Alexander M. schrieb:
> sei(); //Enable Global Interupt

Auch wenn es in dieser Anwendung egal ist, den Interrupt würde ich immer 
erst am Ende der Initialisierung frei geben.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.