Forum: Mikrocontroller und Digitale Elektronik LM75 an PIC16F886


von Sven S. (stepp64) Benutzerseite


Lesenswert?

Hallo,

bin langsam am verzweifeln. Ich versuche seit drei Tagen einen 
Temperatursensor LM75 an einem PIC 16F886 zum laufen zu bekommen. Das 
Teil sagt aber einfach nix. Noch nicht mal ein ACK kommt zurück. Ich 
möchte das Teil gern mit dem MSSP Modul (I2C) ansprechen. Programmieren 
tue ich in Assembler. Hochziehwiderstände sind an SDA und SCL dran 
(1k8). Verdrahtung ist auch ok (schon 5 mal überprüft). So langsam weis 
ich nicht mehr weiter. Probiert habe ich schon mit 400kBit und mit 
100kBit. Irgendwie sieht es so aus, als ob das Teil nicht antwortet. Das 
Prog sendet die Startcondition, dann die Adresse mit gesetztem R/W-Bit. 
Hier wird nun schon nicht das ACK-Bit im STATUS-Register gesetzt. 
Scheinbar fühlt sich mein LM75 nicht angesprochen. Das Lesen des 
Datenwortes hängt sich dann auf (er wartet in einer Endlosschleife auf 
das erste Byte).

Hat eventuell jemand einen Link oder eine Idee was ich falsch machen 
könnte? Im Netz findet man dazu auch nichts. Nur immer die Ansteuerung 
ohne MSSP Modul oder in C.

Danke für die Hilfe
Sven

von Dieter W. (dds5)


Lesenswert?

Bist Du sicher dass die Adresse stimmt?

In vielen Datenblättern steht die Adresse als 7 Bit Wert drin, den muss 
man erst ein Bit nach links schieben und dann das R/W Bit als LSB 
dazutun.

Ich hatte bei einigen Bausteinen auch schon mit Adresse 0 Erfolg, das 
ist wohl so eine Art Brotkasten ähhh broadcast Adresse.

von Sven S. (stepp64) Benutzerseite


Lesenswert?

Adresse ist 0x90 bzw 0x91 (wenn man Lesen will) und sollte so stimmen 
(1001 A2,A1,A0,R/W). Das mit Adresse 0 könnte ich noch testen. Da an den 
Bus aber noch zwei weitere ICs sollen (EEprom und Busexpander) geht das 
später nicht mehr, da die 0 tatsächlich als eine Art Broadcast 
reserviert ist.

von Sven S. (stepp64) Benutzerseite


Lesenswert?

Habs gerade mal noch schnell probiert. Mit Adresse 0 antwortet der LM75, 
sendet allerdings als Temperatur immer nur 0xFF in beiden Bytes. Nun 
muss ich nur noch rausfinden, warum der auf Adresse 0x90 nicht 
antwortet. Eventuell haben ja meine 3 Adresspins nicht alle 
Massekontakt. Werd ich wohl noch mal nachlöten müssen. Für heute ist 
aber erst mal Schluss. Danke für den Tip.

Sven

von Sven S. (stepp64) Benutzerseite


Lesenswert?

Ich habe jetzt mal den Sensor getauscht. Anfangs genau das selbe Bild. 
Nach einigem hin und her habe ich mal das Bit SMP im Register SSPSTAT 
gesetzt:
1
In I2C Master or Slave mode:
2
1 = Slew rate control disabled for standard speed mode (100 kHz and 1 MHz)
3
0 = Slew rate control enabled for high speed mode (400 kHz)

Nun scheint es zu gehen, auch wenn der Sensor scheinbar etwas zu viel 
anzeigt (ich glaub dem nicht das es in meinem WZ gerade 25°C sind).

Wenn mir jetzt noch einer erklären könnte, was es mit dem Bit auf sich 
hat. Ich kann das nicht so ganz richtig deuten. Scheint eine Art 
Kontrolle der Flanken im Signal zu sein? Oder habe ich das jetzt falsch 
übersetzt? Was ich nicht verstehe, der PIC steuert den BUS mit 400kHz 
an. Laut Datenblatt wäre es nicht richtig dieses Bit zu setzen. Damit 
geht es aber. Was ist also richtig?

Gruß
Sven

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

Super-Erklärung für dieses Bit...
Ich habe hier auch lange mit I2C gekämpft und habe jetzt eine Verbindung 
mit 33kHz (über 5m im Fahrzeug) installiert.
Dabei hilft es, mit einem Oszillokop den Kurvenverlauf zu sehen!
Und das letzte große Debugging habe ich dann mit einem Logicanalysator 
(Po.Scope) gemacht. Hat lange gedauert, bis ich rausfand, daß die 
Compiler-Routinen für das LCD einige TRIS-Bits (immer wieder) setzen, 
die das MSSP-Modul zum K..... findet.

Aber dieses Problem wirst Du nicht haben.

Warum 400kHz ?

von Sven S. (stepp64) Benutzerseite


Lesenswert?

Hihi, jetzt weis ich wenigstens, warum ich mich innerlich so weigere auf 
eine Hochsprache umzusteigen. Bei Assembler weiß ich wenigstens welches 
Bit ich falsch eingestellt habe und muss nicht damit rechnen das der 
Compiler denkt, er müsste das irgenwie anders machen. Ich muss 
allerdings auch zugeben, dass ich am Anfang dieses Bit schon einmal 
umgestellt hatte und es auch nicht ging. Da hatte allerdings das Banking 
wieder mal zugeschlagen *** grrrrr ***. Ich hatte nicht beachtet das 
SSPSTAT in Bank 1 liegt.....

Im Moment läuft das ganze auf 100kHz. Das Bit ist auch gesetzt. Warum 
sollte ich nicht 400kHz nehmen? Der Chip kann das eigentlich ab. Ich 
werde es aber auf 100kHz lassen, da ich auch noch einen Uhrenschaltkreis 
einen EEPROM und einen Busexpander anschließen will. Der 
Uhrenschaltkreis kann nur 100kHz. Wenn die dann erst mal alle 
miteinender spielen, bin ich in meinem Projekt einen Schritt weiter :-)

Sven

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.