J'essaie de comprendre GPIO, et j'ai lu un tas de différents articles de blog et je pense que je suis sur le point de l'obtenir, mais j'ai toujours du mal avec quelques choses.
J'ai vu quelques références à GPIO ne pouvant travailler qu'avec des valeurs binaires, mais d'autres articles qui disent que la valeur peut être comprise entre 0 et 255. Je suppose que c'est la différence entre GPIO analogique et numérique. Est-ce exact? Est-il possible qu'une seule broche GPIO puisse agir à la fois comme analogique et numérique?
Réponses:
Une broche GPIO est une broche «entrée / sortie à usage général». Ceci est par défaut uniquement élevé ou faible (les niveaux de tension, élevé étant la tension d'alimentation du micro-contrôleur, faible étant généralement la masse, ou 0 V). Mais les niveaux «élevé» et «bas» sont généralement donnés sous forme de tensions en proportion de la tension d'alimentation. Donc, tout ce qui dépasse généralement 66% de la tension d'alimentation est considéré comme un niveau logique `` élevé '', ce qui signifie que certains appareils à tension inférieure peuvent parler avec des appareils à haute tension tant que les niveaux se situent dans ce qui est considéré comme `` élevé ''. Un microcontrôleur à faible puissance de 1,8 à 2,7 V ou un récepteur GPS, par exemple, aura du mal à communiquer directement avec un microcontrôleur 5 V, car ce que l'appareil à basse tension considère comme «élevé», l'appareil à haute tension ne pensera pas du tout qu'il est élevé. C'est pour utiliser GPIO comme broche d'entrée,
Parfois, vous pouvez utiliser une broche SINGLE pour les valeurs `` analogiques '', en configurant la broche GPIO pour qu'elle soit utilisée par d'autres appareils embarqués comme un convertisseur `` analogique vers numérique '' (ADC). La broche est définie sur un canal sur l'ADC et cela agit maintenant comme une entrée pour l'ADC, pas une broche GPIO normale. Vous pouvez ensuite définir l'ADC pour prendre un échantillon et lire la valeur du registre de résultats de l'ADC pour des nombres comme 0-1024 s'il s'agit d'une résolution de 10 bits.
Comme quelqu'un l'a mentionné, une broche GPIO pourrait être utilisée dans le logiciel pour donner l'effet d'un signal de modulation de largeur pulsée (PWM), généralement à faible vitesse pour le basculement GPIO. La plupart des microcontrôleurs ont des générateurs PWM dédiés qui peuvent être configurés pour utiliser une broche GPIO comme broche de sortie, et ceux-ci sont très rapides et beaucoup plus stables que l'utilisation d'un logiciel pour contrôler GPIO pour générer un signal PWM. Le PWM est utilisé pour les signaux de style «moyen» ou «%» et vous permet de faire des choses comme des lumières tamisées et de contrôler la vitesse d'un moteur.
Les broches GPIO sont généralement organisées en groupes, appelés ports. Dans les petits contrôleurs, il peut s'agir d'une architecture 8 bits, de sorte que les ports sont souvent regroupés en lots de 8, et leurs valeurs peuvent être lues toutes en même temps en lisant un «registre de données» qui représente les valeurs logiques hautes / basses de celles-ci. broches. De même, vous pouvez définir des broches comme sorties, puis écrire 8 bits dans un registre de données, et le contrôleur GPIO des microcontrôleurs lira les valeurs modifiées du registre, et poussera la broche vers le haut ou tirera la broche vers le bas en fonction de la valeur que vous venez de définir.
Dans les contrôleurs plus récents tels que l'ARM Cortex A8 et A9 comme dans le Raspberry Pi et BeagleBone, leurs contrôleurs GPIO et différentes options sont très compliqués. Ils utilisent une architecture 32 bits, de sorte que la plupart des broches GPIO sont organisées en blocs de 32 broches, même si toutes ne sont pas réellement utilisables (certaines peuvent être dédiées ou non activées). Le BeagleBone (sur lequel j'ai travaillé auparavant) a des options vraiment impressionnantes pour sa grande quantité de broches, et parfois vous devrez utiliser un outil de «multiplexage de broches», qui vous permet de configurer les modes spéciaux de certaines broches pour des choses comme PWM, capture d'impulsions, sorties temporisées, entrées de canal analogique (ADC) et même (sur le BeagleBone de toute façon) mappage aux sous-processeurs industriels disponibles sur le cœur ARM, mais sont considérés comme des processeurs indépendants et ont besoin de leur propre mappage de broches pour être connecté au monde extérieur.
la source
Vous faites probablement référence à la sortie analogique d'Arduino, qui utilise souvent une broche GPIO avec un logiciel PWM . GPIO a généralement trois états. Output High, Output Low et Input / High-Z (haute impédance, où cela n'affecte pas la sortie).
PWM bascule rapidement une sortie de Output High à Output Low (période), pour créer une moyenne (Duty Cycle), permettant quelque chose qui ressemble à une valeur analogique. En basculant un GPIO binaire à un rapport cyclique de 50% (ou 128), la sortie est toujours binaire, mais se situe en moyenne à mi-chemin entre Haut et Bas.
Pensez à une ampoule. Vous le voyez activé ou désactivé. Mais il s'allume et s'éteint vraiment 60 fois par seconde, si vite que vous ne remarquez pas son clignotement très rapide. Mais allumez et éteignez l'ampoule manuellement très lentement et vous remarquerez qu'elle clignote. En 255, cela signifie 100% allumé, et moins de 255 est une fraction de 100% allumé.
C'est ainsi qu'un GPIO binaire peut agir comme une broche analogique à 255 états.
la source
Un bit GPIO peut être 0 ou 1. Un port GPIO 8 bits, composé de 8 bits consécutifs, peut varier entre 00000000 et 11111111, ou 255 décimal. Cela a peu à voir avec le concept de "analogique"
la source