Question sur les interruptions

Bonjour

Est ce que j'ai bien compris si je dis que les interruptions ne peuvent se faire que via une action utilisateur , ex, bouton poussoir permettant de changer l'état d'une broche d'entrée ?

je voudrais qu'une interruption se fasse automatique dans un sous programme

merci

les interruptions ne peuvent se faire que via une action utilisateur

Pas tout à fait. Une interruption peut être activée par plusieurs moyens. Effectivement un bouton peut déclencher une interruption. on l'utilise via attachinterrupt. Mais ce n'est pas la seule possibilité très loin de là.

Une interruption peut être déclenchée par un compteur de temps (timer). La plus connue est l'horloge système; toutes les 1024µs, une interruption est déclenchée par le timer N°0 pour compter les millisecondes. J'utilise les interruptions causées par le timer 1 pour faire avancer mes moteurs pas à pas.

Une interruption peut être déclenchée par le watchdog. C'est un monostable qu'il faut réarmer périodiquement. Si on ne le fait pas le watchdog interrompt le programme.

Une interruption peut être déclenchée lorsqu'une conversion Ana logique numérique vient de se terminer, lorsqu'un caractère arrive par la voie série ou par le SPI, lorsqu'on vient de finir d'écrire dans l'EEPROM

je voudrais qu'une interruption se fasse automatique dans un sous programe

Souvent dans ce cas, c'est un timer qui est utilisé, si c'est régulier, ou si cela vient un certain temps après un autre évènement. Il faut préciser dans quelle condition est cet "automatique"

Bonjour
Je ne connais pas grand chose dans l'Arduino et l'Atmega , mais ce que j'ai pu lire sur ce microcontroleur est très voisin de ce que je connais sur les PIC
On peut déclencher une interruption en plaçant à 1 le flag relatif à l'interruption , il faut cependant avoir autorisé les interruptions ....
Par exemple si on veut envoyer un caractère à l'UART en ayant au préalable placé le caractère dans le bon registre, et en ayant autorisé les interruptions UART , il suffit de mettre à 1 le Flag ......et dans le traitement de l'interruption le remettre à 0 sinon on répète en permanence l'envoie....mais effectivement ca demande de connaitre les instructions du microcontroleur.....

Les interuptions dépendent du micro: celles sur un UNO ne seront pas les mêmes que sur une MEGA

Dans la datasheet du microcontroleur il y a un tableau des interruptions existantes avec leur ordre de priorité. Je pense qu'il serait profitable que tu le consultes, cela te donnerait une idée de ce qu'il est possible de faire.
Pour la mise en œuvre tu devrais trouver ici des spécialistes avec qui il sera plus facile de dialoguer sur des cas précis.
Le copier/coller n'est pas terrible il vaut mieux télécharger la datasheet du micro.
Exemple pour l'atmega 328p des Uno, nano, pro-mini.

VectorNo. Address(2) Source Interrupt Definition1 0x0000(1) RESET External Pin, Power-on Reset, Brown-out Reset and Watchdog System Reset

2 0x0002 INT0 External Interrupt Request 0

3 0x0004 INT1 External Interrupt Request 1

4 0x0006 PCINT0 Pin Change Interrupt Request 0

5 0x0008 PCINT1 Pin Change Interrupt Request 1

6 0x000A PCINT2 Pin Change Interrupt Request 2

7 0x000C WDT Watchdog Time-out Interrupt

8 0x000E TIMER2 COMPA Timer/Counter2 Compare Match A

9 0x0010 TIMER2 COMPB Timer/Counter2 Compare Match B

10 0x0012 TIMER2 OVF Timer/Counter2 Overflow

11 0x0014 TIMER1 CAPT Timer/Counter1 Capture Event

12 0x0016 TIMER1 COMPA Timer/Counter1 Compare Match A

13 0x0018 TIMER1 COMPB Timer/Coutner1 Compare Match B

14 0x001A TIMER1 OVF Timer/Counter1 Overflow

15 0x001C TIMER0 COMPA Timer/Counter0 Compare Match A

16 0x001E TIMER0 COMPB Timer/Counter0 Compare Match B

17 0x0020 TIMER0 OVF Timer/Counter0 Overflow

18 0x0022 SPI, STC SPI Serial Transfer Complete

19 0x0024 USART, RX USART Rx Complete

20 0x0026 USART, UDRE USART, Data Register Empty

21 0x0028 USART, TX USART, Tx Complete

22 0x002A ADC ADC Conversion Complete

23 0x002C EE READY EEPROM Ready

24 0x002E ANALOG COMP Analog Comparator

25 0x0030 TWI 2-wire Serial Interface

26 0x0032 SPM READY Store Program Memory Ready

[/quote]
Les interruptions font appel à des blocs d'électroniques pures, on ne peut utiliser que ce qui est prévu.
Il serait préférable que tu détailles ce que tu veux faire, d'autres solutions sont probablement possibles.

bonsoir

merci pour vos éclaircissement et vous avez raison cela mérite plus d'infos.

j'utilise un arduino mini V5 , la broche 7 est relié à la broche reset .

dans le fil de l'eau de mon programme je fais appel à un sous programme , je voudrai que celui ci active le reset via la broche 7 .

merci pour votre aide

ma réponse à ce problème: Reset arduino nano avec broche RST - Français - Arduino Forum

bonsoir

super j'ai compris . y a t il un nombre de reset max ?

merci

super j'ai compris . y a t il un nombre de reset max ?

Non. Les maximums sont pour les écritures dans l'eeprom et dans la flash seulement.

je fais appel à un sous programme , je voudrai que celui ci active le reset via la broche 7 .

Pourquoi faire un "reset" ?
Cela ne fait pas, il y a d'autre solutions.
Mais pour cela il faut que tu en dise davantage sur ce que tu veux faire.

Je rigole intérieurement car à mes tout début dans la programmation et sur arduino je voulais aussi faire un reset.
Les réponses, étonnées, à ma question m'ont fait comprendre que je me mettais le doigt dans l'œil jusqu'au coude et que je n'avais strictement rien compris aux fonctionnement d'un microcontroleur.

Si tu veux faire une raz (remise à zéro) cela se fait sur des conditions sur des entrées ou sur des variables.
La fonction qui a été appelée loop (on aurait pu lui donner n'importe quel autre nom) tourne dans un boucle infinie.
Le fichier ino n'est pas encore le fichier qui est transmis au compilateur.
Ce qui est transmis au compilateur est (entre autre) quelque chose comme ce qui suit

while (1==1)
{
   loop();
}

Ce qui veut dire que la fonction loop() s'exécute entièrement, le programme sort de la fonction loop() mais du fait que la condition dans le while est toujours vérifiée il y rentre immédiatement.

En fonction de ce que tu veux faire il faut mettre dans la fonction loop() des test if.