[Programmation] MICROCONTROLEURS 12F683 Interruption ne fonctionne pas
Répondre à la discussion
Page 1 sur 4 12 3 DernièreDernière
Affichage des résultats 1 à 30 sur 97

MICROCONTROLEURS 12F683 Interruption ne fonctionne pas



  1. #1
    invite4d59cbf7

    MICROCONTROLEURS 12F683 Interruption ne fonctionne pas


    ------

    Bonjour à tous,
    Suis nouveau sur ce site ( de ch'Nord)
    J'essaie de faire fonctionner une interruption avec le timer du 12F683, mais ça ne marche pas , j'ai "fonction _interrupt never called". Pourquoi la fonction n'est jamais appelée.
    Si qquelqu'un pouvait m'aider car j'ai essayé plein de modif . Un grand merci d'avance.
    Mon programme en C:

    /*

    * File: main.c
    * Author: nilelong
    *
    * Created on 25 novembre 2020, 11:42
    */


    #include <xc.h>
    #include <htc.h>
    #include <pic12f683.h>
    #include <pic.h>

    #include "inter.h"



    // Définition de la fréquence du crystal pour la fonction __delay_ms(x);
    #define _XTAL_FREQ 31000
    #define led GP4
    #define TMR0 TMR0




    // CONFIG
    #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)
    #pragma interrupt






    void interrupt (void) {
    if ((INTCONbits.T0IF == 1) && (INTCONbits.T0IE == 1)) {
    TMR0 = 255 - 10;
    led =~ led;
    INTCONbits.T0IF = 0;
    }
    }


    void main ()
    {

    TRISIO = 0b0000100;

    ANSEL = 0b0000000;

    OSCCON = 0b0000111;

    // interruptions

    INTCON = 0b1110000;

    ei ();
    // timer 0

    OPTION_REGbits.T0CS = 0;

    OPTION_REGbits.PSA = 0;



    OPTION_REGbits.PS = 0b111; // par 128


    while (1)
    {

    }



    }

    -----

  2. #2
    invitead6c50a3

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    Normal, puisque:
    Code:
    void main ()
    {
    
    TRISIO = 0b0000100; // il n'y a ici que 7 bits.....
    
    ANSEL = 0b0000000; // idem
    
    OSCCON = 0b0000111; //idem
    
    // interruptions
    
    INTCON = 0b1110000; //idem

  3. #3
    invitead6c50a3

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    Utilise les balises HTML [code].....[*/code] (enlève le *) pour présenter tes codes.
    Tu auras le même résultat que dans ma réponse précédente.
    Tu peux aussi prévisualiser ta réponse avant de la poster, ton éditeur le permet.

  4. #4
    invite4d59cbf7

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    Bonsoir Exotique, merci pour ta réponse mais je ne comprend pas bien.
    Ce sont mes 2 "/" qui ne vont pas ?
    Les balises HTML, je ne connais pas.
    Comment fait-on pour prévisuliser, j'utilise MPLAB IDE V 5.30

    Bonne soirée

  5. A voir en vidéo sur Futura
  6. #5
    invitead6c50a3

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    Dans le code que tu postes tu écris par exemple:

    TRISIO = 0b0000100;

    Tu vois bien que tu n'as que 7 bits....
    Tu devrais avoir par exemple:
    TRISIO = 0b00001001;

    Il te manque 1 bit, comment puis-je te le dire autrement?

  7. #6
    invite4d59cbf7

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    Re-bonsoir Exotique,

    Je viens de comprendre pour les "7 bits" ! ( des fois on se mettrait des claques !)
    J'avais arrêté la programmation depuis le printemps et je ne me souvenais plus qu'il y avait 8 bits !
    Je vais rectifier.
    Encore merci et bonne soirée.

  8. #7
    invitead6c50a3

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    Citation Envoyé par nilelong Voir le message
    Ce sont mes 2 "/" qui ne vont pas ?
    Les 2 "/" sont nécessaires pour insérer un commentaire, le problème n'est pas là.

  9. #8
    invite4d59cbf7

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    Re,

    J'ai rectifié, ça ne marche toujours pas, même message " fonction interrupt jamais appelée"
    le programme:

    #include <xc.h>
    #include <htc.h>
    #include <pic12f683.h>
    #include <pic.h>

    #include "inter.h"

    #include "xc8debug.h"


    // Définition de la fréquence du crystal pour la fonction __delay_ms(x);
    #define _XTAL_FREQ 31000
    #define led GP4




    // CONFIG
    #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)
    #pragma interrupt






    void interrupt () {
    if ((INTCONbits.T0IF == 1) && (INTCONbits.T0IE == 1)) {
    TMR0 = 255 - 10;
    led =~ led;
    INTCONbits.T0IF = 0;
    }
    }


    void main ()
    {

    TRISIO = 0b00000100;

    ANSEL = 0b00000000;

    OSCCON = 0b00000111;

    // interruptions

    INTCON = 0b11110110;

    IOC = 0b00000100;

    ei ();
    // timer 0

    OPTION_REGbits.T0CS = 0;

    OPTION_REGbits.PSA = 0;



    OPTION_REGbits.PS = 0b111; // par 128



    while (1)
    {

    }



    }

  10. #9
    invitead6c50a3

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    Commençons dans l'ordre:

    quel est ton compilateur C?
    poste l'ensemble du message issu de ta compilation, je doute fort qu'il n'y ait que le message que tu indiques....
    Qu'est-ce que c'est que ça:

    ei();

    et ça:
    Code:
    OPTION_REGbits.PS = 0b111; // par 128
    n'est pas possible.

  11. #10
    invitead6c50a3

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    Tu dois écrire:
    Code:
    OPTION_REGbits = 0b00000111; // prescaler 128

  12. #11
    invitead6c50a3

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    Autre chose:

    Code:
    INTCON = 0b11110110;
    INTCON:

    bit 2 T0IF: Timer0 Overflow Interrupt Flag bit(2)
    1 = Timer0 register has overflowed (must be cleared in software)
    0 = Timer0 register did not overflow

    tu dois l'initialiser à 0 et non pas à 1.
    Lorsque le timer0 débordera il mettra ce bit à 1 et tu entreras dans l'interruption.

  13. #12
    invite4d59cbf7

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    Je suis sur MPLAB IDE V5.30 avec XC8

    Un message viens de me dire que Mon PICkit3 est en defaut, qu'il faut raffraichir le debug..

    Le message " interrupt n'est jamais appelé" ne s'affiche plus.
    Je te met le message issu de la compilation:
    make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
    make[1]: Entering directory 'D:/Users/SIKORA/Documents/MPLAB/inter1.X'
    make -f nbproject/Makefile-default.mk dist/default/production/inter1.X.production.hex
    make[2]: Entering directory 'D:/Users/SIKORA/Documents/MPLAB/inter1.X'
    make[2]: 'dist/default/production/inter1.X.production.hex' is up to date.
    make[2]: Leaving directory 'D:/Users/SIKORA/Documents/MPLAB/inter1.X'
    make[1]: Leaving directory 'D:/Users/SIKORA/Documents/MPLAB/inter1.X'

    BUILD SUCCESSFUL (total time: 369ms)
    Loading code from D:/Users/SIKORA/Documents/MPLAB/inter1.X/dist/default/production/inter1.X.production.hex...
    Loading completed
    Connecting to programmer...
    Programming target...
    Programming completed
    Running target...


    et je fais les modif ( en essayant de "raffraichir" le debug)

  14. #13
    invitead6c50a3

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    C'est mieux.
    Après il faut voir si ça fonctionne.
    Indique le but de ton programme ça pourra aider pour la suite.

  15. #14
    invite4d59cbf7

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    Il m'a remis le message :

    make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
    make[1]: Entering directory 'D:/Users/SIKORA/Documents/MPLAB/inter1.X'
    make -f nbproject/Makefile-default.mk dist/default/production/inter1.X.production.hex
    make[2]: Entering directory 'D:/Users/SIKORA/Documents/MPLAB/inter1.X'
    "C:\Program Files (x86)\Microchip\xc8\v2.10\bin\ xc8-cc.exe" -mcpu=12F683 -c -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -DXPRJ_default=default -msummary=-psect,-class,+mem,-hex,-file -ginhx032 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -o build/default/production/main.p1 main.c
    ::: advisory: (2049) C99 compliant libraries are currently not available for baseline or mid-range devices, or for enhanced mid-range devices using a reentrant stack; using C90 libraries
    "C:\Program Files (x86)\Microchip\xc8\v2.10\bin\ xc8-cc.exe" -mcpu=12F683 -Wl,-Map=dist/default/production/inter1.X.production.map -DXPRJ_default=default -Wl,--defsym=__MPLAB_BUILD=1 -fno-short-double -fno-short-float -O0 -fasmfile -maddrqual=ignore -xassembler-with-cpp -mwarn=-3 -Wa,-a -msummary=-psect,-class,+mem,-hex,-file -ginhx032 -Wl,--data-init -mno-keep-startup -mno-osccal -mno-resetbits -mno-save-resetbits -mno-download -mno-stackcall -std=c99 -gdwarf-3 -mstack=compiled:auto:auto -Wl,--memorysummary,dist/default/production/memoryfile.xml -o dist/default/production/inter1.X.production.elf build/default/production/main.p1
    ::: advisory: (2049) C99 compliant libraries are currently not available for baseline or mid-range devices, or for enhanced mid-range devices using a reentrant stack; using C90 libraries
    main.c:43:: warning: (520) function "_interrupt" is never called

    Memory Summary:
    Program space used 15h ( 21) of 800h words ( 1.0%)
    Data space used 2h ( 2) of 80h bytes ( 1.6%)
    EEPROM space used 0h ( 0) of 100h bytes ( 0.0%)
    Data stack space used 0h ( 0) of 50h bytes ( 0.0%)
    Configuration bits used 1h ( 1) of 1h word (100.0%)
    ID Location space used 0h ( 0) of 4h bytes ( 0.0%)

    make[2]: Leaving directory 'D:/Users/SIKORA/Documents/MPLAB/inter1.X'
    make[1]: Leaving directory 'D:/Users/SIKORA/Documents/MPLAB/inter1.X'

    BUILD SUCCESSFUL (total time: 8s)
    Loading code from D:/Users/SIKORA/Documents/MPLAB/inter1.X/dist/default/production/inter1.X.production.hex...
    Loading completed
    Connecting to programmer...
    Programming target...
    Programming completed
    Running target...

  16. #15
    invite4d59cbf7

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    le but c'est de faire clignoter la led et après de modifier la cadence par une interruption sur GP2 ( c'est pourquoi j'ai activé les interrruptions extèrieures

  17. #16
    invite4d59cbf7

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    corrections faites, ça ne marche toujours pas

  18. #17
    invite4d59cbf7

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    le programme rectifié:

    #include <xc.h>
    #include <htc.h>
    #include <pic12f683.h>
    #include <pic.h>

    #include "inter.h"

    #include "xc8debug.h"


    // Définition de la fréquence du crystal pour la fonction __delay_ms(x);
    #define _XTAL_FREQ 31000
    #define led GP4




    // CONFIG
    #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)
    #pragma interrupt






    void interrupt () {
    if ((INTCONbits.T0IF == 1) && (INTCONbits.T0IE == 1)) {
    TMR0 = 255 - 10;
    led =~ led;
    INTCONbits.T0IF = 0;
    }
    }


    void main ()
    {

    TRISIO = 0b00000100;

    ANSEL = 0b00000000;

    OSCCON = 0b00000111;

    // interruptions

    INTCON = 0b11110010;

    IOC = 0b00000100;


    // timer 0

    OPTION_REGbits.T0CS = 0;

    OPTION_REGbits.PSA = 0;



    OPTION_REGbits.PS = 0b00000111; // par 128



    while (1)
    {
    led = 0;
    }



    }

  19. #18
    invitead6c50a3

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    Code:
    void interrupt ()
    {
    if ((INTCONbits.T0IF == 1) && (INTCONbits.T0IE == 1))
     {
     TMR0 = 255 - 10;
     led =! led;
     INTCONbits.T0IF = 0;
     }
    }
    essaye cette correction.
    Il faudrait aussi voir le contenu de inter.h et le schéma que tu utilises.

  20. #19
    invitead6c50a3

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    Code:
    while (1)
    {
    led = 0;
    }
    n'est pas très malin, ta led vu la vitesse du processeur ne s'allumera jamais (en tout cas ton oeil ne le verra pas).

    Essaye plutôt ça:
    Code:
    void interrupt ()
    {
    if ((INTCONbits.T0IF == 1) && (INTCONbits.T0IE == 1))
     {
     TMR0 = 255 - 10;
     led = 1;
    test = 1;
     INTCONbits.T0IF = 0;
     }
    }
    
    ..........
    .........
    
    while (1)
    {
    if(test == 1)
      {
       __delay_ms(100);
       led = 0;
    test = 0;
      }
    }
    Il faut ajouter une variable "test".

  21. #20
    invite4d59cbf7

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    correction faite, ça ne marche pas.

    "inter.h", j'ai mis ça pour essayer ( info récupérée sur un autre programme), je viens de l'enlever, ça ne change rien.

    En plus, j'ai mis led = 0 dans le while, et elle s'allume constamment !

  22. #21
    invitead6c50a3

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    Comment as-tu câblé cette led?

  23. #22
    invite4d59cbf7

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    correction faite et variable _Bool rajoutée, ça ne marche pas et la led est toujours allumée, et toujours ce foutu message "interrupt never called"

    #include <xc.h>
    #include <htc.h>
    #include <pic12f683.h>
    #include <pic.h>



    #include "xc8debug.h"


    // Définition de la fréquence du crystal pour la fonction __delay_ms(x);
    #define _XTAL_FREQ 31000
    #define led GP4




    // CONFIG
    #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)
    #pragma interrupt

    _Bool test = 0;




    void interrupt ()
    {
    if ((INTCONbits.T0IF == 1) && (INTCONbits.T0IE == 1))
    {
    TMR0 = 255 - 10;
    led =! led;
    test = 1;
    INTCONbits.T0IF = 0;
    }
    }


    void main ()
    {

    TRISIO = 0b00000100;

    ANSEL = 0b00000000;

    OSCCON = 0b00000111;

    // interruptions

    INTCON = 0b11110010;

    IOC = 0b00000100;


    // timer 0

    OPTION_REGbits.T0CS = 0;

    OPTION_REGbits.PSA = 0;



    OPTION_REGbits.PS = 0b00000111; // par 128



    while (1)
    {
    if(test == 1)
    {
    __delay_ms(100);
    led = 0;
    test = 0;
    }



    } }

  24. #23
    invitead6c50a3

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    Pour le moment et être certain de quelques trucs, voici ce que tu vas faire:

    1/ mets en commentaire ta routine d'interruption, pour le moment on va l'oublier.
    2/ modifie ton while ainsi:

    Code:
    while (1)
    {
       __delay_ms(100);
       led = !led;
       __delay_ms(100);
      }
    }

  25. #24
    invitead6c50a3

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    Et pense à poster un schéma.
    On ne travaille jamais sans un schéma validé.

  26. #25
    invite4d59cbf7

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    dingue , ça ne fonctionne pas ! la led reste allumée

  27. #26
    invitead6c50a3

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    Pas sur que ton compilateur accepte la négation ! de G4, tu peux essayer avec ~ ou faire ainsi:
    Code:
    while (1)
    {
       __delay_ms(100);
       led = 0;
       __delay_ms(100);
      led = 1; 
      }
    }

  28. #27
    invite4d59cbf7

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    la led est sur GP4

  29. #28
    invitead6c50a3

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    Je vais diner, on verra ça après.
    @+

  30. #29
    Vincent PETIT
    Animateur Électronique

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    Bonsoir,
    @nilelong, essai de suivre le recommandation de Exotique, lorsque tu postes du codes mets le entre les balises [CODE][/CODE]

    Tu peux aussi cliquer sur la balise # (que j'ai entouré en vert dans l'image ci dessous) pour que les balises [CODE][/CODE] s'écrivent toutes seules - et tu n'as plus qu'à mettre ton code entre les deux.

    Nom : Capture23.PNG
Affichages : 256
Taille : 17,0 Ko



    Par exemple :

    [CODE]
    #include <pic12f683.h>
    #include <pic.h>
    [/CODE]


    Affichera à l'écran

    Code:
    #include <pic12f683.h>
    #include <pic.h>
    Là où il n'y a pas de solution, il n'y a pas de problème.

  31. #30
    invite4d59cbf7

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    la led reste toujours allumée!

Page 1 sur 4 12 3 DernièreDernière

Discussions similaires

  1. PIC : interruption externe et interruption on change ?
    Par invitea3277f60 dans le forum Électronique
    Réponses: 10
    Dernier message: 09/04/2012, 13h41
  2. interruption sur pic 12f683
    Par invite19d2f999 dans le forum Électronique
    Réponses: 0
    Dernier message: 26/03/2012, 22h28
  3. probleme de gestion du port gpio sur 12F683
    Par invite3a1051d7 dans le forum Électronique
    Réponses: 23
    Dernier message: 13/07/2010, 10h47
  4. Programmation 12F683
    Par invite1ba9e12c dans le forum Électronique
    Réponses: 0
    Dernier message: 11/02/2009, 19h39
  5. PIC 12F683 et Debugger ICD2
    Par invite427c7eae dans le forum Électronique
    Réponses: 8
    Dernier message: 25/04/2007, 06h20
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...