-
Art Mininetzwerk ATMEGA
Hallo,
ich möchte zwei ATMEGA32 ziemlich schnell miteinander Reden lassen. Ideal 10Mbit, mehr brauchts nicht zu sein. Vielleicht könnt ihr mir ja ein paar Tipps dazu geben.
Was ich bisher Probiert habe.
Eine Übertragung die folgendermaßen aufgebaut ist
Eine Eins wird bei meinem ATMEGA als 5µs Strom auf einem Pin
und eine Null as 10µs gesendet. Dazwischen 3µs Pin auf low. Das Funktioniert auch so halbwegs. Damit sich das ganze Synchronisiert kommt nach jedem Packet (128) Zeichen 30µs Pause. Damit der 2. Controller das neue Packet erkennt. Jedoch ist das ganze nicht so schnell wie erhofft. das ich einen Buchstaben ja mit 8 Bit Auflösen muss, damit ich alle Zeichen also auch Binär übertragen kann.
Ich denke für diese Zwecke wird es bessere Lösungen als meinen Versuch geben.
Was ich aufbauen möchte ist eine Art Ethernet. Nur ohne den Overhead den ich nicht brauche. Jedes Gerät soll eine ID bekommen (art MAC) mit der soll jeder Client Ansprechbar sein. Außerdem würde ich gern ein CSMA/CD implementieren, damit alle miteinander Reden können.
Nur wenn ich das mit meiner Lösung baue, dann ist der Controller nur noch mit Lesen beschäftigt. Bzw kommt auch da nicht mehr mit. Für die Pausen habe ich beim testen delay verwendet, was ja an sich auch noch nicht so optimal ist. Die Reichweite sollte ca. ein Sternnetzwerk von 100 Meter sein. Die Anzahl der Clients weiß ich leider noch nicht. Aber so ca 20 - 30 werden es schon werden.
An den Can Controller hatte ich schon gedacht. Dieser würde schon mal 1 Mbit schaffen und mit die CSMA CD Geschichte abnehmen, jedoch muss dann soweit ich weiß jeder Ausleger des Netzwerkes Terminiert werden oder ?
Deßhalb würde ich mich über alle Vorschläge freuen, die ihr mir so anbieten könntet.
-
Ein Atmega32 hat maximal 16 MHz, da kannst Du keine 10Mbit erreichen, es sei denn Du machst es parallel, dann sinds aber keine 10Mbit mehr.
Angenommen, Du bräuchtest 2 Takte, um ein Bit auf die Pins zu legen (was unmöglich ist, wenn Du Daten schicken möchtest, da brauchst Du sehr viel mehr), dann würde sich das Bit mit 8 MHz ändern (also 16 MHz durch 2 Takte).
D.h. 10Mbit sind mit 16 MHz ohne weitere ICs nicht möglich.
Für Dein Vorhaben würde ich Dir Funk empfehlen. Da ist schon alles drin:
CSMA/CD, alle Clients verbunden.
Und auf Microcontroller.net gibt es einen Code, der dem Ethernet ähnlich ist, mit minimalem Overhead, um jeden Client per Adresse (MAC) anzusprechen.
-
Bin gerade auf den ENC28J60 gestoßen, der hört sich ganz intressant an
-
Naja, damit haste dann wieder physikalisch "richtiges" Ethernet. Was Du in Software draus machst (den Stack weglassen, etc) ist ja Deine Sache.
Aber wenn Du eh Ethernet machst, dann machs doch gleich richtig, dann kannste auch mit dem PC kommunizieren.
-
wobei du den ENC28J60 auch nicht mit 10MBit Nutzdaten
füttern werden kannst mit nem M32
Wofür brauchst Du so hohe Datenraten?
-
nen WIZ812MJ mit integriertem TCP/IP stack kann man mit ca. 2 MBIT füttern, mehr gibt die SPI schnittstelle nicht her, wie es mit dem parallel bus aussieht kann ich nicht sagen, bin bisher nicht dazu gekommen es zu testen
-
hohe Datenraten brauche ich, da ich evtl. auch mal ein MP3 zwischen den Controllern übertragen will. Es müsen auch nicht genau 10 Mbit sein, dachte nur, das etwas in der Größenordnung evtl. noch realisierbar ist.
Zur Not reicht auch ein bischen weniger.
-
Ein gutes mp3 hat doch auch nur rund 200 kbit/s
Da sollte doch auch deutlich weniger reichen oder?
-
Ja, da das stimmt schon, aber da ich mehrere Clients an die Leitung hängen möchte, habe ich ja auch ein wenig das Data Collision Problem, deshalb hätte ich halt gern mehr Power auf der Leitung, wie gesagt, es müssen nicht unbedingt 10 MBit sein, ich möchte halt nur ein wenig mehr haben, damit ich bei mehreren Clients kein Problem bekomme. Zur not würden auch 1 -2 Mbit reichen
-
Ist es möglich in einem AT Meaga32 einen Stack an zu legen und auf diesen von einem zweiten zuzugreifen, als währe er auch im zweiten ATMega ?
Die die Idee hatte ich damit sich ein Atmega alleine um so ein Psydo Netzwerk kümmern könnte und ein zweiter die Packete verarbeiten würde.