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
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.
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?
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
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?
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
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.