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.
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?
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