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, :
J'aimerai aussi savoir quel type de variables je devait utiliser pour récupérer les 64 bits.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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); }
Mes Delays sont corrects je les ai vérifié à l'oscilloscope.
Je code sur MPLAB et compile avec C18.
Merci.
Bonne journée
Partager