Outils pour utilisateurs

Outils du site


issue128:tutoriel2

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
issue128:tutoriel2 [2018/01/12 14:33] auntieeissue128:tutoriel2 [2018/01/13 14:14] (Version actuelle) andre_domenech
Ligne 11: Ligne 11:
 Dans le premier article, j'ai présenté Great Cow BASIC et comment vous pouvez faire clignoter une LED en l'allumant et en l'éteignant dans une boucle et en ne donnant rien de plus à faire au microprocesseur. Dans le premier article, j'ai présenté Great Cow BASIC et comment vous pouvez faire clignoter une LED en l'allumant et en l'éteignant dans une boucle et en ne donnant rien de plus à faire au microprocesseur.
  
-Cette fois-ci, je veux montrer une version plus élaborée comment obtenir qu'une LED vacille ou s'estompe. Si je peux regrouper les morceaux de logiciels à la fin de ces articles, je présenterai une version d'un éclairage de nuit réactif à la lumière avec des techniques d'économie d'énergie.+Cette fois-ci, je veux montrer une version plus élaborée comment obtenir qu'une LED vacille ou s'estompe. Si je peux regrouper les morceaux de logiciels à la fin de ces articles, je présenterai une version d'un éclairage de nuit réactif à la lumière avec des techniques d'économie d'énergie.
  
 Mais, avant cela, je veux obtenir un éditeur de texte avec la coloration syntaxique pour la facilité d'utilisation. Geany est un éditeur de texte léger avec la coloration syntaxique qui, à mon avis, est très confortable à utiliser avec Great Cow BASIC. Installez-le avec : Mais, avant cela, je veux obtenir un éditeur de texte avec la coloration syntaxique pour la facilité d'utilisation. Geany est un éditeur de texte léger avec la coloration syntaxique qui, à mon avis, est très confortable à utiliser avec Great Cow BASIC. Installez-le avec :
Ligne 29: Ligne 29:
 This way,  the compiled program gets right into your microcontroller. Beware: After those steps, the build parameters for FreeBASIC are overwritten, maybe it would be a good idea to save the original parameters somewhere to recover. Just in case you are about to write FreeBASIC source code in Geany as well.** This way,  the compiled program gets right into your microcontroller. Beware: After those steps, the build parameters for FreeBASIC are overwritten, maybe it would be a good idea to save the original parameters somewhere to recover. Just in case you are about to write FreeBASIC source code in Geany as well.**
  
-Ensuite, ouvrez le menu « Construire - Définir les commandes de construction » et changez la commande de compilation pour +Ensuite, ouvrez le menu « Construire - Définir les commandes de construction » et changez la commande de compilation pour :
  
 gcbasic /O:”%e”.hex /A:GCASM /V /NP “%f” gcbasic /O:”%e”.hex /A:GCASM /V /NP “%f”
  
-qui alors compile le fichier d'entrée (%f signifie fichier avec une extension, par exemple blink.gcb) vers le fichier de sortie blink.hex (%e indique un nom de fichier sans extension). Si la sortie verbeuse du compilateur vous ennuie, vous pouvez sans risque omettre le paramètre /V. Le paramètre « /NP » signifie que le compilateur de Great Cow BASIC n'attend pas de saisie de l'utilisateur et c'est important dans son utilisation avec geany, autrement le compilateur se bloque. Pour flasher les programmes compilés sur votre microcontrôleur (en supposant que l'ArduinoISP soit utilisé) à partir de geany, vous pourriez changer la commande de construction pour flasher l'AVR :+qui compile alors le fichier d'entrée (%f signifie fichier avec une extension, par exemple blink.gcb) vers le fichier de sortie blink.hex (%e indique un nom de fichier sans extension). Si la sortie verbeuse du compilateur vous ennuie, vous pouvez sans risque omettre le paramètre /V. Le paramètre « /NP » signifie que le compilateur de Great Cow BASIC n'attend pas de saisie de l'utilisateur et c'est important dans son utilisation avec geany, autrement le compilateur se bloque. Pour flasher les programmes compilés sur votre microcontrôleur (en supposant que l'ArduinoISP soit utilisé) à partir de geany, vous pourriez changer la commande de construction pour flasher l'AVR :
  
 avrdude -p t13 -c avrisp -P /dev/ttyACM0 -b 19200 -U flash:w:”%e”.hex avrdude -p t13 -c avrisp -P /dev/ttyACM0 -b 19200 -U flash:w:”%e”.hex
Ligne 51: Ligne 51:
 LED à éclairage variable LED à éclairage variable
  
-Pour commencer, j'ai présenté le code source pour une LED qui ne fait que vaciller. Si vous envisagez la création d'un programme pour une lampe flash pour le morse ou pour un indicateur lumineux, ce sera tout ce qu'il y aura à faire. Mais faire varier la luminosité d'un LED nécessite un peu plus de travail. Comme le microcontrôleur ne délivre que des signaux digitaux, c'est-à-dire allumé/éteint,  une méthode différente est nécessaire pour faire s'estomper l'éclairage d'une LED. La LED devra être pilotée avec des impulsions de courant rapides et courtes qui abusent l'œil humain de sorte qu'il voit la LED plus ou moins brillante (voir la ref. n°2 pour une explication détaillée). Dès l'installation, Great Cow BASIC offre 3 méthodes différentes de Modulation de largeur d'impulsion (PWM - Pulse Width Modulation) pour l'AVR Atmel.+Pour commencer, j'ai présenté le code source pour une LED qui ne fait que vaciller. Si vous envisagez la création d'un programme pour une lampe flash pour le morse ou pour un indicateur lumineux, ce sera tout ce qu'il y aura à faire. Mais faire varier la luminosité d'une LED nécessite un peu plus de travail. Comme le microcontrôleur ne délivre que des signaux digitaux, c'est-à-dire allumé/éteint,  une méthode différente est nécessaire pour faire s'estomper l'éclairage d'une LED. La LED devra être pilotée avec des impulsions de courant rapides et courtes qui abusent l'œil humain de sorte qu'il voit la LED plus ou moins brillante (voir la ref. n° 2 pour une explication détaillée). Dès l'installation, Great Cow BASIC offre 3 méthodes différentes de Modulation de largeur d'impulsion (PWM - Pulse Width Modulation) pour l'AVR Atmel.
  
 • un PWM logiciel,  • un PWM logiciel, 
Ligne 57: Ligne 57:
 • un PWM matériel basé sur le temporisateur Timer0 de l'AVR d'Atmel.  • un PWM matériel basé sur le temporisateur Timer0 de l'AVR d'Atmel. 
  
-Nous pouvons utiliser les modes PWM, soit logiciel, soit matériel. Pour paramétrer le PWM matériel pour vous-même, vous devrez régler les registres du microcontrôleur ; ceci est en dehors de notre sujet actuellement , mais, peut-être à un moment futur, il pourrait être nécessaire de supprimer le dernier octet de la mémoire flash du microcontrôleur. Si vous avez un demande pressante, référez-vous à la feuille de données.+Nous pouvons utiliser les modes PWM, soit logiciel, soit matériel. Pour paramétrer le PWM matériel pour vous-même, vous devrez régler les registres du microcontrôleur ; ceci est en dehors de notre sujet actuellement , mais, peut-être à un moment futur, il pourrait être nécessaire de supprimer le dernier octet de la mémoire flash du microcontrôleur. Si vous avez une demande pressante, référez-vous à la feuille de données.
  
 **The software PWM switches the given channel with the required amount of current for the given number of cycles (called the duty cycle). Since the duty cycle is defined as a byte value, the duty cycle would be between 0 and 255, think of it like this: 255 means 100 % current, 127 would be around 50 % current and so on. The number of cycles defines the number of pulses of the software PWM and defines how long the LED is dimmed. Although instantly repeated while in the main loop, the higher the cycles the smoother it will look. With the software PWM you can light up an arbitrary number of LEDs – contrary to the hardware PWM which is limited to the channels it is linked to. But it’s at the cost that all is software calculated, and the microcontroller is busy while the LED is lit. With the following code you can set up a randomly flickering LED with software PWM. **The software PWM switches the given channel with the required amount of current for the given number of cycles (called the duty cycle). Since the duty cycle is defined as a byte value, the duty cycle would be between 0 and 255, think of it like this: 255 means 100 % current, 127 would be around 50 % current and so on. The number of cycles defines the number of pulses of the software PWM and defines how long the LED is dimmed. Although instantly repeated while in the main loop, the higher the cycles the smoother it will look. With the software PWM you can light up an arbitrary number of LEDs – contrary to the hardware PWM which is limited to the channels it is linked to. But it’s at the cost that all is software calculated, and the microcontroller is busy while the LED is lit. With the following code you can set up a randomly flickering LED with software PWM.
Ligne 63: Ligne 63:
 The Setup of the software PWM is easy; you define one or more PINs used as a PWM channel. Then, the LED lights up at random brightness and goes off after the delay. This first result looks like an unsteady flickering candle; with refinements to the code it will look a bit smoother. We will come back to this point later.** The Setup of the software PWM is easy; you define one or more PINs used as a PWM channel. Then, the LED lights up at random brightness and goes off after the delay. This first result looks like an unsteady flickering candle; with refinements to the code it will look a bit smoother. We will come back to this point later.**
  
-Le PWM logiciel commute le canal donné avec la quantité requise de courant pour un nombre défini de cycles (appelé le rapport cyclique). Comme le rapport cyclique est défini par un valeur en octet, il sera entre 0 et 255 ; pensez à ceci : 255 signifie 100% du courant, 127 sera environ 50% du courant et ainsi de suite. Le nombre de cycles définit le nombre d'impulsions du PWM logiciel et définit le niveau d'éclairement de la LED. Bien qu'il soit répété en permanence dans la boucle principale, plus les cycles sont hauts, plus la lumière parait douce. Avec le PWM logiciel, vous pouvez éclairer un nombre arbitraire de LED contrairement au PWM matériel qui est limité aux canaux auquel il est relié. Mais le prix en est que tout est calculé dans le logiciel, et le microcontrôleur est occupé tant que la LED est allumée. Avec le code suivant, vous pouvez paramétrer un LED à clignotement aléatoire par un PWM logiciel.+Le PWM logiciel commute le canal donné avec la quantité requise de courant pour un nombre défini de cycles (appelé le rapport cyclique). Comme le rapport cyclique est défini par une valeur en octets, il sera entre 0 et 255 ; pensez à ceci : 255 signifie 100 % du courant, 127 sera environ 50 % du courant et ainsi de suite. Le nombre de cycles définit le nombre d'impulsions du PWM logiciel et définit le niveau d'éclairement de la LED. Bien qu'il soit répété en permanence dans la boucle principale, plus les cycles sont hauts, plus la lumière paraît douce. Avec le PWM logiciel, vous pouvez éclairer un nombre arbitraire de LEDcontrairement au PWM matériel qui est limité aux canaux auxquels il est relié. Mais le prix en est que tout est calculé dans le logiciel, et le microcontrôleur est occupé tant que la LED est allumée. Avec le code suivant, vous pouvez paramétrer une LED à clignotement aléatoire par un PWM logiciel.
  
-Le paramétrage du PWM logiciel est facile : vous définissez une ou plusieurs bornes utilisées comme canaux PWM. Puis, la LED s'allume à une luminosité aléatoire et s'éteint après un délai. Le premier résultat ressemble à une bougie à la flamme tremblotante ; avec des améliorations du code, elle semblera une peu plus calme. Nous reviendrons sur ce point plus tard.+Le paramétrage du PWM logiciel est facile : vous définissez une ou plusieurs bornes utilisées comme canaux PWM. Puis, la LED s'allume à une luminosité aléatoire et s'éteint après un délai. Le premier résultat ressemble à une bougie à la flamme tremblotante ; avec des améliorations du code, elle semblera un peu plus calme. Nous reviendrons sur ce point plus tard.
  
 **The hardware PWM, on the other hand, works similarly but uses hardware circuitry within the microcontroller to generate the required on/off pulses. The frequency and the duty cycle of the fixed mode PWM (ref. No. 6) can be set only once in the program out-of-the-box. This mode could be useful for applications where you want to light a LED at a constant level , or for other purposes which need a constant powerage. This can be changed, but you must change it within the source code. **The hardware PWM, on the other hand, works similarly but uses hardware circuitry within the microcontroller to generate the required on/off pulses. The frequency and the duty cycle of the fixed mode PWM (ref. No. 6) can be set only once in the program out-of-the-box. This mode could be useful for applications where you want to light a LED at a constant level , or for other purposes which need a constant powerage. This can be changed, but you must change it within the source code.
Ligne 71: Ligne 71:
 For dimming the LED, we want to change at least the duty cycle. Instead of calculating the timings in software, there is an oscillator in the Atmel microcontroller which gives the timing for the pulses. The attiny13a has one 8-bit Timer with 2 channels for hardware PWM. One channel ‘ OC0A’ is not available for hardware PWM because it is sacrificed for other usages, eg, the pseudo random number generator. But the channel ‘OC0B’ can be used for hardware PWM and thus for dimming a LED. The hardware PWM that comes predefined with Great Cow BASIC uses the fast PWM mode of the attiny13a (see chap. 11.7.3 in ref. No. 5 for details). In short: it means the timer counts from 0 to 255, falls back to 0, and repeats until the timer is stopped. The frequency of the oscillator is calculated from the internal frequency of the attiny13a. The microcontroller frequency is actually set to 1.2 MHz, which means the hardware PWM can be driven at frequencies of 1.2 MHz, 150 kHz, 18 kHz, 4 kHz and 1 kHz (rounded to full kHz). The speed is dependent of the microcontroller’s frequency. When using the hardware PWM, the microcontroller drives the LED independently which means that other tasks can be processed virtually in parallel. If you want a fixed PWM for the LED, then you can set up the PWM this way (top right).** For dimming the LED, we want to change at least the duty cycle. Instead of calculating the timings in software, there is an oscillator in the Atmel microcontroller which gives the timing for the pulses. The attiny13a has one 8-bit Timer with 2 channels for hardware PWM. One channel ‘ OC0A’ is not available for hardware PWM because it is sacrificed for other usages, eg, the pseudo random number generator. But the channel ‘OC0B’ can be used for hardware PWM and thus for dimming a LED. The hardware PWM that comes predefined with Great Cow BASIC uses the fast PWM mode of the attiny13a (see chap. 11.7.3 in ref. No. 5 for details). In short: it means the timer counts from 0 to 255, falls back to 0, and repeats until the timer is stopped. The frequency of the oscillator is calculated from the internal frequency of the attiny13a. The microcontroller frequency is actually set to 1.2 MHz, which means the hardware PWM can be driven at frequencies of 1.2 MHz, 150 kHz, 18 kHz, 4 kHz and 1 kHz (rounded to full kHz). The speed is dependent of the microcontroller’s frequency. When using the hardware PWM, the microcontroller drives the LED independently which means that other tasks can be processed virtually in parallel. If you want a fixed PWM for the LED, then you can set up the PWM this way (top right).**
  
-En revanche, le PWM matériel fonctionne d'une façon similaire, mais utilise les circuits matériels du microcontrôleur pour générer les impulsions marche/arrêt nécessaires. La fréquence et le rapport cyclique du mode PWM fixe (ref n°6) ne peut être paramétré qu'une seule fois dans le programme disponible à l'installation. Ce mode peut être utile pour des applications où vous voulez allumer une LED à un niveau constant ou pour d'autres usages qui nécessitent une alimentation constante. Ceci peut être modifié, mais vous devez le changer dans le code source.+En revanche, le PWM matériel fonctionne d'une façon similaire, mais utilise les circuits matériels du microcontrôleur pour générer les impulsions marche/arrêt nécessaires. La fréquence et le rapport cyclique du mode PWM fixe (ref n° 6) ne peut être paramétré qu'une seule fois dans le programme disponible à l'installation. Ce mode peut être utile pour des applications où vous voulez allumer une LED à un niveau constantou pour d'autres usages qui nécessitent une alimentation constante. Ceci peut être modifié, mais vous devez le changer dans le code source.
  
 Pour régler la luminosité d'une LED, mous voulons au moins changer le rapport cyclique. Plutôt que de calculer les temps dans le logiciel, un oscillateur existe dans le microcontrôleur Atmel qui donne le tempo pour les impulsions. Le attiny13a a un temporisateur 8-bit avec 2 canaux pour du PWM matériel. Un canal « OC0A » n'est pas disponible pour le PWM matériel car il est consacré à d'autres utilisations, par ex., la génération de nombre aléatoire. Mais le canal « OC0B » peut être utilisé pour du PWM matériel et donc pour faire varier une LED. Le PWM matériel qui arrive prédéfini avec Great Cow BASIC utilise la mode de PWM rapide du attiny13a (voir le chap. 11.7.3 de la ref. n°5 pour les détails). En bref : cela signifie que le temporisateur compte de 0 à 255, revient à 0 et recommence jusqu'à ce qu'il soit arrêté. La fréquence de l'oscillateur est calculée à partir de la fréquence interne du attiny13a. La fréquence réelle du microcontrôleur est réglée à 1,2 MHz, ce qui signifie que le PWM matériel peut être piloté à des fréquences de 1,2 MHz, 150 kHz, 4 kHz et 1 kHz (arrondi au kHz entier). La vitesse dépend de la fréquence du microcontrôleur. En utilisant le PWM matériel, le microcontrôleur pilote la LED indépendamment, ce qui signifie que d'autres tâches peuvent être théoriquement réalisées en parallèle. Si vous voulez un PWM fixe pour la LED, alors vous pouvez paramétrer le PWM de cette manière (en haut à droite). Pour régler la luminosité d'une LED, mous voulons au moins changer le rapport cyclique. Plutôt que de calculer les temps dans le logiciel, un oscillateur existe dans le microcontrôleur Atmel qui donne le tempo pour les impulsions. Le attiny13a a un temporisateur 8-bit avec 2 canaux pour du PWM matériel. Un canal « OC0A » n'est pas disponible pour le PWM matériel car il est consacré à d'autres utilisations, par ex., la génération de nombre aléatoire. Mais le canal « OC0B » peut être utilisé pour du PWM matériel et donc pour faire varier une LED. Le PWM matériel qui arrive prédéfini avec Great Cow BASIC utilise la mode de PWM rapide du attiny13a (voir le chap. 11.7.3 de la ref. n°5 pour les détails). En bref : cela signifie que le temporisateur compte de 0 à 255, revient à 0 et recommence jusqu'à ce qu'il soit arrêté. La fréquence de l'oscillateur est calculée à partir de la fréquence interne du attiny13a. La fréquence réelle du microcontrôleur est réglée à 1,2 MHz, ce qui signifie que le PWM matériel peut être piloté à des fréquences de 1,2 MHz, 150 kHz, 4 kHz et 1 kHz (arrondi au kHz entier). La vitesse dépend de la fréquence du microcontrôleur. En utilisant le PWM matériel, le microcontrôleur pilote la LED indépendamment, ce qui signifie que d'autres tâches peuvent être théoriquement réalisées en parallèle. Si vous voulez un PWM fixe pour la LED, alors vous pouvez paramétrer le PWM de cette manière (en haut à droite).
Ligne 81: Ligne 81:
 Le PWM matériel en mode fixe est facile à paramétrer, mais un peu limité ; la seule manipulation qui peut être faite pendant l'exécution du programme est de basculer les états ON-OFF avec la déclaration WAIT. Cette première version ressemble à une bougie dans des conditions de vent fort. Ensuite, vous verrez que le paramétrage de mode PWM rapide nécessite quelques lignes de plus pour définir le paramètre du PWM matériel (en bas à droite). Le PWM matériel en mode fixe est facile à paramétrer, mais un peu limité ; la seule manipulation qui peut être faite pendant l'exécution du programme est de basculer les états ON-OFF avec la déclaration WAIT. Cette première version ressemble à une bougie dans des conditions de vent fort. Ensuite, vous verrez que le paramétrage de mode PWM rapide nécessite quelques lignes de plus pour définir le paramètre du PWM matériel (en bas à droite).
  
-Pour paramétrer le temporisateur, le canal PWM correspondant doit être défini. Avec le attiny13a, vous n'avez que le  temporisateur Timer0 avec le canal B (constante AVRCHAN2 dans Great Cow BASIC) pour le mode PWM rapide ; seule la borne PB1 peut être utilisée pour faire clignoter ou varier la LED. Le PWM matériel de cette version ressemble à une bougie où le vent à molli et semble ainsi plus douce que dans la version du mode PWM fixe.+Pour paramétrer le temporisateur, le canal PWM correspondant doit être défini. Avec le attiny13a, vous n'avez que le  temporisateur Timer0 avec le canal B (constante AVRCHAN2 dans Great Cow BASIC) pour le mode PWM rapide ; seule la borne PB1 peut être utilisée pour faire clignoter ou varier la LED. Le PWM matériel de cette version ressemble à une bougie où le vent molli et semble ainsi plus douce que dans la version du mode PWM fixe.
  
 **Comparison **Comparison
Ligne 95: Ligne 95:
 Astuce : installez binutils-avr via apt pour obtenir l'outil avr-size ; avec lui, vous pouvez récupérer la taille d'un fichier hexa d'une manière lisible. Astuce : installez binutils-avr via apt pour obtenir l'outil avr-size ; avec lui, vous pouvez récupérer la taille d'un fichier hexa d'une manière lisible.
  
-Tapez : avr-size name-of.hex+Tapez :  
 +avr-size name-of.hex
  
-Le PWM logiciel nécessite quelques calculs et du code programme supplémentaire pour fonctionner, mais l'exécutable correspondant pour un canal est plutôt petit : Mémoire programme : 217/512 mots (42.38%), RAM: 11/64 octets (17.19%). Le fichier hexa correspondant a une taille de 440 koctets. Les PWM matériel en mode fixe ou rapide ont besoin d'une borne spécifique du microcontrôleur pour fonctionner, ce qui limite le nombre de LED que vous pouvez utiliser. Mais, une fois lancé, le PWM peut opérer indépendamment (il est prévu de montrer que c'est vrai pendant le mode inactif, nous verrons cela dans une partie prochaine). La taille du code diffère. Pour la version de code du mode PWM fixe, il utilise 244/512 mots (47.66%) de mémoire programme, 9/64 octets (14.06%) de RAM. Soit environ 488 koctets. Le mode PWM rapide utilise 478/512 words (93.36%)de mémoire programme et 15/64 bytes (23.44%) de RAM. Soit environ 936 koctets.+Le PWM logiciel nécessite quelques calculs et du code programme supplémentaire pour fonctionner, mais l'exécutable correspondant pour un canal est plutôt petit : Mémoire programme : 217/512 mots (42,38 %), RAM: 11/64 octets (17,19 %). Le fichier hexa correspondant a une taille de 440 Koctets. Les PWM matériel en mode fixe ou rapide ont besoin d'une borne spécifique du microcontrôleur pour fonctionner, ce qui limite le nombre de LED que vous pouvez utiliser. Mais, une fois lancé, le PWM peut opérer indépendamment (il est prévu de montrer que c'est vrai pendant le mode inactif, nous verrons cela dans une partie prochaine). La taille du code diffère. Pour la version de code du mode PWM fixe, il utilise 244/512 mots (47,66 %) de mémoire programme, 9/64 octets (14,06 %) de RAM. Soit environ 488 Koctets. Le mode PWM rapide utilise 478/512 words (93,36 %)de mémoire programme et 15/64 bytes (23,44 %) de RAM. Soit environ 936 Koctets.
  
 **Conclusion **Conclusion
Ligne 121: Ligne 122:
 Faisons la synthèse Faisons la synthèse
  
-Pour le plaisir (ci-dessus), voici un exemple d'un effet de baisse de luminosité en douceur ; si vous connaissez « Dr Who », cela va vous paraître connu comme la lampe en haut du TARDIS.+Pour le plaisir (ci-dessus), voici un exemple d'un effet de baisse de luminosité en douceur ; si vous connaissez « Dr Who », cela va vous paraître connucomme la lampe en haut du TARDIS.
issue128/tutoriel2.1515763989.txt.gz · Dernière modification : 2018/01/12 14:33 de auntiee