PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit I2C Sensor DRMOD-I2C-RVI



muerzi
06.02.2010, 19:03
Hallo Liebe Community

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

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

Hier mein Code:


$programmer = 1
$regfile = "M32def.dat"
$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

Datenblatt ist hier (http://www2.produktinfo.conrad.com/datenblaetter/500000-524999/502447-da-01-de-DRUCKMODUL_I2C_DRMOD_12C_R10B.pdf).

Spezifikationen zur Übertragung sind hier (http://www.mikrocontroller.net/attachment/46717/501994_Serial_20Digital_20Interface.pdf)

Wenn ich Msb_Druck und Lsb_Druck ausgebe steht nur "30 0D 0A" also "0" in dez.

Wenn ich unterdruck am anschluß des Sensors anlege ändern sich die werte nicht. (MSB_Druck und LSB_Druck)

Enthält der Code einen Fehler?

Ich hoffe ihr könnt mir helfen!

mfg [/url]

021aet04
06.02.2010, 20:01
Versuche einmal als Adresse 0x78 (&h78)
Im DB steht

Die Standard-Adresse des Bausteins ist 0x78,
unter dieser Adresse ist der Baustein immer anzusprechen.
Die Adresse ist als 7 bit Adresse zu
verstehen, linksbündig und mit maskiertem R/WBit
lautet die Read-Adresse 0xF1.
Zusätzlich kann bei der Konfiguration im Werk eine
zweite Adresse programmiert werden, unter
welcher der Drucksensor angesprochen werden
kann.
Ab der Adresse 0x78 (7 bit Adresse), können 2
Bytes gelesen werden.

MfG Hannes

muerzi
08.02.2010, 09:53
Hallo

Das hab ich auch schon probiert.

Was bedeutet aber nun 0xF1 ???

0x78 ist ja 7Bit

Eine Adresse besteht meines Wissen aber aus 8 Bit.
Im Db steht mit 1 kan gelesen und mit 0 geschrieben werden.

0x78 = 1111000
0xF1 = 11110001

In der Spezifikation zur Übertragung ist auch der genau ablauf zu finden.
Da versteh ich nicht wie ich nach dem ich die Slaveadresse geschrieben habe das "Ack" vom Slave abfangen soll. Hab gedacht das geht nur bei "I2Crbyte" !?!

Fragen über Fragen

mfg

StevieL
09.02.2010, 11:14
Hallo,

klar, du brauchst eine 8-Bit-Adresse. Probier mal als Adresse 0xF0. Damit sollte es bei Bascom eigentlich gehen.
Du kannst nach dem

I2cstart
I2cwbyte &HF0

ja abprüfen, ob ein ACK vom Slave gekommen ist. Hierzu einfach die Variable Err auswerten:

If Err = 0 Then...

muerzi
09.02.2010, 11:17
Danke.

Werds am Abend probieren.

Meldet sich der Slave immer mit "ACK" bevor er die ersten Daten sendet (und alles funktioniert), oder ist das eine Sonderheit dieses Sensors?

thx für deine Hilfe!

mfG

StevieL
09.02.2010, 11:43
Hallo,

die Slaves "lauschen" ja auf dem Bus. Wenn nach der Startsequenz die Adresse des Slaves gesendet bestätigt der "ich bin hier". Eventuell muss man das Auslesen der Werte noch anpassen, aber zuerst solltest du die richtige Adresse haben.

Du kannst den Bus auch mit dem Scanprogramm aus den Bascom-Samples überprüfen. Da wird auch die ERR-Variable ausgewertet:


'------------------------------------------------------------------
' (c) 1995-2007 MCS
' i2cscan.bas
'purpose : scan all i2c addresses to find slave chips
'use this sample in combination with twi-slave.bas
'Micro: Mega88
'------------------------------------------------------------------
$regfile = "M88def.dat" ' the used chip
$crystal = 8000000 ' frequency used
$baud = 19200 ' baud rate

Dim B As Byte

Config Scl = Portc.5 ' we need to provide the SCL pin name
Config Sda = Portc.4 ' we need to provide the SDA pin name

'we use the TWI pins of the Mega88
$lib "i2c_twi.lbx" ' we do not use software emulated I2C but the TWI

Print "Scan start"
For B = 0 To 254 Step 2 'for all odd addresses
I2cstart 'send start
I2cwbyte B 'send address
If Err = 0 Then 'we got an ack
Print "Slave at : " ; B ; " hex : " ; Hex(b) ; " bin : " ; Bin(b)
End If
I2cstop 'free bus
Next
Print "End Scan"
End

rolber
09.02.2010, 21:47
@StievieL
Finde deine Beiträge speziell zu I2C schon ziemlich professionell !!
Habe meine I2C Kommunikation auch aus deinen Beiträgen abgeleitet.
Weiter so.
Besten Dank für deine Erklärungen !!

Roland

StevieL
10.02.2010, 18:35
Hallo Roland,

danke für die Blumen. Jetzt muss ich nur noch den Sensor von muerzi zum Laufen bekommen ;-)

StevieL
13.02.2010, 10:07
...da keine Antwort mehr kommt, scheint es jetzt zu funktionieren. Oder er hat die Lösung in einem der anderen Foren bekommen, in denen er das Problem auch gepostet hat...

muerzi
15.02.2010, 06:58
Hallo an alle und DANKE für eure Hilfe.

Besonderen dank an StevieL.

Da ich in den letzten Tagen sehr beschäfftigt war hatte ich leider keine Zeit eine Rückmeldung zu geben.

Hab den Sensor und die mikrocontroller nicht bei mir zuhause sondern in der Bastelwerkstatt bei einem Freund, deshalb konnte ich nocht nichts ausprobieren!

Werde aber Dienstag oder spätestens Donnerstag probieren und sofort bericht erstatten!

Köpft, Hängt oder Steinigt mich (wie auch immer) das ich das selbe Problem ZUVOR schon in anderen Foren gepostet habe!

Wird es hier nicht gerne gesehen?

mfg und nochmals VIELEN VIELEN DANK!

StevieL
15.02.2010, 17:22
Hallo muerzi,

kein Problem. Ich denke, so lange du nicht zeitgleich in mehreren Foren postest, hat da niemand ein Problem mit. Ich hatte schon gesehen, dass die Beiträge an unterschiedlichen Tagen geschrieben wurden. Hatte mich nur gewundert, dass keine Antwort kam und war deshalb davon ausgegangen, dass die Lösung möglicherweise in einem anderen Forum gefunden wurde.

muerzi
15.02.2010, 17:39
Hallo.

In den anderen Foren waren nur threads die ich selbst schon probiert -ergoogelt habe. also wenig ahnung von der thematik.
Deine Posts (hab mir viele angesehen) sind aufschlussreich und teils kreativ.
warum gibts nicht mehr aktive poster wie dich?

Morgen abend kann ich deine codes/vorschläge testen.

meld mich dann!

mfG

p.s bin nicht nur der "frager" sondern gebe auch feedback auf hilfreiche posts.
melde mich auf alle fälle wieder!
p.s.s und danke sagen kann/tu ich auch. finde das das sein muss

muerzi
18.02.2010, 06:09
Hallo Leute

Am Dienstag haben wie unsere "Bastelrunde" ausgelassen --> Faschingsdienstag. Ob ich heute am Abend dazu kommen werde ist fraglich da ich mich (scho seit einigen tagen) sehr kränklich fühle.
Sobald es Neues zu Berichten gibt, erfahrt ihr es als erstes!

mfG

muerzi
20.02.2010, 21:52
Hallo Leute

Datenleitung und Clockleitung sind ja mit je 1 Widerstand (1,9kOhm) mit +5V verbunden. Beim Nachmessen ist aufgeallen das kein Strom rüber fließt. Ist vlt. der Sensor kaputt?

lg

muerzi
20.02.2010, 21:52
Hallo Leute

Datenleitung und Clockleitung sind ja mit je 1 Widerstand (1,9kOhm) mit +5V verbunden. Beim Nachmessen ist aufgeallen das kein Strom rüber fließt. Ist vlt. der Sensor kaputt?

lg

021aet04
20.02.2010, 23:37
Hast du ein Oszilloskop, damit du die Signale messen kannst?

MfG Hannes

muerzi
21.02.2010, 09:15
hallo hannes. leider hab ich keines :-(

was könnte ich sonst noch probieren?

lg

StevieL
21.02.2010, 11:05
Hallo muerzi,

deinem Posting entnehme ich, dass der Sensor auch auf das Scanning-Programm nicht anspricht. Kommt das hin? Wie lang sind denn deine SDA- und SCL-Leitungen?

muerzi
21.02.2010, 11:44
die letungen sind 10-15cm lang.

und auf das scanprogramm hat der sensor nicht angesprochen.
hab dann step = 2 auf step = 1 geändert ohne erfolg. hab auch verschiedene ports des atmega durchprobiert und trozdem keine lösung.

mfG

StevieL
21.02.2010, 11:48
Hallo muerzi,

ach ja, SCL und SDA solltest du sicherheitshalber noch festlegen, auch wenn du die Hardware-TWI benutzt. Und mit der Geschwindigkeit würde ich zum Testen erst mal runter gehen:



Config Sda = Portc.1
Config Scl = Portc.0
Config Twi = 100000

I2cinit


Das i2cinit aus der Schleife kann raus. Das reicht einmal beim Programmstart.

StevieL
22.02.2010, 05:33
Hallo,

ich habe mir das Datenblatt nochmal genau durchgelesen. Den Sensor müsste man auf das Protokoll (SPI oder I2C) einstellen. Dazu hat man wohl nach dem Einschalten 20ms Zeit. Wenn man das nicht macht, schaltet er in einen Modus, in dem beide Kommunikationsmöglichkeiten bestehen. Dann gibt es aber auch kein ACK vom Sensor...

muerzi
22.02.2010, 12:14
Hey StevieL

Wahnsinn das du dich da so sehr drum bemühst! VIELEN VIELEN Dank...

Hab in der Doku folgendes gefunden:

Table 3: Additional command set for serial digital interface
Note: These commands are only available in CM.
CM is set by command START_CM (0x72hex) as first command after power on.

Bedeutet das, dass ich direkt nach i2cstart den command (0x72) schreibe oder zuerst die adresse (0x78) und dann den command?
Der sensor hat die selbe stromversorgung wie der Atmega. Soll ich den Sensor also "per Software" einschalten?



Config Sda = Portc.1
Config Scl = Portc.0


Hab ich auch schon probiert...
Hab den Code vom "Scan-programm" modifiziert (um daten zu empfangen) aber hat nichts gebracht.

Wärs nicht einfacher über "SPI" mit dem Sensor zu kommunizieren???

Wieder mal fragen über Fragen.
Aber wer nie fragt bleibt ewig dumm.

mfG

Richard
22.02.2010, 12:52
laut meiner Info sind die Pull-up recht kritisch und sollten (?) 10k
betragen.

Gruß Richard

021aet04
22.02.2010, 18:29
Bedeutet das, dass ich direkt nach i2cstart den command (0x72) schreibe oder zuerst die adresse (0x78) und dann den command?

Du musst immer zuerst die Adresse senden, da der Sensor nicht weiß, ob er gemeint ist

Wird etwas gesendet? Du kannst das prüfen, indem du ein Multimeter (DMM) die Spannung an SCL bzw SDA misst. Wenn etwas gesendet wird, wird die gemessene Spannung niedriger. Wenn nichts gesendet wird sollte die Spannung an SCL bzw SDA 5V betragen. Notfalls könnten wir mein Oszi auch verwenden.

MfG Hannes