Forum: Mikrocontroller und Digitale Elektronik I2C an STM32F100RB konfigurieren


von Michael (Gast)



Lesenswert?

Hi,
ich brauche dringend Hilfe!

Ich muss zwei VL6180X Sensoren mit einem STM32F100RB verbinden. Die 
Kommunikation soll über den I2C Bus laufen. Die notwendigen 
Datenblätter-Seiten der I2C Kommunikation vom Microcontroller und Sensor 
sind angefügt. Für die Sensoren nochmal zusätzlich das ganze Datenblatt.

Beide Sensoren sollen Gesten wahrnehmen und später eine Rechts- und eine 
Linksbewegung unterscheiden können. Dieses wird auf einem Display 
ausgegeben.
Die Unterscheidung und die Displayausgabe traue ich mir später schon 
noch selber zu. Mit einem Display habe ich bereits gearbeitet.

Jedoch scheitert es an der I2C Konfiguration. Ich habe leider noch nie 
vorher mit einem I2C Bus gearbeitet und bin ein bisschen überfordert. 
Könnt ihr mir da weiterhelfen?

Auch würde ich gerne wissen, wie ihr die Sensoren abfragen würdet.
a) Polling Mode
b) Interrupt Mode

Arbeitet der Microcontroller im Master oder im Slave Modus?
Bei Polling ist das eindeutig, Master. Aber lässt sich mit Polling diese 
zwei Sensoren überhaupt auswerten? Schließlich frägt er beide 
hintereinander zyklisch ab und was ist, wenn in dem Moment meine 
Bewegung schon abgeschlossen ist oder der falsche Sensor zuerst "true" 
zurückliefert?

Daher würde ich mit Interrupts arbeiten. Sobald einer von beiden 
Sensoren eine Bewegung wahrnimmt, wird einer von zwei möglichen 
Interrupts ausgelöst. Dieser wird mit einem Timer wieder verlassen. 
Falls vor Ablauf des Timers der zweite Sensor einen Signalwert bekommt, 
löst das dann eine Display-Ausgabe aus. So irgendwie von der Idee her. 
Oder würdet ihr anders vorgehen?

Dennoch: die Konfiguration ist für mich erst einmal das Wichtigere.
Was brauche ich alles?

Und wie muss ich später mit den verschiedenen Registern arbeiten? 
Config? Control? Data-Register? Welche brauche ich einmalig, welche 
permanent, welche gar nicht.

Ich blicke irgendwie nicht ganz so durch.


Danke schon mal im Voraus!

von A. B. (Gast)


Lesenswert?

Da empfehle ich zuerst mal beim "Erfinder" des I2C-Busses nachzulesen:

http://www.nxp.com/documents/user_manual/UM10204.pdf

von gleiser (Gast)


Lesenswert?

Hi,
STM32F100RB kann 2xI2C ->doppelter Durchsatz
"Range Interrupt mode" hört sich für Gestensteuerung gut an.
Für die STMs gibt es doch die Peripherie-Lib und Examples.
Such doch mal "P-NUCLEO-6180X1" oder "Proximity Sensors Software" bei 
st.com
Da gibt es die SW zum Download für STM32F401RE, also fast das selbe :-)
Ansonsten freut sich deren Support über Anfragen (auch für das Evalkit
zum Spielen).
VG gleiser

von Dr. Sommer (Gast)


Lesenswert?

Michael schrieb:
> Arbeitet der Microcontroller im Master oder im Slave Modus?
Wie (fast?) alle anderen Sensoren auch, ist der ein I²C Slave, d.h. der 
Mikrocontroller muss Master sein.

Michael schrieb:
> Daher würde ich mit Interrupts arbeiten.
Davon würde ich abraten... Bei den alten STM32 Mikrocontrollern 
(STM32F1, F2, F4) ist die asynchrone Nutzung der I²C Peripherie mit 
Interrupts extrem kompliziert. Bei den neuen (F3, F7, L0, L1) geht das 
viel einfacher, da wäre das für einen I²C-Anfänger machbar. Daher würde 
ich dir raten das synchron mit den diversen Busy-Waiting-Funktionen der 
HAL/SPL zu machen. Das Auslösen der Übertragung kannst du natürlich 
trotzdem noch mit dem Interrupt Modus des Sensors machen.

Ich sehe jetzt erst: Es gibt sogar direkt von ST eine Library für den 
Sensor (na sowas). Benutz die doch einfach:
http://www.st.com/resource/en/product_presentation/vl6180x_api_integrationguide.pdf

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.