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.
Vergiss einfach diese Software und programmiere es selbst. Ist vermutlich einfacher.
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
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.
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.
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? :/
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.
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.
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.
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?
Johannes S. schrieb: > In welcher Entwicklungsumgebung? Sind die Includepfade angegeben? Ja sind sie oder muss ich noch was hinzufügen? Ich arbeite mit Keil
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.
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"?
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?
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.
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?
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
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.
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
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 | }
|
Vielen Dank für deine Bemühungen, aber ich hätte gedacht das du ein reines C Programm davon hast?
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.