externer Interrupt zählt Flanke doppelt

Gast #4227118
Lesenswert?

Hallo

ich nutze den ext. Interrupt Eingang am ATmega328 um eine Flanke nach 
GND zu erkennen, und eine Variable hochzuzählen. Ich sehe aber, dass bei 
(fast) jedem Impuls immer zweimal gezählt wird.
Die INT0 Konfig steht auf fallende Flanke:
EICRA |=  ( 1 << ISC01 );
EICRA &= ~( 1 << ISC00 );   // falling edge of INT0
EIMSK |= ( 1 << INT0 );     // INT0 enable

Die Quelle des Impulses ist eigentlich zuverlässig (kein Prellen, laut 
Osz.). Impuls-Abklingzeit ist ca. 100µs - aber das dürfte ja egal sein.

Die Interrupt Routine ist maximal kurz:

ISR( INT0_vect )
{
  counts++;
}




Wie kann man das Verhalten erklären?
Angehängte Dateien:
Gast #4227149
Lesenswert?

Maik schrieb:
> um eine Flanke nach GND zu erkennen,

Wie dein schlaues Tektronix zeigt, hast du keine Flanke
nach GND sondern ein hundsmiserables Signal das etwa von
GND nach -0.5V geht. Es sei denn du kannst nicht messen
und hast die DC Kopplung ausgeschaltet. Dann kann es auch
noch sein dass dein Takstkopf auf 10:1 steht und dies
sich nicht korrekt in der Einstellung des Teks niederschlägt.

Damit (ein Signal von 0 nach -0.5V) einen AVR Eingang
zuverässig zu triggern kann eigentlich nicht funktionieren.
Gast #4227169
Lesenswert?

zugegeben, ja das ist nicht wirklich das Signal am INI Pin, sondern 
etwas vorher abgegriffen. Ein 4n7000 ist noch dazwischen. Ich werde 
nochmals korrekt messen.
Trotzdem; was die Abklingdauer mit der Flankenerkennung zu tun hat, ist 
mir schleierhaft.
Moderator (Firma: Titel) Persönliche Seite #4227172
Lesenswert?

Maik schrieb:
> Trotzdem; was die Abklingdauer mit der Flankenerkennung zu tun hat, ist
> mir schleierhaft.
Wenn die Spannung da so langsam und zudem evtl. nicht ganz so 
kontinuierlich ansteigt und noch einen kleinen Zappler drin hat...

Beim gezeigten Spannungsverlauf ist damit das Signal lange Zeit in einem 
undefiniertem Spannungsbereich.
Gast #4227177
Lesenswert?

Maik schrieb:
> zugegeben, ja das ist nicht wirklich das Signal am INI Pin, sondern
> etwas vorher abgegriffen. Ein 4n7000 ist noch dazwischen. Ich werde
> nochmals korrekt messen.

Gute Idee. Es bringt nichts, hier irgendetwas zu zeigen, dass mit 
dem Signal nur entfernt etwas zu tun hat.
Gast #4227179
Lesenswert?

Lothar M. schrieb:
>> Trotzdem; was die Abklingdauer mit der Flankenerkennung zu tun hat, ist
>> mir schleierhaft.
> Wenn die Spannung da so langsam und zudem evtl. nicht ganz so
> kontinuierlich ansteigt und noch einen kleinen Zappler drin hat...
>
> Beim gezeigten Spannungsverlauf ist damit das Signal lange Zeit in einem
> undefiniertem Spannungsbereich.

sollte da nicht ein gewissen Schmitt-Trigger verhalten vorhanden sein? 
Jedes Signal geht doch zwangsläufig durch den undefinierten Bereich. 
Kann mir nicht so recht vorstellen, das das wirklich ein Problem ist.
Gast #4227192
Lesenswert?

Arduinoquäler schrieb:
> Maik schrieb:
>> zugegeben, ja das ist nicht wirklich das Signal am INI Pin, sondern
>> etwas vorher abgegriffen. Ein 4n7000 ist noch dazwischen. Ich werde
>> nochmals korrekt messen
>
> Wie wärs mal mit einem kleinen Schaltplänchen damit "man" klar sieht?

soll natürlich "2n7000" heißen..
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #4227194
Lesenswert?

Peter II schrieb:
> sollte da nicht ein gewissen Schmitt-Trigger verhalten vorhanden sein?
Was sagt das Datenblatt?

> Jedes Signal geht doch zwangsläufig durch den undefinierten Bereich.
Geh einfach über die Autobahn. Einmal ganz schnell und einmal ganz 
langsam.

> Kann mir nicht so recht vorstellen, das das wirklich ein Problem ist.
Worauf stützt sich diese Vorstellung?
Gast #4227201
Lesenswert?

Lothar M. schrieb:
> Peter II schrieb:
>> sollte da nicht ein gewissen Schmitt-Trigger verhalten vorhanden sein?
> Was sagt das Datenblatt?

gute frage, wonach müsste man da suchen?

> > Jedes Signal geht doch zwangsläufig durch den undefinierten Bereich.
> Geh einfach über die Autobahn. Einmal ganz schnell und einmal ganz
> langsam.
langsam und schnell ist relativ. In Zeiten von Ghz ist jedes Signal 
irgendwie langsam

> > Kann mir nicht so recht vorstellen, das das wirklich ein Problem ist.
> Worauf stützt sich diese Vorstellung?
nur meine privaten praktischen Erfahrungen mit so einer 
Flankenerkennung. Einfach ein Poti dran und rumgedreht - da gab es keine 
doppelte Auslösung. Und da war ich definitiv langsam. Klar kann Zufall 
gewesen sein.
Gast #4227208
Lesenswert?

Einen internen Pull-Up über 10 KOhm auf Masse ziehen?

Schräger gehts nicht, oder?

Was wundert dich da eigentlich? Und wo ist der Kondensator?
Oder war das die falsche Schaltung? Mist ist sie auf alle Fälle.
Gast #4227212
Lesenswert?

Bist Du Dir sicher, dass die Schaltung OK ist?

Ein FET, mitten in einem Spannungsteiler, ist es nach meiner Meinung 
nicht.

... aber irren ist Menschlich, sprach der Igel und stieg von der Bürste.
Gast #4227215
Lesenswert?

Maik schrieb:
> soll natürlich "2n7000" heißen..

Du hast einen JFET gezeichnet, beim 2N7000 handelt es sich
aber offensichtlich um einen MOSFET.

Bei deiner Fehlerproblematik kommt es auch drauf an was der
MOSFET an seinem Gate sieht. Da hast du uns aber freundlicher-
weise unterschlagen .....

Also bei diesem Chaos soll mann dann herausfinden was los ist ....
Gast #4227216
Lesenswert?

Arduinoquäler schrieb:
> Bei deiner Fehlerproblematik kommt es auch drauf an was der
> MOSFET an seinem Gate sieht. Da hast du uns aber freundlicher-
> weise unterschlagen .....

nein, nur das hat er uns gezeigt

> zugegeben, ja das ist nicht wirklich das Signal am INI Pin, sondern
> etwas vorher abgegriffen.
Gast #4227220
Lesenswert?

ja er hat recht, die Info fehlt. Es liegen 9V am Gate an wenn der Impuls 
zuschlägt.

Der 10k am Source ist sicherlich nicht nach Lehrbuch. Ich wollte nochmal 
Strom sparen ;-)
-> komischerweise funktioniert das ganze ohne diesen R nicht - es kommt 
dann gar kein Impuls zum µC durch.

-> Welcher C fehlt wo?
Gast #4227222
Lesenswert?

Maik schrieb:
> Der 10k am Source ist sicherlich nicht nach Lehrbuch. Ich wollte nochmal
> Strom sparen ;-)
> -> komischerweise funktioniert das ganze ohne diesen R nicht - es kommt
> dann gar kein Impuls zum µC durch.

dafür müsste man jetzt wirklich mal alle Pegel kennen? Warum kannst du 
nicht einfach den Oszi mal an das gate und an den Pin vom µC 
anschließen. (2Kanäle nutzen). Da könnte man bestimmt mehr sehen.
Moderator (Firma: Titel) Persönliche Seite #4227234
Lesenswert?

Norbert schrieb:
> Lothar M. schrieb:
>> Geh einfach über die Autobahn. Einmal ganz schnell und einmal ganz
>> langsam.
>
> Wenn genau zur richtigen Zeit ein 38-Tonner vorbeikommt, ändert sich mit
> der Laufgeschwindigkeit nur das Aufprallmuster am Kühlergrill;-)
Korrekt. Im ersteren Fall ist das aber weniger wahrscheinlich. Wie auch 
immer: ich würde rennen. So schnell wie möglich... ;-)
Gast #4227237
Lesenswert?

Peter II schrieb:

> sollte da nicht ein gewissen Schmitt-Trigger verhalten vorhanden sein?

Ist er.

> Jedes Signal geht doch zwangsläufig durch den undefinierten Bereich.

Ja.

> Kann mir nicht so recht vorstellen, das das wirklich ein Problem ist.

Dann stell dir einfach mal vor, dem Signal ist ein hochfrequentes 
Störsignal überlagert, dessen Amplitude zumindest gelegentlich die 
Trigger-Hysterese übersteigt...

Und nein, so ein Störsignal würdest du in deinem Oszi nicht unbedingt 
sehen können, dafür sorgen schon der unsinnig gewählten Meßpunkt und die 
ebenso unsinnig gewählten Oszi-Einstellungen. Die Frage ist außerdem, ob 
das Oszi überhaupt schnell genug wäre, das Problem sichtbar zu machen...

Ist aber eigentlich auch egal: Das Ergebnis zeigt doch bereits sehr 
eindeutig, daß das Problem existiert. Ob man es sich nun auch noch auf 
dem LC-Display eines Oszis angaffen kann oder nicht, spielt dann 
eigentlich schon keine Rolle mehr. Wäre höchstens insofern schick, als 
dass man daraus möglicherweise Rückschlüsse auf die Störquelle ziehen 
könnte.
Gast #4227244
Lesenswert?

kann nun jemand sagen wie das verhalten definiert ist, wenn sie die 
Spannung langsam ändert?

Laut Datenblatt gibt es eine Hysteresis von 0.4mV.

Damit sollte die Langsamkeit kein Problem sein, sie darf nicht nicht 
wieder zurückgehen.
Gast #4227246
Lesenswert?

Peter II schrieb:
> Laut Datenblatt gibt es eine Hysteresis von 0.4mV.
>
> Damit sollte die Langsamkeit kein Problem sein, sie darf nicht nicht
> wieder zurückgehen.

Eben schon.

Eine Rauschspannung von z.B. 1mV die dem eigentlichen Signal
überlagert ist würde bei dieser Spezifikation den Eingang
doppelt oder mehrfach triggern.
Gast #4227252
Lesenswert?

Peda:      "der erkennt 50µs"
Peter II:  "Hysterese 0,4mV"

Also ein 20MHz Signal von 400µV oder 0,0004V kann den 2. Interrup 
triggern.
Selbst wenn es realistischer 400mV sind, je nach Aufbau (langer Draht 
direkt an hochomiges CMOS-Gate) bekommt man auch ein "Klingeln" von 
einem ½V hin. Und schon passiert "Rätselhaftes".
Symptome haben immer Ursachen. Manchmal auch solche, die man gerade 
nicht versteht. Dadurch werden sie (die Ursachen) aber nicht unwirksam.
Moderator (Firma: Titel) Persönliche Seite #4227330
Lesenswert?

Peter II schrieb:
> Laut Datenblatt gibt es eine Hysteresis von 0.4mV.
Das ist keine (brauchbare) Hysterese. Oder bist du beim Abschreiben um 
drei Zehnerpotenzen verrutscht?

Bastler schrieb:
> Selbst wenn es realistischer 400mV sind, je nach Aufbau (langer Draht
> direkt an hochomiges CMOS-Gate) bekommt man auch ein "Klingeln" von
> einem ½V hin. Und schon passiert "Rätselhaftes".
Z.B. dass der Fehler beim Messen "verschwindet"...
Gast #4227344
Lesenswert?

Maik schrieb:
> plan.png

>> Wie wärs mal mit einem kleinen Schaltplänchen damit "man" klar sieht?
>
> soll natürlich "2n7000" heißen..

Dann ist dein Schaltbild falsch. Ein 2N7000 ist bestimmt kein 
Verarmungs-FET.

Und hast du dir mal überlegt, wie deine komische Serienschaltung von 
zwei Widerständen und der DS-Strecke vom FET zu einem vernünftigen 
Signal am µC-Eingang führen soll? Stell dir den FET einfach mal als 
änderbaren Widerstand vor.

Die Ansteuerung vom FET solltest du nicht verheimlichen, weil die mit 
Ursache von deinem Problem sein könnte (Schaltbild, Oszibild).
#4227360
Lesenswert?

Lothar M. schrieb:
> Peter II schrieb:
>> Laut Datenblatt gibt es eine Hysteresis von 0.4mV.
> Das ist keine (brauchbare) Hysterese. Oder bist du beim Abschreiben um
> drei Zehnerpotenzen verrutscht?

Das konnte ich jetzt auch nicht glauben. Von PICs bin ich es für 
Schmitttrigger Eingänge gewohnt 0,2*Vdd-0,8V*dd, also 0,6*Vdd für die 
Hysterese. Da musste ich jetzt doch mal nachschauen.
Wenn ich das Datenblatt richtig deute sollten es beim ATMega 0,05*Vcc 
sein. Also bei 5V VCC -> 0,25V. Kommt mir wenig vor, aber bestimmt weil 
ich es eben anders gewohnt bin.
(Kann auch sein, dass ich das Datenblatt falsch lese ;-)
Gast #4227381
Lesenswert?

Joachim B. schrieb:
> TO du hast doch einen 2-Kanal Oszi.

Warum so ins Detail gehen, er schafft es ja nicht einmal klare
Verhältnisse zu schaffen, uns zu sagen wo er misst, welche
Einstelllungen am Oszilloskop er hat (Tastkopf? DC?) und wie
seine komplette Schaltung bezüglich seiner Problematik aussieht.
Gast #4227441
Lesenswert?

Peter II schrieb:
> würde ich zumindest so lesen, kam wir aber auch komisch vor.
>
> http://www.atmel.com/Images/doc2466.pdf
> Seite 317.

Da hat sich im Datenblatt wohl ein "m" zu viel eingeschlichen. Miss die 
Hysterese doch einfach mal nach, indem du ein Dreieck- oder Sinussignal 
auf den Eingang gibst und guckst, was der µC daraus liest. Dazu 
schreibst du einfach eine kleine Schleife, die den Pin ausliest und das 
Ergebnis auf einem anderen Pin raus gibt. Das guckst du dir dann 
zusammen mit dem Eingangssignal auf dem Oszi an, z.B. in xy-Darstellung.
Gast #4227448
Lesenswert?

Arduinoquäler schrieb:
> Joachim B. schrieb:
>> TO du hast doch einen 2-Kanal Oszi.
>
> Warum so ins Detail gehen, er schafft es ja nicht einmal klare
> Verhältnisse zu schaffen, uns zu sagen wo er misst, welche
> Einstelllungen am Oszilloskop er hat (Tastkopf? DC?) und wie
> seine komplette Schaltung bezüglich seiner Problematik aussieht.

werde ich nachliefern.


ANdere Frage; ich will es umbauen. Also nicht mehr flankengetriggert 
sondern Level-Changed.
D.h. bei jedem Impuls soll das Ergebnis gekippt werden. L->H->L->... und 
dem Pin Change Interrupt am AVR zugeführt werden.
Wie mach ich das geschickter weise? Ich dachte zuerst an Flipflops ..
Gast #4227457
Lesenswert?

Maik schrieb:
> ANdere Frage; ich will es umbauen. Also nicht mehr flankengetriggert
> sondern Level-Changed.
> D.h. bei jedem Impuls soll das Ergebnis gekippt werden. L->H->L->... und
> dem Pin Change Interrupt am AVR zugeführt werden.
> Wie mach ich das geschickter weise? Ich dachte zuerst an Flipflops ..

Umbauen ist generell eine gute Idee...
Aber in welche Richtung?
Bisher uns sind Eingangssignal und Zweck der Übung unbekannt.....
Da einen Rat zu geben.... naja....

Ich versuchs mal:
Es ist kein Fehler ein externes Signal aufzubereiten und den Eingang des 
µC zu schützen. Falls notwendig.

Dann, welche Flanke/Level auswerten?
Keine Ahnung....
Was willst du erreichen?
Wie sieht das Signal aus?

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