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
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
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
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ß
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.