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
...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.
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.
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
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
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.
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
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.
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
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.
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.
>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).
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
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
>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.
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
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
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.
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
>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.
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.