Ich versuche gerade einen SHT30 Temperatur/Luftfeuchtigkeitsfühler zum Laufen zu bringen. Hardware ist ein Atmega8 mit 8 MHz. Die typische Kommunikation läuft folgendermassen ab: i2c_init, dann wird ein zwei byte command gesendet, und dann werden einige bytes und die CRC gelesen. Das funktioniert auch alles prachtvoll mit der TWI engine des Atmega und der Fleury I2C lib (twimaster.c und i2cmaster.h). Nun versuche ich auf derselben Hardware die reine Softwarelösung zum Laufen zu bringen (i2cmaster.h und i2cmaster.S). Aber, da geht nichts mehr: i2c_int funktioniert, das erste command byte geht mit ACK Antwort raus, aber bereits das zweite command byte bekommt ein NAK zurück. Ein i2c_rep_start löst das Problem für das zweite command byte, aber danach hängt der Bus wieder beim Lesen. Die Busfrequenz ist ca 83 KHz (5.5 + 6.5 us), das Oszillogramm sieht gut aus, die Pull-Ups sind 4.7k, die physische Buslänge 15 cm. Hat jemand von euch einen Tip? Gruss Josef
Zeig mal Deine Hardware/Schaltplan. Gibt es Compiler-Fehlermeldungen?
:
Bearbeitet durch User
Hier ist das Schaltbild, nix besonderes. Bei der Softwarelösung benutze ich dieselben Pins wie mit der TWI Engine. Keine Compiler Fehlermeldungen. opt = s # Optional compiler flags. CFLAGS = -g -O$(OPT) -funsigned-char -funsigned-bitfields -fpack-struct \ -fshort-enums -Wall -W -Wstrict-prototypes -Wa,-ahlms=$(<:.c=.lst)
Peter D. schrieb: > Unterstützt das SW-I2C denn das Clock Stretching? i2c_read_stretch: sbis SCL_IN, SCL ;loop until SCL is high (allow slave to stretch SCL) rjmp i2c_read_stretch Sollte es tun, aber ich habe auch kein command mit SCL stretching gesendet. Beim SHT3x muss Clock Stretching extra aktiviert werden.
Setz einfach mal die I2C Frequenz DRASTISCH runter, so auf 1kHz oder so. Da sollte kein Clock stretching auftreten. Die I2C Signale sollte man mit einem Oszi prüfen. Wenn man keins hat, tun es auch LEDs mit 4k7 Vorwiderständen. Aber richtige anschließen. Kathode an SDA/SCL und Anode über VOrwiderstand an VCC. Da sieht man zumindest wenn SCL auf LOW hängen bleibt.
Die I2C Frequenz habe ich schon mal runtergesetzt, aber nicht so drastisch. Vielleicht sehe ich dann auf dem Scope doch etwas. Digital Scope und Logikanalysator, beide mit I2C Decoder, habe ich. Gibt es denn jemanden, der die Fleury Software Lösung schon mal eingesetzt hat ? Wie bereits beschrieben, die Fleury HW-Lösung mit der TWI Engine funktioniert einwandfrei, und nach seiner Beschreibung sollte die SW-Lösung direkt funktionieren, wenn FPU Frequenz, Timing und Ports angepasst sind.
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.