Forum: Mikrocontroller und Digitale Elektronik STM32 und Infrarot Sensor


von Peter S. (Gast)


Lesenswert?

Hallo leute,

ich wollte eine Abstandsmessung durch den Infrarot Sensor VL53L1X haben 
dazu nutze ich den STM32.

https://www.st.com/resource/en/datasheet/vl53l1x.pdf

Der Sensor besitzt eine API die ich nutzen wollte um verschiedene 
Funktionen in meinen Code zu kriegen mein Problem dabei ist das bei den 
eingebundenen cpp's steht das einige Headers nicht zu finden seien 
obwohl sie im gleichen Projekt Ordner sind.

zudem ist in der API noch eine README Datei mit diesem Inhalt:

VL53L1X_API_xxx zip file content:
-   "core" directory contains the driver files
-   "platform" directory contains the platform files.
  Note:   The user has to implement the I2C functions prototyped in the 
vl53l1_platform.c file accordingly.
      For the STM32 target the user may download the X-CUBE-53L1A1 code 
on ST.COM and inspire on the implementation of the I2C functions 
developed
      for stm32 ODE in the vl53l1_platform.c file.
-   VL53L1X API user manual (UM2356)
-   Release Notes


Verstehe aber nicht was ich damit machen soll?


Bitte helft mir dabei weiß echt nicht was ich machen soll.

von Stefan F. (Gast)


Lesenswert?

Vergiss einfach diese Software und programmiere es selbst. Ist 
vermutlich einfacher.

von Peter S. (Gast)


Angehängte Dateien:

Lesenswert?

Warum sollte es einfacher sein mit der API kann ich doch auf fertige 
Funktionen zu greifen oder nicht? Und würde es denn ohne API überhaupt 
programmierbar sein, weil in dem Datenblatt ist extra angegeben das man 
die API benutzen soll?

Und hätte da noch ein paar Fragen hoffentlich könnt ihr mir behilflich 
sein:

1. beim Schaltungsaufbau wie auf dem Bild zu sehen soll I0VDD 1,8V 
betragen und die Versorgung des Sensors 2,8V. Aber die Masse von I0VDD 
wurde gar nicht eingetragen lege ich die Masse auf die Masse des 
Mikrocontroller oder wie funktioniert das?

2. Wozu brauche ich die beiden Pins GPIO1 und XSHUT?

Ich freue mich auf jede Unterstützung Leute

von Stefan F. (Gast)


Lesenswert?

Peter S. schrieb:
> Warum sollte es einfacher sein mit der API kann ich doch auf fertige
> Funktionen zu greifen oder nicht?

Kannst du offensichtlich eben nicht. Je nach dem, wie kompliziert diese 
API ist und wie schlecht sie dokumentiert ist, kann eine 
Eigenentwicklung durchaus schneller klappen.

> Und würde es denn ohne API überhaupt
> programmierbar sein, weil in dem Datenblatt ist extra angegeben das man
> die API benutzen soll?

Die I²C Schnitstelle und ihre Verwendung ist im Datenblatt des Chips auf 
dn ersten Blick klar und deutlich dokumentiert.

Was ich bisher gelernt habe: ST kann Chips bauen, aber Software ist 
nicht deren Stärke.

> 1. beim Schaltungsaufbau wie auf dem Bild zu sehen soll I0VDD 1,8V
> betragen und die Versorgung des Sensors 2,8V. Aber die Masse von I0VDD
> wurde gar nicht eingetragen lege ich die Masse auf die Masse des
> Mikrocontroller oder wie funktioniert das?

Die GND Anschlüsse gehören zusammen gelegt. Bist du sicher, daß du für 
die Kommunikation zwischen dem Sensor und dem Mikrocontroller 1,8V 
verwenden willst? Unterstützt dein Mikrocontroller das überhaupt?

I²C läuft normalerweise auf 5V und häufig auf 3,3V. Aber weniger als 
3,3V habe ich noch nicht gesehen.

> 2. Wozu brauche ich die beiden Pins GPIO1 und XSHUT?

Steht im Datenblatt.

von John (Gast)


Lesenswert?

Stefanus F. schrieb:
> Kannst du offensichtlich eben nicht. Je nach dem, wie kompliziert diese
> API ist und wie schlecht sie dokumentiert ist, kann eine
> Eigenentwicklung durchaus schneller klappen.

Die Chip-Register sind leider nicht dokumentiert.

von Peter S. (Gast)


Angehängte Dateien:

Lesenswert?

Stefanus F. schrieb:
> Die GND Anschlüsse gehören zusammen gelegt. Bist du sicher, daß du für
> die Kommunikation zwischen dem Sensor und dem Mikrocontroller 1,8V
> verwenden willst? Unterstützt dein Mikrocontroller das überhaupt?
>
> I²C läuft normalerweise auf 5V und häufig auf 3,3V. Aber weniger als
> 3,3V habe ich noch nicht gesehen.

Nein der Microcontroller unterstützt das nicht ich würde das dann mit 
einem Spannungsregler machen der dann von 5V oder 3,3V runter regelt auf 
1,8V.
Steht im Datenblatt so oder sehe ich da was falsch? im Standard Mode mit 
1,8V

Da ist auch schon das Problem kann ich das dann auf die gleiche Masse 
legen? und wenn nicht wohin dann? :/

von Johannes S. (Gast)


Lesenswert?

Ist denn der nackte Chip vorhanden oder ist der auf einem Breakoutboard? 
Der Chip ist winzig und nicht einfach zu löten, Auf einem BB wie von 
Adafruit sind schon Spannungsregler und Pegelwandler vorhanden.

von Johannes S. (Gast)


Lesenswert?

ich habe dem Sensor mit dem kleineren Range VL6180 hiermit recht schnell 
Werte entlocken können:
https://os.mbed.com/users/sburg/code/VL6180/

Entweder ist da nur eine einfache Standardconfig drin oder der VL53 ist 
noch komplexer. Für den gibt es bei mbed aber auch eine einfachere Lib:
https://os.mbed.com/users/highroads/code/VL53L0X/

Da fast alle STM32 von mbed unterstützt werden hat mein ein lauffähiges 
Programm damit sehr schnell erstellt.

von Peter S. (Gast)


Lesenswert?

Johannes S. schrieb:
> Ist denn der nackte Chip vorhanden oder ist der auf einem
> Breakoutboard?
> Der Chip ist winzig und nicht einfach zu löten, Auf einem BB wie von
> Adafruit sind schon Spannungsregler und Pegelwandler vorhanden.

Ja der ist auf einem Satel Breakboard die Spannungsversorgung dafür ist 
zwischen 2,8-5V aber das ändert ja nicht an der I0VDD die bleibt bei 
1,8V wie man im Datenblatt von dem Breakboard auf seite 4 sieht :/

https://www.st.com/resource/en/data_brief/vl53l1x-satel.pdf

Johannes S. schrieb:
> ich habe dem Sensor mit dem kleineren Range VL6180 hiermit recht schnell
> Werte entlocken können:
> https://os.mbed.com/users/sburg/code/VL6180/
>
> Entweder ist da nur eine einfache Standardconfig drin oder der VL53 ist
> noch komplexer. Für den gibt es bei mbed aber auch eine einfachere Lib:
> https://os.mbed.com/users/highroads/code/VL53L0X/
>
> Da fast alle STM32 von mbed unterstützt werden hat mein ein lauffähiges
> Programm damit sehr schnell erstellt.

Also ich weiß nicht was genau was dieses mBed ist aber habe einen 
fertigen Code auch schon für Arduino gesehen nur muss ich das in C 
schreiben und mein großes Problem ist echt diese API einzubinden :/

ich bekomme bei sehr vielen Dateien diesen Fehler:
fatal error in include chain (vl53l_ll_device.h): 'vl53l1_types.h' file 
not found

Wobei die entsprechenden Header aber in dem richtigen Ordner sich schon 
befinden.

von Johannes S. (Gast)


Lesenswert?

Peter S. schrieb:
> ich bekomme bei sehr vielen Dateien diesen Fehler:
> fatal error in include chain (vl53l_ll_device.h): 'vl53l1_types.h' file
> not found

In welcher Entwicklungsumgebung? Sind die Includepfade angegeben?

von Peter S. (Gast)


Angehängte Dateien:

Lesenswert?

Johannes S. schrieb:
> In welcher Entwicklungsumgebung? Sind die Includepfade angegeben?

Ja sind sie oder muss ich noch was hinzufügen? Ich arbeite mit Keil

von Johannes S. (Gast)


Lesenswert?

Das sind die includes aber nicht die Suchpfade zu diesen. Die müssten in 
den Projekteinstellungen festgelegt werden. Der Compiler wird nicht in 
dem Verzeichnis aufgerufen wo die Quellen liegen, deshalb nutzt es 
nichts wenn Source und Header im gleichen Verzeichnis liegen.

von Stefan F. (Gast)


Lesenswert?

Peter S. schrieb:
> Steht im Datenblatt so oder sehe ich da was falsch? im Standard Mode mit
> 1,8V

Ja steht da so.

> Da ist auch schon das Problem kann ich das dann auf die gleiche Masse
> legen? und wenn nicht wohin dann? :/

Masse ist Masse. Es gibt normalerweise nicht die eine Masse und dann 
irgendwo eine andere Masse mit anderem potential. Alle Spannungsangaben 
beziehen sich normalerweise auf Masse.

Es gibt auch nur eine Erde. Wenn ich dich beauftrage, einen Pfahl in die 
Erde zu rammen, fragst du auch nicht "in welche Erde"?

von Peter S. (Gast)


Lesenswert?

Johannes S. schrieb:
> Das sind die includes aber nicht die Suchpfade zu diesen. Die
> müssten in
> den Projekteinstellungen festgelegt werden. Der Compiler wird nicht in
> dem Verzeichnis aufgerufen wo die Quellen liegen, deshalb nutzt es
> nichts wenn Source und Header im gleichen Verzeichnis liegen.

Danke dachte es reicht wenn die im gleichen Verzeichnis sind, habe den 
Pfad eingegeben und das hat schon mal geklappt.

Hast du vielleicht den C Code damit man über I²C Werte vom Sensor 
auslesen kann? Du sagtest ja du hattest von einem ähnlichen Sensor schon 
Werte raus bekommen?

Stefanus F. schrieb:
> Masse ist Masse. Es gibt normalerweise nicht die eine Masse und dann
> irgendwo eine andere Masse mit anderem potential. Alle Spannungsangaben
> beziehen sich normalerweise auf Masse.
>
> Es gibt auch nur eine Erde. Wenn ich dich beauftrage, einen Pfahl in die
> Erde zu rammen, fragst du auch nicht "in welche Erde"?

Ja das stimmt schon das Problem dabei ist, dass ich dadurch eine 
Spannungsdifferenz habe, da ich einmal 5V und einmal 1,8V auf der 
gleichen Masse habe, wäre das wirklich okay?

von Stefan F. (Gast)


Lesenswert?

Peter S. schrieb:
> Ja das stimmt schon das Problem dabei ist, dass ich dadurch eine
> Spannungsdifferenz habe, da ich einmal 5V und einmal 1,8V auf der
> gleichen Masse habe, wäre das wirklich okay?

Auf Masse (GND) hast du per Definition Null Volt. Die Spannung misst du 
an der anderen Leitung relativ zu Masse.

von Johannes S. (Gast)


Lesenswert?

Peter S. schrieb:
> Hast du vielleicht den C Code damit man über I²C Werte vom Sensor
> auslesen kann?

Meine Quellen hatte ich schon verlinkt. Benutzt du ein STM Evalboard 
oder custom hardware?

von Peter S. (Gast)


Lesenswert?

Johannes S. schrieb:
> Meine Quellen hatte ich schon verlinkt. Benutzt du ein STM Evalboard
> oder custom hardware?

Achso okay ich verstehe nicht genau was dieses mBed ist sieht mir etwas 
nach arduino aus :/

Ja genau ich verwende einen Evalboard

von Johannes S. (Gast)


Lesenswert?

Peter S. schrieb:
> Achso okay ich verstehe nicht genau was dieses mBed ist sieht mir etwas
> nach arduino aus :/

ja, nur etwas professioneller.

> Ja genau ich verwende einen Evalboard

sag welches und ich versuche ein kleines Projekt zu erstellen.

von Peter S. (Gast)


Lesenswert?

Johannes S. schrieb:
> sag welches und ich versuche ein kleines Projekt zu erstellen.

Das wäre ich echt sehr nett von dir ich verwende den MCBSTM32 das ist 
genau der hier http://www.keil.com/mcbstm32/

Der Mikrocontroller darauf ist der STM32f103RB

von Johannes S. (Gast)


Lesenswert?

dieses Board ist allerdings kein 'mbed enabled' board, ich habe das 
Projekt mal für das Nucleo_F103RB erzeugt.

Das ganze Projekt hat knapp 10MB, die möchte ich hier nicht anhängen, 
habe ich mal in meine DropBox geworfen und sollte hierüber geholt werden 
können:

https://www.dropbox.com/sh/bogy13ykuobionl/AADF-ACg3ZlJfy7eoaDfzCxWa?dl=0
Es ist ein uvision5 Projekt, uvision6 oder alt könnte ich auch 
generieren. Das Ganze sind ein paar Kommandozeilen Befehle, kann man 
auch selbermachen.

Wie die Hardware da angeschlossen ist weiss ich nicht, für D4/D5/D6 
müssen die entsprechenden Pinnamen angegeben werden, einfach im Schema 
Pm_n.
Ein Standard HD44780 TextLCD habe ich auch dazugepackt, auch hier müssen 
die HW Pins angepasst werden.
https://os.mbed.com/components/HD44780-Text-LCD/

Die HW und Keil habe ich nicht, deshalb alles auf gut Glück :-)


Edit:
so müsste das LCD funktionieren, RW muss noch auf 0 gezogen werden.
LED auch noch eingebaut.

1
#include "mbed.h"
2
#include "VL53L1X.h"
3
#include "TextLCD.h"
4
5
//          RS     E      D4    D5    D6    D7
6
TextLCD lcd(PC_12, PC_10, PC_3, PC_2, PC_1, PC_0);
7
DigitalOut lcd_rw(PC_11, 0);
8
9
DigitalOut led1(PB_15);
10
11
Serial pc(USBTX,USBRX, 115200);
12
13
VL53L1X sensor1(D4, D5, D6);  // SDA, SCL, Shutdown. Pinnames can be written as PA_0 etc.
14
15
int main()
16
{  
17
    lcd.printf("Hello World!\n");
18
19
    sensor1.initReading(0x25,50000);
20
21
    while(1)
22
    {
23
        led1 = !led1;
24
    
25
        pc.printf("%d \r\n", sensor1.readFromOneSensor());
26
        lcd.printf("%d \r\n", sensor1.readFromOneSensor());
27
    
28
        wait_ms(50);
29
    }
30
}

von Peter S. (Gast)


Lesenswert?

Vielen Dank für deine Bemühungen, aber ich hätte gedacht das du ein 
reines C Programm davon hast?

von Johannes S. (Gast)


Lesenswert?

nein, damit kann ich nicht dienen, C ist langweilig :)
Aus den Methoden der Sensorklasse kann man natürlich Funktionen machen, 
I2C Routinen liefert Keil doch in seinen Beispielen mit.

von Peter S. (Gast)


Lesenswert?

Ja da hast du auch Recht ich werde mal gucken wie weit ich komme. Vielen 
Dank für deine Bemühungen Johannes du hast mir sehr weiter geholfen und 
auch an jeden anderen der mir behilflich war ein riesiges dankeschön.

von Peter S. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo ich melde mich nochmal wegen dem Sensor. Da ich jetzt wieder seit 
längerem nicht weiter komme wollte ich noch mal euren Rat einbeziehen.

Ich habe ein Tutorial gefunden indem der Verfasser auch zufälliger weise 
den gleichen Controller benutzt wie ich den STM32F103RB, aber auf einem 
Nucleo Board.

Der Artikel dazu: 
https://www.digikey.com/eewiki/display/microcontroller/Adding+the+VL53L1X+Driver+to+an+STM32Cube+Project

Ich bin dazu alles Schrittweise durch gegangen und man muss am ende die 
main selbst verfassen wofür der Auto aber eine Vorlage Parat hält. Mein 
Problem allerdings ist das ich glaube dass ich einfach keine Verbindung 
zum Sensor aufnehmen kann. Ich bin mit dem Debugger Schrittweise 
durchgegangen und sobald es in die Initialisierung des Sensors geht (ab 
Zeile 141)springt er in den HardFault_Handler rein was ich auch nicht 
verstehe.

Ich bitte um eure Hilfe denn mir fällt nichts mehr ein was ich machen 
kann es wird mir auch kein Fehler ausgeworfen ich Hänge mal meine 
umgeänderte main an.

von Stefan F. (Gast)


Lesenswert?

Die Zeile 141 ist ein Funktionsaufruf. Debugge diese Funktion.

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.