Forum: Compiler & IDEs interrupt-problem


von Markus (Gast)


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;
}

von Uwe Nagel (Gast)


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

von Markus (Gast)


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

von Uwe Nagel (Gast)


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

von Markus (Gast)


Angehängte Dateien:

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

von Jörg Wunsch (Gast)


Lesenswert?

Port E beim ATmega128?  Du hast die FAQ gelesen?  Du hast JTAG in
irgendeiner Form abgeschaltet?  (Per Fusebit, oder per control
register.)

von Markus (Gast)


Lesenswert?

PORTE? ne...im aktuellen progi arbeite ich an PORTD mit INT0 an PORTD.0
da sollte JTAG an/aus nix mit zu tun haben oder?
gibt es sonst noch eine einstellung die probleme machen könnte?

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.