mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit dem Kompass CMPS03


Autor: Luca Bertoncello (lucabert)
Datum:

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

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.