Hallo zusammen, ich versuche gerade einen VL6180 TOF Sensor am laufen zu bekommen. Jedoch scheitert es nach dem ersten schreiben eines Registers. Ich bekomme danach nur immer ein NACK des Sensors. Nachdem ich zwischen den ersten paar Schreibvorgänge ein 10 Millisekunden-Delay eingefügt habe, gehts es bis zum nächsten weiter. Weiß einer, woran es liegen könnte? Gruß Sascha
Hast du mal die Qualität der Signale am I²C Bus kontrolliert? Wie viel Ohm haben deine Pull-Up Widerstände? Schon 100 kHz Bustakt versucht? Vielleicht gucke ich falsch, aber ich sehe im DB keine Dokumentation von Register 0x0096. Wird der Fehler vielleicht durch Beschrieben eines ungültigen Registers ausgelöst?
Hi, also bei 100kHz ist dasselbe. Widerstände sind 4.7k. Das Register wird von ST so empfohlen: AN4545 vl6180x basic ranging application note stmicroelectronics Seite 24. Die Initialisierung funktioniert mit HAL einwandfrei. Ich habe nur die Routinen zum lesen und schreiben angepasst. Daher wundert es mich ja. Es ist das gleiche Board, gleiche Hardware. Nur diesmal ohne HAL. Wenn ich die Warteschleife nach
1 | VL6180x_writetRegister(I2C_Port,Adresse, VL6180X_SYSTEM_FRESH_OUT_OF_RESET, 0x00); |
entferne, bekomme ich schon ein NACK. Gruß Sascha
:
Bearbeitet durch User
Sascha S. schrieb: > Die Initialisierung funktioniert mit HAL einwandfrei. Dann ist es bestimmt am einfachsten, die Kommunikation mit einem Logic Analyzer aufzuzeichnen und mit beiden Bibliotheken zu vergleichen. Irgendwas muss ja anders sein. Dein obiges Diagramm bestätigt, dass der Mikrocontroller wie erwartet/programmiert sendet und das der Sensor wirklich nicht mit ACK antwortet. Wie kommuniziert denn das LCD, hoffentlich über die selben I/O Pins?
Aus dem Datenblatt: "The default I2C address is 0x29 (7-bit)." Warum sprichst du die Adresse 0x50 an?
Das Display läuft über SPI. Ohne Probleme. Der Rest wie ADC, Timer etc, funktioniert ebenfalls wie gewünscht. Nur mit dem I2C will es nicht so.
Stefan ⛄ F. schrieb: > Aus dem Datenblatt: > "The default I2C address is 0x29 (7-bit)." > > Warum sprichst du die Adresse 0x50 an? Da war es, das Brett vorm Kopf :) Beim ganzen Testen, da selber den Fehler reingehauen. Dank dir....
Da frage ich mich jetzt aber, wer denn die ersten 3 Bytes acknowledged hat. Hast du noch andere Sensoren an dem Bus? Unabhängig davon empfehlen ich trotzdem stärkere Pull-Ups, um auf mindestens 1 mA zu kommen.
Da ist nur das Eeprom 24C08 auf dem STM32 Board, das Board was auch auf deiner Seite beschrieben ist "STM32F103VET6 Minimum System Development Board".
Ah, das große Board. Bekommt man das noch mit original Chip? Ich bin neugierig: Warum benutzt du nicht die HAL?
Guten Morgen, ja, ist noch mit originalem Chip. Mit HAL komm ich zwar schneller ans Ziel, jedoch stark überladen. Daher wollte ich mal die Bare Metal Variante probieren. Bis auf den dummen Fehler mit der Adresse gehts ja auch und lern den Controller ein bissl besser kennen.
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.