pointhi
09.03.2012, 14:52
hy, aktuell versuche ich I2C auf meinem roboter zum laufen bringen. Leider besitze ich keinerlei erfahrung in dieser Weise. Am Oszilloskop werden korrekte signale dargestellt (soweit ich das beurteilen kann), es kommt aber nur keine bzw. eine antwort mit nicht viel antwotcharacter.
Der Code der wenigstens ein paar bit entlocken konnte:
StartI2C();
IdleI2C();
WriteI2C(0xD0);
IdleI2C();
AckI2C();
IdleI2C();
WriteI2C(nZaelerI2C);
IdleI2C();
AckI2C();
IdleI2C();
nTemp = ReadI2C();
IdleI2C();
NotAckI2C();
IdleI2C();
StopI2C();
nZaelerI2C ++;
if(nZaelerI2C>10)
{
nZaelerI2C = 0;
putchar('\n');
}
putchar('T');
putchar('a');
putchar('c');
putint(nTemp);
putchar(';');
als antwort bekomme ich dabei immer die werte 254, 253, 254, 253,...
Der I2C slave ist ein TPA 81 dessen standard-adresse 0xD0 sein soll. Der Master ist ein 18F6520.
Der Aufbau des protokoll ist dabei immer dass er als erstes eine Startbedingung sendet, danach die Moduladresse, danach die registeradresse und danach ausliest. Dazwischen wartet er im Idle immer auf ein abschließen und deutet mit AckI2C an dass er weiter sendet (hab ich wo gelesen und sonst bekomme ich als antwort immer nur 0xFF). Um einen Fehler auszuschließen frage ich dabei mehrere register nacheinander ab.
mfg. pointhi
Der Code der wenigstens ein paar bit entlocken konnte:
StartI2C();
IdleI2C();
WriteI2C(0xD0);
IdleI2C();
AckI2C();
IdleI2C();
WriteI2C(nZaelerI2C);
IdleI2C();
AckI2C();
IdleI2C();
nTemp = ReadI2C();
IdleI2C();
NotAckI2C();
IdleI2C();
StopI2C();
nZaelerI2C ++;
if(nZaelerI2C>10)
{
nZaelerI2C = 0;
putchar('\n');
}
putchar('T');
putchar('a');
putchar('c');
putint(nTemp);
putchar(';');
als antwort bekomme ich dabei immer die werte 254, 253, 254, 253,...
Der I2C slave ist ein TPA 81 dessen standard-adresse 0xD0 sein soll. Der Master ist ein 18F6520.
Der Aufbau des protokoll ist dabei immer dass er als erstes eine Startbedingung sendet, danach die Moduladresse, danach die registeradresse und danach ausliest. Dazwischen wartet er im Idle immer auf ein abschließen und deutet mit AckI2C an dass er weiter sendet (hab ich wo gelesen und sonst bekomme ich als antwort immer nur 0xFF). Um einen Fehler auszuschließen frage ich dabei mehrere register nacheinander ab.
mfg. pointhi