PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mikrokontroller vernetzen



ttauch
12.02.2007, 00:38
Hallo!
Ich habe seit längerem die Idee ein paar Mikrocontroller mit meinem PC kommunizieren zu lassen. Im Moment wäre ich schon mit einer Master(PC) / Slave(AVR's) Variante weitaus zufrieden.
Bis jetzt ist es mir gelungen einen AVR und den PC oder zwei AVR's untereinander per waitkey() ein paar bytes austauschen zu lassen.
Das funktioniert allerdings nicht mehr wenn ich mehrere AVRs an die selben RXD und TXD Leitungen hänge.
Hat jemand für mich ein paar hilfreiche Tipps wie ich ein Master Slave Netzwerk über RS 232 realisiere. Etwas BeispielCode wäre toll.
Vielen Dank für ein paar Beiträge dazu.

corone
12.02.2007, 08:14
Hallo :)
Ja, über RS232 kannst du eigentlich immer nur 2 Geräte miteinander vernetzen, da die Daten ja imemr an alle gesendet/von allen empfangen werden. Spontan würden mir daher zwei Lösungen einfallen:

a) Du lässt einen µC gewissermaßen als "Kommunikationszentrale" mit deinem Rechner per RS232 kommunizieren. Der selbe µC tauscht sich mit den anderen µCs per I2C aus.

b) Es gibt auf Robotikhardware.de eine I2C-Adapterplatine: dein Computer lernt über seinen RS232-Port I2C sprechen -> hier könntest du beliebig viele µCs mit deinem Rechner vernetzen, und alle wären "gleichwertig".



Da ich das selbst aber noch net gemacht habe kann ich dir leider nicht mit Code behilflich sein. *Das mal den erfahrenen Geeks hier überlässt*


Gruß
Corone

veit
12.02.2007, 09:50
bin nicht so der erfahrene geek / nerd aber sowas war mein erstes projekt und es geht:

jeder controller darf nur antworten wenn er was gefragt wird.
also vergibst du jedem controller eine id.

der pc sendet dann byteweise befehle die am besten ungefähr so ausschauen:

-startcommand (bei mir 200)
- id (z.b. 1)
- command (z.b. 100)
- checksumme
- endcommand (201)

erst dann antwortet der controller mit id 1

- 200
- 1
- jetzt hier
- die daten
- die er so
- senden soll
- checksumme
- 201


kannst auch in meinen posts suchen ich hab das schon öfter gepostet weil ich sonst von nix ne ahnung hab


wenn du das so machst ist es ziemlich wurscht mit welchem bus du das machst, bei mir setz ichs auf nen rs485 um.

ttauch
12.02.2007, 11:11
@corone
An I2C habe ich auch schon gedacht allerdings schreckt mich als N00b der Quelltext einer I2C Kommunikation ewas ab. Allerdings nutzen ja auch einige Sensoren, etc. das TWI wodurch es durchaus angebracht wäre sich damit mal zu befassen.
Kennt jemand ein gutes Tutorial über TWI außer das von RN-Wissen


@veit
Das mit Startcommand und ID habe ich mir auch so überlegt allerdings funktioniert das nicht wenn ich mehrere AVRs benutze. Oder habe ich da hardwaremäßig einen Fehler gemacht. Ich habe einfach alle "TXD-Pins" sowie alle "RXD-Pins" der AVRs und des PCs zusammengeschaltet.
Muss ich dabei den BusTreiber(MAx232) irgendwie auf Senden und EMpfangen stellen???

veit
12.02.2007, 13:09
hmmm also ich kann dir nur von der rs485 geschichte berichten:
da sind alle pins zusammengeschaltet UND natürlich muss man den 485 jeweils auf senden und empfangen schalten.
gleichzeitig muss man noch beim atmel das sende- und empfangsregister überwachen.
klingt kompliziert, ist aber einfach. heißt txc flag.

nützlich ist eine verbindung mit dem pc, und auf dem pc einen serial-port-monitor laufen lassen um die ganze kommunikation zu überwachen.

wie du das mit 232 verdrahten muss weiß ich nich so genau, benutzt du nen rs232 ic oder willst du direkt verbinden?
für verbindung mit dem pc brauchst du ja auf alle fälle nen 232 zum pegel wandeln.

da gibts hier im forum aber schaltpläne usw.

veit
12.02.2007, 13:12
achso zwecks txc flag: das sagt dir ob das letzte byte das du senden willst den atmel verlassen hat.
solange muss man warten, und dann wenn das flag gesetzt is musst du den bustreiber wieder auf empfangen schalten und flag zurücksetzen

schau nach meinen alten posts die nicht infrarot betreffen da gehts meistens ums gleiche thema

marvin42x
12.02.2007, 14:01
Schau vielleicht auch mal hier vorbei:
http://www.marvins-lab.roboterbastler.de/
Da ist schon einiges fertig und der Rest kommt demnächst.

Netter Gruß

ttauch
12.02.2007, 17:29
der link von marvin42x hilft mir irgendwie überhaupt icht weiter oder habe ich tomaten auf den augen?

Ich habe mich ein wenig über I2C belesen. (Eine sehr schöne Einführung ist hier zu finden:http://www.qsl.net/pa3ckr/bascom%20and%20avr/i2c/index.html) Das scheint ja garnicht mal so kompliziert nur ist es wohl für meinen Zweck mehrere Mikrocontroller zu vernetzen auch nicht hilfreich. Für ein Master-Slave Netzwerk bräuchte ich die i2cSlavelib um den Slave Controller zu programmieren. Diese gibt es aber nur käuflich zu erwerben.

Gibt es dazu eine Alternative?

PicNick
12.02.2007, 17:54
.Gibt es dazu eine Alternative?..

https://www.roboternetz.de/wissen/index.php/TWI_Praxis_Multimaster

marvin42x
12.02.2007, 21:29
habe ich tomaten auf den augen?

Nein, hast Du nicht. Es handelt sich hier um eines der sagenumwobenen schwarzen Löcher.
Da hast Du mich glatt bei einer Lücke erwischt :-) .
Ich habe das jetzt erstmal aufgefüllt.
Sorry für die Missweisung.
Danke für den Hinweis.
Danke auch Richtung PicNick für die Quellenlieferung.

SIGINT
13.02.2007, 15:35
@ttauch:
Nur ein kleiner Hinweis: Die RS232 ist kein BUS... d.H. du kannst nur zwei Geräte mit RS232 verbinden. Wenn du mehrere Controller an den TX und RX Leitungen anschließt dann sollte es eigentlich Knallen: Geben alle Treiber den gleichen Signalpegel aus, so gibts keine Probleme... wenn allerdings ein Treiber den Pegel wechselt, dann fliesst über diesen Treiber und einen anderen Treiber mit entgegengesetztem Pegel ein großer Strom und es raucht irgendwo. RS485 ist ein BUS, der mit standart UARTS eingesetzt werden kann, die entsprechenden Treiberstufen vorausgesetzt.

Gruß,
SIGINT