Après n'avoir pas réussi à faire fonctionner le moindre code trouvé sur le net sur le protocole I2C j'ai décider de faire ça moi même vu que le protocole est assez simple. Je pense avoir un bon début mais avec un signal d'horloge (i2c) trop faible du coup mon premier essai avec de communication avec un MPU6050 ne fonctionne pas (aucun d'acknowledgement). Même si je n'ai pas lu qu'il y avait une fréquence minimum pour le signal d'horloge, j'aimerais déjà que ce soit conforme pour éliminer ce problème.
Donc pour avoir un signal d'horloge j'utilise le timer0 avec ce code:
Code : Tout sélectionner
PSA=1; //Timer Clock Source uses no Prescaler
T0CS=0; //Prescaler gets clock from FCPU (Fosc/4=5MHz)
T08BIT=1; //8 BIT MODE (0->255)
TMR0IE=1; //Enable TIMER0 Interrupt
PEIE=1; //Enable Peripheral Interrupt
GIE=1; //Enable INTs globally
TMR0ON=1; //Now start the timer!
void interrupt ISR()
{
if(TMR0IE && TMR0IF)//Check if it is TMR0 Overflow ISR
{
//TMR0 Overflow ISR
TMR0IF=0;
i2cframe();
}
}
Donc ça fonctionne sauf que au mieux j'ai 20MHz/4 soit 5MHz pour le timer qui m'envoi un overflow tous les 256 fronts soit à 19.531kHz que je divise encore par 4 pour pouvoir changer l'état de SDA puis SCL à 1 puis à 0 et recommencer au final j'ai donc 4kHz.
D'où ma question comment faire plus rapide ?
Merci d'avance.

