Forum: Mikrocontroller und Digitale Elektronik I2C lib Fleury


von Josef J. (Gast)


Lesenswert?

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

von Pete K. (pete77)


Lesenswert?

Zeig mal Deine Hardware/Schaltplan.
Gibt es Compiler-Fehlermeldungen?

: Bearbeitet durch User
von Josef J. (Gast)


Angehängte Dateien:

Lesenswert?

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)

von Peter D. (peda)


Lesenswert?

Unterstützt das SW-I2C denn das Clock Stretching?

von Josef J. (Gast)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

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.

von Josef J. (Gast)


Lesenswert?

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