begin process at 2012 05 30 10:56:21
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Général

 > 

Protocole OneWire


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Protocole OneWire

mardi 1 juin 2010 à 13:45:44 | Protocole OneWire

TupaShakur

Bonjour à tous,

Je développe une carte à base de pic18f2455 qui sert à gérer des 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 communiquer avec.

J'ai trouvé différents bouts de code sur internet et voici donc mes 5 fonctions qui devraient me permettre normalement d'intéragir avec ce ibutton, :


Code C/C++ :
#define DQ_P PORTBbits.RB0
#define DQ_T TRISBbits.TRISB0

#include <delays.h>

#include "onewire.h"

void ecrire_bit(char bitval);
void ecrire_octet(char val);

unsigned char ow_reset_g(void)
{
	unsigned char presence;
	DQ_T = 0; //le maître met le bus bas
	DQ_P = 0; 
	Delay100TCYx(58); // on temporise 480µsec
	DQ_T = 1; // on relache le bus
	Delay10TCYx(72); // on attend le reveil du capteur 60µs
	presence = DQ_P; // on regarde si on a une présence
	Delay100TCYx(28); // on attend la fin du temps possible 230µs
	return(presence); // on retourne le signal de présence
} // 0=presence, 1 = pas de capteur


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);
}


void ecrire_bit(char bitval)
{
//Ecriture d'un bit
	DQ_T = 0; 			//On met DQ bas pour démarrer la séquence
	DQ_P = 0;
	Delay10TCYx(12);		//On attend 10µs
		if(bitval==1) 
		{
			DQ_T = 1;	//On met DQ au niveau Haut si la valeur à écrire est 1
		}
					//On ne fais rien si la valeur à écrire est 0
	
	Delay10TCYx(60); // On garde la valeur pendant 50µs
	
}


void ecrire_octet(char val)
{
	unsigned char i;
	unsigned char temp;
		for (i=0; i<8; i++) // Ecrit un octet, un bit à la fois
		{
			temp = val>>i; // on shifte val i fois vers la droite
			temp &= 0x01; // on copie le bit lsb dans temp
			ecrire_bit(temp); // on envoie ce bit sur le bus
		}
	Delay10TCYx(144);//on attend pour le reste de la séquence
}

Quand je lance mon main :

Code C/C++ :

void main(void)
{
          if(!ow-reset_g())
          {
                    unsigned octet;
                    ecrire_octet(51); // $33 valeur permettant de lire les 64bits de la clé.
                    octet = lire_octet();
           }

Je pense avoir un problème avec mes unsigned char.

Mes Delays sont corrects je les ai vérifié à l'oscilloscope.

Je code sur MPLAB et compile avec C18.

Merci.

Bonne journée


Cette discussion est classée dans : code, void, char, unsigned, dq


Répondre à ce message

Sujets en rapport avec ce message

Question idiote a propos des tableaux 3D [ par boulfrite ] Salut...J'ai une question un peu idiote : Est-ce que unsigned char image [256][256][3];est la meme chose que<table border= Pb affichage bmp envga c/asm [ par 030417 ] Bonjour à tous,Je suis en train d'essayer d'afficher un bmp en c avec asm sous dos en vga (13h) . j'utilise comme compilateur borland c++ 3.0, mais je Probleme avec une liaison serie [ par xtrememan ] Voila je dois effectuer une reception de trame avec une liaison serie par le biais d'un programme en C. J'ai reussis l'emission,mais je reste bloquer methode system() [ par sperate ] Bonjour,je code sur visual studio 2005 une simple application en mode console.j'utilise la methode "system()" pour envoyer des commandes simples genre conjugaison en c++ [ par abdelali62 ] Bonsoir tt le monde c'est mon premier programme en c++ j'ai trouve une difficulter a implante le code de la fonction main mais je vais pas besser les comment gerer ce projet pour que deux etudiants n'aient pas le meme code [ par desco182 ] Salut a tous j'aimerais bien que quelqu'un m'aide .#include#include#include#ifndef ETUDIANT_H#define ETUDIANT_Hclass etudiant{int code;<br / pointer sur unsigned char [ par avg ] Bonjour à tous je veut appeler une méthode qui n'est pas la mienne mais j'ai sa documentation qui contient titre de méthode et ses paramètres. Mon pro convertsion int en unsigned char [ par avg ] Salut tout le monde j'ai une souci pour convertir un int en unsigned char[] voir le code c++ qui affiche l'erreur [code=cpp]int a=100; unsigned char


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,328 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales