Forum: Mikrocontroller und Digitale Elektronik Datenaustausch zwischen 2 PIC 18F


von mw2000 (Gast)


Lesenswert?

Hallo,

ich habe auf einer Platine 2 stk PIC18F sitzen, die miteinander Daten 
austauschen sollen. Nun habe ich 2 Möglichkeiten, die ich gerade abwäge.

1. Ich hänge beide in de I2C BUS , den ich eh schon an einem PIC 
betreibe.

2. Ich mache noch eine UART Verbindung auf (PINs habe ich frei).

Mir scheint die UART - Verbindung der sinnvollere und komfortablere 
Ansatz. Seht Ihr das genauso?
Kann ich die RX und TX Verbindung direkt ausführen oder müssen da noch 
Serienwiderstände bzw PullUps rein?

Danke fuer Hinweise

Gruß

Matthias

von Anja (Gast)


Lesenswert?

mw2000 schrieb:
> Kann ich die RX und TX Verbindung direkt ausführen oder müssen da noch
> Serienwiderstände bzw PullUps rein?

Uart halte ich persönlich auch für sinnvoller, zumal höhere Datenraten 
bis ca 500kBit/s  oder 1 MBit/s möglich sind.

Wenn beide PICs aus derselben Versorgung gespeist werden dann braucht es 
keine Serienwiderstände. Pullups sind auch nur notwendig wenn die 
Leitungen getrennt werden könnten. (Schließe ich mal bei 2 ICs auf einer 
Leiterplatte aus).

Gruß Anja

von stephan_ (Gast)


Lesenswert?

Die 2 PICs kannst du direkt über die USARTs verbinden RX zu TX und TX zu 
RX. Pullup/Pulldown sind nicht erforderlich, da die Ausgänge über 
interne Treiber zu Vdd bzw. Vss gezogen werden. Pegelwandler sind 
natürlich auch nicht erforderlich.

Die USART-Verbindung ist sicher weniger aufwendig und flexibler als die 
I2C-Verbindung, das Protokoll kannst Du machen wie Du willst. Der 
Empfänger muss halt auf einen Dateneingang reagieren, das kannst du über 
einen Interrupt machen oder auch pollen. Im Register PIR1 sagt Dir das 
Bit RCIF, ob etwas eingegangen ist.

von mw2000 (Gast)


Lesenswert?

Vielen Dank fuer die Infos.

Das war genau die Bestätigung die ich noch brauchte.

Gruß

mw2000

von PIColo (Gast)


Lesenswert?

Also ich würde ja I2C nehmen, wenn du den sowieso schon benutzt. Da die 
meisten PICs ja nur einen UART haben, würdest du dadurch dir den UART 
nicht verbauen. Meist will man ja in seinem Gerät auch noch einen UART 
haben für z.Bsp. eine Verbindung zum PC.

von Besucher? (Gast)


Lesenswert?

Prinzipiell würde ich mich auch der Meinung von PIColo anschließen.

Einen freien Debug-UART freizuhaben ist nie verkehrt, zumindest greife 
ich gerne darauf zurück.
Falls du nicht die höhere Datenrate brauchst, oder am Bus kritische 
Sensoren hängen hast, würde ich auf I2C zurückgreifen.

Außerdem hast du dadurch noch einen weiteren Vorteil: Du kannst alle 
Teilnehmer auf deiner Platine mit einem Protokoll ansprechen.
Das ganze kannst du noch in eine Lib verpacken und kannst so mit wenigen 
Funktionen den kompletten Bus bedienen.
Für RS232 müsstest du wieder eigene Funktionen einbauen, Interrupts 
abfangen etc.

Falls die Controller größere Datenmengen übertragen müssen, kannst du 
diese auch in einem Puffer zu einem großen Datenframe sammeln.
Der Master fragt dann beim zweiten PIC regelmäßig den Status ab und 
übermittelt seinen eigenen.
Steht ein Frame an, blockierst du kurz den Bus und tauschst einmal die 
Puffer gegenseitig aus.

Dadurch hast du auch gleich eine Gegenseitige Blockierung: Der Master 
muss warten, bis ein Datenframe (z.B. eine Berechnung) ansteht, während 
der Slave aber wiederum darauf warten muss, dass der Master den Frame 
abfragt.

Über RS232 kommt der Datenframe einfach rein und der Interrupt 
unterbricht z.B. deine laufende Sensorabfrage.
Du müsstest hier also auch ein Protokoll aufsetzen, was sich gegenseitig 
blockieren kann.

Dann kannst du auch gleich I2C nehmen, was diese Funktionen gleich 
mitbringt.
Wenn du nicht ständig aktualisierte Daten über ein Interrupt reinkriegen 
willst, entstehen dadurch auch keine Nachteile.
Vor einer Berechnung, Ausgabe etc. holst du die Daten vom Bus, 
berechnest und in der Zwischenzeit schnüren die Busteilnehmer schon die 
nächsten Datenframes.

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.