Hallo, kann es sein, dass die AVR internen Pullups schwanken? Wenn ich eine Schaltung an INT0 hänge und einmal an ICP und triggere auf eine fallende Flanke, so funktioniert es einmal und einmal nicht. Ändere ich den Serienwiderstand zum Pin (verringere ihn), funktioniert es auf beiden Eingängen. An der Software liegt es also nicht. Haben die internen Pullups eine solche Streubreite? Habe schon einen weiteren Atmega8 ausprobiert, bei dem ist es das gleiche. Das INT0 scheint empfindlicher zu sein als der ICP Eingang...
Sven schrieb: > kann es sein, dass die AVR internen Pullups schwanken? Oh ja. Lies mal das Datenblatt diesbezüglich, da ist beim Mega8 zwischen 20k und 50k alles drin. Zudem variert die interne Beschaltung der Pins ein wenig.
Sven schrieb: > Ändere ich den Serienwiderstand zum Pin (verringere ihn), funktioniert > es auf beiden Eingängen. Über welche Widerstandswerte sprechen wir denn? > An der Software liegt es also nicht. Sag das nicht. Womöglich hast du einen der beiden Pins als Ausgang gesetzt. --> Zeig mal deinen Code.
:
Bearbeitet durch User
Wir reden über 100k bei denen es nicht funktioniert und 33k in Serie zum Pin bei denen es funktioniert. Eingelesen wird ein Signal von -10V mit internem Pullup getriggert auf fallende Flanke.
Sven schrieb: > Wir reden über 100k bei denen es nicht funktioniert und 33k in > Serie zum Pin bei denen es funktioniert. Ganz schön viel... > Eingelesen wird ein Signal von -10V [-10V] ist EIN Wert (vermutlich der Negativste). - Wie groß ist die höchste Spannung? - Bei wieviel Volt hättest du gerne deine Schaltschwelle? > mit internem Pullup Ich gehe im Folgenden von 5V Betriebsspannung aus. Wie bereits erwähnt beträgt der Widerstand der internen PullUps 20k..50k. Im Falle eines externen Serienwiderstandes von 100k gegen -10V erhältst du am Pin eine Spannung von 0V..2,5V. Eine "0" wird nur bis zu einer Spannung von 1V (0,2*5V) sicher erkannt. Eine "1" wird erst ab einer Spannung von 3V (0,6*5V) sicher erkannt. Alles dazwischen ist offiziell undefiniert. Bei einem externen Serienwiderstand von 33K erhältst du theoretisch eine Spannung zwischen -0,66V und -4,03V, welche allerdings durch die interne Schutzdiode auf ca. -0,5V begrenzt wird[*]. Dieser Pegel liefert dir auf jeden Fall einen definierten Lowpegel. [*] Diese negative Spannung ist grob geschätzt und vom Stromfluss abhängig!
Magnus M. schrieb: > Bei einem externen Serienwiderstand von 33K erhältst du theoretisch eine > Spannung zwischen -0,66V und -4,03V, welche allerdings durch die interne > Schutzdiode auf ca. -0,5V begrenzt wird[*]. Dieser Pegel liefert dir auf > jeden Fall einen definierten Lowpegel. Vielen Dank. Ja, richtig, -10V ist die maximale negative Spannung, darunter fängt es ab ca. -3V an und geht eben bis -10V hoch. 5V Betriebsspannung ist auch korrekt. Wie "schätzt" man die oben zitierten Spannungen? Also welche Formel steckt dahinter?
Dürfte ich das nochmals aufleben lassen, damit mir jemand erläutert, wie man so etwas ausrechnet?
Als Anregung zum selbst lernen: Spannungsteiler Wenn Du danach noch konkrete Fragen hast kannst Du die gerne stellen.
Die hätte ich noch, da ich nicht auf die Werte komme. Ich gehe von einem Pullup wie oben und im Datenblatt genannt von min. 20k und max. 50k aus. Mein Eingang ist negativer (-10V) als die 5V durch den Pullup. Also eine Differenz von 15V. Wenn ich nun das Verhältnis von Serienwiderstand zu der Reihenschaltung von Serienwiderstand und Pullup bildet und mit der Spannung multipliziere, komme ich nicht auf die Werte. (33k/(33k+20k) ~ 0,62 (33k/33k+50k) ~ 0,40 Wo liegt mein Denkfehler?
Hi >Die hätte ich noch, da ich nicht auf die Werte komme. >Ich gehe von einem Pullup wie oben und im Datenblatt genannt von min. >20k und max. 50k aus. Wenn du einen externen Pull-Up-Widerstand nimmst wird das ganze einfacher. MfG Spess
Mir fällt noch etwas ein. Ich könnte doch eine Diode nach GND hängen (z.B. 1N4148) und so auch die Spannung zumindest auf 0,7V begrenzen. Danach noch ein Widerstand in Serie der bei den 0,7V max. 1mA durchlässt, also 700Ohm bzw. um da nächste aus E24 zu nehmen 820 Ohm. Müsste doch gehen oder?
Sven schrieb: > Ich könnte doch eine Diode nach GND hängen > (z.B. 1N4148) und so auch die Spannung zumindest auf 0,7V begrenzen. Diese Diode hat der Eingang des AVR schon. (siehe Fig. 21 im Datenblatt 05/08) Da aber auch diese einen endlichen Durchlassstrom hat (siehe Absolute Maximum Ratings) ist der Serienwiderstand vor dem AVR Eingang sowieso nötig bzw. eine sehr gute Idee.
Sven schrieb: > Mir fällt noch etwas ein. Ich könnte doch eine Diode nach GND hängen > (z.B. 1N4148) und so auch die Spannung zumindest auf 0,7V begrenzen. Die 0,7V fallen in die Kategorie Lügen für Kinder, die Durchlass-Spannung echter Dioden ist vor allem vom Strom und dann von der Temperatur abhängig.
Die Idee mit der externen Diode um die Spannung schon vor dem IC zu begrenzen ist gut - wenn man ganz sicher gehen will nimmt man eine Schottky-diode mit kleiner Durchlassspannung. Zum einen kann die interne Diode im AVR angeblich nicht viel Strom (1 mA steht in einer Atmel Appl. note, die Datenblätter schweigen sich da aus) vertragen und außerdem kann der Strom auch andere Funktionen (etwa den AD Wandler) stören. Mit dem 2. Widerstand hat man wenigstens eine bessere Kontrolle über den Strom. Die Berechnung des Widerstandswerte passt allerdings nicht: vom internen Pullup kommt ein Strom von rund 50-100 µA. Mit dem Strom will man auf etwa 0,5 - 1 V kommen, so dass die Spannung am Eingang kaum negativ wird, aber auch sicher unter der Schaltschwelle (2,5 V) bleibt. Das wären dann etwa 10 K als passender Widerstand. Über die internen Schutzdioden fließt dann praktisch kein Strom mehr. Auch mit 700 Ohm wäre der Strom noch deutlich unter 1 mA, denn auch die internen Schutzdioden haben eine Durchlassspannung so um die 0,4 -0,7 V, je nach Strom und Temperatur.
Sven schrieb: > Mein Eingang ist negativer (-10V) als die 5V durch den Pullup. Also eine > Differenz von 15V. > > Wenn ich nun das Verhältnis von Serienwiderstand zu der Reihenschaltung > von Serienwiderstand und Pullup bildet und mit der Spannung > multipliziere, komme ich nicht auf die Werte. > (33k/(33k+20k) ~ 0,62 > (33k/33k+50k) ~ 0,40 > > Wo liegt mein Denkfehler? Ich habe keine Ahnung, was du gerechnet hast. Ich komme für
1 | -10V o--[33K]--*--[20-50K]--o +5V |
auf eine Spannung zwischen -4V (für 50K) und -0.6V (für 20K) am Punkt * gegen GND. Vermutlich kommst du mit den Vorzeichen durcheinander. Vorschlag: betrachte die Strombilanz am Punkt *. Wenn da eine Spannung U_x anliegt, fließt von rechts Strom rein und nach links der gleiche Strom raus. Und jetzt schreib die Gleichung auf und stelle sie nach U_x um. Alles wird gut! XL
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.