Outils pour utilisateurs

Outils du site


issue134:great_cow_basic

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
issue134:great_cow_basic [2018/07/18 14:07] d52frissue134:great_cow_basic [2018/07/20 16:41] (Version actuelle) andre_domenech
Ligne 1: Ligne 1:
 **In FCM#131 I showed you how to recognize the state of a switch and debug over the serial line.  After having some troubles with the code in this article, I had to have a break and get things together. So with some delay here we are now learning about interrupts, what they are and what for they are helpful. My apologies if this caused some inconveniences.** **In FCM#131 I showed you how to recognize the state of a switch and debug over the serial line.  After having some troubles with the code in this article, I had to have a break and get things together. So with some delay here we are now learning about interrupts, what they are and what for they are helpful. My apologies if this caused some inconveniences.**
  
-Dans le n°131 du FCM, je vous ai montré comment reconnaître l'état d'un interrupteur et le déboguer à travers une ligne série. Après avoir eu quelques problèmes avec le code de cet article, j'ai dû faire une coupure pour tout remettre d'aplomb. Aussi, avec un peu de retard, nous allons maintenant apprendre ici les interruptions,  ce qu'elles sont et à quoi elles peuvent être utiles. Mes excuses si ceci vous a créé des difficultés.+Dans le n° 131 du FCM, je vous ai montré comment reconnaître l'état d'un interrupteur et le déboguer à travers une ligne série. Après avoir eu quelques problèmes avec le code de cet article, j'ai dû faire une coupure pour tout remettre d'aplomb. Aussi, avec un peu de retard, nous allons maintenant apprendre ici les interruptions, ce qu'elles sont et à quoi elles peuvent être utiles. Mes excuses si ceci vous a créé des difficultés.
  
 **Interrupt service routines **Interrupt service routines
Ligne 9: Ligne 9:
 Routines de service d'une interruption Routines de service d'une interruption
  
-Une interruption fait que ce terme décrit ; elle interrompt un programme qui tourne - ou mieux : elle entraîne un saut dans le programme et exécute un autre morceau du code du programme. Le dénommé « routine de service de l'interruption ». Le programme précédemment interrompu sera exécuté à peu près à l'endroit où l’interruption a eu lieu. Le ATTiny13a a dix vecteurs d'interruption (ou espaces progamme) où vous pouvez mettre du code, qui sera traité, si vous activé les bits dans les registres d'interruption correspondants. Pour nos besoins, nous regarderons plus particulièrement les interruptions INT0 et PCINT0. Ces deux interruptions peuvent sortir le microcontrôleur de son état de veille, ce qui devient évident par la suite.+Une interruption fait ce que son nom décrit ; elle interrompt un programme qui tourne - ou mieux : elle entraîne un saut dans le programme et exécute un autre morceau du code du programme. C'est la dénommée « routine de service de l'interruption ». L'exécution du programme précédemment interrompu reprendra à l'endroit précis où l’interruption a eu lieu. Le ATTiny13a a dix vecteurs d'interruption (ou espaces programme) où vous pouvez mettre du code, qui sera traité, si vous activez les bits dans les registres d'interruption correspondants. Pour nos besoins, nous regarderons plus particulièrement les interruptions INT0 et PCINT0. Ces deux interruptions peuvent sortir le microcontrôleur de son état de veille, ce qui deviendra plus clair par la suite.
  
 **For the INT0 interrupt you only have one PIN available, the PIN B1 (PORTB.1). This restriction comes with some advantages, with INT0 you could set the trigger to four different states:  **For the INT0 interrupt you only have one PIN available, the PIN B1 (PORTB.1). This restriction comes with some advantages, with INT0 you could set the trigger to four different states: 
Ligne 18: Ligne 18:
  
 Pour l'interruption INT0, vous n'avez qu'une broche disponible, la PIN B1 (PORTB.1). Cette restriction donne aussi quelques avantages ; avec INT0, vous pouvez activer le déclencheur pour quatre états différents : Pour l'interruption INT0, vous n'avez qu'une broche disponible, la PIN B1 (PORTB.1). Cette restriction donne aussi quelques avantages ; avec INT0, vous pouvez activer le déclencheur pour quatre états différents :
-• si le niveau sur la broche est bas (LOW), +• si le niveau sur la borne est bas (LOW), 
-• sur tout chngement logique, +• sur tout changement logique, 
 • la chute de ou  • la chute de ou 
 • la montée du signal (la transition de l'état haut à l'état bas).  • la montée du signal (la transition de l'état haut à l'état bas). 
Ligne 29: Ligne 29:
 The code to use the Pin Change Interrupt service routine instead is shown on the following page at the bottom left.** The code to use the Pin Change Interrupt service routine instead is shown on the following page at the bottom left.**
  
-L'interruption PCINT0 peut être utilisée avec les broches restantes sauf le + (Vcc) et la masse (GND). Le désavantage de cette interruption est qu'elle se déclenche sur chaque transition et que vous avez à déterminer qu'elle est le PCINT qui a déclenché. Si vous n'utilisez qu'une seule connexion, c'est une petit problèmemais si vous en utilisez plus d'une, vous devrez déterminer laquelle « a tiré le signal d'alarme ». Une autre possibilité concernant les interrupteurs et les interruptions serait une routine de scrutation. À certains intervalles, elle regarderais si une interrupteur été appuyé ou non.  Pour cela, vous utiliseriez la routine de service de l'interruption du temporisateur ; mais pour un seul bouton seulement, c'est une sorte d'excès technologique. Aussi, sans plus tarder, voici quelques exemples de codes pour les routines d'interruptions INT0.+L'interruption PCINT0 peut être utilisée avec toutes les broches restantes sauf le + (Vcc) et la masse (GND). Le désavantage de cette interruption est qu'elle se déclenche sur chaque transition et que vous devez déterminer  le PCINT qui l'déclenchée. Si vous n'utilisez qu'une seule connexion, c'est un petit problème maissi vous en utilisez plus d'une, vous devrez déterminer laquelle « a tiré le coup de feu ». Une autre possibilité concernant les interrupteurs et les interruptions serait une routine de scrutation. À certains intervalles, elle regarderait si on a appuyé sur un interrupteur ou non. Pour cela, vous utiliseriez la routine de service de l'interruption du temporisateur ; mais pour un seul bouton seulement, c'est une sorte d'excès technologique. Aussi, sans plus tarder, voici quelques exemples de codes pour les routines d'interruption INT0.
  
-La page suivante (en haut à gauche) montre une petite version avec résistance de tirage de la routine de service d'INT0 en Great Cow Basic.+La page suivante (en haut à gauche) montre une petite version de la routine de service d'INT0 en Great Cow Basic, avec résistance de tirage.
  
 Le code pour utiliser à la place la routine de service « Pin Change » (modification sur la connexion) est présenté sur la page suivante en bas à gauche. Le code pour utiliser à la place la routine de service « Pin Change » (modification sur la connexion) est présenté sur la page suivante en bas à gauche.
Ligne 43: Ligne 43:
 Anti-rebond sur les appuis du bouton Anti-rebond sur les appuis du bouton
  
-En plus, vous ne pouvez pas changer l'état de la LED chaque fois qu'il y a une interruption, car l'interrupteur peut rebondir ou le signal être de mauvaise qualité. Par conséquent, vous pourriez ajouter un algorithme anti-rebond simple. Un exemple en Great Cow Basic pour la version avec une résistance de tirage et l'interruption INT0 est présenté, deux pages plus loin, en haut à gauche.+En plus, vous ne voudriez peut-être pas changer l'état de la LED chaque fois qu'il y a une interruption, car l'interrupteur peut rebondir ou le signal peut être de mauvaise qualité. Par conséquent, vous pourriez ajouter un algorithme anti-rebond simple. Un exemple en Great Cow Basic pour la version avec une résistance de tirage et l'interruption INT0 est présenté, deux pages plus loin, en haut à gauche.
  
-Et la routine d'anti-rebond en Great Cow Basic sur interruption lors d'un changement sur le picot est ainsi +Et la routine d'anti-rebond en Great Cow Basic sur interruption lors d'un changement sur le picot est comme suit 
  
 **Breadboard circuitry **Breadboard circuitry
Ligne 55: Ligne 55:
 Circuit sur la plaque d'essai Circuit sur la plaque d'essai
  
-Pour le test avec les résistances de tirage internes activées, vous aurez besoin d'une LED, d'un interrupteur et du microcontrôleur (voir le circuit sur la page suivante, en bas à gauche). Connectez une terminaison de l'interrupteur au picot 6 (PB.1) et l'autre au picot 4 (masse - GND). L'anode de la LED va au picot 5 (PB0) et la cathode de la LED va au picot 4 (GND). Après avoir flashé le fichier en hexa et connecté l'alimentation, la LED devrait s'allumer et s'éteindre en appuyant sur l'inter.+Pour le test avec les résistances de tirage internes activées, vous aurez besoin d'une LED, d'un interrupteur et du microcontrôleur (voir le circuit sur la page suivante, en bas à gauche). Connectez une terminaison de l'interrupteur au picot 6 (PB.1) et l'autre au picot 4 (masse - GND). L'anode de la LED va au picot 5 (PB0) et la cathode de la LED va au picot 4 (GND). Après avoir flashé le fichier en hexa et connecté l'alimentation, la LED devrait s'allumer et s'éteindre en appuyant sur l'interrupteur.
  
-Pour les besoins du test, vous ne changerez pas la circuiterie de test avec le code ci-dessus ; dans la version avec résistances de tirage, vous aurez besoin de modifier le code ainsi que le circuit de la plaque d'essai.+Pour les besoins du test, vous ne changerez pas la circuiterie de test du matériel avec le code ci-dessus ; dans la version avec résistances de tirage, vous auriez besoin de modifier le code ainsi que le circuit de la plaque d'essai.
  
 **Conclusion **Conclusion
Ligne 65: Ligne 65:
 Conclusion Conclusion
  
-Les interruptions permettent au programmeur de n'exécuter du code que dans une situation déterminée et donnent au programme principal l'avantage de la meilleure puissance de calcul quand il tourne - sauf quand une interruption est détectée - et évite le besoin d'une rupture de séquence pour une vérification (par ex.vérifier tous les 10 cycles si le bouton est appuyé)Ou, autre possibilité des interruptions, elle donnent au développeur la possibilité de créer un dispositif économe qui n' atteint sa puissance de calcul maximum que quand c'est nécessaire et consomme aussi peu de puissance que possible le reste du temps.+Les interruptions permettent au programmeur de n'exécuter du code que dans une situation déterminée et donnent au programme principal l'avantage de la meilleure puissance de calcul pendant qu'il tourne - sauf quand une interruption est détectée - et évite le besoin d'une rupture de séquence pour une vérification (par ex. vérifier tous les 10 cycles si le bouton est enclenché)Ou, autre avantage des interruptions, elle donnent au développeur la possibilité de créer un dispositif économe qui n' atteint sa puissance de calcul maximum que quand c'est nécessaire et qui consomme aussi peu de puissance que possible le reste du temps.
  
 **Sources **Sources
  
 If you want to download the sources instead of copy-pasting it, you can now check it out with git or an SVN client. Have a look at https://github.com/Anobium/Great-Cow-BASIC-Demonstration-Sources/tree/master/Publication%20Solutions/Full%20Circle for more information.** If you want to download the sources instead of copy-pasting it, you can now check it out with git or an SVN client. Have a look at https://github.com/Anobium/Great-Cow-BASIC-Demonstration-Sources/tree/master/Publication%20Solutions/Full%20Circle for more information.**
 +
 +Sources
 +
 +Si vous voulez télécharger les sources plutôt que de les copier-coller, vous pouvez les récupérer dès maintenant avec git ou un client SVN. Regardez à : https://github.com/Anobium/Great-Cow-BASIC-Demonstration-Sources/tree/master/Publication%20Solutions/Full%20Circle pour plus d'informations.
  
 **References **References
  
 1. pull-up and down circuitry breadboard-friendly explained, in german https://elektronik.skyline-service.de/elektronik/pullup-und-pulldown-widerstand/** 1. pull-up and down circuitry breadboard-friendly explained, in german https://elektronik.skyline-service.de/elektronik/pullup-und-pulldown-widerstand/**
 +
 +Références
 +
 +1. Circuiterie des résistances de tirage et d'écoulement bien expliquée pour des utilisateurs, en allemand : https://elektronik.skyline-service.de/elektronik/pullup-und-pulldown-widerstand/
  
 **Acknowledgement **Acknowledgement
  
 I wish to thank Evan Venn (Anobium) from the Great Cow BASIC Team for his insights and valuable hints.** I wish to thank Evan Venn (Anobium) from the Great Cow BASIC Team for his insights and valuable hints.**
 +
 +Remerciements
 +
 +Je souhaite remercier Evan Venn (Anobium) de l'équipe de Great Cow BASIC pour ses idées et ses précieuses indications.
  
issue134/great_cow_basic.1531915654.txt.gz · Dernière modification : 2018/07/18 14:07 de d52fr