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?
Bei 20MHz F_CPU kann er 50ns sicher erkennen, 100000ns sind da ne Ewigkeit.
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.
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.
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.
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.
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.
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?
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..
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?
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.
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.
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.
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 ....
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.
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?
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;-)
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.
Maik schrieb: > komischerweise funktioniert das ganze ohne diesen R nicht - es kommt > dann gar kein Impuls zum µC durch. Du kapierst es offensichtlich nicht: du musst alles zeigen damit die Pegelverhältnisse klar sind.
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... ;-)
:
Bearbeitet durch Moderator
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.
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.
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.
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.
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"...
:
Bearbeitet durch Moderator
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).
TO du hast doch einen 2-Kanal Oszi. Schalte doch im IRQ mal einen freien Port high und gleich wieder low und zeige beide Kanäle, dann siehst du doch wo der IRQ im Kanal 1 ausgelöst wird.
:
Bearbeitet durch User
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 ;-)
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.
Lothar M. schrieb: >> Laut Datenblatt gibt es eine Hysteresis von 0.4mV. > Das ist keine (brauchbare) Hysterese. Oder bist du beim Abschreiben um > drei Zehnerpotenzen verrutscht? würde ich zumindest so lesen, kam wir aber auch komisch vor. http://www.atmel.com/Images/doc2466.pdf Seite 317.
Peter II schrieb: > würde ich zumindest so lesen, kam wir aber auch komisch vor. > > http://www.atmel.com/Images/doc2466.pdf > Seite 317. Tabelle 120, Seite 294 würde ich nehmen. Habe aber Null Ahnung von ATMEL ...
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.
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 ..
Volker S. schrieb: > Tabelle 120, Seite 294 würde ich nehmen. Habe aber Null Ahnung von ATMEL > ... Ja, ist eigentlich für "Two-wire Serial Bus Requirements", aber die einzige Stelle im ganzen Datenblatt, mit Angaben zu einer "alternativen Pin-Funktion" (die dann Schmitttrigger ...)
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?
In meinem Datenblatt lese ich unter 'Figure 31-311. ATmega328: I/O Pin Input Hysteresis vs. VCC' für Vcc= 5.0 V etwas über 0.5 V.
Ulrich F. schrieb: > Dann, welche Flanke/Level auswerten? > Keine Ahnung.... > Was willst du erreichen? > Wie sieht das Signal aus? Das wenn er selbst wüsste ..... wäre er schon froh ....
S. Landolt schrieb: > In meinem Datenblatt lese ich unter 'Figure 31-311. ATmega328: I/O Pin > Input Hysteresis vs. VCC' für Vcc= 5.0 V etwas über 0.5 V. das klingt sinnvoller. Da hat wohl jemand im Datenblatt vom AtMega16 V und mV vertauscht.
Peter II schrieb: > das klingt sinnvoller. Da hat wohl jemand im Datenblatt vom AtMega16 V > und mV vertauscht. ACK Wolfgang schrieb: > Da hat sich im Datenblatt wohl ein "m" zu viel eingeschlichen.
Maik schrieb: > Wie mach ich das geschickter weise? Ich dachte zuerst an Flipflops .. In der ISR die Wahl der Flanke umschalten.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.