Forum: Mikrocontroller und Digitale Elektronik 5V-Signal an ATmega16 mit Vcc=3.3V


von Stefanie (Gast)


Lesenswert?

Hallo,
ich habe an meine ATmega16, der mit 3.3V versorgt wird, an PB2
(Interrupteingang) einen Sensor, dessen Ausgangssignal entweder 0V oder
5V ist. Nun wollte ich zum Test ein kleines Programm schreiben, dass
pollend diesen Eingang abfrägt.
Wenn ich mit meinem JTAG Ice mk2 debugge, so sehe ich im AVR-Studio
nicht, wenn der Pin auf 1 oder wechselt, obwohl ich es mit dem Oszi
messen kann.
Kann das an dem 5V-Pegel liegen? Was mach ich falsch.

Danke, Stefanie

von A.K. (Gast)


Lesenswert?

Das dabei dank der Schutzdiode im AVR-Pin passieren kann:

- Wenn der Sensor relativ wenig Strom liefern kann, wird dessn Signal
auf ca. 4V begrenzt.
- Wenn er genug Strom liefern kann, wird die Stromversorgung vom
Controller vom Sensor übernommen und liegt nun bei gut 4V.
- Bei hinreichendem Strom durch die Schutzdiode zündet ein parasitärer
Thyristor schliesst VCC kurz.

Und da dieser Betriebszustand undefiniert ist, wär's kein Wunder wenn
es das Ergebnis auch ist.

Rest: Stichwort "Pegelkonverter".

von crazy horse (Gast)


Lesenswert?

kann natürlich auch ein kleiner Softwarefehler sein....
in PORTB,...
sbis/sbic PORTB,....
funktionieren dafür nicht. Die Abfrage muss immer mit PINB erfolgen.

Die einfachste Pegelwandlung: Diode und pullup, oft reicht dafür sogar
der interne. Also vom Eingang einen pullup-Widerstand nach 3,3V, Diode
vom MC-Eingang zu deinem Sensor-Ausgang, Katode zum Sensor.
Funktioniert  natürlich nur, wenn die Quelle auch aktiv L-Pegel
liefert.

von Erwin Reuss (Gast)


Lesenswert?

Liebe Antwortenden, solch ein Quatsch habe ich ja schon lange nicht mehr
gelesen. Da dreht sich ja jedem Elektronik-Experten der Magen um.

Zitat:
- Bei hinreichendem Strom durch die Schutzdiode zündet ein parasitärer
Thyristor schliesst VCC kurz.

Nirgendwo ist ein Thyristor und schließt irgendwas kurz. Ich weiß
nicht, wo diese Weisheiten herkommen. Wenn irgendwas kurzschließt, dann
ist es wahrscheinlich die zerstörte Schutzdiode im Eingang, die bei zu
hohem Strom das zeitliche gesegnet hat. Dann kannst Du diesen
Eingangspin vergessen.

Zitat:
- Diode und pullup, oft reicht dafür sogar der interne.

Geht wahrscheinlich, ist aber die schlechteste aller Lösungen.


Lösung:
Die Einfachste Methode, ein 5 Volt-Signal in einen mit 3,3 Volt
betriebenen AVR einzuspeisen ist ein Vorwiderstand zum Eingang. Das
habe ich hunderte Male erfolgreich so gehandhabt und es ist noch nie
etwas passiert. Selbst der direkte Anschluß eines RS-232-Anschlusses
vom PC mit +/- 12 Volt wird durch die internen Schutzdioden und des
Vorwiderstandes sauber auf Betriebsspannung begrenzt.

Also, einfach einen 1 Kiloohm - Widerstand in den Eingang legen und
fertig ist es.

Warum das Pollen des Pins nicht funktioniert, kann ich so auch
diagnostizieren. Versuche erstmal einen anderen Eingangspin, falls der
letzte die hohe Spannung nicht überlebt hat. Ich hoffe, Du begehst
nicht denselben Fehler in der Software, der mich schon so manche
Stunden Zeit gekostet hat: Eingänge werden mit den Registern PINx und
NICHT mit PORTx abgefragt.

Erwin

von A.K. (Gast)


Lesenswert?

Lieber Experte, das ist Basiswissen Mikroelektronik, Stichwort
Latchup-Effekt, siehe
http://www.elektronik-kompendium.de/public/schaerer/anasw2.htm und für
eine präzisere Erklärung
http://www.fairchildsemi.com/an/AN/AN-600.pdf#search=%22latchup%20effect%22.

Diese parasitären Thyristoren sind ein ungewollter aber kaum
vermeidbarer Nebeneffekt der CMOS Herstellungstechnik. Die Transistoren
und Dioden befinden sich ja auf dem gleichen Substrat und sind damit
nicht wirklich voneinander isoliert. Das Ergebnis sind ungewollte
Halbleiterstrukturen wie eben solche Thysistoren.

Es gibt bisweilen auch noch andere parsitäre Elemente, die zu
unerwünschten Effekten führen. So ist für manche CMOS-Logikfamilien
dokumentiert, dass parasitäre Bipolartransistoren bei signifikantem
Strom durch die Schutzdioden benachbarte Pins miteinander verbinden.
Wird so ein benachbarter Pin dann hochohmig angesteuert, entsteht eine
Fehlfunktion.

von crazy horse (Gast)


Lesenswert?

@A.K.
warum erzählst du das einem ausgewiesenem Elektronik-Experten? :-)

von Olaf K. (Gast)


Lesenswert?

Als schnelle, stromsparende, billige und leicht zu beschaffende
Pegelwandler kann Schaltkreise der 74VHC... oder 74LVX...-Familie
verwenden, diese haben im Gegensatz zu 74HC... auch bei niedriger
Betriebsspannung 5V-tolerante Eingänge. Beispiele sind die 8-Bit-Buffer
74LVX244 oder 74VHC541.

MfG Olaf

von Stefanie (Gast)


Lesenswert?

Hallo,
ich habe nun das 5V Signal über einen 1K Widerstand an den Atmega
angeschlossen.
Nun war es so, dass ich an der Leitung entweder 3.3V bzw. 4V gemessen
habe, sie ist nicht mehr zurück auf 0V. Wenn der Bewegungsmelder etwas
erkannt hat, konnte ich an der Leitung 4V messen, ansonsten 3.3V.

Habe nun die Leitung wieder abgelötet und nun zeigt der Sensor wieder
5V an, wenn sich etwas rührt, ansonsten 0V.

Was mach ich da falsch??

P.S.: Wenn ich den Eingang dann abfragen möchte, sage ich dann
bit_is_set(PIND, PIND3) oder bit_is_set(PORTD, PIND3) bzw. was würde
letzteres bedeuten?

von Sebastian Heyn (Gast)


Lesenswert?

Hi,

also miss mal den Port ohne dass der sensor dran ist. ich würde den
Fehler in erster linie in deiner Software suchen. (Evtl port als
ausgang geschalten, oder pullup aktiv?) ich weiss ja nicht wie dein
sensor am ausgang beschalten ist, aber evtl reicht der interne pullup
des AVR ja um die spannung auf solch einen Pegel zu ziehen.
Sollte dies der Fall sein, kannst du ganz einfach ne Tranistorstufe
vorschalten. ansonsten Pullup deaktivieren, etc.

von Sebastian Heyn (Gast)


Lesenswert?

Achso evtl hast du den Port schon kaputt gemacht... das kann auch
möglich sein

von T-Brox (Gast)


Lesenswert?

Wenns nur in die eine Richtung geht sprich nur der Sensor sendet, dann
reicht ein einfacher Spannungsteiler für die Anpassung von 5 auf 3,3V.
Ohne Halbleiter oder sonstigen Aufwand. Zum Beispiel zunächst vom
Sensor aus einen 1k Widerstand und dann parallel zum Eingangspin
nochmal 2,2k. Gibt nach Eva Zwerg etwa 3,4V. Da sollte kein/e noch so
kleine/r Diode/Thyristor durchschalten können ...

von Stefanie (Gast)


Lesenswert?

Haha,
das war die Ursache:
PORTD = _BV(PD3);

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.