Forum: Compiler & IDEs Interrupt mit CNY70 auslösen (ATMEGA8)


von Stephan Czupalla (Gast)


Lesenswert?

Hallo allerseits,

ich verzweifele gerade daran mit einem Reflexkoppler CNY70 einen
Interrupt auszulösen, bzw. diesen im Programm abzuarbeiten.

Der CNY70 hängt mit dem Collector an PORTD2/INT0 und mit dem Emitter
auf Masse.

folgende Codeschnippsel verwende ich:

SIGNAL(SIG_INTERRUPT0)
{
    PORTB = GRUEN; //setzt die Farbe der LED auf grün
    return;
}

void main()
{
   sei();
   GICR |=0xC0;
   PORTC=0x01; // schaltet eine Leuchtdiode ein
   for(;;)
   {
        PORTB = ROT; // setzt die Farbe der LED auf rot
   }
}

Wenn also der CNY70 sein Signal bekommt, dann soll er die LED welche
standardmässig rot leuchtet auf grün umschalten.

Mein Problem ist, das der Interrupt anscheinend ständig ausgelösst
wird, und somit die LED immer grün ist.
Wenn ich die GICR zeile auskommentiere, bleibt die LED wie erwartet
ROT

bin auf dem Gebiet noch sehr grün hinter den Ohren und konnte hierzu
keine weiteren Informationen finden.

Vielen Dank schonmal
Gruß Stephan

von Oma-mit-Dackel (Gast)


Lesenswert?

Hi,

setze erst mal PORTD Pin2 auf Highpegel(der interne Pull-Up-Widerstand)
oder Löte einen externen Pull-Up Widerstand an den Eingang(von 5V zu
PORTD Pin2). Erst dann hat der Eingang definierten HIGH-Pegel. Der
Transistor des von dir erwähnten Optokoppler oder Sensor hat dann die
Betriebsspannung anzuliegen. Wenn jetzt der Transistor schaltet =
leitend wird zieht er den Eingang auf Masse = LOW-Pegel und je nach
gewählter Taktflanke im Register
MCUCR WICHTIG!!! des Atmel wird die Interruptroutine ausgelöst.

Hinweis am Rande:
Du wirst von dem Rot-Grün-Wechsel in deinen Programm nicht viel sehen,
da das Programm nach der Interruptroutine sofort wieder in die
for(;;)Schleife des Hauptprogramm geht und auf Rot wechselt. Die Farbe
Grün ist nur für ein paar Takte geschalten ... das siehst du nicht!

Viel Erfolg ....

von pebisoft (Gast)


Lesenswert?

am adc-port bekommst du bessere ergebnisse zum auswerten.
mfg pebisoft

von czuppi papa (Gast)


Lesenswert?

wie ist denn die sache nun ausgegangen liber stephan ?

von Stephan Czupalla (Gast)


Lesenswert?

Vielen Dank nochmal für die schnelle Antwort, es wurde lediglich im
Programm der Port nicht auf High gesetzt (bzw. wieder an andererstelle
falsch zurückgesetzt)
Man bekommt übrigens etwas mit von dem Wechseln der Farbe, die LED
leuchtet quasi gleichzeitig grün und rot.

Gruß Stephan

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.