Probleme mit dem Kompass CMPS03

OP #1148327
Hallo, Leute!

Ich kämpfe seit Monaten gegen meinem Kompass CMPS03, angeschloßen an 
einem ATMega128.
Am Anfang dachte ich, dass das Programm, das ich geschrieben habe, 
spinnt (es ist gewachsen wie verrückt [vom ATMega8, zum Mega32 zum 
Mega128 und immer neue Geräte angeschloßen...] und konnte nix mehr 
verstehen).

Vor eine Woche habe ich mich entschieden, das Programm neu zu schreiben, 
aber die Probleme sind geblieben... :(

Also, ich versuche die Werte über I2C zu lesen. Um es zu machen (mit den 
Library vom Fleury), habe ich folgende Funktion geschrieben:

/**
* Empfängt den eingegebenen Anzahl vom Bytes vom dem angegebenen 
I2C-Device/Register
*
* @param uint8_t addr        Die I2C-Device
* @param uint8_t nRegister   Der I2C-Register
* @param uint8_t nBytes      Der Anzahl der zu empfangenen Bytes
* @param uint8_t *values     Die empfangenen Bytes
*/
void readI2CRegister(uint8_t addr, uint8_t nRegister, uint8_t nBytes, 
uint8_t *values)
{
  uint8_t iRet = 0, i = 0, nRead = 0;

  if(i2c_start(addr + I2C_WRITE))
    return;
  if(i2c_write(nRegister))
    return;
  delayUS(50);
  iRet = i2c_rep_start(addr + I2C_READ);
  if(!iRet)
  {
    while(nRead < nBytes)
    {
      if(nRead == (nBytes - 1))
        i = i2c_readNak();
      else
        i = i2c_readAck();
      values[nRead++] = i;
    }
  }
  i2c_stop();
}

die ich wie folgendermaßen aufrufe:

readI2CRegister(COMPASSI2C, 2, 2, values);

wo COMPASSI2C die I2C-Adresse des Kompasses ist.
Ich lese die Werte, aber nach einer Weile (30 Sekunden bis eine Stunde, 
total zufällig!) das Programm hängt und hilft nur ein Reset...

Mit dem Debugger kann ich nur sehen, dass genau die I2C-Kommunikation 
das Problem verursacht, da der µC immer dort hängt.

Nun habe ich mich entschieden, euch zu fragen...

Ist meine Funktion readI2CRegister falsch?
Wenn nicht, hat jemand eine Ahnung, warum das Programm so spinnt?

Damals hatte ich auch ein kurzes Testprogramm für den Kompass probiert 
und hat funktioniert, jetzt finde ich es nicht mehr...
Aber ich denke, ich mache nix anderes als dieses Testprogramm (außer, 
dass das Testprogramm im Basic geschrieben ist, und mein Programm im C).

Ich bin für eure Hilfe wirklich dankbar!

Grüße
Luca Bertoncello

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.