Hallo Techniker,
ich habe irgendwie ein Problem wo ich nicht mehr weiter komme.
Ich habe einen Attiny1614 im Einsatz. Dieser soll einen TC74 I²C
Temperatursensor auslesen.
Irgendwie klappt bei mir kein I²C, ich habe keine Ahnung warum. Nach
Datenblatt müsste es klappen wie ich das sehe.
Hat jmd. einen Rat für mich?
Momentan steht nichts im Programm, außer das er per I²C Lesen soll und
dann das Ergebnis via Uart an den PC sendet. Uart klappt, da liegt das
Problem def. nicht!
Ich rufe in der Main einfach die TC74_readTemp(void) auf mit einem Cast
auf int8_t vorher. Auf dem Osci sehe ich auch nicht, das wirklich was
gesendet wird. Da kommt einmal was und dann die ganze Zeit nichts mehr.
Beide Leitungen Idle.
Prozessor läuft auf intermen Takt 20Mhz.
Das ist meine i2c.h
Stefanus F. schrieb:> Brauchst du gar kein STOP Signal?
So wie ich das verstanden habe, macht der das automatisch nach dem
lesen?!
Wunderte mich auch alles, ich finde das I²C recht friemelich beim neuen
Tiny.
> So wie ich das verstanden habe, macht der das automatisch> nach dem lesen?!
Ich habe gerade mal das Datenblatt überflogen. Dort habe ich keinen
Hinweis gefunden, dass das STOP Signal automatisch gesendet wird. Ich
wüsste auch nicht wie das funktionieren soll, da der Master ja keine
Ahnung hat, wie viele Bytes du lesen willst oder ob du nach dem Lesen
eine Repeated-Start Condition senden willst.
I²C war in meinen Augen schon immer friemelig, auf allen
Mikrocontrollern. Bei STM32 ist es noch komplizierter, da läuft keiner
ohne Workarounds.
Ingo L. schrieb:> MosKiller schrieb:>> Auf dem Osci sehe ich auch nicht, das wirklich was>> gesendet wird.> Externe Pull-Ups sind vorhanden?
Ja sind da.
Stefanus F. schrieb:>> So wie ich das verstanden habe, macht der das automatisch>> nach dem lesen?!>> Ich habe gerade mal das Datenblatt überflogen. Dort habe ich keinen> Hinweis gefunden, dass das STOP Signal automatisch gesendet wird. Ich> wüsste auch nicht wie das funktionieren soll, da der Master ja keine> Ahnung hat, wie viele Bytes du lesen willst oder ob du nach dem Lesen> eine Repeated-Start Condition senden willst.>> I²C war in meinen Augen schon immer friemelig, auf allen> Mikrocontrollern. Bei STM32 ist es noch komplizierter, da läuft keiner> ohne Workarounds.
Wie mache ich denn dann das Stop bit? Also ich finde das sehr
undurchsichtig bei dem Tiny, habe da meine Probleme mit.
Uart hingegen ging problemlos komischerweise.
> Wie mache ich denn dann das Stop bit?
Suche mal ein Tutorial. Ich habe diesen µC noch nie benutzt, deswegen
kann da kaum was gutes bei herauskommen, wenn ich mir jetzt nur auf
Basis des Datenblattes etwas aus den Fingern sauge und das nicht einmal
teste.
Ich habe jetzt nochmal etwas rumgedoktort.
Irgendwie ist das seltsam. Also Stop kann man setzen, nach dem Lesen
(wenn man ACK = 0 (NACK) hat, also nichts weiter mehr lesen möchte,
macht der das Stop wirklich selber. Trzd. habe ich es manuell nochmal
reingefügt.
Aber wo das eigentliche Problem liegt (keine Ahnung warum):
Das hintereinander senden, also erst Leseregister vom Slave setzen,
danach auslesen (wie ich das beim Mega sonst auch gemacht habe),
funktioniert hier nicht. Keine Ahnung warum, ob man da noch was
einstellen muss. Kein Plan.
Ich mache es jetzt so, ich setze den Pointer vom TC74 einmal auf das
Ausleseregister am Anfang, danach kann ich dauerhaft auslesen, das
klappt.
Anbei mal mein Code, kann bestimmt jmd. noch gebrauchen/erweitern.
Feedback habe ich nicht drin (Busfehler), brauche ich bei der Anwendung
nicht. Ist nur der Temperatursensor am Bus dran.