mikrocontroller.net

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


Autor: mw2000 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Anja (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: stephan_ (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: mw2000 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank fuer die Infos.

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

Gruß

mw2000

Autor: PIColo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Besucher? (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.