Forum: Mikrocontroller und Digitale Elektronik Wie mehrere uC (PICs) an eine Leitung hängen?


von Thomas W. (thomas0906)


Lesenswert?

Hallo

Ich möchte mehrer 5V uC (PICs) an eine Leitung hängen und ein einfaches 
eigenes Protokoll übertragen. Flanken im ms Bereich.
Der angeschlossene PIN wird dann umgeschaltet von Eingang auf Ausgang 
und revers.

Wie viele uC kann ich da zusammen anschließen?
Muß ich die Anschlüsse gegeneinander entkoppeln (Widerstände, 
Kondensatoren)? Welche Größe?

Danke für Hilfe
Thomas

von Jalu (Gast)


Lesenswert?

I2C ist dafür eigentlich gemacht. Kurzstrecke, aber bei langsamen 
Geschwindigkeiten geht es auch erstaunlich weit, oder I2C Treiber 
einsetzen. Gibt's einiges bereits hier im Forum.

von H.Joachim S. (crazyhorse)


Lesenswert?

Hm, kenne die Ausgangsstruktur der PICs nicht, aber ich würde sowas wie 
wired-and machen.
Alle Pins zusammen und einen pullup nach Vcc.
Beim AVR und 8051 geht das von Hause aus (8051 kann eh keinen aktiven 
H-Pegel ausgeben, beim AVR schreibt man fest eine 0 ins Portregister und 
macht die Datenübertragung übers DDRx-Register.
Falls das beim PIC nicht gehen sollte, je Ausgang eine Diode spendieren.

von Master S. (snowman)


Lesenswert?

> Alle Pins zusammen und einen pullup nach Vcc.
ich wollte gleich LIN-Bus vorschlagen, was dieser idee schon sehr nahe 
kommt

von bingo (Gast)


Lesenswert?

such mal bei microchip.com nach AN578 (Use of the SSP Module in the IIC 
Multi-Master Environment )

von Michael L. (michaelx)


Lesenswert?

H.joachim Seifert schrieb:
> Hm, kenne die Ausgangsstruktur der PICs nicht, aber ich würde sowas wie
> wired-and machen.
> Alle Pins zusammen und einen pullup nach Vcc.
> Beim AVR und 8051 geht das von Hause aus (8051 kann eh keinen aktiven
> H-Pegel ausgeben, beim AVR schreibt man fest eine 0 ins Portregister und
> macht die Datenübertragung übers DDRx-Register.
> Falls das beim PIC nicht gehen sollte, je Ausgang eine Diode spendieren.

Hi Joachim,

kann hier Entwarnung geben, das geht bei PICs genau so. Nur das Register 
zum Umschalten heißt da TRISx. Aber Namen sind eh Schall und Rauch ...

Michael

von (prx) A. K. (prx)


Lesenswert?

Michael L. schrieb:

> kann hier Entwarnung geben, das geht bei PICs genau so.

Bei (alten) PICs ohne LATx Register wird es allerdings etwas 
umständlicher.

von iaoffline (Gast)


Lesenswert?

Thomas W. schrieb:
> Wie viele uC kann ich da zusammen anschließen?
> Muß ich die Anschlüsse gegeneinander entkoppeln (Widerstände,
> Kondensatoren)? Welche Größe?

Welche Leitungslänge, welche Übertragungsrate, wie viele Telegramme / s

von Peter D. (peda)


Lesenswert?

Beitrag "mehrere MC seriell über Datenbus verbinden (1Draht)"

Das Prinzip sollte sich leicht auf PIC übertragen lassen.


Peter

von Michael L. (michaelx)


Lesenswert?

A. K. schrieb:
> Michael L. schrieb:
>
>> kann hier Entwarnung geben, das geht bei PICs genau so.
>
> Bei (alten) PICs ohne LATx Register wird es allerdings etwas
> umständlicher.

Das ist aber generell so, dass das ohne LATx-Register etwas 
umständlicher ist, die Ausgänge korrekt zu behandeln (wegen 
Read-Modify-Write).
Das hat prinzipiell erst mal nichts damit zu tun, einen 
Open-Collector-Ausgang zu simulieren.

von iaoffline (Gast)


Lesenswert?

Michael L. schrieb:
> Das ist aber generell so, dass das ohne LATx-Register etwas
> umständlicher ist, die Ausgänge korrekt zu behandeln (wegen
> Read-Modify-Write).

Verstehe ich nicht, das macht doch der compiler. Wenn die Software den 
Zustand kennt was bei Kommunikation wohl der Fall ist dann setzt Sie die 
Richtung sowieso direkt und wenn es immer noch ein Problem ist nimmst du 
halt einen mit Latx

von Frank K. (fchk)


Lesenswert?

Thomas W. schrieb:

> Ich möchte mehrer 5V uC (PICs)

welche genau?

Wenn Du die Wahl hast: Es gibt etliche mit eingebauter LIN-Hardware. Die 
macht das, was Du vorhast, schon selber.

Siehe http://www.lin-subbus.org/

fchk

von (prx) A. K. (prx)


Lesenswert?

iaoffline schrieb:

> Verstehe ich nicht, das macht doch der compiler. Wenn die Software den
> Zustand kennt was bei Kommunikation wohl der Fall ist dann setzt Sie die
> Richtung sowieso direkt

Ohne LATx kann sich der Zustand des Output-Latchs eines auf Eingang 
programmierten O.C. Pins ändern, indem ein anderes Bit am gleichen Port 
modifiziert wird. Weil der Zustand der Leitung nicht dem Zustand vom 
Latch entsprechen muss und dieser Zustand ins Latch zurück geschrieben 
wird.

Man kann also nicht einfach wie oben beschrieben PORTx.y auf 0 setzen 
und mit TRISx.y spielen, weil sich PORTx.y u.U. zu beliebig zufälligen 
Zeiten verändern kann, so lange TRISx,y auf 1 ist, wenn ein 
Interrupt-Handler an einem anderen Pin vom gleichen Port rumspielt.

Mann kann andererseits auch nicht einfach nacheinander PORTx.y und 
TRISx.y manipulieren, weil in der einen Variante der Handler genau 
dazwischen reinfuhrwerken kann und in der anderen Variante der Pin evtl. 
kurz auf 1 gezwungen wird. Man muss daraus also eine ununterbrechbare 
Sequenz machen. Oder man darf keine R-M-W Operationen verwenden, sondern 
zieht für den Port konsequent ein Schattenregister als Software-LATx 
mit.

Ich sagte ja nicht, dass es nicht ginge. Es ist eben nur umständlicher 
und so mancher wird dieses Problem anfangs nicht auf dem Radar haben, 
zumal das Fehlverhalten u.U. nur bei sehr präziser Zeitbedingung 
auftritt. Ein Alptraum fürs Debugging, wenn es nur einmal pro Woche 
auftritt.

von Maik W. (werner01)


Lesenswert?

Hallo zusammen,

Man darf ja auch nicht's dem Zufall überlassen!
Mach dich mit den PORT's vertraut und beachte die Regeln und dann kannst 
Du die Pin's beherschen wie Du es möchtest.
Natürlich kann man nacheinander PORTy.x und TRISy.x manipulieren, man 
muß eben blos NOP's einfügen und den logischen gewollten Ablauf 
befolgen. Schreibe dir eine Empfangsroutine in Assembler wegen der 
Zeitkritischkeit. Starte deine Übertragung mit einem Startbit und dann 
misst Du die Zeit für jedes Bit und schaust halt ob eine EINS oder Null 
anliegt und das so lange, bis das Byte oder so übertragen ist.
Also Sender und Empfänger laufen zwingend auf gleicher Boudrate und 
achte peinlich genau auf das Timing und alles wird gut!


viel Glück

von W.S. (Gast)


Lesenswert?

Nehmt doch einfach RA4, der ist von hause aus ein Open collector.

W.S.

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.