Interruption sur un AVR
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Interruption sur un AVR



  1. #1
    invitef4c6670c

    Interruption sur un AVR


    ------

    Bonjour,

    Je me suis remis aux µC pour un besoin perso, mais impossible de faire fonctionner une interruption ! Je souhaite détecter une horloge carrée 0-5V de 1KHz. Pour cela je voudrais détecter le moment où le signal passe de 0V à 5V sur l'entrée INT0 de mon ATTINY85. Pour l'instant je simule avec un BP mais rien n'y fait. La LED doit s'allumer 500 ms... J'ai dû mal configurer un truc.

    Par la suite je souhaiterais incrémenter une variable à chaque interruption, histoire que mon système ne s'enclenche pas pour rien (une impulsion parasite par exemple). Donc, le but serait de compter les impulsions de l'horloge (par exemple 10) et seulement à ce moment à ma condition est remplie. Seul hic, il faudrait que ce compteur se remette à zéro toutes les secondes environ, pour éviter d'accumuler les parasites qui finiront par atteindre 10 même si c'est das 3 jours !

    Voici mon code :

    Code:
    #include <tiny85.h>
    #include <delay.h>
    // Declare your global variables here
    
    // External Interrupt 0 service routine
    interrupt [EXT_INT0] void ext_int0_isr(void)
    {
    PORTB.5 = 1;
    delay_ms(500);
    PORTB.5 = 0;
    }
    
    void main(void)
    {
    // Declare your local variables here
    
    // Crystal Oscillator division factor: 1
    #pragma optsize-
    CLKPR=(1<<CLKPCE);
    CLKPR=(0<<CLKPCE) | (0<<CLKPS3) | (0<<CLKPS2) | (0<<CLKPS1) | (0<<CLKPS0);
    #ifdef _OPTIMIZE_SIZE_
    #pragma optsize+
    #endif
    
    // Input/Output Ports initialization
    // Port B initialization
    // Function: Bit5=Out Bit4=Out Bit3=Out Bit2=In Bit1=In Bit0=In 
    DDRB=(1<<DDB5) | (1<<DDB4) | (1<<DDB3) | (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
    // State: Bit5=0 Bit4=0 Bit3=0 Bit2=T Bit1=T Bit0=T 
    PORTB=(0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);
    
    // External Interrupt(s) initialization
    // INT0: On
    // INT0 Mode: Rising Edge
    // Interrupt on any change on pins PCINT0-5: Off
    GIMSK=(1<<INT0) | (0<<PCIE);
    MCUCR=(1<<ISC01) | (1<<ISC00);
    GIFR=(1<<INTF0) | (0<<PCIF);
    
    // Global enable interrupts
    #asm("sei")
    
    PORTB.5 = 1;
    delay_ms(500);
    PORTB.5 = 0;
    
    while (1)
          {
          // Place your code here
    
          }
    }
    D'après ce code, qu'est ce que j'ai mal fais ?

    Merci

    -----

  2. #2
    invitef4c6670c

    Re : Interruption sur un AVR

    Je dois louper quelque chose c'est pas possible je regarde partout sur le net mais rien n'y fait !
    L'interruption est bien configurée, elle est initialisée, et dans ma boucle d'interruption j'ai bien mis ce qu'il fallait pour allumer ma LED.
    Ma LED s'allume bien au reset du µC ce qui montre que tout est bon de ce côté là. ( la petite init juste au dessous de la boucle while)

  3. #3
    invite8bf8ba05

    Re : Interruption sur un AVR

    Citation Envoyé par ElectronPiege Voir le message
    Je me suis remis aux µC pour un besoin perso, mais impossible de faire fonctionner une interruption ! Je souhaite détecter une horloge carrée 0-5V de 1KHz. Pour cela je voudrais détecter le moment où le signal passe de 0V à 5V sur l'entrée INT0 de mon ATTINY85. Pour l'instant je simule avec un BP mais rien n'y fait. La LED doit s'allumer 500 ms... J'ai dû mal configurer un truc.
    Un problème de compilation ou c'est la logique de ton programme ?
    Qu'est-ce que ça te fais ?

    Citation Envoyé par ElectronPiege Voir le message
    Par la suite je souhaiterais incrémenter une variable à chaque interruption, histoire que mon système ne s'enclenche pas pour rien (une impulsion parasite par exemple). Donc, le but serait de compter les impulsions de l'horloge (par exemple 10) et seulement à ce moment à ma condition est remplie. Seul hic, il faudrait que ce compteur se remette à zéro toutes les secondes environ, pour éviter d'accumuler les parasites qui finiront par atteindre 10 même si c'est das 3 jours !
    Pourquoi ne pas mettre un filtre analogique ? beaucoup plus simple que de faire un filtre numérique (d'ailleurs je ne suis pas convaincu de ta méthode...)

  4. #4
    invitef4c6670c

    Re : Interruption sur un AVR

    Je voudrais que quand j'appuis sur le bouton poussoirs connecté sur la broche 5, soit PB0, soit INT0, la LED connéctée sur le PORTB.3 s'allume 500 ms.

    Problème : je ne rentre pas dans ma boucle d'interruption. Ma LED ne s'allume pas.

    Je précise que cela ne vient pas de ma LED puisque j'ai fais en sorte qu'elle s'allume au reset du PIC, ce qui prouve que ma sortie est bien déclarée comme il faut, et que ma LED est bien câblée.

    Cela vient donc de mon code.

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

    Re : Interruption sur un AVR

    Panne trouvée ! Le µC est HS.

    J'en ai mis un autre que j'ai retrouvé par hasard et là ca fonctionne. Bizarre puisque j'ai testé cette broche en entrée puis en sortie mais elle ne réagit pas avec la fonction interruption...

  7. #6
    invitef4c6670c

    Re : Interruption sur un AVR

    Pourquoi tu n'est pas convaincu de ma méthode ?
    Un filtre analogique ? Why not ! Avec la sortie du filtre sur l'INT0

  8. #7
    invite8bf8ba05

    Re : Interruption sur un AVR

    Citation Envoyé par ElectronPiege Voir le message
    Par la suite je souhaiterais incrémenter une variable à chaque interruption, histoire que mon système ne s'enclenche pas pour rien (une impulsion parasite par exemple). Donc, le but serait de compter les impulsions de l'horloge (par exemple 10) et seulement à ce moment à ma condition est remplie. Seul hic, il faudrait que ce compteur se remette à zéro toutes les secondes environ, pour éviter d'accumuler les parasites qui finiront par atteindre 10 même si c'est das 3 jours !
    Je ne suis pas convaincu puisqu'au final, tu peux avoir pleins de parasites et les compter... si j'ai bien compris ce que tu voulais faire.
    Tu veux que dès qu'un signal d'horloge (de combien de Hz?) est présent sur ton µC, tu veux déclencher ton programme principal ?
    Quel est ton projet ?

  9. #8
    invitef4c6670c

    Re : Interruption sur un AVR

    Je viens de créer un sujet pour ma nouvelle demande avec un chronogramme.
    Merci de ton intérêt

Discussions similaires

  1. Interruption sur pic 18F
    Par invite45df8790 dans le forum Électronique
    Réponses: 30
    Dernier message: 02/05/2014, 16h05
  2. PIC : interruption externe et interruption on change ?
    Par jlg_47 dans le forum Électronique
    Réponses: 10
    Dernier message: 09/04/2012, 12h41
  3. PIC C 18F - Interruption 1S
    Par invite0098df65 dans le forum Électronique
    Réponses: 10
    Dernier message: 11/05/2010, 03h19
  4. interruption sur pic
    Par alainav1 dans le forum Électronique
    Réponses: 4
    Dernier message: 02/08/2009, 20h13
  5. Interruption RB0
    Par invite91a05f0b dans le forum Électronique
    Réponses: 5
    Dernier message: 12/04/2007, 10h45
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...