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
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.
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.
> Alle Pins zusammen und einen pullup nach Vcc.
ich wollte gleich LIN-Bus vorschlagen, was dieser idee schon sehr nahe
kommt
such mal bei microchip.com nach AN578 (Use of the SSP Module in the IIC Multi-Master Environment )
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
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.
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
Beitrag "mehrere MC seriell über Datenbus verbinden (1Draht)" Das Prinzip sollte sich leicht auf PIC übertragen lassen. Peter
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.
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
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.