Zitat Zitat von cauboy
zum kompassmodul cmps03.
wie kalibriert man den über i2c? ich habe zwar das datenblatt von roboter-teile.de jedoch weiß ich nicht, wie man zum beispiel "255 in Reg15" schreibt.
gibt es da ein beispielprogramm? genial wäre es wenn es in Interactive C wäre.
Hallo cauboy!

Ich habe den schon kalibriert über I2C, habs nacher bereut, irgend etwas klappt nicht so ganz wie es soll und mein Istwert liegt jetzt bei ca. 1700-2300 aber nicht mehr bei 0 bis 3599 wie es sein sollte und davor war. Ich habe die Register aber mit einer CC2.0 geschreiben. In anderen Sprechen ist das ähnlich zu schreiben nur andere Syntax. Das Protokoll ist wie folgt:

Code:
Const DevWR_CMPS03   = C0h       ' Kompassmodul CMPS03
Const DevRD_CMPS03   = C1h

Function KalibKompass()
  ' Kompass kalibrieren
  Define Antwort As Byte
  Print "Kompass kalibrieren"
#DoN
  Print "Auf N drehen"
  Input Antwort
  IIC.Init
  IIC.Start
  IIC.Send DevWR_CMPS03
  IIC.Send 15
  IIC.Send 255
  IIC.Stop
  IIC.Off
#DoO
  Print "Auf O drehen"
  Input Antwort
  IIC.Init
  IIC.Start
  IIC.Send DevWR_CMPS03
  IIC.Send 15
  IIC.Send 255
  IIC.Stop
  IIC.Off
#DoS
  Print "Auf S drehen"
  Input Antwort
  IIC.Init
  IIC.Start
  IIC.Send DevWR_CMPS03
  IIC.Send 15
  IIC.Send 255
  IIC.Stop
  IIC.Off
#DoW
  Print "Auf W drehen"
  Input Antwort
  IIC.Init
  IIC.Start
  IIC.Send DevWR_CMPS03
  IIC.Send 15
  IIC.Send 255
  IIC.Stop
  IIC.Off
#DoW
  ' Kalibrierung flashen
  IIC.Init
  IIC.Start
  IIC.Send DevWR_CMPS03
  IIC.Send 15
  IIC.Send 0
  IIC.Stop
  IIC.Off
  Print "Kalibrierung beendet"
End Function

Function StartSonarMeasure()
  ' Entfernungsmessung am Sonar starten
  With IIC
    .Init
    .Start               ' Starten der Messung in cm
    .Send DevWR_SRF08
    .Send 81
    .Stop
    Pause 4              ' 65ms warten auf Messergebnis
    .Off
  End With
End Function

Function GetSonarDistance()
  ' Den Ultraschall-Sonar lesen
  With IIC
    .Init
    .Start               ' Lesevorgang anstossen
    .Send DevWR_SRF08
    .Send 2
    .Stop
    .Start               ' 1. Echo lesen
    .Send DevRD_SRF08
    .Get SonarDistanzH
    .Get SonarDistanzL
    .Stop
    .Off
  End With
  Return SonarDistanz
End Function
Ich schreibe folgende Sequenz:

- Startbit
- C0 Hex (Schreiben)
- 15 Dez (Register)
- 255 Dez (Wert zum Kalibrieren)
- Stopbit

Das in jeder Richtung (N/S/O/W in unbestimmter Reihenfolge) und dann das Sichern der Kalibrierungsdaten mit:

- Startbit
- C0 Hex (Schreiben)
- 15 Dez (Register)
- 0 Dez (Wert zum Sichern der Kalibrierungsdaten)
- Stopbit

Aber aufpassen, ich hab mir meinen damit ver-kalibriert! Falls jemand den Haken sieht bitte melden, ich wäre auch dankbar für jeden Hinweis.

Grüsse Wolfgang