Forum: Mikrocontroller und Digitale Elektronik I2C Sensor Probleme


von steff (Gast)


Lesenswert?

Hallo Liebe Community

Habe einen Drucksensor DRMOD-I2C-RV1 von der Firma Hygrosens und bekomme 
keine Daten :-(

Datenleitung und Clockleitung sind über 1,9kOhm an 5V

Hier mein Code:

$programmer = 1

$regfile = "M32def.dat"                                     ' the used 
chip
$crystal = 16000000                                         ' frequency 
used
$baud = 9600

$lib "i2c_twi.lbx"                                          ' Für 
Hardware TWI

Config Twi = 400000                                         ' Init TWBR 
und TWSR

' TWI gleich einschalten, das macht Bascom ansonsten erst beim I2CStart 
!
Twcr = &B00000100                                  ' nur TWEN setzen


Dim Druck As Word
Dim Msb_druck As Byte
Dim Lsb_druck As Byte

' Startausgabe

Do
    I2cinit
    I2cstart
    I2cwbyte &HF1
    I2crbyte Msb_druck
    I2crbyte Lsb_druck
    I2cstop

    Print Msb_druck
    Print Lsb_druck
    Waitms 2000


Loop

End

Wenn ich Msb_Druck und Lsb_Druck ausgebe steht nur "30 0D 0A"

Enthält der Code einen Fehler?

mfg

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

steff schrieb:
> Wenn ich Msb_Druck und Lsb_Druck ausgebe steht nur "30 0D 0A"

Das heisst im Klartext (ASCII): "0" CR LINEFEED

Bascom kenne ich nicht, weiß also auch nicht, was laut code ausgegeben 
werden soll. Es könnte aber sein, dass du nur die Ausgabe eines der 
Print-Kommandos angegeben hast und "30 0D 0A" zweimal ausgegeben wird. 
Ist dies der Fall, bedeutet das nur, dass Msb_Druck und Lsb_Druck gleich 
0x00 sind.

von steff (Gast)


Lesenswert?

Hier der Link zum Datenblatt

http://www2.produktinfo.conrad.com/datenblaetter/500000-524999/502447-da-01-de-DRUCKMODUL_I2C_DRMOD_12C_R10B.pdf

stimmt den die Adresse mit dem ich den Sensor anspreche? wenn ich statt 
&HF1, &H78 einsetze, dann bekomme ich die gleiche ausgabe.

Wenn ich wie hier 
http://www.mikrocontroller.net/attachment/46717/501994_Serial_20Digital_20Interface.pdf 
beschrieben bei

I2crbyte Msb_druck

ein ",ack" einfüge, bekomme ich garkeine Wert mehr angezeigt am Pc

Was um Himmelwillen mach ich da bloß falsch?

von Filth _. (filth)


Lesenswert?

Do
    I2cinit
    I2cstart
    I2cwbyte &H78
    I2crbyte Msb_druck, ack
    I2crbyte Lsb_druck, nack
    I2cstop

    Print Msb_druck
    Print Lsb_druck
    Waitms 2000


Loop

End

Probier es mal so. Die Adresse war meiner meinung nach flasch

von steff (Gast)


Lesenswert?

0x78 ist generell laut Aufbaublatt die Adresse. dann muss noch eine 1 
oder 0 für lesen oder schreiben gesendet werden.

Was bedeutet im Datenblatt "Die Adresse ist als 7 bit Adresse zu 
verstehen, linksbündig und mit maskiertem R/W-Bit lautet die 
Read-Adresse 0xF1" ?

Habe Datenleitung und Clockleitung mit je 1,9kOhm and 5V+ angeschlossen.
Ist das zu wenig/zu viel?

von steff (Gast)


Lesenswert?

Wie fügt man dann MSB_Druck und LSB_Druck zusammen?

Laut Datenblatt Soll das erste Bit (1 bei Fehler) und die letzten 3 
Bit's weggelassen werden.
Da hät ich mir gedacht die Variablen einfach in ein Array schreiben und 
das Array wieder in eine Variable (Word). Wenn in der Word variable aber 
nur Bit's ( 1 und 0) stehen, wie bekomme ich dann eine Dezimalzahl 
draus?

Fragen über Fragen...

Hoffe ihr könnt mir helfen!

mfg

von Steff M. (muerzi)


Lesenswert?

Hallo Alex (und auch alle die das lesen)

Hab deinen Code ausprobiert, funktioniert aber trozdem noch immer nicht. 
Hab Datenleitung und Clockleitung mit je 1K9 (1,9kOhm) an +5 V gehängt.
Hab auch schon andere Ports am AVR probiert.....

Kommunikation sollte so sein (laut Datenblatt)

|----------------------------------------------------------------------- |
|Slaveadress | R/W Bit |  A  | Daten |   A  | Daten | ......... | STOP  |
|master      | master  |slave| slave |master| slave | ......... | master|
|----------------------------------------------------------------------- |

Slaveadresse: 0x78 und mit R/W Bit 0xF1

Wo liegt denn da jetzt der Fehler?

mfg

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Soweit ich weiß sind die Sensoren keine echten i2c-kompatiblen 
Bausteine. Du wirst dich also stoisch an die Angaben des Herstellers 
halten müssen und alle vorgefertigten i2c-Routinen beiseite legen 
müssen.

von Timo (Gast)


Lesenswert?

Prüf doch mal die Systemvariable "Err"; ist diese ungleich 0, liegt ein 
Fehler im Busverkehr vor. Im Zweifelsfall nach jedem I2C Zugriff 
auswerten. Damit solltest Du empirisch in der Lage sein, den Fehler 
(wenn es einer in der Kommunikation ist) auszuwerten.
Ich hab das Datenblatt nicht angesehen, aber Du solltest checken, ob ACK 
oder NACK bei den Leseinstruktuionen gebraucht wird. Normalerweise 
ACK...

Zum Thema Adresse: Normalerweise wird für Lesen das LSB gesetzt, d.h. 
Deine Adresse sollte wahrscheinlich &H79 lauten

Timo

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.