Wozu das ganze?
Hallo,
nach langer Arbeit kann ich die erste Version meines Microcontrollernetzwerks vorstellen.
Grundsätzlich kann man damit Daten mit wenig Aufwand zwischen µCs (und PCs, dazu später) austauschen.
Als Transportmedien sind bisher TWI und UART (Layer 0) implementiert. Diese haben die Aufgabe, Daten binär zu übertragen und sicherzustellen, dass diese auch ankommen.
Beim UART geschieht dies mit CRC8-Prüfsumme, ACK/NACK und Timeout, beim TWI mit CRC8-Prüfsumme und ACK/NACK.
Pro µC können mehrere Layer0 (Subnets) aktiv sein.
Weitere Transportmedien sind angedacht, zb. RFMxx-Module, SPI, etc.
Das eigentliche Netzwerk bildet der Layer 1, er fasst alle Layer 0 einheitlich zusammen, jeder µC (Node mit McNet) bekommt eine globale Adresse zusätzlich zur lokalen Subnetaddresse (bei TWI), kümmert sich um das Routing, den Adressaustauschprozess (Beim PowerUp wissen die Nodes nichts voneinander), das Finden der effizientesten Routing-Strecke und die Übertragung von Binärdaten.
Das Ganze ist auch noch HotPlug-fähig, d.h. die Nodes können in beliebiger Reihenfolge ein- und ausgeschaltet, resettet oder an- und abgesteckt werden.
Zusätzlich werden hier auch TWI-Slaves integriert (als Netzwerk-Node).
Zum Schluss kommt der Application-Layer 2, der ein Kommando und die Auftrennung in Datentypen ermöglicht und somit ein einfaches Interface zur Kommunikation bereitstellt.
Durch die Aufteilung in 3 Schichten mit jeweils eigenen Datenpuffern ergibt sich auch eine Warteschlange, sollte der darunterliegende Layer beschäftigt sein.
Die 2 Beispiel-Nodes senden sekündlich einen Ping zum anderen Node bzw. fragen die Richtung von einem CMPS03-Kompass ab.
Getestet auf 2-3x Mega32, verbunden über TWI oder UART.
Zur Zeit arbeite ich noch an einer Implementierung in VB.net mit serieller Verbindung, die auch schon größtenteils funktioniert, aber leider noch nicht ganz... Bei Interesse kann ich diese aber gerne posten.
Im Archiv befindet sich außer McNet noch meine bereits hier vorgestellte Timer Library sowie MyTWI von PicNick ( http://www.rn-wissen.de/index.php/TW...is_Multimaster ).
Wie der Titel schon sagt, handelt es sich hier um Version 0.1, also erhebe ich weder Anspruch auf Vollständigkeit noch Richtigkeit und bitte daher um Tester.
Schreiben könnte ich noch viel, beantworte aber lieber gezielte Fragen
mfg
Wozu das ganze?
Geschrieben hab ich das für meinen Roboter, auf dem eben mehrere µC sowie ein Industrie-PC werkeln.Zitat von Netzman
mfg
Hallo,
gefällt mir. Vor allem endlich mal wieder einen Source, der richtig kommentiert ist.
Poste mir doch bitte das VB.net-Programm. Ich werde das hier auf alle Fälle ausgiebig testen.
Peter
_________________________________________________
[-X Quis custodiet ipsos custodes
Ground-Effect-Stability-Robot www.peter-holzknecht.de
PC-seitig muss ich noch den Layer2 implementieren, was ansich keine große Hexerei ist, aber wozu ich wohl wegen anstehenden Prüfungen erst nach dem Wochenende kommen werde, ich bitte solange noch um Geduld
mfg
Hallo,
hier ist nun der in Vb.net implementierte PC-Client mit Layer2. Ich habe leider noch immer nicht die seriellen Übertragungsprobleme in den Griff bekommen.
Diese treten bei mir auf, wenn sich der PC zum zweiten mal mit dem µC verbinden, ohne das das gesamte Netzwerk resettet wurde (also alle Nodes).
Auch wenn ich den CMPS03 abfrage tritt der Fehler sporadisch auf.
Getestet habe ich das mit beiden M32, einer mit 16Mhz Quarz und einer mit einem Baudratenquarz (14,7456Mhz), bei beiden das selbe Verhalten.
Auf der PC-Seite habe ich einen USB-4xRS232 Wandler (inside-out networks Edgeport) unter Win7, mit einem anderen PC habe ich noch nicht getestet, hatte mit dem Gerät aber bisher keine derartigen Probleme.
Der Code ist leider auch noch nicht so schön kommentiert wie der für die µC, ist diesem aber recht ähnlich.
Der Client kann einen "Ping" senden, der µC antwortet darauf mit "Pong" (String), den Kompass CMPS03 abfragen und eine Zahl als Byte, Word, Long, Single oder Double an einen Node senden.
Der (im Archiv enthaltene, angepasste) Node 102 sendet das Ergebnis einfach 1-1 zurück.
Danke fürs Testen,
mfg
Hallo,
konnte das irgendjemand testen?
mfg
habs noch nicht getestet, aber eine Anregung hab ich schon, für Übertragungsfehler kannste noch den Framing Error Flag auswerten.
Ansonsten: Ein Musterbeispiel an Übersichtlichkeit und Kommentaren!! RESPEKT
=D> =D> =D> =D> =D> =D> =D> =D> =D> =D>
Vor den Erfolg haben die Götter den Schweiß gesetzt
Lesezeichen