1
Vos projets / Re : Les nouveaux AVR: coeur AVRx avec MEGACOREX, DXCORE, MEGATINYCORE
« le: Aujourd'hui à 12:15:42 am »
COMPARATOR:
Tout d abord rappelons le rôle d'un comparateur.
Ce rôle est de déterminer entre 2 valeurs celle qui est la plus élevée et de donner un résultat par une valeur numérique de type "0" ou "1" en sortie.
Ces valeurs en entrée sont ANALOGIQUES. Typiquement des voltages qui sur nos CPU ne devront pas dépasser la plage 0V 5V sur les entrées.
Des composants externes peuvent offrir d'autres caractéristiques notamment avec des amplitudes de tensions en entrée plus étendues.
A titre d exemple voir le LM393.
On parle souvent d'entrée inverseuse et non inverseuse notée respectivement + et -.
Pour le comparateur intégré à nos CPU vedettes nous allons dans cet exemple utiliser un mécanisme de base: basculer un état se sortie lorsque qu'un seuil est dépassé.
Pour cela on donne une valeur seuil de référence qui est comparée à une valeur qui va évoluer. Lorsque celle qui évolue dépasse celle de référence la sortie du comparateur bascule d'état et inversement lorsque les seuils se recroisent.
Voici notre code exemple toujours sur un ATTINY1626.
Notez que cette famille de CPU ne dispose que d' 1 comparateur.
Les ATTINY de la série 1 en disposent de 3 comme les AVR DA et DB.
Dans cet exemple on sélectionne un entrée flottante (positiv input) une entrée de référence (negativ input), on active la pin de sortie, on initialise cette combinaison d éléments et on démarre le composant.
La sortie sur la broche PA5 s'active si une tension sur la broche d'entrée est supérieure à la valeur sur celle de référence.
Inversement elle s'éteint si les seuils sont inversés.
On peut avoir un état de fonctionnement inverse à l aide de l'option d'inversion
Bon tout ca c est très bien mais si je ne veux pas sortir sur la broche PIN_PA5... je fais comment?
Comme précédemment nous passerons par EVENT pour établir une liaison vers une broche de sortie de type EVOUTx ce qui offre 5 nouvelles possibilités au choix:
EVOUTA sur PIN_PA2 ou PIN_PA7
EVOUTB sur PIN_PB2 ou PIN_PB7
EVOUTC sur PIN_PC2
Et si cela ne suffit pas on peut passer par le bloc LOGIC en se servant de la sortie logique du comparateur comme un élément d'entrée d'un ou plusieurs bloc logique.
On récupère alors en sortie jusqu'à 6 nouvelles affectations exploitables.( 6 sur les CPU x06 et 8 sur les CPU x07) (les sorties LUTn OUT)
On le voit de suite les possibilités se multiplient, toutefois, on peut encore se sentir à l'étroit parfois et ou vouloir disposer d'encore plus de possibilités.
Pour cela on montera en gamme de CPU vers un modèle comportant plus de combinaisons, de composants programmables et in fine le plus souvent de leur nombre total de broches.
Ltr
Tout d abord rappelons le rôle d'un comparateur.
Ce rôle est de déterminer entre 2 valeurs celle qui est la plus élevée et de donner un résultat par une valeur numérique de type "0" ou "1" en sortie.
Ces valeurs en entrée sont ANALOGIQUES. Typiquement des voltages qui sur nos CPU ne devront pas dépasser la plage 0V 5V sur les entrées.
Des composants externes peuvent offrir d'autres caractéristiques notamment avec des amplitudes de tensions en entrée plus étendues.
A titre d exemple voir le LM393.
On parle souvent d'entrée inverseuse et non inverseuse notée respectivement + et -.
Pour le comparateur intégré à nos CPU vedettes nous allons dans cet exemple utiliser un mécanisme de base: basculer un état se sortie lorsque qu'un seuil est dépassé.
Pour cela on donne une valeur seuil de référence qui est comparée à une valeur qui va évoluer. Lorsque celle qui évolue dépasse celle de référence la sortie du comparateur bascule d'état et inversement lorsque les seuils se recroisent.
Voici notre code exemple toujours sur un ATTINY1626.
Notez que cette famille de CPU ne dispose que d' 1 comparateur.
Les ATTINY de la série 1 en disposent de 3 comme les AVR DA et DB.
Code: [Sélectionner]
#include "Comparator.h"
void INIT_COMPARATOR()
{
//COMPARATOR:
//POSITIV SIDE: AS FLOATING VALUE INPUT:
Comparator.input_p = comparator::in_p::in0; //INPUT P0 PIN_PA7
//Comparator.input_p = comparator::in_p::in1; //INPUT P1 PIN_PB5
//Comparator.input_p = comparator::in_p::in2; //INPUT P2 PIN_PB1
//Comparator.input_p = comparator::in_p::in3; //INPUT P3 PIN_PB6
//NEGATIV SIDE: AS REFERENCE VALUE INPUT:
//Comparator.input_n = comparator::in_n::in0; //INPUT N0 PIN_PA6
Comparator.input_n = comparator::in_n::in1; //INPUT N1 PIN_PB4
//Comparator.input_n = comparator::in_n::in2; //INPUT N2 PIN_PB0
Comparator.reference = comparator::ref::disable;
Comparator.hysteresis = comparator::hyst::disable;
Comparator.output = comparator::out::enable; //OUTÜT PIN_PA5
//Comparator.output = comparator::out::disable; // No output pin, signal not inverted internally
//Comparator.output = comparator::out::disable_invert; // No output pin, signal inverted internally
//Comparator.output = comparator::out::enable; // Enable output pin (PA7), signal not inverted internally
//Comparator.output = comparator::out::invert; // Enable output pin (PA7), signal inverted internally
//Comparator.output = comparator::out::enable_invert; // Identical to out::invert
Comparator.init();
Comparator.start(); // Start comparator
}
void setup() {
INIT_COMPARATOR();
}
void loop() {
}
Dans cet exemple on sélectionne un entrée flottante (positiv input) une entrée de référence (negativ input), on active la pin de sortie, on initialise cette combinaison d éléments et on démarre le composant.
La sortie sur la broche PA5 s'active si une tension sur la broche d'entrée est supérieure à la valeur sur celle de référence.
Inversement elle s'éteint si les seuils sont inversés.
On peut avoir un état de fonctionnement inverse à l aide de l'option d'inversion
Code: [Sélectionner]
Comparator.output = comparator::out::invert;
Bon tout ca c est très bien mais si je ne veux pas sortir sur la broche PIN_PA5... je fais comment?
Comme précédemment nous passerons par EVENT pour établir une liaison vers une broche de sortie de type EVOUTx ce qui offre 5 nouvelles possibilités au choix:
EVOUTA sur PIN_PA2 ou PIN_PA7
EVOUTB sur PIN_PB2 ou PIN_PB7
EVOUTC sur PIN_PC2
Et si cela ne suffit pas on peut passer par le bloc LOGIC en se servant de la sortie logique du comparateur comme un élément d'entrée d'un ou plusieurs bloc logique.
On récupère alors en sortie jusqu'à 6 nouvelles affectations exploitables.( 6 sur les CPU x06 et 8 sur les CPU x07) (les sorties LUTn OUT)
On le voit de suite les possibilités se multiplient, toutefois, on peut encore se sentir à l'étroit parfois et ou vouloir disposer d'encore plus de possibilités.
Pour cela on montera en gamme de CPU vers un modèle comportant plus de combinaisons, de composants programmables et in fine le plus souvent de leur nombre total de broches.
Ltr