PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Art Mininetzwerk ATMEGA



Tux12Fun
11.05.2009, 18:52
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.

thewulf00
11.05.2009, 19:28
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.

Tux12Fun
11.05.2009, 22:34
Bin gerade auf den ENC28J60 gestoßen, der hört sich ganz intressant an

thewulf00
12.05.2009, 09:46
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.

Vitis
12.05.2009, 09:54
wobei du den ENC28J60 auch nicht mit 10MBit Nutzdaten
füttern werden kannst mit nem M32
Wofür brauchst Du so hohe Datenraten?

Ceos
12.05.2009, 10:09
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

Tux12Fun
12.05.2009, 22:18
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.

BurningBen
12.05.2009, 22:27
Ein gutes mp3 hat doch auch nur rund 200 kbit/s

Da sollte doch auch deutlich weniger reichen oder?

Tux12Fun
12.05.2009, 22:36
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

Tux12Fun
12.05.2009, 23:05
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.

Vitis
13.05.2009, 00:23
meinst Du nen TCP-IP-STack oder einfach nur nen Datenstapel im RAM?
Das erste wird schwerer, da der IP-Stack ne Menge RAM braucht
da i.d.R. der ganze Frame im RAM verwurstelt wird und der M32 da
schlicht nicht so viel davon hat.
Nen Ringpuffer an beliebiger Stelle auslesen wird nicht das Problem darstellen,
kommt halt auf Dein Protokoll an, das die Kommunikation regelt

wenn ic hDich richtig verstanden hab hast Du vor dem
M32 z.B. ne SD-Karte zu verpassen und MP3 von der in ein
Netz mit mehreren Clients zu streamen ... das würde
haarig

Für die Anwendung wär eventuell interessant sich das NGW100
anzuschaun

XploD
13.05.2009, 10:11
Ich enttäusche dich nur ungern, aber wenn du mit einem Mega eine hohe Datenrate erreichen willst, dann solltest du weitestgehend auf eine Softwareimplementierung verzichten und dafür auf dedizierte Hardware setzen.
Ich kenne die CAN Funktionalität der Mega Serie nicht, aber ich denke, dass dort schon eine Datenrate nahe des Maximums erreicht wird.
Da CAN reichlich Overhead auf dem Bus produziert könnte es sein, dass man mit dem SPI und einem externen Ethernettreiber noch etwas mehr herausholen kann.

Ich würde an deiner Stelle auf CAN mit den kurzen Standardheadern setzten, das löst ein Großteil aller Probleme, und du kannst mit einem Standardtool wie dem CANalyzer nachschauen, ob alles so läuft wie du willst.

Ansonsten bräuchtest du eher rechenleistung in der Kategorie eines Mega32, und die haben schon Ethernet und CAN integriert, da brauchst du dann erst recht kein eigenes Protokoll...

Gruß
Dirk

Ceos
13.05.2009, 13:02
mehrere clients tauschen untereinander jeweils weniger als 1MBit aus, die summe kann aber 10MBit schon erreichen, das schreit nach einem ethernetmodul(WIZ812MJ), allerdings eins mit hardwired TCP/IP Stack, da hast zwar nur 4 oder 8 sockets(je nach modul) aber die grenze liegt nun mal bei ca 1MBit effektiv, 2 MBit wenn du die daten nur rausschaufelst, ohne viel berechnung (nur unter SPI, parallel hab cih noch nicht gemessen)

irgendwo stellst dir dann nen switch hin (kein hub) in den du dann deine module einsteckst ... vorteil, der computer kann auch angeschlossen werden und deine daten kontrollieren oder gleich übernehmen und speichern oder oder oder...