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.