Ok,
ich habe mal Probeweise die C- Dateien und die Header aus der nibobeelib die für die Kommunikation sind in mein Projekt mit eingebunden und verwende nicht mehr die vor-kompilierten Versionen. Zusätzlich eingebunden habe ich nun:
bgx1_protocol.h
bgx1.h
bgx1.c
i2cmaster.h
i2cmasternc
kompilieren und binden unter Eclipse mit der AVR- Toolchain funktioniert so weit. Mein obiges Testprogramm wird anstandslos kompiliert und übertragen - läuft genau so weit wie gestern. Da mir nichts anderes eingefallen ist als den Code Stück für Stück nachzuvollziehen habe ich mich auf die Suche gemacht und mit den LEDs als Rückmeldung ein wenig getestet.
Die Funktion``bgx1_init()`` läuft zumindest bis zu dem return- Statement durch. Bei dem Statement
Code:
return (i2c_status() == I2C_SUCCESS) && (HIBYTE(version) == HIBYTE(BGX1_VERSION));
Hängt es sich auf. Unterteile ich den Code in 3 Schritte.
Code:
uint8_t var1 = i2c_status() == I2C_SUCCESS;
uint8_t var2 = HIBYTE(version) == HIBYTE(BGX1_VERSION);
return (var1 && var2)
kommt er aus dem Schritt in dem die Versionen für das ``HIBYTE`` Verglichen werden sollen nicht mehr heraus. Das Makro dafür sieht folgendermaßena aus
Code:
#define HIBYTE(x) (uint8_t)(((uint16_t)x)>>8)
Allerdings hört hier mein Verständnis so langsam auf. Der Code ist in keinster Weise kommentiert, und meine Kenntnisse in C ist sind leider nicht mehr berauschend. Hinzu kommt das ich mich mit I2C nicht so weit auskenne das ich die Kommunikation selber programmieren könnte. Auch das nachvollziehen fällt mir nicht gerade leicht.
Für mich sieht es so aus als ob die Kommunikation mit dem I2C nicht richtig initialisiert wird. Zumindest kann ich keine Kommunikation mehr auf den LEDs des bgx1- Moduls erkennen. Normalerweise ist das möglich.
Auch die Datenblätter der beiden ATmega habe ich mal überflogen, aber die Register sehen mir ziemlich gleich aus. Habe ich evtl. etwas übersehen?
Lesezeichen