Forum: Compiler & IDEs INT2 am ATmega32


von Sascha (Gast)


Lesenswert?

Hallo,
ich versuche gerade den INT2 des Atmega32 zu aktivieren...
leider funktioniert es nicht .
Kann mir jemand sagen ob ich etwas vergessen habe?

void init_int2(void)
{

 MCUCR |= (1 << ISC2);
 GICR  |= (1 << INT2);  //INT2 enable
}




ISR(INT2_vect)//ISR Routine
{

  uart_Send('x');
}


int main(void)
{

DDRB &= ~(1<< PB2 );
PORTB |= (1<<PB2);

uart_init();
init_int2();
sei();



while(1)
{}
}
Mfg
Sascha

von Kai G. (runtimeterror)


Lesenswert?

Was funktioniert nicht?
Woran siehst du, dass es nicht funktioniert?
Wie sieht die externe Beschaltung aus?
Was erwartest du, was passieren soll, wenn es funktionieren würde?
Funktioniert UART prinzipiell?
Pullups/-downs korrekt?
Ans Entprellen von Tastern gedacht?

von Sascha (Gast)


Lesenswert?

Hi,
Uart läuft..
Int2 ist mit dem Interrupt Ausgang des eDIP Displays verbunden...wenn 
daten vorliegen geht der Ausgang des Displays auf 0.
Bei einer if Abfrage des Pins funktioniert alles.

von Andreas K. (a-k)


Lesenswert?

Wie herum hättest du ihne denn gern? Bei gesetzten MCUCR regiert der auf 
die steigende Flanke. Pegelgetriggert geht bei INT2 nicht.

von Johannes M. (johnny-m)


Lesenswert?

> MCUCR |= (1 << ISC2);
Das ISC2 steht im MCUCSR und nicht im MCUCR...

von Fred S. (Gast)


Lesenswert?

Hi Sascha,

schau mal auf S.67 des Datenblatts: ISC2 gehört zu MCUCSR, nicht zu 
MCUCR!

Viele Grüße

Fred

von Sascha (Gast)


Lesenswert?

Stimmt danke..zu blöd zum lesen ;-)
Funktioniert nur leider immer noch nicht..

von Fred S. (Gast)


Lesenswert?

Hi Sascha,

> Funktioniert nur leider immer noch nicht..

Du willst den Interrupt Deiner Beschreibung nach doch mit der fallenden 
Flanke auslösen - oder ? Wenn Du das ISC2-Bit setzt, aktivierst Du aber 
den Int bei steigender Flanke!

Gruß

Fred

von Sascha (Gast)


Lesenswert?

ja das ist richtíg..
hab ich aber auch schon versucht.
Funktioniert nicht.

GICR  &= ~ (1 << INT2);
könnte ich mir aber auch schenken, oder?
Da es nach dem reset  auf Null gesetzt ist.

von Johannes M. (johnny-m)


Lesenswert?

Sascha wrote:
> GICR  &= ~ (1 << INT2);
Damit deaktivierst Du den Interrupt komplett!

von Sascha (Gast)


Lesenswert?

Danke...ich hatte die Register vertauscht ;-)
Jetzt läuft es..

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.