Led toujours allumé.. et toujours eteinte!pic
Mik3fly
-
Mik3fly -
Mik3fly -
Bonjour,
Je dispose de trois pic, relié en i2C avec un quartz a 20mhz, j'utilise mplab v8.53 et un pickit2
J'ai donc trois 18f4685 relié en i2c, un maitre, et deux esclaves, mon programme est simple
sur le maitre, je dispose de 4 bouton (BT0:BT3) et de 4 LEDs (LED0:LED3), et selon, le bouton appuyé, une valeur différente est envoyée sur les deux pics, et celle-ci s'affiche via 8 DEL
Mon 1er problème : sur les deux esclaves, sur le PORTB, j'ai 8 LEDs, la DEL RB6 est toujours allumé quelque sois la valeur envoyé, et ceci sur les deux pics, alors que la valeur par défaut est 0x1F,(quand aucun bouton est appuyé) sinon, les valeurs attribués aux boutons, commence à 0x01 et termine à 0x04.. (et elle s'affiche correctement à part pour..)
***Mon 2éme problème,
Et bien sur le maitre,.. quand j'appuie sur le bouton RB1(BT1).. la led (LED1) ne s'allume pas, et la valeur n'est pas envoyé.. puisque je n'ai aucun changement sur les esclaves.
***
EDIT, le deuxiéme probléme était une erreur de configuration du registre ADCON1 qui avant été a 0x06, et que je viens de passé a 0x0F :)
Je n'y comprends rien!!
Voici mon codee
Je dispose de trois pic, relié en i2C avec un quartz a 20mhz, j'utilise mplab v8.53 et un pickit2
J'ai donc trois 18f4685 relié en i2c, un maitre, et deux esclaves, mon programme est simple
sur le maitre, je dispose de 4 bouton (BT0:BT3) et de 4 LEDs (LED0:LED3), et selon, le bouton appuyé, une valeur différente est envoyée sur les deux pics, et celle-ci s'affiche via 8 DEL
Mon 1er problème : sur les deux esclaves, sur le PORTB, j'ai 8 LEDs, la DEL RB6 est toujours allumé quelque sois la valeur envoyé, et ceci sur les deux pics, alors que la valeur par défaut est 0x1F,(quand aucun bouton est appuyé) sinon, les valeurs attribués aux boutons, commence à 0x01 et termine à 0x04.. (et elle s'affiche correctement à part pour..)
***Mon 2éme problème,
Et bien sur le maitre,.. quand j'appuie sur le bouton RB1(BT1).. la led (LED1) ne s'allume pas, et la valeur n'est pas envoyé.. puisque je n'ai aucun changement sur les esclaves.
***
EDIT, le deuxiéme probléme était une erreur de configuration du registre ADCON1 qui avant été a 0x06, et que je viens de passé a 0x0F :)
Je n'y comprends rien!!
Voici mon codee
#define TRIS_RC3 TRISCbits.TRISC3
#define TRIS_RC4 TRISCbits.TRISC4
#define LED0 LATDbits.LATD4
#define LED1 LATDbits.LATD5
#define LED2 LATDbits.LATD6
#define LED3 LATDbits.LATD7
#define BT0 PORTBbits.RB0
#define BT1 PORTBbits.RB1
#define BT2 PORTBbits.RB2
#define BT3 PORTBbits.RB3
int genre=0;
int val_btn=0;
unsigned char Send_Data(unsigned char addr, unsigned char data)
{
IdleI2C();
StartI2C();
IdleI2C();
WriteI2C(addr&0xFE); // envoie de l'adresse, + bit écriture
IdleI2C();
if ( SSPCON2bits.ACKSTAT ) // si ack absent
{
StopI2C();
return 0; // le bus not ack
}
WriteI2C(data); // envoie de l'octet
IdleI2C();
if ( SSPCON2bits.ACKSTAT ) // si ack absent
{
StopI2C();
return 0; // le bus not ack
}
StopI2C();
return 1;
}
void Select_cap(void)
{
LATD=0x00;
genre=0x1F;
if(BT0||BT1||BT2||BT3)
{
if(BT0) {genre=0x01;LED0=1;}
else{genre=genre;LED0=0;}
if(BT1) {genre=0x02;LED1=1;}
else{genre=genre;LED1=0;}
if(BT2) {genre=0x03;LED2=1;}
else{genre=genre;LED2=0;}
if(BT3) {genre=0x04;LED3=1;}
else{genre=genre;LED3=0;}
}
else{genre=0x1F;}
}
void init_main(void)
{
TRISB=0xF; // RB7, RB6, RB5, RB4 en entrée;
TRISD=0x00; // Sortie;
PORTD=0x00; // Valeur PORTD = 0;
PORTB=0x00; // Valeur PORTB = 0;
LATD=0x00; // Mise a zero des sorties D;
ADCON1=0x0F; // AN0:AN11 = Ports Digitaux;
TRIS_RC3 = 1;
TRIS_RC4 = 1;
OpenI2C(MASTER, SLEW_OFF);
SSPADD = 49; //100KHz sous 20MHz
}
void main (void)
{
init_main();
while(1)
{
Select_cap();
Send_Data(0x40, genre);
Send_Data(0x42, genre);
}
}
A voir également:
- Led toujours allumé.. et toujours eteinte!pic
- Roissy courrier international pic ✓ - Forum Laposte
- Ma tablette s'allume et s'éteint aussitôt ✓ - Forum Mobile
- Mon pc s'allume et s'éteint en boucle - Forum Matériel & Système
- Led dram allumé orange - Forum Matériel & Système
- Ecran qui s'éteint mais ordinateur toujours en marche - Forum Matériel & Système
2 réponses
Sur le deuxième pic esclave , la LED RB6 et RB1 reste constamment allumé, sur le premier pic esclave, seulement la led RB6... :/ je n'y comprends rien
Aprés une petite recherche, le multiplexage n'y ai pour rien :/
Aprés une petite recherche, le multiplexage n'y ai pour rien :/
Bon et bien j'ai trouvé l'erreur, mais la "solution" que j'ai trouvé ne me plait pas..
coté esclave, j'ai avait indiqué, que dés qu'une donnée est transmise, qu'elle soit affiché sur le PORTB..
et bien avec l'adresse 40 et 42, et quand j'envoyé par exemple la valeur 1 sur les esclave, j'avais pour l'esclave a l'adresse 42 le port RB6 et RB1, et l'esclave 40, seulement le port RB6, quand RB6 est allumé, c'est a dire que la valeur envoyé est 32... et RB1 = 2..
j'ai donc fait un if sur les esclaves, pour mettre a
0 le portB si la valeur transmise était égale au SSPADD du pic esclave.. et ça marche, seulement, si je veux envoyé la valeur 40 ou 42 sur ces esclaves, je ne pourrai pas !! c'est du bricolage !! personne n'a une idée ??
coté esclave, j'ai avait indiqué, que dés qu'une donnée est transmise, qu'elle soit affiché sur le PORTB..
et bien avec l'adresse 40 et 42, et quand j'envoyé par exemple la valeur 1 sur les esclave, j'avais pour l'esclave a l'adresse 42 le port RB6 et RB1, et l'esclave 40, seulement le port RB6, quand RB6 est allumé, c'est a dire que la valeur envoyé est 32... et RB1 = 2..
j'ai donc fait un if sur les esclaves, pour mettre a
0 le portB si la valeur transmise était égale au SSPADD du pic esclave.. et ça marche, seulement, si je veux envoyé la valeur 40 ou 42 sur ces esclaves, je ne pourrai pas !! c'est du bricolage !! personne n'a une idée ??