mikrocontroller.net

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


Autor: Tony (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Abdul K. (ehydra) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Tony (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh ich stimmt das habe ich ja ganz vergessen.

Also ich benutze einen RNmega2560 und programmiere mit Bascom.

Autor: Abdul K. (ehydra) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Anselm 68 (anselm68)
Datum:

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

Autor: Anselm 68 (anselm68)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier zum gucken mal mein Code um ein i²c ADC abzufragen..

Sub I2c_adc
        I = 0
       I2cstart
          I2cwbyte I2c_adress_w                             'Schreibadresse adressieren
          I2cwbyte I2c_init                                 'Init senden
       I2cstop
'          Waitms 150                                        'laut DatenBlatt min 11SpS
Try2:
        Waitms 1
       I2cstart
         I2cwbyte I2c_adress_r                              'Leseadresse adressieren
         If Err = 1 Then Errorflag.1 = 1                    'bei Adressierfehlern -> Errorflag 1 setzen
         I2crbyte Msbyte , Ack                              'Highbyte lesen
         I2crbyte Lsbyte , Ack                              'Lowbyte lesen
         I2crbyte Configbyte , Nack                         'Configbyte lesen
      I2cstop

  If Configbyte.7 > 0 Then I = I + 1                        'Counter Anzahl Abholversuche
  If I > 100 Then Errorflag.2 = 1                           'Mehr als 100 Versuche -> Errorflag 2 setzen
  If Configbyte.7 > 0 Then Goto Try2                        'Loop bis Daten abholbereit sind
  If Configbyte.7 = 0 Then                                  'Cb.7 = 0 -> Daten abholbereit
   Adc1 = Makeint(lsbyte , Msbyte)                          'zusammensetzen der 2 Byte zu einem 16Bit-Wort
  End If
End Sub I2c_adc

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

Gruß Anselm

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.