+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Candidat au titre de Membre du Club
    Inscrit en
    mai 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : mai 2010
    Messages : 29
    Points : 10
    Points
    10

    Par défaut [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

  2. #2
    Expert Confirmé Sénior
    Avatar de diogene
    Homme Profil pro Patrick Gonord
    Enseignant Chercheur
    Inscrit en
    juin 2005
    Messages
    5 692
    Détails du profil
    Informations personnelles :
    Nom : Homme Patrick Gonord
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2005
    Messages : 5 692
    Points : 13 645
    Points
    13 645

    Par défaut

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    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;
       }....
    - value est non initialisé donc le résultat de value |= ... est imprévisible. Initialiser value à 0

    - value |=0x00<<i; ne fait rien du tout : le bit correspondant de value ne change pas de valeur.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Candidat au titre de Membre du Club
    Inscrit en
    mai 2010
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : mai 2010
    Messages : 29
    Points : 10
    Points
    10

    Par défaut [Résolu]

    Merci à toi.

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •