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
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
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.
Vielen Dank fuer die Infos. Das war genau die Bestätigung die ich noch brauchte. Gruß mw2000
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.