Arduino Mega 2560 soucis interruption externe
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Arduino Mega 2560 soucis interruption externe



  1. #1
    shindra

    Arduino Mega 2560 soucis interruption externe


    ------

    Bonjour

    Je viens vers vous car je suis suis à bout d'idée pour résoudre mon problème. Voici mon code

    Code:
    int ledPin = 13;
    
    int compteurBas = 0;
    int compteurHaut = 0;
    void setup()
    {
    
    	Serial.begin(9600);
    	pinMode(ledPin, OUTPUT); // Enable Output for 
    	pinMode(6, OUTPUT); //PWM OUTPUt
    	sei(); //Enable Interruption
    	EIMSK |= (1 << INT0);
    	EIMSK |= (1 << INT1);//Enable Extern Interrupt on pin 20 and 21 INT0, INT1
    	EICRA = 11; // Set detection INT1 as falling Edge, ans INT0 as Rissing Edge
    	
    }
    
    ISR(INT0_vect)
    {
    	digitalWrite(ledPin, HIGH); 
    	compteurHaut++; //Chek incrementation 
    }
    
    ISR(INT1_vect)
    {
    	digitalWrite(ledPin, LOW);
    	compteurBas++; //Chek incrementation  
    	
    }
    
    void loop()
    {
    	
    	analogWrite(6, 175); //PWM rout to port 20, 21 to simulate a CLK 
    	//display
    	Serial.print("Compteur haut");
    	Serial.println(compteurHaut);
    	delay(1000);
    	Serial.print("Compteur bas");
    	Serial.println(compteurBas);
    
    }
    Suivant le mapping INT0 et INT1 correspondant au pin20,21

    Les pin 20,21 étant utilisé par le bus I2C j'ai essayé de trigger une interruption sur les PIN 2 PIN 3 car j'aurais besoin de mon bus I2c pour plus tard. Suivant le mapping de la carte les PIN 2 et PIN3 corresponde au bit INT4 et INT5 dans le registre EIMSK. Je mets donc leur bit à 1 pour autoriser l'interruption sur ces 2 pins.

    Ce qui donne

    Code:
    void setup()
    {
    
    	Serial.begin(9600);
    	pinMode(ledPin, OUTPUT); // Enable Output for 
    	pinMode(6, OUTPUT); //PWM OUTPUt
    	sei(); //Enable Interruption
    	
    	EIMSK |= (1 << INT4);
    	EIMSK |= (1 << INT5);//Enable Extern Interrupt on pin 2 and 3 INT4, INT5
    	Serial.println("Youppi j'ai réussi à programmer le registre EIMSK");
    		
    }
    Mais là, le programme se bloque complètement, impossible d'afficher le Serial.println. J'ai pensé que INT 4 et INT5 ont quelques choses à voir avec la communication série. J'ai donc fait un test en demandant de mettre la led13 à l'état haut à la place d'afficher un texte et le résultat et le même !

    Le programme reste bloqué à la configuration du registre EIMSK et ne réagit à plus rien il ne va même pas dans la boucle void loop()

    Mapping de la carte Mega. MappingCarteArduinoMega2560

    Merci d'avance pour votre aide et j’espère que j'ai été assez claire dans mes explications

    Cordialement
    Guillaume Shindra

    -----

  2. #2
    indri

    Re : Arduino Mega 2560 soucis interruption externe

    Dejà la doc technique

    INT4 et INT5 c'est la pin 6 et 7 déjà...(à moins que tu parles du nom assigné par arduino qui n'a aucune valeur^^)

    Si tu veux utiliser INT4 et INT5 en interruption, tu dois aussi définir les valeur de EICRB pour définir flanc montant/descendant etc (là tu as laissé à 0 donc quand interruption à 0 donc tout le temps) (voir page 114)

    Et moi je mettrai sei(); après tout ça! sinon ca peut déjà partir en interrupt!

    PS: jee viens de voir que tu avais bien réglé EICRA dans ta première version, donc peut-être un simple oubli
    Dernière modification par indri ; 24/03/2015 à 09h20.
    Là où va le vent...

  3. #3
    shindra

    Re : Arduino Mega 2560 soucis interruption externe

    Bonjour, merci pour votre réponse

    INT4 et INT5 c'est la pin 6 et 7 déjà...(à moins que tu parles du nom assigné par arduino qui n'a aucune valeur^^)
    Oui je parlais des pin assigné par arduino. Donc la Pin 6 et 7 sur l'atmel sont mappé sur les Pin 2 et 3 du board arduino. (connecteur)

    Entre temps j'ai essayé comme vous avez dit par débuté par un cli() pour interdire toutes interruptions, puis j'ai configuré les 2 registres EICRB et EIMSK puis activé les interruptions avec sei().

    Et c'est la que ça coince dès que la valeur de EIMSK dépasse la valeur 3 le programme ne fait plus rien. En cherchant un peu j'ai trouvé que le problème ce situait au niveau de la fonction sei();

    En et fait le registre EIMSK prends bien la valeur que je lui indique, mais dès qu'il dépasse 3 la fonction sei(); ne passe plus. J'ai essayé en mettant le bit I du registre SREG à 1 (ce qui fait la fonction sei() mais l'effet reste le même.

    Sa m'embête vraiment car INT0 et INT1 sont utilisée par la communication I2C et j'aurais besoin de ce bus plus tard ^^

    Cordialement
    Shindra

  4. #4
    indri

    Re : Arduino Mega 2560 soucis interruption externe

    Je vois pas trop ce qui pourrait bloquer en configurant bien ces deux registres et en changeant les deux INTx_vect

    Remets tout le code..
    C'est dans la simulation que le programme reste bloqué dans sei()?

    Sinon je connais rien à l'envirronement Arduino, mais tu as le bon µC dans les paramètres? si tu avais atmega328 (présent sur d'autres arduino) tu n'as que int1 et int0 (de mémoire) et donc forcement il trouve pas 4 et 5. Bon simple supposition..
    Là où va le vent...

  5. A voir en vidéo sur Futura

Discussions similaires

  1. Carte Arduino UNO R3 ou Arduino Mega 2560 R3 ?
    Par theoze dans le forum Électronique
    Réponses: 10
    Dernier message: 11/03/2015, 15h36
  2. Multitache arduino MEGA
    Par croco01 dans le forum Électronique
    Réponses: 7
    Dernier message: 30/06/2014, 10h40
  3. PIC : interruption externe et interruption on change ?
    Par jlg_47 dans le forum Électronique
    Réponses: 10
    Dernier message: 09/04/2012, 12h41
  4. Problème d'upload Arduino Mega 2560
    Par invite72f00bc4 dans le forum Électronique
    Réponses: 2
    Dernier message: 21/08/2011, 18h04
  5. Arduino mega
    Par zener57 dans le forum Électronique
    Réponses: 0
    Dernier message: 14/09/2009, 17h55
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...