Forum: Mikrocontroller und Digitale Elektronik I2C STCN75 Sensoren Lpc 936


von Simon R. (simon12345)


Angehängte Dateien:

Lesenswert?

Hi,

versuche mit einem Lpc936 mehrere STCN75 Temperatursensoren über I2C 
auszulesen.
Vielleicht kann mir ja jemand von euch weiterhelfen wie ich das besser 
machen könnte, weil das Programm manchmal hängt oder die Sensoren nicht 
ausließt.
Möchte nur die aktuelle Temperatur auslesen ohne Kommastelle.

MfG
Simon

von Jörg S. (joerg-s)


Lesenswert?

Wo bleibt er denn hängen, im Interrupt?

von Simon R. (simon12345)


Lesenswert?

In der while Schleife I2STAT geht auf 0x68 was bedeutet: Buszugriff geht 
beim SLA+R im Master Mode veloren, eigene SLA+R wurde empfangen, mit ACK 
wurde geantwortet.

Hab die while Schleife jetzt mal raus gemacht und durch eine 
verzögerungs Zeit ersetzt auserdem noch drei weitere Sensoren 
angeschlossen. Nun hab ich das Problem das nur der letzte Sensor nicht 
funktioniert. Bei meinem Testprogramm geht er aber.

delay_time(I2CDELAY);
temp_w (0x90);
delay_time(I2CDELAY);
temp_r (0x91);
delay_time(I2CDELAY);
....
temp_w (0x9E);
delay_time(I2CDELAY);
temp_r (0x9F);
delay_time(I2CDELAY);

von Simon R. (simon12345)


Lesenswert?

Hab mich wohl getäscht irgendwie funktioniert das nur machmal. Hat 
jemand noch eine Idee was ich falsch mache?

von Jörg S. (joerg-s)


Lesenswert?

Simon R. schrieb:
> In der while Schleife I2STAT geht auf 0x68 was bedeutet: Buszugriff geht
> beim SLA+R im Master Mode veloren, eigene SLA+R wurde empfangen, mit ACK
> wurde geantwortet.
Ich versuch das mal zu verstehen...

Du sendest z.B.
1
temp_w (0x90);
2
temp_r (0x91);
3
while(fertig==0);
Und während er in der while Schleife ist, kommt ein Interrupt in dem das 
Register I2STAT mit 0x68 gelesen wird. Da dieser Fall nicht programmiert 
ist, hängt er sich auf. Richtig?

0x68 ist allerdings auch ein Code für den Slave Receiver, das sollte bei 
dir jedoch nie vorkommen da der Controller ja immer Master ist...


> Nun hab ich das Problem das nur der letzte Sensor nicht
> funktioniert. Bei meinem Testprogramm geht er aber.
Welches Testprogramm?


Bis du sicher das ACK auf 1 muss?
1
I2CON = 0x44; // (STO, STA, SI = 0, ACK =1)

von Simon R. (simon12345)


Angehängte Dateien:

Lesenswert?

Hi Jörg ersmal danke für die Antwort.

> Und während er in der while Schleife ist, kommt ein Interrupt in dem das
> Register I2STAT mit 0x68 gelesen wird. Da dieser Fall nicht programmiert
> ist, hängt er sich auf. Richtig?

Sollte eigentlich eine Stoppbedingung erzeugen. Der fehler ist auch 
nicht mehr aufgetreten.

default:
I2CON = 0x54; // Stoppbedingung setzen (STO =1)
break;

von Simon R. (simon12345)


Lesenswert?

Habs hinbekommen muss wohl doch alle Bits auslesen.

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.