I2C STCN75 Sensoren Lpc 936

OP #2558671
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
Angehängte Dateien:
OP #2559475
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);
#2560353
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)
OP #2560435
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;
Angehängte Dateien:

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren