Bonjour tout le monde,
J'ai besoin d'utiliser un composant rtc pour avoir une horloge à dispo sur ma carte, j'ai pris comme composant un dallas ds 1302 que j'utilise en I²C. Enfin que je tente d'utiliser car je n'arrive à rien ... Le micro est un pic 18F67J50 que je programme en C avec MPLAB et C18 comme compilateur.
Pour le coté hardware c'est bon mais je galère coté soft ...
J'ai pas mal gratté sur le net mais j'ai rien trouvé qui m'ai beaucoup aidé, voila mon code :
Si quelqu'un peux m'aider ce serait cool parce que là je galère vraiment. Je n'aime pas rester bloquer sur ce petit composant de rien du tout, alors aidez moi s'il vous plaît ...Code:#include <p18f67j50.h> #include <i2c.h> #include <delays.h> unsigned char i,byte; void Init(void); void Ecrire_rtc(unsigned char adrW,unsigned char data); unsigned char Lire_rtc(unsigned char adrR); void main() { Init(); Ecrire_rtc(0x80,0x00); // Ecriture des secondes Ecrire_rtc(0x82,0x39); //.. minutes Ecrire_rtc(0x84,0x14); // .. heure Ecrire_rtc(0x86,0x01); // .. etc Ecrire_rtc(0x88,0x04); Ecrire_rtc(0x8A,0x03); Ecrire_rtc(0x8C,0x09); Ecrire_rtc(0x8E,0x00); for(i=0;i<10;i++) Delay10KTCYx(255); if(Lire_rtc(0x58)==0x14) PORTAbits.RA1=1; Delay10KTCYx(255); // Attente Delay10KTCYx(255); Delay10KTCYx(255); while(1) { if(Lire_rtc(0x38)==0x40) PORTAbits.RA1^=1; Delay10KTCYx(255); Delay10KTCYx(255); } } void Init() { TRISA=0xFD; // RA1 pilote une led PORTA=0; TRISG=0xF0; // RG1 > cablé sur pin CE de la rtc PORTG=0; TRISC=0xBB; // I²C PORTC=0xD0; OpenI2C1(MASTER,SLEW_OFF); SSP1ADD=49; } void Ecrire_rtc(unsigned char adrW,unsigned char data) { PORTGbits.RG1=1; Delay1KTCYx(10); IdleI2C1(); StartI2C1(); IdleI2C1(); putcI2C1(adrW&0xFE); IdleI2C1(); if(SSP1CON2bits.ACKSTAT) StopI2C1(); putcI2C1(data); IdleI2C1(); if(SSP1CON2bits.ACKSTAT) StopI2C1(); StopI2C1(); Delay1KTCYx(10); PORTGbits.RG1=0; } unsigned char Lire_rtc(unsigned char adrR) { PORTGbits.RG1=1; Delay1KTCYx(10); IdleI2C1(); StartI2C1(); IdleI2C1(); putcI2C1(adrR||0x01); IdleI2C1(); if(SSP1CON2bits.ACKSTAT) StopI2C1(); byte=ReadI2C1(); SSP1CON2bits.ACKDT=1; StopI2C1(); return byte; Delay1KTCYx(10); PORTGbits.RG1=0; }
-----