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
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".
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.
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
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.
@A.K. warum erzählst du das einem ausgewiesenem Elektronik-Experten? :-)
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
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?
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.
Achso evtl hast du den Port schon kaputt gemacht... das kann auch möglich sein
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 ...
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.