PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C Register Lesen



pointhi
19.04.2012, 14:58
Hy, ich muss spätestens in einer Woche das I2C Sensor-Modul TPA81 auslesen können (Temperatur-Spaltenarray)
Leider hab ich noch nie mit I2C gearbeitet.

Das ganze soll auf einem PIC 18F6520 laufen, aber das Protokoll ist ja überall gleich.

Moduladresse: 0xD0 (standardadresse)
Register: 0x00 - 0x09

Die Frage ist wie ich das ganze sende. Ich verwende das standardinterface und eine libary von HITECH-PIC18

Es gibt folgende Funktionen:

void AckI2C(void);
void NotAckI2C(void);
void OpenI2C(unsigned char sync_mode, unsigned char slew );
void CloseI2C(void);
unsigned char DataRdyI2C(void);
void IdleI2C(void);
unsigned char ReadI2C(void);
void RestartI2C(void);
void StartI2C(void);
void StopI2C(void);
unsigned char WriteI2C(unsigned char data_out );

Hoffe sie sind soweit vom Namen selbsterklärend. Es werden daten über den bus gesendet (sehe ich im oszi), leider hab ich keine ahnung wann ich ein Acknowledge, NotAcknowledge, Start/Stop, ect. senden muss

villeicht wisst ihr wann man (auser am anfang "start" und am ende "stop") was senden muss. Wäre wichtig, in einer Woche ist der Wettbewerb und das ist das einzige nicht funktionierende system

mfg. pointhi

pointhi
19.04.2012, 15:26
Habs mittels einer englischen wiki noch geschafft:

so schaut der code derzeit aus. Werde ihn noch verbessern, aber er funktioniert prinzipiell

int nReadI2C()
{
IdleI2C(void);
StartI2C();
IdleI2C(void);
WriteI2C(0xD0);
IdleI2C(void);
WriteI2C(3);
IdleI2C(void);
RestartI2C();
IdleI2C(void);
WriteI2C(0xD1);
IdleI2C(void);
chTemp[1] = ReadI2C();
IdleI2C(void);
putint(chTemp[1]);putchar('\n');
StopI2C();
}