Forum: Mikrocontroller und Digitale Elektronik Auslesen eines Drucksensors über I2C


von Tony (Gast)


Angehängte Dateien:

Lesenswert?

Guten Tag,
Ich habe einen Drucksensor den man über I2C auslesen kann.
Jedoch bekomme ich das nicht richtig hin.

Ich habe mein Programm und den Auszug aus dem Datenblatt als Anhang 
beigefügt.

Kann mir jemand sagen was ich falsch mache ?

Gruß Dennis

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Wenn du irgendwen ernstlich ansprechen möchtest, dann würde ich 
zumindest verraten welchen Controller du verwendest und wie der Sensor 
genau heißt. Ist das was kundenspezifisches, was du nicht verraten 
darfst?

von Tony (Gast)


Lesenswert?

Oh ich stimmt das habe ich ja ganz vergessen.

Also ich benutze einen RNmega2560 und programmiere mit Bascom.

von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Da kann ich dir leider nicht weiterhelfen.

An deiner Stelle würde ich mal ein anderes i2c-Device anschließen, z.B. 
ein EEPROM. Rein als Gegencheck. Und vielleicht brauch der Bus auch noch 
seine Pull-Up R's??
Das BASCOM scheint die i2c-Funktionalität bereits in Firmware vorhanden 
zu haben. Schau dir halt die Fehlercodes an und berichte was denn nun 
genau nicht geht?
Wo ist das Datenblatt des Sensors?

von Anselm 6. (anselm68)


Lesenswert?

Deine BascomRoutine sieht ja auf den ersten Blick korrekt aus.
Was ist denn die genaue Fehlererscheinung?

von Anselm 6. (anselm68)


Lesenswert?

Hier zum gucken mal mein Code um ein i²c ADC abzufragen..

1
Sub I2c_adc
2
        I = 0
3
       I2cstart
4
          I2cwbyte I2c_adress_w                             'Schreibadresse adressieren
5
          I2cwbyte I2c_init                                 'Init senden
6
       I2cstop
7
'          Waitms 150                                        'laut DatenBlatt min 11SpS
8
Try2:
9
        Waitms 1
10
       I2cstart
11
         I2cwbyte I2c_adress_r                              'Leseadresse adressieren
12
         If Err = 1 Then Errorflag.1 = 1                    'bei Adressierfehlern -> Errorflag 1 setzen
13
         I2crbyte Msbyte , Ack                              'Highbyte lesen
14
         I2crbyte Lsbyte , Ack                              'Lowbyte lesen
15
         I2crbyte Configbyte , Nack                         'Configbyte lesen
16
      I2cstop
17
18
  If Configbyte.7 > 0 Then I = I + 1                        'Counter Anzahl Abholversuche
19
  If I > 100 Then Errorflag.2 = 1                           'Mehr als 100 Versuche -> Errorflag 2 setzen
20
  If Configbyte.7 > 0 Then Goto Try2                        'Loop bis Daten abholbereit sind
21
  If Configbyte.7 = 0 Then                                  'Cb.7 = 0 -> Daten abholbereit
22
   Adc1 = Makeint(lsbyte , Msbyte)                          'zusammensetzen der 2 Byte zu einem 16Bit-Wort
23
  End If
24
End Sub I2c_adc

Bist du dir sicher dass dein Config korrekt ist?
1
'Register auswählen
2
   I2cstart
3
   I2cwbyte Cmps_slaveid
4
   I2cwbyte 2
5
   I2cstop

Gruß Anselm

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.