PIC 16F88 Pas de respet du code ! - Nano-ordinateur, microcontrôleurs, FPGA - Electronique, domotique, DIY
Marsh Posté le 31-01-2021 à 13:48:21
Merci de mettre le code correctement formaté entre balises. Et faire un effort au niveau rédaction aussi, là ça ne donne pas du tout envie de t'aider.
Marsh Posté le 31-01-2021 à 14:28:23
Tout d'abord qu'est ce pour toi une balise et montre moi un exemple concret.
Ensuite le programme est parfaitement lisible car toute les lignes de commandes sont parfaitement mise en retrait.
Marsh Posté le 31-01-2021 à 16:50:56
C'est toi qui veut de l'aide, pas moi...
Les balises pour le code c'est avec le petit bouton .
Marsh Posté le 31-01-2021 à 09:29:57
Gros problème : j’utilise un 16F88 avec horloge interne et son CNA. Après avoir placé le PIC programmé (MCLR +5V, VDD +5V, fusibles OFF, oscillateur INTRC ou MCLR et BODEN=ON) sur plaque d’essai, lorsque je le mets sous tension, Le PIC ne respecte pas le programme défini et exécute absolument TOUT de A à Z (qu’il y ai une entrée connectée ou pas au port A2). Quand arrivé à la fin de celui-ci, il revient (boucle infinie) au début et c’est seulement qu’il respecte le programme demandé c-à-d qu’il attend la 1° donnée pour la traiter (IDEM avec un nouveau PIC).
Qui pourrait m’aider concrètement pour résoudre ce problème à savoir attendre la donnée dès le début de la mise sous tension ? Le voltage d’entrée à RA2 :0.4V-4.7V
Ci-dessous le logiciel
//ESSAI-F88.C et essai-F88.mcppi
//microcontroleur : PIC 16F88
//langage : MikroC 6.6
#define sortie RB4_bit //pin 10 allumage pompe
bit led at RA0_bit; //pin 17 led de visualisation du fonctionnement
//#define capteur RA2_bit VOIR + PAS
float volthaut; //résultat de voltage
float radchaut; //mesure tension sur RA2 pin 1 CAPTEUR HAUT
char sec; //temps pour allumage led de fonctionnement PIC
char pompe=0,i;
void main()
{
TRISA=0b00000100; //entrée RA2 si met 0 pompe (RB4) tjs allumée en continu !!
TRISB=0b00000000;
PORTA=0b00000100; //0 ou 1 pas de respect de la 1° passe !!
PORTB=0b00000000;
//utilisation du timer interne si besoin de compter quelque chose
OPTION_REG=0b11000100;
// bit 5=0 timer0 utilise horloge interne
// bit 4=0 timer0 s'incrémente en front montant
// bit 3=0 prediviseur au timer
// bit 2->0 prediviseur timer /32= 100
INTCON=0; //pas d'interruption
OSCCON=0b01100010; //4 MHz horloge interne
//bit 6-4 : 110=4 MHz
//bit 3 : 0 horloge système primaire
//bit 2 : 0
//bit 1-0 : 10 oscillateur interne RC
ADCON1=0b10000000;
//bit 7 (ADFM) =1 résultat conversion à droite
//bit 6 (ADCS2) = 0 horloge interne divisée par 2 inactivée -> influence
// le bit 7 de ADCON0
//bit 5-4 = 0 VRef + = Vcc et VRef - = masse
ANSEL=0b00111110; //choix canaux en analogique =1 (CNA sur A0->A4 et B6-B7)
CMCON=0b00000111; //désactivation des comparateurs
sortie=0; sec=0; //capteur=0; initialisation
ADC_Init();
ADCON0.ADCS1=1; //bit 7-6 oscillateur horloge RC interne
ADCON0.ADCS0=1;
ADCON0.ADON=0; //convertisseur à l'arret
while(1)
{
//do NE FONCTIONNE PAS !!!
//{ pompe=capteur; } while(capteur==0); pompe=0;
ADCON0.ADON=1; //convertisseur activé
radchaut=ADC_Read(2); //RA2 pin 1
Delay_us(30); //temps de conversion
volthaut=(radchaut*5.0)/1023.0; //mesure voltage HAUT
ADCON0.ADON=0; //convertisseur arret
//if(pompe==0) volthaut=0; //Idem dessous
//if(pompe==1) //NE SERT A RIEN au lancement du prog même sans voltage sur
//{ //RA2 (pas de connexion) la sortie allume la pompe !!!!!
if(volthaut>=3.5)
{ sortie=1; pompe=1; //allume pompe
for(i=1;i<=10;i++)
{ Delay_ms(1000); }
sortie=0;
}
else { sortie=0; Delay_ms(100); }
//}
//pompe=1;
} //fin while
}