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.
Sebastian Gerner schrieb: > int8_t power=0; Mach daraus mal...
1 | |
Gast
#3578696
Sebastian Gerner schrieb: > (ja sie ist global angelegt) Aber nicht volatile
Vielen Dank für die schnelle Hilfe. Jetzt funktionierts!
Gast
#3578719
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 | |
2 | |
3 | |
4 | |
Nein aber ich wollte mich langsam an die Materie herantasten. Deshalb diese Test Routine. MfG
Gast
#3578773
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 ?
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.