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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.