interrupt-problem

Gast #100710
Lesenswert?

hi,
sollte folgender code nicht dafür sorgen, das
bei einer pegeländerung auf PIND0 (ist laut mega128 der pin für
int 0) der code des interrupthandlers ausgeführt wird
und "INTERRUPT :)" auf dem display erscheint?
tuts nur leider nicht. ich habs auch mit anderen externen
interrupts probiert...das gleiche. ich kann an den entsprechenden
pin anlegen was ich will, da tut sich nix...
wo liegt der fehler ?

#include <avr/io.h>
#include <stdio.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
#include "lcd/lcd.h"

INTERRUPT(SIG_INTERRUPT0){
  lcd_clear();
  sleepms(1);
  lcd_send_str("INTERRUPT :)");
  sleepms(2000);
}




int main(){
  byte i = 0;

  DDRA = 0xff;
  PORTA = 0;
  DDRC = 0x00;
  PORTC = 0xff;
  DDRE = 0x00;
  PORTE = 0xff;
  sei();

  lcd_init();

  sleepms(1);
  lcd_clear();

  lcd_send_str("Hallo Welt");

        lcd_send_cmd(0xc0);
        sleep2(20);
  while(1){}


  return 0;
}
Gast #100711
Lesenswert?

Du solltest noch den Port D, Leitung 0 auf ingang schalten und den
entsprechenden Interrupt enablen.
Also zB.

DDRD=0;     // auf Eingang (ist aber default)
MCUCR|=3;   // Interrupt on rising edge
GICR|=0x40; // Interrupt von INT0 enablen
Gast #100712
Lesenswert?

ja okay das hatte ich jetzt in dem code-beispiel nicht
aber eigentlich deshalb weil das ursprüngl mal
SIG_INTERRUPT4 war un der liegt auf porte.
was ist eigentlich GICR ?
mein WinAvr kennt das nicht

gruß markus
Gast #100713
Lesenswert?

Sorry, da hab ich nicht aufgepasst, ich habe im Datenblatt vom mega8
nachgeschaut, aber Du hast ja einem mega128...

Noch ein Versuch:

DDRD=0;      // auf Eingang (ist aber default)
EICRA|=3;    // Interrupt on rising edge
EIMSK|=0x40; // Interrupt von INT0
Gast #100714
Lesenswert?

hm also ntweder ich bin zu blöd oder man muss noch was an den
fusebits ändern.

kannst du mir vielleicht mal ein komplettes codebsp posten?
das wär echt super. im anhang ist mein aktuelles prog
das leider nix macht.

gruß markus
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren