Forum: Compiler & IDEs Problem mit INT1


von Wolfgang Gigerl (Gast)


Lesenswert?

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
}

von Berndt Brandes (Gast)


Lesenswert?

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

von Wolfgang Gigerl (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.