Répondre à la discussion
Affichage des résultats 1 à 23 sur 23

Probléme d'interruption PIC12F683 CCS



  1. #1
    HAYAC

    Probléme d'interruption PIC12F683 CCS


    ------

    Bonjours à tous,

    Je n'arrive pas à gérer les interruptions sur changement d’état de mes entrées RA0, RA1, RA2
    le compilateur me retourne cette erreur :

    Executing: "C:\Program files\Picc\CCSC.exe" +FM "prog.c" +DF +LN +T +A +M +Z +Y=9 +EA
    *** Error 7 "prog.c" Line 3(0,1): Invalid Pre-Processor directive
    *** Error 7 "prog.c" Line 11(0,1): Invalid Pre-Processor directive
    2 Errors, 0 Warnings.
    Halting build on first failure as requested.

    voici mon programme de test :

    #include <12F683.h>
    #device adc=8
    #FUSES NOWDT //No Watch Dog Timer
    #FUSES INTRC_IO //Internal RC Osc, no CLKOUT
    #FUSES NOCPD //No EE protection
    #FUSES NOPROTECT //Code not protected from reading
    #FUSES NOMCLR //Master Clear pin used for I/O
    #FUSES NOPUT //No Power Up Timer
    #FUSES NOBROWNOUT //No brownout reset
    #FUSES NOIESO //Internal External Switch Over mode disabled
    #FUSES NOFCMEN //Fail-safe clock monitor disabled
    #use delay(clock=1000000)
    #define RL1 PIN_A0
    #define RL2 PIN_A1
    #define TRIAC PIN_A2
    #define BPAV PIN_A3
    #define BPSTP PIN_A4
    #define BPAR PIN_A5
    #INT_RA0
    void ra0_isr()
    {
    //mycode
    output_high(RL1);
    output_low(RL2);
    }

    #INT_RA1
    void ra1_isr()
    {
    //mycode
    output_high(RL2);
    output_low(RL1);
    }

    void main()
    {
    setup_oscillator(OSC_1MHZ);
    setup_timer_0(RTCC_INTERNAL|RT CC_DIV_2);
    enable_interrupts(GLOBAL);
    enable_interrupts(INT_RA0);
    enable_interrupts(INT_RA1);
    enable_interrupts(INT_RA2);

    set_tris_a(000111);

    output_low(RL1);
    output_low(RL2);
    output_low(TRIAC);

    while (true) /* Boucle sans fin */
    {
    }
    }

    Merci d'avance pour votre aide,
    Cordialement,

    -----

  2. Publicité
  3. #2
    cherwam07

    Re : Probléme d'interruption PIC12F683 CCS

    Salut,

    Pas certain que ca soit un problème d'interruption.
    Tu as lu les messages d'erreur ?

  4. #3
    HAYAC

    Re : Probléme d'interruption PIC12F683 CCS

    j'ai effectivement vu le message mais je ne comprend pas :
    Invalid Pre-Processor directive

    dans le fichier 12F683.h je retrouve les définitions suivantes :
    #define INT_RA0 0x010B08
    #define INT_RA1 0x020B08
    #define INT_RA2 0x040B08
    #define INT_RA3 0x080B08
    #define INT_RA4 0x100B08
    #define INT_RA5 0x200B08

    ainsi que : #define INT_RA 0xFF0B08
    et si j'utilise #INT_RA je n'est pas d’erreur ???

    Qu'est ce qu'une directive de pré processeur et ou puis-je les trouver ?
    Dernière modification par HAYAC ; 03/08/2012 à 12h17.

  5. #4
    terriblement

    Re : Probléme d'interruption PIC12F683 CCS

    tes directives de pre processeur sont les lignes qui commencent par #
    Je n'ai jamais utilisé de CCS, mais cette ligne m'a l'air bien bizarre :
    #device adc=8
    si tu la commentes le message d'erreur subsiste ?

  6. #5
    HAYAC

    Re : Probléme d'interruption PIC12F683 CCS

    oui cette ligne à été ajouté au démarrage par le wizard
    même sans le problème est identique de plus le message d'erreur m'indique bien les deux instructions :
    #INT_RA0 et #INT_RA1
    J'ai effectué un test de compil avec #INT_RA et pas de problème de compilation.

    Le problème dans ce cas est que je ne pointe pas mes trois entrées seulement mais tous les port A

  7. A voir en vidéo sur Futura
  8. #6
    terriblement

    Re : Probléme d'interruption PIC12F683 CCS

    perso je fais comme ca:
    #define RL1 LATAbits.LATA1 (ou TRIS - PORT, selon besoin).
    J'aime pas le CCS car il s'éloigne du C et de la datasheet des micros...

  9. Publicité
  10. #7
    HAYAC

    Re : Probléme d'interruption PIC12F683 CCS

    Relevant Preprocessor:
    #DEVICE ADC=xx Configures the read_adc return size. For example, using a PIC with a 10 bit A/D you can use 8 or 10 for xx- 8 will return the most significant byte, 10 will return the full A/D reading of 10 bits.

    je peux effectivement me passer de cette directive car pour le moment je ne prévois pas d'utiliser de convertisseur ana/dig

  11. #8
    cherwam07

    Re : Probléme d'interruption PIC12F683 CCS

    Je ne connais rien à CSS, mais j'ai trouvé ca sur ce forum : un appel de fonction :enable_interrupts(INT_RA0);

    Je suppose que pour toi il faudrait faire :
    Code:
    enable_interrupts(INT_RA0 | INT_RA1 | INT_RA2);

  12. #9
    cherwam07

    Re : Probléme d'interruption PIC12F683 CCS


  13. #10
    HAYAC

    Re : Probléme d'interruption PIC12F683 CCS

    Oui c'est effectivement ce que j'ai fait sous une autre forme

    enable_interrupts(INT_RA0);
    enable_interrupts(INT_RA1);
    enable_interrupts(INT_RA2);

    mais peut import la forme j'ai toujours la même erreur.

    Pourtant ça parait si simple ???

  14. #11
    cherwam07

    Re : Probléme d'interruption PIC12F683 CCS

    Aaaah mais j'avais pas vu que tu l'avais déjà fait.

    Alors pourquoi tu laisse #INT_RAO, ca sert a rien du tout !!!
    Ca revient à faire #0x010B08....qu'est-ce que tu veux que le compilo fasse avec ca ?

  15. #12
    HAYAC

    Re : Probléme d'interruption PIC12F683 CCS

    Ce que je ne comprend pas c'est qu'avec ce code pas de problème :

    #INT_RA
    void ra_isr()
    {
    //mycode
    output_high(RL2);
    output_low(RL1);
    }
    void main()
    {
    setup_oscillator(OSC_1MHZ);
    setup_timer_0(RTCC_INTERNAL|RT CC_DIV_2);
    enable_interrupts(GLOBAL);
    enable_interrupts(INT_RA);
    enable_interrupts(INT_RA0 | INT_RA1 | INT_RA2);
    set_tris_a(000111);

    output_low(RL1);
    output_low(RL2);
    output_low(TRIAC);

    while (true) /* Boucle sans fin */
    {
    }
    }

    et avec celui ci j'ai l'erreur de directive alors que dans le fichier 12F683, le datasheet et autres doc je ne trouve pas de contre indication ou infos sur le sujet

    #INT_RA0
    void ra0_isr()
    {
    //mycode
    output_high(RL1);
    output_low(RL2);
    }

    #INT_RA1
    void ra1_isr()
    {
    //mycode
    output_high(RL2);
    output_low(RL1);
    }

    void main()
    {
    setup_oscillator(OSC_1MHZ);
    setup_timer_0(RTCC_INTERNAL|RT CC_DIV_2);
    enable_interrupts(GLOBAL);
    enable_interrupts(INT_RA);
    enable_interrupts(INT_RA0 | INT_RA1 | INT_RA2);
    set_tris_a(000111);

    output_low(RL1);
    output_low(RL2);
    output_low(TRIAC);

    while (true) /* Boucle sans fin */
    {
    }
    }

  16. Publicité
  17. #13
    HAYAC

    Re : Probléme d'interruption PIC12F683 CCS

    je ne sais pas là tu me parle chinois
    mais RA il connait mais pas RA1 ???

  18. #14
    cherwam07

    Re : Probléme d'interruption PIC12F683 CCS

    Peu importe, puisque ca sert à RIEN !!!

    Code:
    enable_interrupts(INT_RA0 | INT_RA1 | INT_RA2);
    Ca suffit normalement

  19. #15
    HAYAC

    Re : Probléme d'interruption PIC12F683 CCS

    si je n'utilise pas #INT_RA0 alors qu'avec #INT_RA tout fonctionne, comment créer une interruption differente sur chaque entrée ?
    Et donc une gestion (precedure) differente sur chaque changement d'entrée ?

  20. #16
    HAYAC

    Re : Probléme d'interruption PIC12F683 CCS

    je dois écrire quelque chose avant ma procédure ?
    #..............
    void ra1_isr()
    {
    //mycode
    output_high(RL2);
    output_low(RL1);
    }

  21. #17
    cherwam07

    Re : Probléme d'interruption PIC12F683 CCS

    TU ne peux avoir qu'UNE procedure pour TOUTES les interruptions.
    Ca c'est imposé par la facon dont le PIC est fait à l'interieur.

    Pour avoir un traitement different, c'est à toi de lire l'état des pins au début de la procedure, et d'en déduire laquelle vient de bouger, puis d'appeler des fonctions en conséquence.

  22. #18
    cherwam07

    Re : Probléme d'interruption PIC12F683 CCS

    Hmmmm, je reviens sur ce que j'ai dit, apparement CSS permet de séparer les fonctions à appeler en fonction des interruptions, par contre interrupt-on-change correspond à une source d'interruption. Pas moyen de la dissocier pour chaque pin.

    Donc ton #int_ra était bien utile.

    Après le fait de devoir tester quelle pins a bougé depuis le dernier passage dans la fonction reste valable.

    Source ici

  23. Publicité
  24. #19
    HAYAC

    Re : Probléme d'interruption PIC12F683 CCS

    D'accord si je te suis bien, j'active mon interruption avec :

    enable_interrupts(INT_RA0 | INT_RA1 | INT_RA2);

    et dans le code suivant je fais le test d'entrée du type if ... else if ... else ...?

    #INT_RA
    void ra1_isr()
    {
    if (entrée1=1){ mon code }
    else if (entrée2=1){ mon code }
    else if (entrée3=1){ mon code }
    else{ mon code }
    }

  25. #20
    cherwam07

    Re : Probléme d'interruption PIC12F683 CCS

    Oui c'est ca !

  26. #21
    HAYAC

    Re : Probléme d'interruption PIC12F683 CCS

    super, merci beaucoup.

    Je rame sur ce sujet depuis trois jours sans avancer, mon problème était de ne pas ralentir le programme principal en faisant des tests permanent des entrées

    Merci encore, cordialement,

  27. #22
    HAYAC

    Re : Probléme d'interruption PIC12F683 CCS

    PS: je ne suis pas au bout de mon dev au vu de ma maitrise d'MLAB et du C en général

  28. #23
    cherwam07

    Re : Probléme d'interruption PIC12F683 CCS

    Et bien tu seras le bienvenu ici si tu galères encore

    @+ alors héhé

Sur le même thème :

Discussions similaires

  1. Programmation PIC12F683 avec CCS 8.6 (Projet Treuil)
    Par HAYAC dans le forum Électronique
    Réponses: 2
    Dernier message: 02/08/2012, 12h42
  2. Problème d'interruption compilateur C18
    Par petitnul12 dans le forum Électronique
    Réponses: 12
    Dernier message: 29/05/2012, 08h21
  3. Problème d'interruptions sur PIC18F2520 et PIC12F683
    Par jlg_47 dans le forum Électronique
    Réponses: 4
    Dernier message: 17/03/2012, 21h08
  4. problème d'incrémentation pic12F683
    Par jéj29 dans le forum Électronique
    Réponses: 3
    Dernier message: 22/04/2010, 17h52
  5. Réponses: 4
    Dernier message: 07/09/2008, 06h59
Découvrez nos comparatifs produits sur l'informatique et les technologies.