Forum: Mikrocontroller und Digitale Elektronik 2 Signale abwechselnd per RS232 einlesen?


von White R. (Firma: n/a) (white_rabbit)


Lesenswert?

Hallo.
Ich habe ein Frage bzgl. des Einlesens von zwei verschiendene 
Datenquellen via RS232 in einem AVR Net-IO von Pollin. Konkret geht's 
mir darum, dass von zwei verschiedenen Quellen alle Nase lang Daten 
geschickt werden, ich aber nur einen Net-IO aufhängen will, der diese 
Daten abwechselnd einfängt und auswertet (über tcp/ip und oder SD-Karte 
... mal sehen). Jedenfalls weiß ich nicht, wie ich es hinkriegen kann, 
dass die Signale nicht durcheinander geraten, da beide Quellen 
"willkürlich" alle paar Sekunden senden. Nun habe ich mir als 
Schnellschuss-Lösung (?) des Problems einen
HCF4016B bestellt. Da sind 4 Schalter + 4 Steuerleitungen drauf. Hat 
einer den Durchblick, ob das damit klappen könnte? Falls ja: Wie muss 
ich den IC beschalten, damit das klappt? Falls nein: Wie würdet ihr das 
realisieren?
Ich stelle mir den Aufbau so vor, dass z.B. der Net-IO an einer 
Zeitschaltuhr hängt und von mir aus immer um 0:00h kurz aufwacht und 
dann beide Quellen ausliest... ohne dabei aus dem Tritt zu kommen...

Danke erstmal für alle Tipps,
White Rabbit

von holger (Gast)


Lesenswert?

>Jedenfalls weiß ich nicht, wie ich es hinkriegen kann,
>dass die Signale nicht durcheinander geraten, da beide Quellen
>"willkürlich" alle paar Sekunden senden.

Das geht nicht. Sorg dafür das deine Quellen die
Fresse halten solange sie nicht gefragt werden.

von White R. (Firma: n/a) (white_rabbit)


Lesenswert?

> Das geht nicht. Sorg dafür das deine Quellen die
> Fresse halten solange sie nicht gefragt werden.
Das geht auch nicht ... die senden einfach ... völlig ungefragt :)
(Es sind IR-Dioden)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wenn die Datenrate nicht allzu hoch ist, kannst Du dem AVR auf der 
Net-IO-Platine eine zweite in Software implementierte UART spendieren. 
Du könntest auch per I2C eine externe zweikanalige UART wie die 
SC16IS762* anschließen.


*) http://ics.nxp.com/products/sc16/datasheet/sc16is752.sc16is762.pdf

von White R. (Firma: n/a) (white_rabbit)


Lesenswert?

> Wenn die Datenrate nicht allzu hoch ist, kannst Du dem AVR auf der
Also die Datenrate ist 9600 Baud bei 7Bit, 1 Stopbit und Parität Even.
Die Dinger senden ca. alle 2 Sekunden. Sehe ich das richtig, dass ich 
alternativ auch einfach einen ATMega644P nehmen kann, der ja zwei UARTS 
an Bord hat?
Ich weiß nur nicht, wie die Daten dann über den Max232 an den ATMega 
weitergeleitet werden müssen. (Fange gerade erst mit der Thematik an...)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

White Rabbit schrieb:
> Sehe ich das richtig, dass ich
> alternativ auch einfach einen ATMega644P nehmen kann, der ja zwei UARTS
> an Bord hat?

Selbstverständlich.

> Ich weiß nur nicht, wie die Daten dann über den Max232 an den ATMega
> weitergeleitet werden müssen.

Der MAX232 enthält zwei Pegelwandler von RS232 auf TTL und zwei 
Pegelwandler von TTL auf RS232. Sofern Du keine 
Hardwarehandshakeleitungen verwendest, benötigst Du pro verwendeter 
Schnittstelle genau einen halben MAX232, nämlich je einen Pegelwandler 
von RS232 auf TTL (der mit dem jeweiligen RX-Anschluss des µC zu 
verbinden ist) und einen Pegelwandler von TTL auf RS232 (der wiederum 
mit dem jeweiligen TX-Anschluss des µC zu verbinden ist).

von Frank K. (fchk)


Lesenswert?

White Rabbit schrieb:
>> Wenn die Datenrate nicht allzu hoch ist, kannst Du dem AVR auf der
> Also die Datenrate ist 9600 Baud bei 7Bit, 1 Stopbit und Parität Even.
> Die Dinger senden ca. alle 2 Sekunden. Sehe ich das richtig, dass ich
> alternativ auch einfach einen ATMega644P nehmen kann, der ja zwei UARTS
> an Bord hat?
> Ich weiß nur nicht, wie die Daten dann über den Max232 an den ATMega
> weitergeleitet werden müssen. (Fange gerade erst mit der Thematik an...)

Wenn Du keine Handshake-Leitungen brauchst, wird die Sache sehr einfach:

Der zweite UART liegt auf Pin 16 und 17, die nur auf eine 10'er 
Pfostenleiste gehen. Lauf Schaltplan sind die Pins 9 und 10 vom MAX 
unbeschaltet. Sofern der Schaltplan aus dem Pollin-Download mit der 
Realität übereinstimmt, müßtest Du nur Pin 9 vom MAX mit Pin 16 vom 
M644p und Pin 10 vom MAX mit Pin 17 vom M644p verbinden. Dann hast Du 
auf der Sub-D Buchse auf 2 und 3 die erste und auf 7 und 8 die zweite 
serielle Schnittstelle.

Vergleiche sicherheitshalber nochmal Schaltplan und Platine, bevor Du 
zur Tat schreitest.

fchk

von White R. (Firma: n/a) (white_rabbit)


Lesenswert?

Hi.
> Wenn Du keine Handshake-Leitungen brauchst, wird die Sache sehr einfach:
Ich glaube nicht, da das Senden der Daten uni-direktional ist. Ich 
benötige also NUR RXD und noch nicht mal TXD.

> Der zweite UART liegt auf Pin 16 und 17, die nur auf eine 10'er
Also da das Signal eh schon als TTL rüberkommt, hatte ich den Max232 
bisher immer ausgebaut und im Max232-IC-Sockel eine Drahtbrücke zwischen 
Pin 13 auf 12 gelegt, so dass das Signal direkt am ATMega an Pin 14 
ankam. Das hat (bis auf die falsche Bit-Länge (ATMega mit ethersex 
versteht bisher nur 8Bit) auch geklappt.
Es wäre natürlich super, wenn man dann einfach das andere Signal über 
Pin 8+9 am Max232 an Pin 16 vom M644p weiterreichen könnte. Müsste so 
richtig sein, oder? Jetzt hoffe ich "nur" noch, dass ich unter ethersex 
auch beide UARTS benutzen kann? (Konfig für M644p??)

Danke für die Einsteigerhilfe,
White Rabbit

von Justin O. (justin)


Lesenswert?

Hi,

was die Verarbeitung der 2 UARTs in Ethersex angeht, könnte Dir das hier 
helfen:
http://www.ethersex.de/index.php/Protokolle_duplizieren


Gruss, J.

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.