Forum: Mikrocontroller und Digitale Elektronik I2C und PIC16F887


von mantis (Gast)


Lesenswert?

Hallo,

ich habe ein Problem mit dem I2C-Bus. Ich will mehrere LM75 Sensoren 
ansteuern. Um zu überprüfen welcher Sensor angeschlossen ist sende ich 
die Adresse vom LM75 auf dem I2C Bus und warte aufs ACK Signal - quasi 
wenn Sensor angeschlossen ACK ja / Sensor nicht angeschlossen ACK nein. 
Dieses ACK signal frage ich im Pir1, SSPIF ab.

Programmschleife sieht ungefähr so aus:

check_sen
movfw  W_Sensor0     ; Schreibadresse von Sensor0 laden (1001 001 0)
call   I2C_take      ; I²C-Bus Übernehmen
call   check_send    ; Adresse senden
btfss  PIR1, SSPIF   ; ACK schon empfangen? bzw. meldet sich der Sensor
goto   Sen_fail0     ; nein -> Sensor nicht angeschlossen !
bcf    PIR1, SSPIF   ; ja   -> Sensor ist angeschlossen !
bsf    Sen_con, 0    ; Makiere Sensor0 als vorhanden
call   I2C_free      ; Bus wieder freigeben
return

check_send
bsf     STATUS, RP0   ; Bank 1 !
bcf     SSPCON2, RCEN ; Daten Empfang ausschalten
bcf     STATUS, RP0   ; Bank 0 !
movwf   SSPBUF        ; Sendebuffer laden
call    wait50        ; Warte auf ACK (50µs)
return

Nun zum Problem: ich bekomme !immer! ein ACK signal egal ob ich 
überhaupt ein Senor angeschlossen habe oder nicht. Weiß einer warum ?

Gruß mantis

von mantis (Gast)


Lesenswert?

ich habe inzwischen Hardware seitig alles überprüft es muss ich um ein 
Software problem handeln.

Pullup widerstände =4,7Kohm

SDA und SDC sind an den richtigen Pins angeschlossen

mit dem Oszillopskop messe ich immer ein LOW signal wenn ich den PIC im 
reset lasse messe ich ein HIGH signal. Es sieht so aus als ob das MSSP 
modul nicht startet bzw keinen clk bekommt.
Als Oscilator nehme ich den interen OSC der auf 4 MHz default 
eingestellt ist.
Evtl. mal mit externen (20Mhz) probieren !?

Weiß wirklich keiner rat ?

Gruß Mantis

von usuru (Gast)


Lesenswert?


von mantis (Gast)


Angehängte Dateien:

Lesenswert?

@ usuru

Das ist genau die Seite nach der ich meine I2C einstellung vorgenommen 
habe. Tutorials oder Erklärungen habe ich schon sehr lange und 
ausführlich gesucht. Deshalb wollte ich mal im forum nach rat suchen ;)

Hier ist mal meine I2C test routine vielleicht sieht ja jemand meine 
Fehler.

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.