Aller au contenu


Photo
- - - - -

I2C + pic 16f877


3 réponses à ce sujet

#1 hamidbsb

hamidbsb

    Nouveau membre

  • Membres
  • 4 messages

Posté 06 mai 2008 - 12:44

Bonjour
Comment on peut envoyer le resulat d'une operation vers le bus I2c du pic 16f877.

merci d'avance.

#2 CyberTwister

CyberTwister

    Membre

  • Membres
  • 11 messages

Posté 06 mai 2008 - 05:54

Je sais pas mais si ça peu t'aider :
http://n00n.free.fr/doc_robot/com_332_pic/com_332_pic.html

Et aussi :
http://ecl.ac-orleans-tours.fr/lyc-mgenevo...rs/i2c_mast.PDF
http://forums.futura-sciences.com/thread114426.html
http://www.delphifr.com/codes/PORT-SERIE-P...IMAL_38465.aspx
http://www.delphifr.com/codes/PROGRAMMEUR-16F877_20129.aspx

#3 Matthieu

Matthieu

    Membre chevronné

  • Membres
  • PipPipPipPip
  • 604 messages
  • Gender:Male

Posté 06 mai 2008 - 06:19

/////////////////////////////////////////////////////////////////////////////
//I2C , MAITRE
//config_I2C(   )  //configure L'i2C , en maitre 
//I2C_START() 
//I2C_STOP() 
//unsigned char I2C_READ(unsigned char ack)// Retourne la valeur donnée + Valeur bare de l'ack 
//unsigned char I2C_WRITE(unsigned char data)//Envoyer ou non . 
/////////////////////////////////////////////////////////////////////////////


void config_I2C()
	{
	
	SSPCON=0b00101000;//Mode Maitre 7Bits d'addresse 
	SSPADD=0x09;//F=100Khz
	SSPCON2=0b00000000;
	SSPSTAT=0b00000000;
	}
	
//Fonction qui permet de dire que l'i2c est pret 
void I2C_PRET()
	{
	while((SEN==1)||(RSEN==1)||(PEN==1)||(ACKEN==1)||(RCEN==1)||(STAT_RW==1))
		{
		//Attendre que I2C est pret . 
		}
	}

//démare un start
void I2C_START() 
	{
	I2C_PRET();
	SEN=1;
	}

//Repet start condition . 
void I2C_RSRN() 
	{
	I2C_PRET();
	RSEN=1;
	}
//I2C stop
void I2C_STOP() 
	{
	I2C_PRET();
	PEN=1;
	}
//ACK a 1 = Autre valeur a recevoir après 
//ACK a 0 = Fini , on pourras faire un stop ensuite . 
unsigned char I2C_READ(unsigned char ack)
	{
	char temp;
	I2C_PRET();
	RCEN=1;//Demare la reception 
	I2C_PRET();//attend que la reception est faite 
	temp=SSPBUF;
	if(ack)	ACKDT=0;
	else ACKDT=1;
	ACKEN=1;
	return(temp);
	}
unsigned char I2C_WRITE(unsigned char data)//Retourne L'ACK barre , si 1 , il n'as pas reçu d'ack , donc pb 
	{
	I2C_PRET();
	SSPBUF=data;
	I2C_PRET();
	return (!ACKSTAT);
	}


I2C_START();
		if(I2C_WRITE(0x35))
			{
			recept_compt=I2C_READ(1);
			recept_parite=I2C_READ(1);
			recept_entete=I2C_READ(1);
			recept_add=I2C_READ(1);
			recept_data1=I2C_READ(1);
			recept_data2=I2C_READ(0);
			I2C_STOP();


Voila , j'ai utiliser sa , mais s'est le programme du maitre , j'ai pas les esclaves ...

#4 hamidbsb

hamidbsb

    Nouveau membre

  • Membres
  • 4 messages

Posté 08 mai 2008 - 12:54

Merci bcp pour votre aide!!!



Répondre à ce sujet



  


0 utilisateur(s) li(sen)t ce sujet

0 members, 0 guests, 0 anonymous users