Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > Autres EDI > MPLAB
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 02/06/2010, 10h49   #1
crimetime
Invité régulier
 
Inscription : mai 2010
Messages : 29
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 29
Points : 9
Points : 9
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
crimetime est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2010, 11h08   #2
diogene
Responsable Modération
 
Avatar de diogene
 
Homme Patrick Gonord
Enseignant Chercheur
Inscription : juin 2005
Messages : 5 433
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 433
Points : 12 947
Points : 12 947
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 !
diogene est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2010, 15h03   #3
crimetime
Invité régulier
 
Inscription : mai 2010
Messages : 29
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 29
Points : 9
Points : 9
Par défaut [Résolu]

Merci à toi.
crimetime est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 19h37.


 
 
 
 
Partenaires

Hébergement Web