Mhhh.... vielen Dank für deine Hilfe. Supi, dass sich so schnell jemand gemeldet hat! Leider bekomm ich's trotzdem noch nicht hin...
Klar... ich Ochse hab irgendwie die Interruptroutine in der main-Schleife gehabt... warum auch immer *Kopp auf Tisch hau*. Aber das war nicht der alleinige Fehler... Leider funktionierte auch dein Programm nicht besser als meines - LED4 blinkt, die 0 rührt sich nicht 
Habe da gleich mal noch ein paar Fragen: Warum enthält dein Programm in der Main keine Return-Anweisung? Sicher, die wird nie erreicht... aber bei mir meckert der Compiler, wenn ich keine habe.
Warum hast du in meiner Interruptroutine die For-Schleife auskommentiert?
Ach ja... das Setzen dieser Register (MCUCR und GICR) habe ich mir nach Datenblättern und Tuts frei zusammengeschustert - stimmt das überhaupt, was ich da geschrieben habe?
Zum Auslösen des Interrupts verbinde ich immer +5V kurzzeitig mit dem Pin D.2... ist das überhaupt so möglich, oder kann ich damit gar keinen Interrupt auslösen?
So... zu guter letzt noch mal die aktuelle Version meines Quelltextes. Da nach Programmstart die LED0 immer mit rumfunzelt (Ausgang is eben high) will ich sie per Interrupt nur noch auf Low schalten -> Programm verkürzt sich weiter. Könnt ihr bitte noch mal schauen, was ich falsch mache?
Code:
#include <avr/delay.h>
#include <avr/interrupt.h>
//Interruptroutine, die ausgelöst werden soll - aber nicht wird
ISR(INT0_vect)
{
PORTC &= ~(1<<0);
}
int main(void)
{
/*###Initialisierungsphase###*/
//Variablen
uint8_t counter;
//Pins bzw. Ports als Ein-/Ausgänge konfigurieren
DDRC |= 0x11; //10001000 -> PORTC.4 ist blinkende LED im Hauptprogramm, PORTC.0 ist Anzeige des Interrupts
DDRD |= 0x00; //00000000 -> PORTD.2 ist Interrupt0 (Der ausgelöst werden soll)
//Interrupts initialisieren - ist der Kram hier richtig?
MCUCR = ~(1<<ISC01);
MCUCR = (1<<ISC00);
GICR = (1<<INT0);
sei();
while(1)
{
PORTC |= (1<<4);
//wait 16*65536
counter = 0;
while(counter < 16)
{
counter++;
_delay_loop_2(65535);
}
PORTC &= ~(1<<4);
//wait 16*65536
counter = 0;
while(counter < 16)
{
counter++;
_delay_loop_2(65535);
}
}
return 1;
}
Vielen Dank für deine Hilfe und alle, die sich hoffentlich noch melden!!
Viele Grüße
Corone
Lesezeichen