PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : VIA Epia und Roboternetzboard



Freiheitspirat
08.07.2004, 13:55
Mein Roboter hat gerade sein "Großhirn" ein VIA Epia MII Board bekommen.
Ich habe bereits eine erfolgreiche Übertragung von Motosteuerungsbefehlen und Sensordaten-Abfragen über RS232 realisiert.

Nun möchte ich natürlich gerne die Kommunikation über I2C-Schnittstelle nutzen.
Dazu ein paar Fragen an die I2C-Spezialisten:
- Hat jemand Informationen, wie man die I2C-Schnittstelle des VIA Boards (am besten mit irgend einer DLL in VB unter Win XP) anspricht?
- Muß auf dem RNBFRA die Pullup's entfernt werden ?
- Folgende Pinbelegung ist dokumentiert:
1 +3.3V Sind die Pullups gegen diese Spannung geschaltet ?
2 +3.3V Ist die Spannung weiter relevant ?
3 EL-ON Was kann das sein ? Sowas wie ein WOL (Wakeup on Lan) ?
4 SMBCK an SCL ?
5 SMBDT an SDA ?
6 GND Keine weitere Frage zu diesem Pin O:)

NumberFive
08.07.2004, 18:14
ich frage mich was das bringen soll warum willst du nicht weiter mit der rsr 232 und dem epia board unterhalten ?

http://home.t-online.de/home/uwe.mnich/Wissen/Schaltungssammlung/I2CBus/I2cToRs232/I2cRs232.html
http://www.qsl.net/dg9kma/radioastronomy/i2c_bus_interface/index_g.html

ergebnix von fünf minuten google habe das noch nicht gemacht und so mit kann ich auch kein aussage ob es tut.

Frank
08.07.2004, 18:57
Manchmal macht es schon Sinn mit dem PC auch I2C anzusteuern. Es gibt mittlerweile eine ganze Serie von I2C-Boards und Bausteinen. Ich hab mir dazu ein Dongle-Platinchen gemacht.

Aber den I2C des Via Boards kenne ich auch nicht. Wußte garnicht das die auch schon einen I2C Bus unterstützen.

Freiheitspirat
09.07.2004, 10:27
@NumberFive: Ich will nicht I2C auf RS232 konvertieren !
Das Main-Board unterstützt I2C, nur die Pinbelegung der I2C-Schnittstelle (siehe oben) und die Ansteuerung ist mir nicht ganz klar und leider nirgends dokumentiert.
Wichtigste Gründe sind, wie Frank schon gesagt hat, die unterstützenden Bausteine (z.B. RNBFRA Schrittmotorsteuerung, RNBFRA Servorsteuerung, Ultraschall- und Kompassmodul und div. PCF's) und natürlich die schnelle direkte Übertragung.

@Frank: Was für ein Dongleplatinchen ?

Frank
09.07.2004, 10:42
Hi Freiheitspirat,

mit Dongelplatinchen meinte ich einen Adapter den man auf den RS232 Schnittstelle aufsteckt und der diese Leitungen nutzt um eine i2C Schnittstelle zu ermöglichen. Hinten hat er dann gleich zwei I2C Anschlüsse nach unserer Roboternetz-Norm.
Also es ist kein RS232 -> I2C Wandler, sondern er nutzt nur die Leitungen der RS232 Schnittstelle. Diese können dann per Software wie ein I2C Bus programmiert werden. Für Leute die keinen I2C-Bus am PC haben (was wohl die meisten sind) sicher ne ganz brauchbare Sache um Schrittmotoren, LCD´s, Board und wer weis was zu verbinden.
Wenn ich Platinen und Beispielsoftware habe (dauert noch ca. 14 Tage) biete ich die mal für interessierte an.

Also de Bezeichnungen bei deinem Via-Board sind mir auch nicht ganz schlüssig.
Vermutlich wird zumindest
4 SMBCK an SCL ?
5 SMBDT an SDA ?
6 GND Keine weitere Frage zu diesem Pin

vermutlich so sein wie du es schon geschrieben hast. Mehr braucht man ja nicht. 1+2 ist vielleicht nur zur Versorgung externer Bausteine drauf, die sind vermutlich verbunden. Aber irgendwo sollte ja noch was zur erlaubten Belastung stehen.

Gruß Frank

Freiheitspirat
09.07.2004, 11:31
Hi Frank,

wenn der Dongle fertig ist, interessiert er mich rein wissenshalber.
Leider habe ich noch keine weiter Doku über Belastungen etc. gefunden, deshalb ja meine kleine Anfrag nach irgendwelchen weitergehenden Informationen hier...
Auch wenn diese Verbindung eigentlich die Logische ist, möchte ich ungerne "Try and Error" spielen, wenn ich auch noch nicht mal weiß, wie ich das Ding softwareseitig überhaupt ansprechen kann.

NumberFive
10.07.2004, 12:37
Ok da hatte ich was flasch verstanden. wenn du aber jetzt mit alle geräten selber spricht s warum dann noch der Controller ?

aber egal habe folgendes raus gefunden wenn man mit ic2 und windows such kommt man immer wieder gnaden los bei viedeo raus bist du dir also schicher das man den prot wirklich frei verwenden kann ? den Hardware Viedeo karten verwenden immer den I2C um mit die Tv karten ein zustellen und zu programmieren. Ein dll oder ActivX habe ich nicht gefunden. Probelm ist auch das bei mircosoft nur im DDk die beschreibungen für den bus bekommt. Das heist so mit VB wird da wohl nix zu machen sein.

Wenn du auf msdn.microsoft.com un dann auf suchen IC2 kommst du zu der beschreibung wie man den miniport driver an spricht. vielleicht hilf es dir. da ich mein robi auf ein "normalen" board aufbauen will kann ich da leider auch nix probieren. wo ich ehrlich nach meiner ganzen such aktion am übelegen bin ob ich nicht doch so ein borad nehmen soll.

mal ein frage von mit ist das XP auf dem port das normale oder ein spzielle version ?

Gruß

Freiheitspirat
11.07.2004, 15:22
1. Was meist Du mit "selber sprechen" ?
Wenn Du die beiden Prozessoren auf dem RNB meinst, die sind für die "intelligente" Steuerung der Motorik und Sensorik (Vom PC sende ich z.B. nur "1000 Schritt vor" oder "90 Grad Drehung Links", der Controller setzt dies inkl. Anlauframpe auf die entsprechenden Impulse um und meldet "Erfolg" bei Beendigung...)

2. Ja, den Port kann man garantiert programmieren, habe gerade auf einer Ammi-Seite einen Ansatz mit einer "portio.sys" in C++ gefunden.

3. Was für ein "normales" Board willst Du denn benutzen und wie löst du den Stromverbrauch ?

4. Ich nutze das "normale" XP Professional

NumberFive
11.07.2004, 16:55
Hallo,

ja aber wenn du das so machen willst (ist auch mein ansatz) reicht doch die
"normale" serila schnistelle. das haben zu midestens meine test zur zeit ergeben. aber ich lasse mich da gerne eines anderen belernen.

Das mit dem strom verbrauch scheitert im momet noch an den 3,3 Volt wenn das gelöst habe sage ich bescheit. aber vielleicht steige ich ja noch um habe ich ja schon angedeutet. das problem ist halt ich mag xp nicht
win2000 da kenne ich mich besser aus ich programmiere gern hart an der api und habe angst das das auf dem board nicht geht. wenn du das mit der portio.sys an sprechen kastt muß das über io adressen gehn kannst du mir mal den link hier rein tun würde mich interessieren

Gruß

Freiheitspirat
12.07.2004, 10:54
Ich wollte hier eigentlich nicht über die Philosophie RS232/I2C diskutieren.
(M)Ein US-Modul hat z.B. kein RS232 und die Übertragungsraten sprechen ja nun für sich...

Hier die einzigen Informationen, die ich zu dem Thema gefunden habe:
http://forums.viaarena.com/messageview.cfm?catid=32&threadid=55825

NumberFive
13.07.2004, 21:21
Hallo,

ok ich verstehes zwar nicht war so aber ok deine sache.

was ich aus deinem link lesen kann ist 0CF8H, 0CFCH
sind die Basis adressen des Ic2 interfaces auf dein board.
Das heist hier liegt der chip auf dem Borad. du kann mal gucken ob diese
adresse von ein geräte treiber verwendet wird (gerätemanager).

Wenn nicht wird der port von widows nicht erkannt und ist frei kannst also was mit machen. hast du dir das zip file runter geladen ?

Da ist alles drin was man Braucht kannst du C ?

Im dem zip file ist alles was du brauchst.

Ich könnte dir da auch ein dll für VB draus machen aber das ist mir echt zu jocker da ich das nicht testen kann hier und die zugriffe halt ganz unten stand finden.

Ich kann es halt nicht lassen warum nicht so:

PC -> RS232 -> MAX -> AVR -> IC2 ->US-Modul

Sorry

gruß Numberfive

Freiheitspirat
16.07.2004, 11:11
Hi Numberfive,



PC -> RS232 -> MAX -> AVR -> IC2 ->US-Modul


Warum einfach wenn's auch kompliziert geht ? [-(
Warum Signale, die mit 100Kb/s übertragen werden können auf unter 9.6Kb/s abbremsen und zusätzlich den AVR mit unnötigem Protokollkonvertiere belasten ??????
Nein, nein, der AVR soll sich mal schön um die Motorik und die Auswertung "niederer" Sensoriken (A/D Wandler, IO-Pin's etc.) kümmern und nicht dauern die Kommunikationsleitungen nach irgendwelchen weiterzuleitenden Daten abfragen...

NumberFive
20.07.2004, 18:29
Ok überzeugt aber ich hatte vorher das ein bisschen anders verstanden
hast du den dein Software probelm gelöst ?

Freiheitspirat
26.07.2004, 12:51
Da ich inzwischen rausgefunden habe, das SMB die Abkürzung für ein interessanten "System Management Bus" ist, welches u.A. eine Low-Power-Weiterentwicklung von I2C ist.
Hier für Interessierte einige Infos:
http://www.smbus.org/specs/smbus20.pdf

Hat jemand weitergehendes Interesse einige Eigenschaften dieses Protokolls softwaremäßig auf AVR's umzusetzen ?

@Frank Ihr habt doch mal ein Programm für Servocontroler per I2C angefangen.
Wie weit ist das ?
Ist es möglich die I2C-Routinien im Sourcecode zur Anpassung an das SMB-Protokoll zu bekommen ?

12.08.2004, 15:49
Hallo,

ich bin über eine Google-Suche auf diesen Thread gestoßen und habe bzgl. der I2C-Schnittstelle des Epia-Boards auch nch eine Frage, wo ich hoffe, dass mir diese hier jemand beantworten kann:

Und zwar möchte ich gerne einen Temperatursensors (LM75 von National Semiconductors) an diese Schnittstelle anschliessen. Ich habe SDA mt SMBDT und SCL mit SMBCK verbunden. Masse und Versorgungsspannung sind auch angeschlossen. Wenn den Chip mit dieser Belegung allerdings auf den I2C Anschluss am Mainboard einstecke und den Rechner einschalten, bootet dieser nicht mehr. Erst wenn ich das Clock-Signal entferne startet der Rechner.

Allerdings kann ich dann nicht unter Linux mit LM-Sensors (trotz geladenem Modul) die Temperatur auslesen (ist ja auch irgendwie logisch ohne Clock...).

Hat einer ne Idee, was ich falsch gemacht haben könnte und kann mir einenn Tipp geben, den Sensor zum Laufen zu bekommen?

Vielen lieben Dank und entschuldigt meinen Thread-Drift...

Alexander

Freiheitspirat
13.08.2004, 11:04
Die Belegung hört sich richtig an.
Hast Du auch wirklich alle Leitungen so geschaltet ?
Ich frage nur, weil der Rechner eigentlich nur nicht bootet, wenn er einen Kurzen in der Leitung hat.
Ist SCL wirklich nicht auf Masse oder +3.3V?

Frank
11.11.2004, 23:11
Hi Frank,

wenn der Dongle fertig ist, interessiert er mich rein wissenshalber.


Ist fertig, wenn auch etwas später als gedacht: https://www.roboternetz.de/phpBB2/viewtopic.php?t=4509

http://www.robotikhardware.de/bilder/rnpci2c/rnipc2c_foto300.gif

MR Action
12.11.2004, 08:58
Also den SMBus hat jedes Board - nur diese schönen 5poligen Stecker hat leider nicht jedes Board... bei den meisten muss man Clock und Data dann z.B. am Ram abgreifen in wie weit das nun mit dem I2C vergleichbar ist, weiß ich net... aber interessieren würde mich die möglichkeit darüber RN-Control oder so anzusteuern auch...

Zu der Sache mit den Tempsensoren sollte der Link weiterhelfen: http://www.andreas-lenz.de/casemods/de/max1668.php - das baue ich graude selbst auch auf...

Freiheitspirat
12.11.2004, 10:08
Hallo MR Aktion,

interessanter Link.
Hast Du auch noch ein Link in dem eine Ansteuerungssoftware des SMBUS'es beschrieben ist ?
Die Herausforderung ist ja den etwas komplexeren SMBUS so vereinfacht anzusteuern, das auch I2C-Module, die keine SMBUS-Protokoll-Unterstützung besitzen, ansprechbar sind.

Hallo Frank,

super Dongle !
Nicht so elegant wie eine direkte Bus-Verbindung, aber eine echte Alternative weil so einfach ansteuerbar.
Apropro "einfach", ein paar mehr Kommentare im Sourcecode würde nicht nur Anfängern das Verständnis für die Funktionsweise von I2C sehr erleichtern.
Ich würde zum Beispiel auch gerne mal den Zusammenhang der Delay-Funktion und dem Bustakt näher verstehen.
Welche Busgeschwindigkeit erreichst Du auf einem "normalem" Rechner ?
Gibt es so überhaupt einen "regelmäßigen" Takt ?
Ist der Schleifenwert 255 einfach "Try and Error", oder wie hast Du den berechnet ?

MR Action
12.11.2004, 10:13
Nein, mehr hab ich bisher leider nicht - allerdings gibt es eine Programme die die Temps von den Sensoren auslesen können - währe sonnst ja auch blödsinn.... wie MBM vielleicht kann dir ja der Schreiberling davon weiterhelfen...

Frank
12.11.2004, 10:29
Hallo Frank,

super Dongle !
Nicht so elegant wie eine direkte Bus-Verbindung, aber eine echte Alternative weil so einfach ansteuerbar.
Apropro "einfach", ein paar mehr Kommentare im Sourcecode würde nicht nur Anfängern das Verständnis für die Funktionsweise von I2C sehr erleichtern.
Ich würde zum Beispiel gerne mal den Zusammenhang der Delay-Funktion und dem Bustakt näher verstehen.
Welche Busgeschwindigkeit erreichst Du auf einem "normalem" Rechner ?
Gibt es so überhaupt einen "regelmäßigen" Takt ?
Ist der Schleifenwert 255 einfach "Try and Error", oder wie hast Du den berechnet ?

Hi,
der Code ist im Grunde sehr einfach verständlich weil ich ja die Funktionen zum setzen des Leitungspegels in eine Sub gekapselt habe. Die einzelnen I2C Funktionen bestehen ja aus ganz wenigen Befehlen.

Da der PC ja bei diesem Beispiel als Master arbeitet, ist die Taktrate eigentlich unerheblich. Es muss garkein besonderes Timing eingehalten werden. Den Delay Wert kann man eigentlich noch weiter reduzieren. Es sorgt nur dafür das der Slave keine Flanke verpaßt. Da im Beispiel auch einige While-Schleifen auf den Slave warten, könnte man an einigen oder allen Stellen sogar Delay raus nehmen. Kann man ja einfach austesten, einfach reduzieren bis nix mehr geht.

Die maximale Busgeschwindigkeit wird sicher über das Basic Programm ohnehin nicht erreicht, aber das ist ja meist sowieso nicht notwendig.

Gruß Frank

Freiheitspirat
12.11.2004, 10:46
Also so einfach finde ich das nicht.
Könntest Du z.B. noch das letzte "pulse" in der i2c_SendByte Funktion erklären ?
Wird da nicht das letzte Bit doppelt gesendet ?
So ohne set_sda ?
Wäre das nicht ein Kommentar wert ?

Frank
12.11.2004, 11:21
Du meinst also dieses Funktion:



Sub i2c_SendByte(wert As Byte)
Dim i As Integer
Dim bitmask As Byte

bitmask = 128
For i = 1 To 8
set_sda (0)
If (wert And bitmask) > 0 Then
set_sda (1)
Else
set_sda (0)
End If
bitmask = bitmask / 2
delay
pulse
Next i
delay
pulse
delay
End Sub


Das letzte Pulse dient eigentlich zum Abruf des sogenannten Acknowledge-Bits (kurz immer Ack genannt). Wenn der angewählte Slave die Daten richtig empfangen hat, dann zieht er kurz die SDA Leitung bei diesem Pulse auf Low. Dies kann dann hier im Master als Bestätigung aufgefasst werden, das ein Slave das Byte empfangen hat.

In meinem Beispiel/Treiber wird dieses Ack Bit nicht ausgewertet, daher nur der einfache Pulse Befehl. Es gibt viele Treiber die das Ack-Bit nicht auswerten, so zum Beispiel auch Betriebsystem-Routinen in der C-Control.
Wer es richtig auswerten möchte, kann also vorher die SDA-Leitung auf High legen und dann prüfen. Notwendig ist es nicht unbedingt, manchmal ist es sogar Nachteilig wenn wegen einem nicht angekoppelten Slave Fehler beim Senden gemeldet werden

Aber zum einfachen Anwenden der implementierten I2C-Funktionen ist dieses interne Wissen nicht wichtig - das sei nur gesagt um Einsteiger nicht zu verunsichern wenn sie mal einen I2C Baustein ansteuern wollen.

Gruß Frank

Freiheitspirat
12.11.2004, 14:51
Erstmal vielen Dank für die gut Erklärung.


Aber zum einfachen Anwenden der implementierten I2C-Funktionen ist dieses interne Wissen nicht wichtig

Es gibt aber auch gerade hier im Board eine ganze Menge Leute, die gerne etwas mehr Hintergrundwissen über solche Funktionsweisen erlernen möchten. O:)

Frank
12.11.2004, 15:38
Erstmal vielen Dank für die gut Erklärung.

Es gibt aber auch gerade hier im Board eine ganze Menge Leute, die gerne etwas mehr Hintergrundwissen über solche Funktionsweisen erlernen möchten. O:)

Ja das sehe ich auch so und ist auch gut so! Ich wollte mit der kurzen Anmerkung nur beiden Gruppen gerecht werden. Aus Erfahrung weiß ich wie schnell man was gutes bei Seite legt wenn es sich auf den ersten Blick zu kompliziert anhört ;-)

Michael Holoubek
12.11.2004, 19:17
@ Freiheitspirat

die Verbindung mit einem DS1621 ist auf http://radagast.bglug.ca/epia/epia_howto/x709.html#I2C_Connector
beschrieben was für die Verkabelung hilfreich sein sollte. Im Forum von VIA gibts auch eine Lösung um auf den I2C mit Windows zuzugreifen. Such auf http://forums.viaarena.com/ nach I2C. Einer der Threads heißt "Using I2C port under Windows - Solved" da ist alles erklärt.

MfG
Mike

Freiheitspirat
15.11.2004, 10:24
Hallo Michael,

das Problem ist, das der SMBUS eine erweiterte Spezifikation des I2C ist und eigentlich nicht mit I2C gleich zu setzen ist, wie in den vielen Beschreibungen.
Der DS1621 unterstützt z.B. von sich aus das SMBUS-Protokoll, aber mein Problem ist, das ich reine I2C-Chips OHNE SMBUS-Unterstützung gerne nutzen möchte (Z.B. ein einfaches Ultraschall-Modul srf08).
Die beschrieben Software hatte ich auch schon zu Beginn dieses Artikels als Link gepostet, aber auch sie setzt auf die Spezifikationen des SMBUS und nicht des "nackten" I2C...