[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
    nilelong

    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
    Exotique

    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
    Exotique

    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.
    Dernière modification par Exotique ; 29/11/2020 à 10h23.

  4. #4
    nilelong

    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
    Exotique

    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
    nilelong

    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
    Exotique

    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
    nilelong

    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
    Exotique

    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.
    Dernière modification par Exotique ; 29/11/2020 à 17h21.

  11. #10
    Exotique

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

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

  12. #11
    Exotique

    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
    nilelong

    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
    Exotique

    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
    nilelong

    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
    nilelong

    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
    nilelong

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    corrections faites, ça ne marche toujours pas

  18. #17
    nilelong

    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
    Exotique

    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
    Exotique

    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".
    Dernière modification par Exotique ; 29/11/2020 à 18h32.

  21. #20
    nilelong

    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
    Exotique

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    Comment as-tu câblé cette led?

  23. #22
    nilelong

    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
    Exotique

    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
    Exotique

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

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

  26. #25
    nilelong

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

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

  27. #26
    Exotique

    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; 
      }
    }
    Dernière modification par Exotique ; 29/11/2020 à 18h54.

  28. #27
    nilelong

    Re : MICROCONTROLEURS 12F683 Interruption ne fonctionne pas

    la led est sur GP4

  29. #28
    Exotique

    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 : 232
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
    nilelong

    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 jlg_47 dans le forum Électronique
    Réponses: 10
    Dernier message: 09/04/2012, 12h41
  2. interruption sur pic 12f683
    Par emile62 dans le forum Électronique
    Réponses: 0
    Dernier message: 26/03/2012, 21h28
  3. probleme de gestion du port gpio sur 12F683
    Par alainav1 dans le forum Électronique
    Réponses: 23
    Dernier message: 13/07/2010, 09h47
  4. Programmation 12F683
    Par morganzion dans le forum Électronique
    Réponses: 0
    Dernier message: 11/02/2009, 18h39
  5. PIC 12F683 et Debugger ICD2
    Par Nico8583 dans le forum Électronique
    Réponses: 8
    Dernier message: 25/04/2007, 05h20
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...