Forum: Mikrocontroller und Digitale Elektronik INT0 zieht pin auf High


von Tobi (Gast)


Lesenswert?

Hallöchen zusammen,

ich möchte bei einem AtMega328 einen externen Interrupt bei steigender 
Flanke auslösen.
Das Signal kommt von einem Operationsverstärker. Dessen Ausgang führt 
direkt auf den Interrupt Pin (PD2).

Mein Problem ist nun, dass wenn die Flanke kam der Pin PD2 nicht mehr 
direkt auf LOW zurückfällt, bzw. erst nach einiger Zeit.
Wenn ich mit dem Oszi messe, sieht man das wenn ich die Leitung von uC 
trenne, dass Signal sich verhält wie es soll, nur am uC angeschlossen 
eben nicht.

Hier die Initialisierung:
void EnableExternInterrupt0(){
  EIMSK |= (1<<INT0);  // External Interrupt Request 0 enable
  EICRA |= (1<<ISC01) | (1<<ISC00);// The rising edge of INT0 generates 
an interrupt request.
}

Hat jemand ne Idee?
Gruß Tobi

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Tobi schrieb:
> Hat jemand ne Idee?

Ja. Poste mal bitte wenigstens eine Schaltplan Auszug des Opamp Teils 
und den Teil des Programmes, in dem du die Ports initialisierst. 
Übersteuerte Opamps kleben gerne mal an den Betriebsspannungsgrenzen.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Das ist ja klar. Das ist ein CMOS IC. Dessen Eingänge wirken wie 
Kondensatoren. Wenn du da mal kurz Spannung drauf legst und dann die 
Leitung trennst, dann bliebt der Kondensator noch lange geladen. Und 
irgendwann wirst du eine zufälligen Pegel haben, weil

a) Die Spannung im illegalen Bereich zwischen 1V und 3V liegt, oder
b) Der Eingang Radiowellen empfängt, denn er ist sehr hochohmig.

Beschäftige dich mal mit pull-up und pull-down Widerständen, damit 
kannst du dein Problem vermutlich lösen.

von Tobi (Gast)


Angehängte Dateien:

Lesenswert?

Ah, das klingt schon mal einleuchtend.

Kompletten Schaltplan gibts nicht nicht. Existiert gerade nur auf dem 
Steckbrett aber so wie auf dem Bild ist das ganze verschaltet. OP ist 
mit 5V und GND verbunden.

Initialisierung ist wie im ersten Post und zusätzlich noch:
DDRD = 0;
PORTD &= ~(1<<PD2); // Pull Up an PD2 = INT0 aktivieren

Vielen Dank schonmal

von Tobi (Gast)


Lesenswert?

Stefan U. schrieb:
> Das ist ja klar. Das ist ein CMOS IC. Dessen Eingänge wirken wie
> Kondensatoren. Wenn du da mal kurz Spannung drauf legst und dann die
> Leitung trennst, dann bliebt der Kondensator noch lange geladen. Und
> irgendwann wirst du eine zufälligen Pegel haben, weil

Sowas habe ich auch schon gedacht und einen Pull Down Widerstand (10k) 
an die Leitung gehängt. Hat aber nichts geändert.

Oder verstehe ich was falsch?

von Achim S. (Gast)


Lesenswert?

LM358 und µC werden beide aus den selben 5V-Supply versorgt?

Tobi schrieb:
> Mein Problem ist nun, dass wenn die Flanke kam der Pin PD2 nicht mehr
> direkt auf LOW zurückfällt, bzw. erst nach einiger Zeit.
> Wenn ich mit dem Oszi messe, sieht man das wenn ich die Leitung von uC
> trenne, dass Signal sich verhält wie es soll, nur am uC angeschlossen
> eben nicht.

kannst du die Oszi-Messungen mal zeigen?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Tobi schrieb:
> PORTD &= ~(1<<PD2); // Pull Up an PD2 = INT0 aktivieren

Die Programmzeile macht allerdings das genaue Gegenteil des Kommentars - 
sie schaltet den Pullup aus.
Der Opamp ist als Komparator keine gute Wahl. Er ist, wie ich oben schon 
vermutete, völlig übersteuert (du hast ihn ja auf theoretisch unendliche 
Verstärkung geschaltet) und deswegen braucht er recht viel 
Erholungszeit. Wenn du ihn durch einen LM393 (der ist pinkompatibel) 
Komparator ersetzt, dann sollte das recht gut klappen. Der LM393 braucht 
allerdings zwingend einen Pullup, den du entweder im AVR aktivieren 
solltest oder besser, mit einem externen Widerstand machst.

von Tobi (Gast)


Lesenswert?

Oh man...
Matthias. Danke!
Das wars :) Hatte mir sogar extra nen 393er besorgt. Dachte aber, dass 
dieser kaputt wäre (Pullup Widerstand?? Datenblatt?????) und hab deshalb 
den Op benutzt.

Naja zumindest was über OPs gelernt ;)

Vielen Dank an alle!

Grüße

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.