Forum: Mikrocontroller und Digitale Elektronik NGW100 Newbie


von TGraber (Gast)


Lesenswert?

Hallo,

ich plane auf Basis des Atmel NGW100 eine intelligente 
Schnittstellenkarte zwischen I2C Bus und Ethernet zu realsieren. Auf dem 
AVR32 läuft embeded Linux und genau da fängt das Problem an. Ich habe 
von Linux nur miminale, eher gar keine Ahnung! Allerdings habe ich 
einige Erfahrungen mit den einfachen AVR 8Bitern gemacht und hatte daher 
dazu tendiert das Linux direkt runter zu schmeißen und von Begin an 
alles selber zu schreiben. Da ich jedoch ebensowenig Erfahrung mit 
Ethernet oder I2C Programmierung habe, ist wohl doch geschickter auf die 
von Atmel zur Verfügung gestellten Treiber zurück zu greifen.
Ich habe nun einige Stunden auf der Suche in Google und diversen Foren 
verbraucht, um Code Beispiele für I2C btw. Ethernet zu bekommen. Aber 
bin da leider kein Stück schlauer geworden.

Vom Prinzip her möchte ich:

Sensoren -> I2C -> Sensor Vorverarbeitung -> Ethernet/UDP -> PC

Meine anfängliche Hoffnung, dass ich unter Linux nur ein Device "I2C" 
und ein weiteres für "Ethernet" mittels meinem eigenen Programm für die 
Sensor Vorverarbeitung ansprechen brauche, war wohl zu naiv gedacht? 
ALso wie bekomme ich den I2C Bus gelesen / beschrieben, btw den 
Netzwerkcontroller?
Benutzt Linux automatisch den DMA Controller, oder muss ich das explizit 
programmieren?

Ich würde auch auf ein 8Biter (Atmega32 oder größer) wechseln, 
allerdings reicht mir die Performance nicht aus. Es ist erforderlich, 
dass die Ethernet Verbinung einen Datendurchsatz von 20-30Mbit/s 
schafft.

Wünschenswert wären mir Einschätzungen, ob das von mir gewünschte 
mittels NGW100 überhaupt realsierbar ist? Alternativen (ARM7/9) sind 
möglich, da keine Hardware angeschafft.

Falls NGW100 ok, wie bekomme ich den I2C btw Ethernet mit meinem eigenen 
Programm angesprochen?

An dieser Stelle erstmal vielen Dank fürs lesen und ich bin für jede 
Hilfe dankbar

Gruß,
Thorsten

von Werner B. (werner-b)


Lesenswert?

> I2C ...
> ...Datendurchsatz von 20-30Mbit/s

und von was Träumst du in der Nacht?

von TGraber (Gast)


Lesenswert?

Hallo Werner,

nachdem ich die Application Note "AVR32AP7 Networking Performance" 
gelesen hatte, war ich der Meinung, dass es durchaus möglich seien 
sollte.

Dort steht dass das NGW100 in etwa 50Mbit/s schafft.

Quelle:
http://www.atmel.com/dyn/resources/prod_documents/doc32066.pdf

Mag seien, dass 50Mbit/s doch sehr optimistisch ist, aber die Hälfte 
sollte wohl möglich seien?

Gruß

von TGraber (Gast)


Lesenswert?

Nachtrag:

Das der I2C Bux max 400kb/s liefern kann ist mir klar, jedoch entsteht 
durch die Vorverarbeitung die enorme Datenmenge.
Soll heißen die Ethernet Verbindung PC <-> NGW100 muss die 20-30Mbit/s 
leisten können, und das sollte wohl möglich seien.

von Peter Diener (Gast)


Lesenswert?

Hallo,

kann man denn die Daten nicht direkt unverändert über LAN übertragen und 
erst auf dem PC decodieren? Wodurch wird die Datenrate denn so groß?

So wie ich das an meinem NGW100 sehe, gibts da noch keinen Treiber für 
I2C, den musst du komplett selber schreiben. Kann aber sein, dass das 
mittlerweile schon jmand gemacht hat.

Grüße,

Peter

von Mark .. (mork)


Lesenswert?

Natürlich gibt es fertige Treiber für i2c. Im menu config vom avr32 
buildroot einfach i2c aktivieren und den Kernel neu kompilieren, dann 
hast du ein i2c device drauf.

MfG Mark

von TGraber (Gast)


Lesenswert?

Hallo Mark,

wenn ich den Kernel mit I2C neu kompeliere, dann ist zwar I2C aktiviert, 
ber an der Stelle habe ich dann ein Verständnisproblem. Wie greife ich 
dann auf das Device zu? Ich habe noch keine API im Netz gefunden, die 
ich dann in meinen Source-Code einpflegen könnte. Wo muss ich da 
ausschau halten, dass ich da was finde?
Gleiches gilt natürlich auch für den Ehternet-Controller.

Hallo Peter,

ein kurze Erklärung zu meinem Projekt:
Es geht um ein Fahrzeug, welches mittels Ultraschallsensoren eine Karte 
der Umwelt errechnen soll. Die Sensoren komunizieren mit einem 
Mikrocontroller (z.B. NGW100) via I2C und haben eine Reichweite von bis 
zu 6 Metern. Bei einer Abdeckung von 360° kommt da eine Fläche von 112m2 
zustande. Ich denke an eine Rastergröße von 5x5 bis 10x10cm und 
Abtastschrtte von 0.1-1 Sekunde. Da kommt eine enorme Datenmenge 
zusammen. Die einzelnen Kacheln je Abtastschritt werden auf einen 
Host-PC via Ethernet geladen, der dann die gesamte Karte verwaltet.

Daher ist es möglich aus geringen Messdaten eine enomre Datenflut zu 
produzieren.

grüße,
Thorsten

von Mark .. (mork)


Lesenswert?

@TGraber
Für I2C siehe 
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=63285 
, da ist ein sehr gutes Bespiel im 2ten Post.

Warum willst du den Ethernet-Controller selbst ansteuern? Sowie ich Dein 
Vorhaben verstanden habe, reichen normale TCP sockets vollkommen aus. Im 
Extremfall kann man ja immer noch Raw-Sockets nehmen.

von Peter Diener (Gast)


Lesenswert?

Hallo Thosten,

du kannst das I2C device doch einfach über ssh oder ein raw-Socket zum 
PC durchtunneln, dann ist die Datenrate gering genug, dass das NGW sie 
locker verarbeiten kann. Du solltest auch bedenken, dass die Entwicklung 
der Software auf einem richtigen PC wesentlich angenehmer ist (man hat 
ein Grafikdisplay).

Ich kenne deine Sensoren ja nicht, aber wenn sie I2C sprechen, haben sie 
offenbar die Intelligenz schon drin. Also funktioniert das irgendwie so, 
dass man einen Messwinkel vorgibt und den Abstand der Reflektion 
zurückbekommt? Diese Information kann man doch direkt ohne weitere 
Verarbeitung an den PC übertragen. Schließlich benötigt sie ja wohl auch 
nur der PC, oder verstehe ich das falsch? Warum sollte die Information 
direkt auf der kleinen CPU verarbeitet werden, wenn dadurch die 
Kommunikation aufwändiger wird und nicht klar ist, ob die Rechenleistung 
für die geforderte Bildrate ausreicht?

Viele Grüße,

Peter

von TGraber (Gast)


Lesenswert?

Hallo Mark,

erstmal danke für den Link zum I2C. Werde ich mir sehr genau anschauen.

zum Ehternet-Controller
Ich muss zugeben, dass ich davon leider sehr wenig Ahnung habe. Falls es 
eine Möglichkeit gibt, auf Software-Ebne (Befehle von Linux) mit dem 
Controller zu komunizieren, will ich das sehr gerne tuen und erspare mir 
den Kampf durch die Datenblätter des AVR32. Nur sind mir solche Befehle 
(in Form eine API) nicht bekannt.
Da ich mit den Begriffen wie TCP-Socket und RAW-Socket nicht viel 
anfangen kann, kennst du ein Buch / Internetseite wo ich mich da mal 
einlesen kann?
Vielleicht klärt sich dann auch vieles von selbst. Hoffe ich mal ;)

Hallo Peter,

ich schicke die Rohdaten (von den Sensoren) mit Absicht nicht direkt zum 
Host-PC, weil dieser sonst nicht genug Rechenzeit besitzt, alle Prozesse 
in Echtzeit abzuhandeln. Zusätzlich eine Wahrscheinlichkeitskarte der 
Umgebung zu rechnen mit vielleicht 1 Millionen 8Bit Multiplikationen pro 
Sekunde ist doch recht aufwendig, daher möchte ich diese auslagern.

Das Prinzip einer Ultraschallmessung ist genau wie du beschrieben hast. 
Jedoch erhält man nicht nur die Information wie weit ein Objekt vom 
Sensor entfernt ist (aus Laufzeit hin und zurück) sondern auch 
Information darüber wo kein Objekt ist. (der Weg der Schallwellen ist ja 
nicht blockiert bis zum Objekt an dem sie zurück reflektiert werden)
Diese Beiden Informationen kann man dann für eine 
Wahrscheinlichkeitskarte der Umgebung verwenden.

Die Sensoren sind: Devantech SRF02
Also die Zeitmessung bekommen sie von alleine hin, ich muss im uC "nur" 
die Wahrscheinlichkeiten der Kacheln berechnen.

Vielleicht kann mir jemand mitteilen wieviel Taktzyklen (oder Rechenzeit 
mit Taktfrequenz Angabe) ein AVR32 in etwa benötigt, um eine 8Bit 
Multiplitkation unter Linux.

Gruß,
Thorsten

von TGraber (Gast)


Lesenswert?

Hallo Mark,

ich hätte erst deinem Link folgen, und dann dir antworten sollen...

Die API für den I2C Controller ist für meine Belange optimal. Sehr 
einfach, aber mehr benötige ich auch gar nicht. Vielen Dank!

Falls jemand noch eine vergleichbare API für den Ethernet-Controller 
posten könnte, wäre ich sehr dankbar.

Gruß,
Thorsten

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

z.B. http://students.cs.byu.edu/~cs460ta/cs460/labs/sockettutorial.html

8Mmul/s sind für einen PC kein Problem. Das sorgt nur für etwas 
Grundrauschen in der Prozessorauslastung. Du solltest wirklich die 
Verarbeitung der Daten dem PC überlassen. So ein PC ist um soviel 
Faktoren schneller als ein AVR32 das du keine sinnvolle Vorverarbeitung 
dort machen kannst.

Matthias

von Mark .. (mork)


Lesenswert?

Hallo,

auf http://www.pronix.de/pronix-255.html gibts eine Einführung in 
Sockets und viele Bespielprogramme.

von Unbekannter (Gast)


Lesenswert?

> Da ich mit den Begriffen wie TCP-Socket und RAW-Socket nicht
> viel anfangen kann,

Nichts für ungut, wenn Dir solche fundamentalen Grundlagen fehlen, wirst 
Du Dich bei Deinem geplanten Projekt sehr schwer tun und mit 
ziemlicher Sicherheit Schiffbruch erleiden.

Evtl. wäre es klüger, erstmal mit etwas einfacherem Anfangen.

Bevor man Laufen lernt, sollte man erst das Gehen gelernt haben...

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
Noch kein Account? Hier anmelden.