Configuration pins pour gestion interruptions

Bonjour tout le monde,

J'utilise une Mega2560 et j'aimerais savoir s'il est possible de configurer facilement d'autres pins que celles données par Arduino (à savoir : 2, 3, 18, 19, 20, 21) pour gérer les interruptions.

Pour l'application, il s'agit de gérer les impulsions renvoyées par 4 codeurs différents incrustés dans des moteurs à courant continu.

Auparavant j'utilisais des moteurs dont la fréquence des impulsions des codeurs est de 5Hz, je n'avais donc pas besoin d'utiliser des interruptions pour gérer ces impulsions, il suffisait d'écouter le changement d'état d'une entrée digitale.

Je suis amené à changer de moteurs dont la fréquence de chaque codeur est de 400Hz !
Je me rends compte que le fait de procéder comme avant me fait louper certaines impulsions et je rate encore plus d'impulsions si je branche 2 codeurs à l'Arduino.

Je me dis qu'en utilisant des interruptions je pourrais résoudre mon problème (je l'espère).

Le soucis c'est que les pins d'interruptions proposées par Arduino sont déjà utilisées pour autre chose et je ne peux absolument pas y toucher !

D'où ma question à savoir s'il est possible de configurer simplement d'autres pins pour gérer des interruptions ?
Ou est-ce qu'il y a possibilité d'augmenter la fréquence d'horloge de l'Arduino ?
D'ailleurs comment est-ce qu'on peut vérifier les 16MHz annoncer ?

Je vous remercie.

bonjour,
apparemment, non.
il faudrait passer sur une DUE dans ce cas où tu peux mettre un inter sur n'importe quelle pin.

infobarquee:
bonjour,
apparemment, non.
il faudrait passer sur une DUE dans ce cas où tu peux mettre un inter sur n'importe quelle pin.

Merci mais ça ne m'aide pas du coup :cry: !

Bonjour

Ou alors peut-être explorer une solution hardware qui servirait d'interface entre les codeurs et l'arduino mega.

Tu pourrais par exemple utiliser une arduino mini dédiée à cette tâche, pour ne rater aucune impulsion, avec remontée des compteurs vers la mega.

pepe:
La gestion de quatre moteurs et quatre codeurs à 400 Hz entre très largement dans les possibilités d'un Arduino Mega. Simplement, la puissance du microcontrôleur ne doit pas être gaspillée par une programmation inadaptée.

C'est à dire avec ou sans utilisation d'interruptions ?

Sinon j'ai trouvé cette bibliothèque sur GitHub : GitHub - GreyGnome/PinChangeInt: Pin Change Interrupt library for the Arduino
Est-ce que quelqu'un l'a déjà utilisée ? Pensez-vous qu'elle pourrait répondre à ma problématique en utilisant les pins analogiques de ma 2560 ?

Merci encore

Pour l'instant mon code se résume à ça :

boolean flag1, flag2;
unsigned long impulsion_mot1; // contient les impulsions 
#define entree_codeur1 4
unsigned long impulsion_mot2;
#define entree_codeur2 5

void setup() 
{
pinMode(entree_codeur1,INPUT); 
pinMode(entree_codeur2,INPUT);
}

void loop()
{
//1er codeur 
if (digitalRead(entree_codeur1)) 
{
	if(!flag1)
	{
		impulsion_mot1+=1;
		flag1=true;
	}
}
else
{
	flag1=false;
}
//2e codeur 
if (digitalRead(entree_codeur2)) 
{
	if(!flag2)
	{
		impulsion_mot2+=1;
		flag2=true;
	}
}
else
{
	flag2=false;
}
//Affichage 
Serial.print(F("Impulsions capteur 1 : "));
Serial.println(impulsion_mot1);
Serial.println();
Serial.print(F("Impulsions capteur 2 : "));
Serial.println(impulsion_mot2);
}

Lorsque je ne prends en compte qu'un codeur, j'ai 148 impulsions par tour mais en prenant les 2 je tombe sur 48 impulsions par tour, je n'ai que 32% de mes impulsions ce qui fait une perte énorme d'informations.
Et pour l'instant il manque le reste du programme, parce que le but final c'est de piloter un système motorisé.

Merci je vais creuser pour voir comment je peux réaliser cela efficacement.