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.
Vielen Dank für die schnelle Hilfe. Jetzt funktionierts!
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 | }
|
Nein aber ich wollte mich langsam an die Materie herantasten. Deshalb diese Test Routine. MfG
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.