Nouvelles:

Le Forum est maintenant chiffré (préambule https). Bien sûr, des liens externes insérés dans les sujets vont demeurer inchangés. Mais la composition des pages du Forum est désormais sécurisée. Si des problèmes d'affichage surviennent, veillez à vider votre cache pour ce site.

Menu principal

Problème de reconnaissance état broche PIC 12 en entrée.

Démarré par Aziz, Juillet 09, 2022, 09:23:11 AM

« précédent - suivant »

Aziz

Bonjour,
Je me permets de poster sur le forum après avoir fait le tour sur le net sans succès de trouver de solution à  mon petit problème.
Je me me suis mis récemment à  la programmation PIC et notamment PIC12F683.
le souci que je rencontre est que je n'arrive pas à  capter l'état de la broche en entrée (GP0).
En effet, le test consiste en le clignotement d'une Led (broche GP4 en sortie) une fois que le bouton poussoir (GP0) est appuyé, avec un pull down.
Sans la condition la Led clignotte bien, mais dès que je mets la condition pour vérifier si l'entrée (GP0) est haute, il y a plus rien qui se passe (voir le code ci-dessous).

#define _XTAL_FREQ 4000000

#pragma config FOSC = INTOSCIO  // Oscillator Selection bits (INTOSCIO oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = OFF      // MCLR Pin Function Select bit (MCLR pin function is digital input, MCLR internally tied to VDD)
#pragma config CP = OFF         // Code Protection bit (Program memory code protection is disabled)
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)
#pragma config BOREN = OFF      // Brown Out Detect (BOR disabled)
#pragma config IESO = OFF       // Internal External Switchover bit (Internal External Switchover mode is disabled)
#pragma config FCMEN = OFF      // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is disabled)
#include <xc.h>

void main(void)
{
    TRISIO = 0b11101111;
   
    while(1)
    {
        if(GP0 == 1){       
        GP4 = 0b00000001;
        __delay_ms(150);
        GP4 = 0b00000000;
        __delay_ms(150);
        }
    }
}

Merci pour votre aide.
Cordialement,
Az.

papyblue

Bonjour Aziz,
Cela me parait normal qui ne se passe plus rien quand la condition n'est pas remplie car il n'y a pas de "else" qui définit ce qui doit se passer.

PB

Aziz

Bonjour PapyBlue,
Merci pour ce retour.
En fait il ne se passe rien quand je pousse le bouton qui met normalement le GP0 a high. Et la normalement, je devais rentrer dans la condition car GP0 est censé être à  1.
Sauf que c'est pas le cas.
Je me demande si j'ai pas oublié un paramétrage lié à  la broche GP0.
Merci.
Aziz.

papyblue

désolé, j'ai lu un peu trop vite.
Cette video : traite exactement votre exemple : https://www.youtube.com/watch?v=b4tjvGpdECM

petite question : pourquoi affecter un octet à  GP4 alors qu'il est défini comme un seul bit ?

Aziz

Merci PapyBlue,
Merci, je vais regarder la vidéo.
Pour l'octet, c'est certainement dû à  une récupération dans un autre exemple de programme. Je comprends que c'est pas optimal, mais ça fait clignoter la Led  :). Comme j'ai marqué, j'en suis encore aux débuts  :).
Merci beaucoup pour l'aide
Az.

Aziz

Merci beaucoup PapyBlue,
Ça marche bien. Il manquait effectivement la déclaration de la broche en digital.
Az.