Hallo! Ich habe da ein Problem: soweit ich weiß sollte das unten angeführte programm, sobald die Spannung von 0 auf 5 Volt wechselt, die Leds nacheinander am portC eischalten. Die Leds werden, wenn ich ein rechtecksignal anlege, aber immer nur bei der FALLENDEN flanke geschalten! WARUM? #include <io.h> #include <interrupt.h> #include <sig-avr.h> #include <string.h> unsigned char uiLed=0; void initialisierung(void); SIGNAL(SIG_INTERRUPT1) { sbi(PORTC,uiLed); uiLed++; } int main(void) { initialisierung(); while(1) { } } void initialisierung(void) { sei(); outp(0x00, DDRB); /* Port b als Eingang */ outp(0xff, DDRC); /* Port c als Ausgang */ cbi(DDRD, 3); // PD3 als Eingang sbi(PORTD, 3); // pullup on PD3 outp((1<<INT1), GIMSK); //INT1 enable outp((1<<ISC10), MCUCR); outp((1<<ISC11), MCUCR); // INT1 auf STEIGENDE flanke //einstellen }
outp((1<<ISC10), MCUCR); // Any logical change on INT1 generates an interrupt request. outp((1<<ISC11), MCUCR); // The falling edge of INT1 generates an interrupt request. Kommentare aus ATMEGA8 Datenblatt. Die 2. Ausgabeanweisung setzt bit ISC10 wieder auf 0! Besser mit MCUCR = 1<<ISC10 | 1<<ISC11; // setzt beide Bits. /Berndt
THNX, habe nicht beachtet, dass die zweite Anweisung die erste wieder auf 0 setzt!!!
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.