Forum: Mikrocontroller und Digitale Elektronik STM32F1 Probleme mit Frings I2C-Bus Routine


von Sascha S. (sascha_s126)


Angehängte Dateien:

Lesenswert?

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

von Stefan F. (Gast)


Lesenswert?

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?

von Sascha S. (sascha_s126)



Lesenswert?

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
von Stefan F. (Gast)


Lesenswert?

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?

von Stefan F. (Gast)


Lesenswert?

Aus dem Datenblatt:
"The default I2C address is 0x29 (7-bit)."

Warum sprichst du die Adresse 0x50 an?

von Sascha S. (sascha_s126)


Lesenswert?

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.

von Sascha S. (sascha_s126)


Lesenswert?

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....

von Stefan F. (Gast)


Lesenswert?

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.

von Sascha S. (sascha_s126)


Lesenswert?

Da ist nur das Eeprom 24C08 auf dem STM32 Board, das Board was auch auf 
deiner Seite beschrieben ist "STM32F103VET6 Minimum System Development 
Board".

von Stefan F. (Gast)


Lesenswert?

Ah, das große Board. Bekommt man das noch mit original Chip?

Ich bin neugierig: Warum benutzt du nicht die HAL?

von Sascha S. (sascha_s126)


Lesenswert?

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
Noch kein Account? Hier anmelden.