Forum: Mikrocontroller und Digitale Elektronik Seltsames Verhalten durch UART


von P. F. (pfuhsy)


Lesenswert?

Hallo zusammen,

ich hab eine Schaltung mit einem ATmega88 die zur Bestätigung beim Start 
2 LEDs kurz aufleuchten lässt (ca. 2s an dann wieder aus). Hier hängt 
zusätzlich an der UART-Schnittstelle ein Raspbarry Pi der alle 5s Daten 
sendet. Ich habe beide über 2 unterschiedliche Netzteile laufen. Wenn 
ich nach ein paar Tagen die ausgeschalteten Netzteile wieder einschalte, 
verhält sich die Schaltung mit dem ATmega88 ziemlich seltsam. Die LED's 
leutchten deutlich länger auf und dannach funktioniet eigentlich nichts 
mehr so wie es sollte. Ich hab schon gemerkt, dass es an der Verbindung 
ATmega88_RxD <-> Raspi_TxD liegt. Trenne ich diese vor dem einschalten, 
funktioniert alles so wie es soll. Ich hab eine Ahnung woher das kommen 
könnte, so eine Art Bootloader der gar nicht verwendet wird. Ich kann es 
nicht ganz in Worte fassen. Kann jemand helfen ?

Gruss

von Timmo H. (masterfx)


Lesenswert?

Zwei Netzteile können ungünstig sein. Selbst wenn sie durch eine 
schaltbare Steckdosenleiste scheinbar gleichzeitig eingeschaltet werden, 
liefern die Netzteile nicht zeitgleich ihre 5V am Ausgang. Dadurch kann 
es zu einer Fremdspeisung über die Schutzdioden kommen und ggf. bist du 
dann in einem undefinierten Zustand (Ruhezustand vom Pegel ist Vcc).

von fop (Gast)


Lesenswert?

Eventuell versorgt der Raspi den Avr über diese Leitung mit Energie. Zu 
wenig, um richtig zu laufen, aber genug um danach das Einschalten des 
eigenen Netzteils zu verpassen und einen vernünftigen Kaltstart 
hinzulegen.

von A. (Gast)


Lesenswert?

Auf jedenfall auch mal GND von beiden miteinander verbinden.

von P. F. (pfuhsy)


Lesenswert?

Timmo H. schrieb:
> Zwei Netzteile können ungünstig sein. Selbst wenn sie durch eine
> schaltbare Steckdosenleiste scheinbar gleichzeitig eingeschaltet werden,
> liefern die Netzteile nicht zeitgleich ihre 5V am Ausgang. Dadurch kann
> es zu einer Fremdspeisung über die Schutzdioden kommen und ggf. bist du
> dann in einem undefinierten Zustand (Ruhezustand vom Pegel ist Vcc).

Hmm...klingt erstmal plausibel. Ich probiere mal das selbe Netzteil, mal 
sehen. Wie wird das denn sonst gelöst, wenn man 2 verschiedene 
Spannungsquellen hat  ?

fop schrieb:
> Eventuell versorgt der Raspi den Avr über diese Leitung mit Energie. Zu
> wenig, um richtig zu laufen, aber genug um danach das Einschalten des
> eigenen Netzteils zu verpassen und einen vernünftigen Kaltstart
> hinzulegen.

Kann man dagegen was machen, ausser das selbe Netzteil nehmen ?

A. schrieb:
> Auf jedenfall auch mal GND von beiden miteinander verbinden.

Das hab ich schon gemacht.

von Timmo H. (masterfx)


Lesenswert?

P. F. schrieb:
> Hmm...klingt erstmal plausibel. Ich probiere mal das selbe Netzteil, mal
> sehen. Wie wird das denn sonst gelöst, wenn man 2 verschiedene
> Spannungsquellen hat  ?
z.B. galvanisch trennen oder zumindest ein Level-Shifter um die 
Fremdspeisung zu verhindern.
Oder Quick and Dirty einen Serienwiderstand zwischen Rx und Tx der so 
dimensioniert ist dass die Versorgungsspannung "genug" einbricht, dass 
die Brown-Out zuschlägt (die du natürlich aktivieren musst)

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

P. F. schrieb:
> Kann man dagegen was machen, ausser das selbe Netzteil nehmen ?

Man kann einen anständigen Widerstand in die Datenleitungen hängen.
Dein ATmega88 läuft mit 3.3V?

von Karl M. (Gast)


Lesenswert?

Hallo,

meine Erfahrung und Empfehlung für zwei separat startende Systeme: 
jeweils einen externen Pullup Widerstand 4,7k-10k an die RX Leitungen.

von unknown (Gast)


Lesenswert?

Das hilft aber im Falle Fremdversorgung über die IC-internen 
Schutzdioden nichts. Bestenfalls dann, wenn der Eingang über eine in 
Reihe liegende Diode entkoppelt ist, die den Eingang nur tief ziehen 
kann, aber nicht hoch (was dann der Pullup übernimmt).

von chris (Gast)


Lesenswert?

1. Brown-Out aktivieren: verhindert solange ein Start des Prozessors bis 
die Versorgungsspannung stabil ist.

2. Programm richtig initalisieren.

3. Leitungslänge beachten

4. Entweder ein Netzteil für beides oder 2 Netzteile und dann über 
Optokoppler getrennt nutzen.

5. Ohne Programm und Schaltplan stochern im Nebel nur Goethe war 
Dichter...

von Stefan F. (Gast)


Lesenswert?

Der serielle Ausgang des Raspberry Pi liegt auf High Pegel. Da der AVR 
noch keine Spannungsversorgung hat, fließt ein Strom durch seine ESD 
Schutzdioden zum VCC Pin. Somit kommt es zu einer parasitären 
Spannungsversorgung.

Ich habe hier mal die ESD Dioden eingezeichnet, sie befinden sich im AVR 
Mikrocontroller:
1
                    +---|>|---o VCC ca. 2,4V
2
                    |
3
Raspi o-------------+--o AVR Eingang
4
High                |
5
3,3V                +---|<|---| GND

Wenn die Leitungen kurz sind, kannst du die beiden Seiten mit zwei 
Dioden und Widerständen entkoppeln:
1
                           2,2kΩ
2
                       +---[===]---o VCC
3
                       |
4
Raspi TxD o-----|<|----+-----------o AVR RxD
5
6
7
             2,2kΩ
8
      VCC o---[===]---+  
9
                      |
10
Raspi RxD o-----------+-----|>|----o AVR TxD
11
12
13
      GND o------------------------o GND

Die Dioden übertragen Low-Pegel. Die Pull-up Widerstände sorgen für 
definierten (High) Pegel zu den Zeiten, wo die Dioden nicht leiten.

Verwende Shottky Dioden mit einer geringen Verlustspannung (<0,5V), 
damit es zuverlässig funktioniert.

Die Schaltung ist nicht Ideal, denn auch so fließt ein parasitärer Strom 
zur anderen Seite, aber dieses mal durch die 2,2k Ohm Widerstände 
abgeschwächt. Normalerweise genügt dies, die parasitäre 
Versorgungsspannung gering genug zu halten. Insbesondere zusammen mit 
aktiviertem Brown-Out Detektor.

Etwas sauberer geht es mit den bereits empfohlenen Optokopplern, aber da 
muss man dann auf die Signalflanken achten. Optokoppler sind nämlich 
relativ langsam.

von Stefan F. (Gast)


Lesenswert?

Beispiel mit Optokoppler:
1
 
2
                                                  2,2kΩ
3
                                    +-------+----[===]---o VCC
4
Raspi      220Ω                     |       |
5
TxD    o---[===]---|<|--+         |/        +------------o AVR RxD
6
                        |    >>   |
7
VCC    o----------------+         |\>
8
                                    |
9
                                    +--------------------o GND

Die Diode und der Transistor sind Bestandteile des Optokopplers. Für die 
Umgekehrte Richtung (AVR zum Raspi) baust du das Ganze nochmal 
spiegelverkehrt.

von P. F. (pfuhsy)


Lesenswert?

Hallo Leute,

ich hatte das mit der galavanischen Trennung nicht so ganz auf dem 
Schirm. Bei dem nächsten HW-Update der Platine werde ich es nachrüsten. 
ich hab jetzt den Brown Out auf 4V gestellt und aktiviert, schein zu 
funktionieren.

Danke.

von Omatgogasto (Gast)


Lesenswert?

P. F. schrieb:
> Hallo Leute,
>
> ich hatte das mit der galavanischen Trennung nicht so ganz auf dem
> Schirm. Bei dem nächsten HW-Update der Platine werde ich es nachrüsten.
> ich hab jetzt den Brown Out auf 4V gestellt und aktiviert, schein zu
> funktionieren.
>
> Danke.

Hatte ein ähnliches Problem mit parasitärer Spannung am RX-Pin und auch 
mir half das Aktivieren der BOD bei 4V (bei 2.7V nicht).
Guter Tipp.

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.