Forum: Mikrocontroller und Digitale Elektronik VEML6030 meldet nur 0x0000 im Output über I2C


You were forwarded to this site from EmbDev.net. Back to EmbDev.net
von Michael M. (ucmichael)


Angehängte Dateien:

Lesenswert?

Hallo liebe Gemeinde,

ich bin neu hier und hoffe ich erstelle meinen Beitrag an der richtigen 
Stelle.

Ich habe folgendes Problem:
Ich möchte einen VEML6030 (Ambient Light Sensor von Vishay) über meinen 
µC (r5f104GK von Renesas) auslesen. Leider erhalte ich als Antwort immer 
nur 0x0000.

Vom Sensor habe ich
- Datenblatt https://www.vishay.com/docs/84366/veml6030.pdf
- Applikation Note 
https://www.vishay.com/docs/84367/designingveml6030.pdf

Einen ebenfalls am I²C Bus angeschlossenen Lis3DH kann ich ohne Probleme 
auslesen. Beide Sensoren kann ich einzeln vom Bus via Jumper trennen.
Die Beschaltung am ADDR Pin ist "nur" um den richtigen Footprint zu 
bekommen. In Wirklichkeit handelt es sich um einen 3-Pin Jumper.

- SDA & SCL haben 10k als Pullup
- SDA ist an µC Pin 18 (P14/RxD2/SI20/SDA20/TRDIOD0/(SCLA0)) 
angeschlossen
- SCL ist an µC Pin 17 (P15/PCLBUZ1/SCK20/SCL20/TRDIOB0/(SDAA0))
- INT is an µC Pin 36 (P140/PCLBUZ0/INTP6) angeschlossen

Die grundlegenden Funktionen habe ich mit dem Codegenerator von Applilet 
erstellt.

Was ich bisher erreicht habe:
- Der Lis3DH reagiert auf read und write Befehle wie er soll
- Abhängig vom level des ADDR Pins erhalte ich eine ACK auf dem Bus.
- Vom Grundsatz scheint die Kommunikation mit Ack und NAck richtig zu 
sein.

Vermutlich sehe ich den Wald vor lauter Bäumen nicht, so wirklich kann 
ich mir aber nicht erklären, wo der Fehler liegt.

Ich hoffe einer von euch hat den Baustein bereits zum Laufen gebracht 
und kann einen zielführenden Tipp geben.

Danke schon einmal für eure Hilfe.

Gruß
Michael

von Michael M. (ucmichael)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich habe mein Problem lösen können.
Am Ende lag es daran, dass ich das Read nicht richtig implementiert 
hatte.
Nach dem "Send" kam ein "Stopp". Dies darf aber nicht. Ich habe daher 
die automatisch generierte Send Methode angepasst um zu wissen ob ich 
Sende oder "nur" das Register für das lesen setze.

Jetzt funktioniert es jedenfalls.
Für alle, die nach mir ein ähnlich gelagertes Problem haben:
Im Anhang findet ihr eine Abbildung der funktionierenden Kommunikation.

Gruß & bleibt gesund

von Oliver S. (oliverso)


Lesenswert?

Michael M. schrieb:
> Nach dem "Send" kam ein "Stopp". Dies darf aber nicht.

Klarer Fall von "Kaum macht mans richtig, schon funktionierts"

Michael M. schrieb:
> Ich habe daher
> die automatisch generierte Send Methode angepasst

Eine einigermaßen sinnvolle i2c-lib sollte doch die Möglichkeit 
send-Repeated Start bieten.

Oliver

von Michael M. (ucmichael)


Lesenswert?

Hallo Oliver,

das die Lösung auf diesem Niveau liegen musste war mir schon beim 
Schreiben klar - Verstehen muss man das ja dann trotzdem ;)

Als I²C Lib würde ich das auch nicht bezeichnen. Applilet generiert den 
Code für den µC und setzt die meisten Register. Für die meisten Aufgaben 
deutlich einfacher, als alles aus dem Handbuch einzeln abzuleiten.
Das ein "Receive" in diesem Fall ein "Send mit ohne Stopp und gefolgtem 
Start" ist steht leider nirgends und wenn man nicht wirklich weiß, was 
man als richtig erwartet, dann ist das Debuggen von Schnittstellen schon 
was schwieriger ;)

Kurioser weise hat der andere Sensor sich ja zur Arbeit überreden 
lassen.

Hoffe die Nachwelt kann aus diesem Thread was lernen.

Gruß

von Spess53 (Gast)


Lesenswert?

Hi

>Das ein "Receive" in diesem Fall ein "Send mit ohne Stopp und gefolgtem
>Start" ist steht leider nirgends ...

Dann duch mal nach der AppNote

UM10204 I2C-bus specification and user manual

Da steht alles notwendige über I²C drin.

MfG Spess

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.