[Débutant] Protocole OneWire
Bonjour à tous,
Je développe une carte à base de pic18f2455 qui sert à gérer des clés iButton
Voila dix jours que je me prends la tête avec ce protocole OneWire , j'ai du me remettre au C et que je n'arrive toujours pas à vraiment communiquer avec.
J'ai trouvé différents bouts de code sur internet et voici donc mes 2 fonctions qui devraient me permettre normalement de lire les 8 premiers bits de la clé ibutton, :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
#define DQ_P PORTBbits.RB0
#define DQ_T TRISBbits.TRISB0
#include <delays.h>
#include "onewire.h"
unsigned char lire_bit(void)
{
// Lecture d'un bit
DQ_T = 0; // On met DQ bas pour démarrer la séquence
DQ_P = 0;
DQ_T = 1; // retour niveau haut
Delay10TCYx(18); // delai de 15us depuis le début de la séquence
return(DQ_P); // On renvoie la valeur de DQ
}
unsigned char lire_octet(void)
{
unsigned char i;
unsigned char value;
for (i=0;i<8;i++)
{
if(lire_bit())
{
value|=0x01<<i;// On lit un bit à la fois puis on shifte le tout à gauche
}
else
{
value |=0x00<<i;
}
Delay10TCYx(168); // on attend pour le reste de la séquence
}
return(value);
} |
J'aimerai aussi savoir quel type de variables je devait utiliser pour récupérer les 64 bits.
Mes Delays sont corrects je les ai vérifié à l'oscilloscope.
Je code sur MPLAB et compile avec C18.
Merci.
Bonne journée