Forum: Mikrocontroller und Digitale Elektronik Aktivität auf UART detektieren


von Maximilian (Gast)


Lesenswert?

Hallo Welt,

ich würde gerne eine Powersave-Funktion in einem Gerät nachrüsten und 
ein Relais schalten, wenn Daten über die serielle Schnittstelle erkannt 
werden.

Da ich in die bestehende Firmware nicht eingreifen kann, muss ich das 
irgendwie andocken.

Meine Idee war nun, den RX-Pin des Controllers "anzuzapfen" und zu einem 
Pin am atmega328p, mit dem ich dann auch das Relais schalte, zu führen.

Die Erkennung würde ich dann einfach per PinChange Interrupt machen.

Nun frage ich mich aber gerade, wie ich den Eingangspin konfigurieren 
sollte.

UART ist HIGH wenn im Idle Modus.
Kann ich also bedenkenlos den Pin am atmega als Eingang mit aktiviertem 
Pull-Up konfigurieren? Oder lässt man ihn im Tri-State?

Hat sowas schonmal jemand gemacht?

LG, Max

von Theor (Gast)


Lesenswert?

Maximilian schrieb:
> [...]
>
> UART ist HIGH wenn im Idle Modus.
> Kann ich also bedenkenlos den Pin am atmega als Eingang mit aktiviertem
> Pull-Up konfigurieren? Oder lässt man ihn im Tri-State?
>
> [...]

Nein auf die erste Frage. Nein, auf die zweite.

Der Sender (welcher ist es denn?) treibt in der Regel ja schon den 
RX-Pin. Es würde zwar unter Umständen nicht schaden, den zusätzlichen 
RX-Pin mit Pull-Up zu konfigurieren, aber es ist erstens unnötig (da 
eben schon getrieben) und zweitens von den "Umständen" abhängig ob das 
wirklich kein Problem verursacht. Zu den Umständen zählt vor allem der 
Unterschied zwischen den Versorgungsspannungen; die Folge wäre im 
zweit-günstigsten Fall ein unnötiger Stromfluss. Ausserdem, selbst wenn 
die Versorgungsspannungen nicht unterschiedlich wären, fliesst dennoch 
unnötig Strom durch den Pull-Up; er bringt nichts für die Funktion.

"Tri-State" ist ein Eigenschaft eines Ausganges. Ist hier also gar nicht 
anwendbar.

Ein weiteres potentielles Problem, dass Du nicht angesprochen hast, sind 
evtl. Ströme über die Begrenzerdioden des Gerätes resp. des uCs, dessen 
Versorgungsspannung Du scheinbar abschalten möchtest. An sich, d.h. nach 
Daumenregel, sollte man grundsätzlich vermeiden, dass an einem 
abgeschalteten IC irgendwelche Spannungen liegen. Es kann z.B. sein, 
dass der Chip einfach weiterläuft und sich aus der Datenleitung versorgt 
(oder das führt zu Fehlfunktionen, weil die Datenleitungen den Chip nur 
so halb versorgen kann). Im besten Fall schaltest Du die Datenleitung 
selbst ab.

Noch ein potentielles Problem ist, dass die abzuschaltende Schaltung 
vermutlich darauf ausgelegt ist, eingeschaltet zu sein und jede evtl. 
auftretende Datensendung vollständig zu erhalten. Falls Du sie 
abschaltest, braucht sie in der Regel einige Zeit um bereit für den 
Datenempfang zu sein. Folge wäre evtl. dass sie nur einen Teil der Daten 
empfängt und sich verschluckt (sprich: offenbar nicht sinnvoll reagiert) 
oder die Daten garnicht empfängt (und auch nicht sinnvoll reagiert). 
Müsstest Du mal ausprobieren.

von Maximilian (Gast)


Lesenswert?

Theor schrieb:
> Ein weiteres potentielles Problem, dass Du nicht angesprochen hast, sind
> evtl. Ströme über die Begrenzerdioden des Gerätes resp. des uCs, dessen
> Versorgungsspannung Du scheinbar abschalten möchtest. An sich, d.h. nach
> Daumenregel, sollte man grundsätzlich vermeiden, dass an einem
> abgeschalteten IC irgendwelche Spannungen liegen. Es kann z.B. sein,
> dass der Chip einfach weiterläuft und sich aus der Datenleitung versorgt
> (oder das führt zu Fehlfunktionen, weil die Datenleitungen den Chip nur
> so halb versorgen kann). Im besten Fall schaltest Du die Datenleitung
> selbst ab.
>
> Noch ein potentielles Problem ist, dass die abzuschaltende Schaltung
> vermutlich darauf ausgelegt ist, eingeschaltet zu sein und jede evtl.
> auftretende Datensendung vollständig zu erhalten. Falls Du sie
> abschaltest, braucht sie in der Regel einige Zeit um bereit für den
> Datenempfang zu sein. Folge wäre evtl. dass sie nur einen Teil der Daten
> empfängt und sich verschluckt (sprich: offenbar nicht sinnvoll reagiert)
> oder die Daten garnicht empfängt (und auch nicht sinnvoll reagiert).
> Müsstest Du mal ausprobieren.

Hi Theor,

vielen Dank für Deine Hilfe.

Zu den beiden Punkten, die Du angemerkt hast:
Sowohl die "Hauptplatine", die ich anzapfen möchte, als auch mein 
kleines atmega328-Board wären immer an und teilen sich auch die gleiche 
Versorgungsspannung.

Strom soll an anderer Stelle gespart werden.
Per Relais abgeschaltet werden soll dann eine 12V Schiene, an der unter 
anderem zwei Displays und ein Lüfter hängen. Werden Daten am UART der 
Hauptplatine erkannt, sollen die eingeschaltet werden. Und wenn dann 5 
Minuten lang nix mehr gekommen ist, wieder aus.
Im Moment mache ich das mit einem Kippschalter, würde mir das in Zukunft 
aber gern ersparen.

Bzgl. der Detektion:
Wenn ich Dich richtig verstehe, ist der (interne) Pullup des atmega 
unnötig, weil der Empfängerbaustein (MAX232) den RX der Hauptplatine und 
den damit verbundenen RX meines atmegas treibt.

Also den Detektor-Pin lediglich als Eingang konfigurieren und einen 
PCINT draufschalten um den Flankenwechsel zu erkennen?


Theor schrieb:
> "Tri-State" ist ein Eigenschaft eines Ausganges. Ist hier also gar nicht
> anwendbar.

Achso, ich dachte, dass auch ein Eingangspin ohne konfigurierten 
Pull-Up/Down, im Tristate (hochohmig) wäre. Da werde ich wohl mal ein 
bisschen Auffrischung machen müssen ;)

Vielen Dank,

Max

von Guest (Gast)


Angehängte Dateien:

Lesenswert?

Maximilian schrieb:
> Achso, ich dachte, dass auch ein Eingangspin ohne konfigurierten
> Pull-Up/Down, im Tristate (hochohmig) wäre. Da werde ich wohl mal ein
> bisschen Auffrischung machen müssen ;)

Der Eingang eines µC ist immer hochohmig (oftmals ein Schmitt-Trigger) 
man kann nur zusätzlich noch Pull-Up oder Pull-Down Widerstände dazu 
schalten. Tristate ist eine Eigenschaft des Ausgangstreibers die besagt, 
dass er die Push-Pull Stufe abschalten kann und somit hochohmig (High-Z) 
wird.

Im Anhang ist ein Bild wie so ein IO bei einem STM aufgebaut ist. Die 
sind aber nicht allzu verschieden bei anderen µC

von Theor (Gast)


Lesenswert?

Maximilian schrieb:
> Theor schrieb:
>> [...]
>
> Hi Theor,
>
> vielen Dank für Deine Hilfe.
>
> Zu den beiden Punkten, die Du angemerkt hast:
> Sowohl die "Hauptplatine", die ich anzapfen möchte, als auch mein
> kleines atmega328-Board wären immer an und teilen sich auch die gleiche
> Versorgungsspannung.

Aha.

> Strom soll an anderer Stelle gespart werden.
> Per Relais abgeschaltet werden soll dann eine 12V Schiene, an der unter
> anderem zwei Displays und ein Lüfter hängen. Werden Daten am UART der
> Hauptplatine erkannt, sollen die eingeschaltet werden. Und wenn dann 5
> Minuten lang nix mehr gekommen ist, wieder aus.
> Im Moment mache ich das mit einem Kippschalter, würde mir das in Zukunft
> aber gern ersparen.

Hm. OK. Was darauf indeutet, aber auch nur darauf, dass es bei manueller 
Betätigung geht. Musst Du ausprobieren, ob das bei einem unmittelbar auf 
eine Änderung auf der RS-232-Verbindung folgendes Einschalten auch noch 
geht.
Ich will jetzt hier nicht die Kassandra spielen. Merkst Du ja dann.

> Bzgl. der Detektion:
> Wenn ich Dich richtig verstehe, ist der (interne) Pullup des atmega
> unnötig, weil der Empfängerbaustein (MAX232) den RX der Hauptplatine und
> den damit verbundenen RX meines atmegas treibt.
>
> Also den Detektor-Pin lediglich als Eingang konfigurieren und einen
> PCINT draufschalten um den Flankenwechsel zu erkennen?
>
Richtig.

>
> Theor schrieb:
>> "Tri-State" ist ein Eigenschaft eines Ausganges. Ist hier also gar nicht
>> anwendbar.
>
> Achso, ich dachte, dass auch ein Eingangspin ohne konfigurierten
> Pull-Up/Down, im Tristate (hochohmig) wäre. Da werde ich wohl mal ein
> bisschen Auffrischung machen müssen ;)

Ja.

Ein "Tri-State-Ausgang sein" ist eine strukturelle Eigenschaft; es ist 
kein konkreter Schaltzustand dieses Ausgangs. Man kann nichts Sinnvolles 
damit ausdrücken, wenn man sagt: "Etwas sei im Tri-State". Welcher von 
den drei Zuständen sollte das sein? Welcher läge am nächsten? Es gibt 
darauf keine sinnvolle Antwort.

Es ist richtig, und hier auch schon bemerkt worden, dass Eingänge 
grundsätzlich relativ hochohmig sind; einfach um Strom zu sparen.

Den Nutzen von Pull-Up- bzw. Pull-Down-Widerständen muss man immer in 
Verbindung mit einem Ausgang sehen, Desen Strukur ist "Open-Kollektor" 
bzw. mit FETs eben "Open-Drain" oder "Open-Source". Das bedeutet, sie 
können in einem ihrer Zustände nichts treiben; nur zwischen einem 
definierten Potential oder eben dem hochohmigen Zustand, der ein (im 
wesenlichen) unbestimmtes Potential versursacht, umschalten. Ergo, ist 
ein Pull-Irgendwas-Widerstand auch nur mit so einem Ausgang sinnvoll.
Ein anderer Fall sind Taster bzw. Schalter mit nur einem Schliesser, 
der/die also auch nur in einem Zustand ein definiertes Potential ergibt 
(und das aber dann auch, je nach Schaltung, treiben kann).

Nun werden Open-Kollektor-Ausgänge aber ohnehin nur für solche Fälle 
angeboten, bei denen 1. die Last eine bestimmte obere Grenze (d.h. eine 
Grenze des niedrigen Lastwiderstandes hat), also etwa LEDs oder 2. bei 
denen ein Wired-Logikverknüpfung angewendet wird oder 3. bei denen 
Unterschiedliche Logikpegel aneinander angepasst werden sollen.

Keiner dieser Fälle trifft auf eine RS-232-Leitung zu. (Man könnte das 
technisch auch da anwenden, aber das ist eben einfach unüblich).

Anders herum, wollen Eingänge immer ein definiertes Potential. Oder sie 
haben eben spezielle Eingangsschaltungen um das bei einer Auswahl von 
bestimmten externen Schaltungen zu erreichen.
Im uC-Bereich, gibt es Fälle, wie den schon erwähnten Taster und auch 
manche Sensoren, die nicht immer in jedem Zustand ein definiertes 
Potential erzeugen. Sozusagen als Gimmick für den Entwickler, wird denen 
dann ein interner Pull-Irgendwas-Widerstand spendiert. Mehr hat das 
nicht zu bedeuten.

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.