Forum: Mikrocontroller und Digitale Elektronik einfaches Programm mit if funktioniert nicht


von Sebastian G. (Firma: HTL-Braunau) (sebo_htl)


Lesenswert?

Hallo liebe Forumsmitglieder,

ich habe ein kleines Problem mit einem eigentlich sehr einfachen 
Programm in C. Ich verwende einen ATtiny13 für eine kleine 
Steuerungsaufgabe.

Am Pin INT0 kommt ein Digitales Signal von einer anderen Schaltung. In 
der ISR wird eine variable getoggelt. Das habe ich getestet und 
funktioniert auch. Wenn ich aber nun im Hauptprogramm die Variable (ja 
sie ist global angelegt) in einer if Abfrage behandle tut das Programm 
keinen Rührer.

Hier der Code:

#include <avr/io.h>
#include <avr/interrupt.h>

int8_t power=0;

int main(void)
{
  DDRB=0b11111011;
  MCUCR=(1<<ISC01)|(1<<ISC00);  //trigger rising edge
  GIMSK|=(1<<INT0);
  sei();
  PORTB=0;

  while(1)
    {
    if(power)
    {
      PORTB=power;
    }
  }
}

ISR(INT0_vect)
{
  power^=1;
}

Wenn ich die if weglasse und in main nur PORTB=power; schreibe 
funktioniert alles super.
Bin im Bereich Interrupts und der Gleichen noch recht neu und würde mich 
über eure Hilfe freuen.

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Sebastian Gerner schrieb:
> int8_t power=0;

Mach daraus mal...
1
volatile int8_t power=0;

von ich (Gast)


Lesenswert?

Sebastian Gerner schrieb:
> (ja sie ist global angelegt)

Aber nicht volatile

von Sebastian G. (Firma: HTL-Braunau) (sebo_htl)


Lesenswert?

Vielen Dank für die schnelle Hilfe. Jetzt funktionierts!

von ge-nka (Gast)


Lesenswert?

Sebastian Gerner schrieb:
> Vielen Dank für die schnelle Hilfe. Jetzt funktionierts!

Echt? War dein Programm so gedacht, dass PORTB auf 0b00000001 einmalig 
geht und so bis neustart bleibt?
1
if(power) 
2
    {
3
      PORTB=power;// wird nur ausgeführt wenn "power">0 ist wenn "power"=0 wirds übersprungen
4
    }

von Sebastian G. (Firma: HTL-Braunau) (sebo_htl)


Lesenswert?

Nein aber ich wollte mich langsam an die Materie herantasten. Deshalb 
diese Test Routine.

MfG

von kopfkratzer (Gast)


Lesenswert?

Sebastian Gerner schrieb:
> Nein aber ich wollte mich langsam an die Materie herantasten.
> Deshalb
> diese Test Routine.
>
> MfG

OK,
dann tue Dir den Gefallen und arbeite das Tutorial hier durch ;-)
Ich habe auch irgendwie in meiner Glaskugel so einen Nebel der etwas von 
Tastenentprellung u.ä. andeutet :-P
Im übrigen sind ADC und Timer sicher besser geeignet sich mit IRQs zu 
beschäftigen.
So eine einfache Eieruhr mit Poti zum Zeit einstellen und einem Timer 
der nach der Einstellung einen Summer anschaltet dürfte doch ein schönes 
sinnvolles Einstiegsprojekt sein ?

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.