mikrocontroller.net

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


Autor: Stephan Czupalla (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Oma-mit-Dackel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ....

Autor: pebisoft (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
am adc-port bekommst du bessere ergebnisse zum auswerten.
mfg pebisoft

Autor: czuppi papa (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie ist denn die sache nun ausgegangen liber stephan ?

Autor: Stephan Czupalla (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.