Forum: Mikrocontroller und Digitale Elektronik Mehrere µC über 1-wire verbinden


von Tobias S. (vbtobi)


Lesenswert?

Hallo Leute,
kann mir jemand sagen ob oder wie ich mehrere µC(Mega16&32) über 1-wire
verbinden kann?

Das ganze sieht so aus, ein Mega32 dient als Main CPU der nur für die 
verarbeiten von Daten, und das senden und empfangen vom PC zuständig 
ist.

An 2. Stelle kommt ein Mega16 an dem ein Grafikdisplay hängt,und nur für
Visuelle Anzeige da ist.

An 3. Stelle hängt ein Mega8 der Analogwerte einließt und IO 
bereitstellt.

Das ganze wär ja dann noch ausbaufähig.

by
Tobi

von AVRFan (Gast)


Lesenswert?

...und an 4. Stelle sitzt der µC, der die Status-LED einschaltet, und an 
5. Stelle der µC, der sie ausschaltet... ;-)

Da alles, was Du geschrieben hast, problemlos durch einen einzigen µC 
bewältigt werden kann, ist es sinnvoll, die Aufgabe auch mit nur einem 
µC zu lösen.

Wenn Deine Frage...

>kann mir jemand sagen ob oder wie ich mehrere µC(Mega16&32) über 1-wire
>verbinden kann?

...jedoch prinzipieller Natur ist: Das tust Du, indem Du a) in dem 
Programm jedes µCs eine 1-Wire-Software-Schnittstelle implementierst, 
und b) die entsprechenden Pins Deiner µCs durch Drähte miteinander 
verbindest.

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

Muss es 1-wire sein? Mit I2C kommt manmit 2 Leitungen aus deine µCs 
haben das in Hardware implementiert und du hastg weniger stress bei der 
programmierung.

von Tobias S. (vbtobi)


Lesenswert?

Hi,
Es hört sich vieleicht etwas übertrieben an, aber das Problem ist
folgendes. Das display allein Schluckt schon alle Analogports und
noch alle C-Ports dann bleiben noch D und B wobei ich die Programmier-
port auch noch brauche, dann noch ein paar Taster und weg sind se.Und
dann kommt noch das ich das Display an einer ganz anderen Stelle hab
als die Aktoren. Preisgünstigr find ich die Variation auch.

Leider hab ich überhaupt keine Ahnung wie ich das im Programm
machen soll, dass das wo ich sende und empfange auch da ankommt wo
es hin soll. Bin in sachen 1-wire noch etwas unerfahren.

by

von Tobias S. (vbtobi)


Lesenswert?

Hi Hauke Radtki,

Würde auch gehen, nur hätt ich halt bei 1-wire einen Draht weniger.
Und da hab ich dann das gleiche Problem wie sag ich dem µC welche
Adresse er hat?

by

von Mathi (Gast)


Lesenswert?

Als Tipp der folgende Link:

http://www.maxim-ic.com/appnotes.cfm/appnote_number/126

Die Adresse dynamisch den einzelnen µCs zuweisen geht nur wenn Du sie 
auch ohne diese Adresse ansprechen kannst. Bei Ethernet wird dies mit 
der MAC-Adresse realisiert. Die wird einmalig an ein Gerät vergeben.

Ich denke Du solltest den Ansatz verfolgen das die µCs schauen ob sie in 
einem 1-wire Netz sind und dann beim Master die Adresse sich abholen. 
Dieser polled gelegentlich ob die Geräte noch da sind.
Prinzipiell solltest Du dir dann ein Paketformat überlegen mit dem Du 
alle Fälle abdeckst.

von Tobias S. (vbtobi)


Lesenswert?

Hi Mathi,

der Link wär nicht schlecht, aber leider arbeite ich BasCom.
Ich bräuchte halt ne Lösung wie ich dem µC eine Adresse
zuweißen kann um ihm dann die Daten die in einem String sind
über denn befehl Print schick.

by

von Niels H. (monarch35)


Lesenswert?

Tobias Schmid wrote:

> es hin soll. Bin in sachen 1-wire noch etwas unerfahren.

Du musst ja nicht das Protokoll implementieren, das Dallas verwendet. Du 
kannst dir ja deine eigenen Timings ausdenken. Im Prinzip ist das 1-Wire 
von Dallas ziemlich simpel:

Der Bus ist in der Ausgangsposition von allen Teilnehmern hochohmig und 
wird nur von einem Pullwiderstand nach 5V gezogen. Es gibt einen Master, 
alle anderen Teilnehmer sind Slaves.

Der Master übermittelt pulsbreitenmoduliert das Byte. Wird low 
übertragen, zieht er für 15us den Bus auf low, für high 60us. Zwischen 
den einzelnen bits liegen 60us "funkstille".

Fühlt sich ein Slave durch ein übertragenes Kommando angesprochen und 
will antworten, hält es den Bus für eine gewisse Zeit low, sobald der 
Master diesen auf low zieht. Der Master bleibt also der Taktgeber in 
dieser Kommunikation. Die wertigkeit des Bits, das der Slave übermitteln 
will, legt dieser wieder in der Impulslänge fest.

von Tobias S. (vbtobi)


Lesenswert?

Hi Niels Hüsken,

das ist mir soweit klar. Aber wie muss ich das Programm machen???
und wie sag ich wer Master und wer Slave ist?

by

von Niels H. (monarch35)


Lesenswert?

Tobias Schmid wrote:
> Hi Niels Hüsken,
>
> das ist mir soweit klar. Aber wie muss ich das Programm machen???

Was erwartest du jetzt von mir? Fertigen Programmcode?

> und wie sag ich wer Master und wer Slave ist?

Das reine Definitionssache. Du musst einmalig ein Gerät festlegen, das 
der Master ist. Dieses Gerät bleibt dann der Master und wird auch immer 
der Master bleiben. Und alle anderen sind Slaves und bekommen 
entsprechenden Programmcode eingebaut.

von Andreas K. (a-k)


Lesenswert?

Wär einfacher du hängst dir ein paar zusätzliche Ports an den 
Controller:
Porterweiterung mit SPI
[[Port-Expander PCF8574]]
AVR-Tutorial: Schieberegister

Ansonsten kann man Portpins auch mehrfach nutzen. Beispielsweise eignen 
sich alle Anschlüsse eines Text-LCDs ausser E prima für Taster: Taster 
mit 4K7-Serienwiderstand zwischen Pin und GND hängen. Bei der 
LCD-Datenübertragung stört er so nicht und wenn das LCD-Interface grad 
mal Pause hat wird der Pin als Input mit Pullup programmiert und liefert 
den Taster-Zustand.

von AVRFan (Gast)


Lesenswert?

>Es hört sich vieleicht etwas übertrieben an, aber das Problem ist
>folgendes. Das display allein Schluckt schon alle Analogports und
>noch alle C-Ports

(Was ist das für ein Display?)  Es gibt bewährte Methoden, die Anzahl 
von Portpins fast beliebig aufzustocken, wenn auch der "größte" 
Controller der Familie tatsächlich mal zu wenig davon haben sollte.

>dann bleiben noch D und B wobei ich die Programmier-
>port auch noch brauche,

Die Programmierports müssen nicht frei bleiben, nur weil es 
Programmierports sind.  Schließ doch die Taster daran an.

>dann noch ein paar Taster und weg sind se.

Du müßtest mal eine exakte Auflistung machen, da gibts bestimmt 
massenhaft Pin-Einsparmöglichkeiten.

>Und dann kommt noch das ich das Display an einer ganz anderen Stelle hab
>als die Aktoren.

Wie weit genau entfernt?  Wenn wirklich zu weit, würde ich mir eine ganz 
simple Lösung via UART (oder auch SPI oder I2C) überlegen.

>Preisgünstigr find ich die Variation auch.

Ist sie aber nicht.  Mit der Aufgabe, eine zuverlässig arbeitende 
Inter-µC-Kommunikation zum Funktionieren zu bringen, sind riesige Kosten 
verbunden - nämlich an Nerven.  Fakt ist, dass die Kniffligkeit dieser 
Aufgabe von Anfängern um Größenordnungen unterschätzt wird (Du bist 
nicht der Erste, der hier eine Frage a la "wie kann ich mehrere µC 
miteinander..." stellt).

von Tobias S. (vbtobi)


Angehängte Dateien:

Lesenswert?

Also es ein grafikdisplay 240 * 128. Die im Anhang beschriebene
Belegung ist was die linke Seite angeht nicht richtig!
Hab mir das nochmal überlegt, und wär auch mit I2c zufrieden.
Da gibts aber bestimmt die gleichen problemme, "wer hat welche Adresse".

by

von Clemens H. (sum)


Lesenswert?

Hi,

ich hatte auch mal das Problem. Lösung ist in der Codesammlung zufinden:

Beitrag "1-Drahtbidirektionalbus über große Distanz mit AVR"

Grüße,
 Clemens

von AVRFan (Gast)


Lesenswert?

>Also es ein grafikdisplay 240 * 128.

Ahja.

>Die im Anhang beschriebene
>Belegung ist was die linke Seite angeht nicht richtig!

Auf jeden Fall könntest Du beispielsweise die drei LEDs an MISO/MOSI/SCK 
anschließen.  Sie flackern dann beim Flashen des Chips - wen störts? 
Macht immerhin drei weitere freie Leitungen.

>Hab mir das nochmal überlegt, und wär auch mit I2c zufrieden.
>Da gibts aber bestimmt die gleichen problemme, "wer hat welche Adresse".

Vielleicht kannst Du Dich ja auf zwei µCs beschränken? Einen Master-µC 
in der Zentraleinheit und einen Slave-µC beim Display, der Daten vom 
Master empfängt und ansonsten nur die Display-Ansteuerung besorgt.  Dann 
gibts kein Adressen-Problem.  Und das kriegt man auch zu akzeptablen 
Kosten (an Nerven!) zum Laufen.

von Tobias S. (vbtobi)


Lesenswert?

OK.
So wird das nichts, hab mir das nochmal anderst überlegt, 1-Wire
wär zwar schön gewessen da man nur eine Datenleitung hat.
Werd es dann wohl über I2c machen.
Es ist halt folgendes: Der Mega16 der für das Display bestimmt ist,
ist voll der Rest der Pins brauch ich für Funktionstasten, ist ähnlich
wie bei einem OP von Siemens. Der Master also der Mega32 befindet sich
in einem Hutschiene in der Verteilung.Die beiden µC werden über ein
Cat 5 Kabel miteinander verbunden. Programmcode ist kein Problem.
Also ich bräuchte jetzt nur einen Tip wie ich die Daten senden soll?

by

von Tobias S. (vbtobi)


Lesenswert?

Wenn ich jetzt angenomen einen String der so aussieht schicke:
dis;t23;a23;end schicke, also so das ihn alle bekommen und nur an
hand der ersten stelle also "dis" erkennt wo er gebraucht wird,
so kann ich dann beim zerlegen gleich bestimmen ob er weiter macht oder 
ihn
links liegen lässt.Dann wär das mit den Adressen aus der Welt. 
Das wär halt so ne Idee. Weiß aber nur nicht
ob es so ne Funktion wie sammelruf gibt?

by

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

Damit machst du doch nichts anderes als eine Art software-adressierung.

Die µCs haben ja ein Register für die Adresse. Wenn du jetzt z.B. die 
Baugruppe "Analoge Ports" nur einmal in deinem System Verwendest kannst 
du dieser Baugruppe immer die gleiche Adresse zuweisen, z.b. 0x10, der 
nächsten Baugruppe gibst du wieder eine Feste Adresse z.b. 0x20 (Welche 
du jetzt nimmst liegt natürlich an dir)
Somit hättest du das Adressproblem aus der Welt geschafft.

von Tobias S. (vbtobi)


Lesenswert?

Das wär ja Super. Jetzt bräucht ich nur noch Hilfe, wie ich
den String über I2c senden kann. Könnt mir da vieleicht wer 
weiterhelfen?

by

von AVRFan (Gast)


Lesenswert?

>Der Mega16 der für das Display bestimmt ist,
>ist voll der Rest der Pins brauch ich für Funktionstasten

Nochmal mein Tipp, Dich mit dem Thema Porterweiterung zu befassen.  Kein 
vernünftiger Mensch opfert z. B. 16 wertvolle Pins um 16 läppische 
Tasten daran anzuschließen, wenn die Pins anderweitig benötigt werden.

von Dr. Die (Gast)


Lesenswert?

Ich fasse es nicht !

PCA9554A (8 Bit) oder PCA9555 via TWI und tut !


Dr. Die

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.