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.