#!/usr/bin/env python
# coding: utf-8
# # Chaine d'information d'un système
# ## Analyse fonctionnelle et structurelle
#
#
#
# Dans un système pluritechnique, la chaine d'information permet :
# - d'**acquérir** des informations en provenance de lui même, d'autres systèmes connectés, et de son utilisateur par l'intermédiaire d'une interface homme/machine (IHM) ;
# - de les **traiter** pour contrôler l'action à réaliser sur la matière d'oeuvre ;
# - et de **communiquer** l'état du système à l'utilisateur ou à d'autres systèmes connectés.
#
# ### Exemple du Stepper :
#
#
#
#
# La chaine d'information du mini-stepper permet :
# - d'**acquérir** l'information du mouvement d'un step au passage de la pédale devant le capteur ILS (Interrupteur à Lame Souple) ;
# - de **traiter** cette information en comptant la durée de l'exercice et le nombre de steps et en calculant le nombre de calories dépensées ;
# - de **communiquer** ces informations à l'utilisateur en les affichant sur l'écran LCD.
#
#
#
#
#
#
# ## La fonction "Acquérir" :
#
# - L'acquisition de grandeurs physiques se fait par l'intermédiaires de **capteurs**. Un capteur est un composant qui convertit une grandeur physique en un signal exploitable par l'unité de traitement*.
# > Exemples de capteurs de grandeur physique :
# - sur le stepper : Interrupteur à Lame Souple ILS ;
# - autres : thermomètre (température), baromètre (pression)...
#
# - L'acquisition des consignes de l'utilisateur se fait par l'intermédiaire d'une **interface homme/machine** ([IHM](https://www.lebigdata.fr/interface-homme-machine-tout-savoir-sur-les-ihm)) qui intègre des composants capables de convertir des informations humaines en un signal exploitable par l'unité de traitement*.
# > Exemples de composants d'IHM :
# - sur le stepper : Bouton Poussoir BP ;
# - autres : Télécommande, potentiomètre...
#
# * **Un signal exploitable par l'unité de traitement** : très souvent ce signal sera de nature électrique, rendu compatible avec le microcontroleur utilisé pour le traitement de l'information...
# ## Typologie des signaux logique, analogique et numérique :
#
#
#
# ### Ressource vidéo :
# In[19]:
get_ipython().run_cell_magic('HTML', '', '
\n\n\n')
# ## Numération et codage de l’information, changement de base
#
# ### Problématique :
#
# Dans notre exemple du stepper, l'information fournie à l'entrée de la chaine par le capteur [ILS](https://fr.wikipedia.org/wiki/Interrupteur_reed) est de type logique (Tout ou Rien [TOR](https://fr.wikipedia.org/wiki/Tout_ou_rien), $0$ ou $1$) or le système de numération adapté pour traiter ce genre d'information est le binaire (à base $2$).
#
# Par conntre, en sortie, l'information à afficher est destinée à l'utilisateur qui lui compte avec un système de numération décimal (à base $10$).
#
# Plus généralement, on le reverra en détail plus tard, lorsque la grandeur physique à acquérir sera de type analogique, il nous faudra la numériser pour la traiter avec un microcontrôleur.
#
# On peut donc d'ores et déjà affirmer que les données qui circuleront dans la chaine d'information seront, à un endroit ou à un autre, numériques (ou pour le moins logique) même si elles représentent autre chose.
#
# Aussi, pour bien comprendre le codage de l'information qui circulent nous devons être capable de convertir une donnée numérique d'un système de numération à l'autre...
# ### Les bases :
#
# #### Système décimal :
#
# C’est le système de numération que nous utilisons tous les jours. C’est un système de base $10$ car il utilise dix symboles différents :
# $$ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 $$
#
# C’est un système positionnel car l’endroit où se trouve le symbole dans le nombre définit sa valeur. Le $2$ du nombre décimal $2356$ n’a pas la même valeur celui du nombre décimal $5623$ :
#
# $2356 = 2 \times 10^3 + 3 \times 10^2 + 5 \times 10^1 + 6 \times 10^0$ ici le $2$ vaut $2000$
#
# $5623 = 5 \times 10^3 + 6 \times 10^2 + 2 \times 10^1 + 3 \times 10^0$ ici le $2$ vaut $20$
# #### Système binaire :
#
# C’est le système de numération utilisé par les « machines numériques ». C’est un système de base $2$ car il utilise deux symboles différents :
# $$ 0, 1$$
#
# Pour distinguer le nombre binaire 10110 du nombre décimal 10110 on indique le code ``0b`` (ou le symbole ``%``) avant le nombre ou l’indice $_2$ (ou $_b$) après le nombre.
#
# $10110_2 = 1 \times 2^4 + 0 \times 2^3 + 1 \times 2^2 + 1 \times 2^1 + 0 \times 2^0 = 16 + 0 + 4 + 2 + 0 = 22_{10}$
#
# On appel bit (contraction de Binary digIT = BIT) chacun des chiffres d’un nombre binaire.
#
# Avec un bit on peut distinguer deux états d’une information avec les $2^1 = 2$ nombres soit $1_2$, soit $0_2$.
#
# Avec $2$ bits on peut distinguer quatre états d’une information avec les $2^2 = 4$ nombres soit $00_2$, $01_2$, $10_2$, $11_2$.
#
# Avec $3$ bits on peut distinguer huit états d’une information avec les $2^3 = 8$ nombres soit $000_2$, $001_2$, $010_2$, $011_2$, $100_2$, $101_2$, $110_2$, $111_2$.
#
# Avec $8$ bits on peut distinguer 256 états d’une information avec les $2^8$ nombres allant de $00000000_2 = 0$ à $11111111 = 255$.
#
# Avec n bits on peut former $2^n$ combinaisons (nombres) différentes.
#
# Une suite de quatre bits est un quartet , une suite de huit bits est octet.
#
# Une suite de 16, 32, 64 bits est un mot binaire.
# ### Système hexadécimal.
#
# C’est un système de base $16$ qui utilise donc seize symboles différents :
#
# $$ 0,..$$
#
# Pour distinguer un nombre hexadécimal on indique le code ``0x`` (ou le symbole ``$``) avant le nombre ou l’indice $_{16}$ (ou $_h$) après le nombre.
#
# Les lettres A à F correspondent respectivement au nombre décimaux ?
#
# $AC53_{16}$ = ...........?
#
#
# ### Correspondance entre nombres de différentes bases :
#
#
#
#
#
# ### Changement de base :
#
# #### Conversion d’un nombre décimal en un nombre d’une autre base
#
# - Une méthode de conversion consiste à décomposer le nombre décimal en une somme de puissances de deux.
#
# > Par exemple, pour la conversion : $91$ = $01011011_2$
# >
# > On peut écrire :
# >$$91 = 0 \times 2^7 + 1 \times 2^6 + 0 \times 2^5 + 1 \times 2^4 + 1 \times 2^3 + 0 \times 2^2 + 1 \times 2^1 + 1 \times 2^0$$
# >
# >
# >$$91 = 64 + 16 + 8 + 2 + 1$$
# >
# >En rangeant les puissances de deux dans un tableau, on obtient :
# >
# >
#
#
# - Une autre méthode de conversion consiste à diviser le nombre décimal à convertir par la base b et conserver le reste de la division. Le quotient obtenu est divisé par b et conserver le reste. Il faut répéter l’opération sur chaque quotient obtenu.
# > Par exemple, pour la conversion : $91$ = $01011011_2$
# >
# >
# >
# >Les restes successifs sont écrits, en commençant par le dernier, de la gauche vers la droite. Cette méthode est dite « Méthode des divisions successives ».
#
# #### Conversion d’un nombre hexadécimal en binaire.
#
# Chaque symbole du nombre écrit dans le système hexadécimal est remplacé par son équivalent écrit dans le système binaire.
#
# Exemple : Convertir $ECA_{16}$ = ${1110_2\over E_{16}}{1100_2\over C_{16}}{1010_2\over A_{16}}$ = $1110 1100 1010_2$
#
#
# #### Conversion d’un nombre binaire en hexadécimal.
#
# C’est l’inverse de la précédente. Il faut donc regrouper les 1 et les 0 du nombre par 4 en commençant par la droite, puis chaque groupe est remplacé par le symbole hexadécimal correspondant.
#
# Exemple : Convertir $1100001101111_2$ = ${1_{16}\over 0001_2}{8_{16}\over 1000_2}{6_{16}\over 0110_2}{F_{16}\over 1111_2}$ = $186F_{16}$
#
# ## Exercices :
#
# Convertir $9F2_{16}$ en binaire.
#
# Convertir $001111110101_2$ en hexadécimal.
#
# Convertir en décimal les nombres binaires suivants : $10110_2$ ; $10001101_2$ ; $1111010111_2$
#
# Convertir en binaire les nombres décimaux suivants : $37$ ; $189$ ; $205$ ; $2313$.
#
# Convertir en décimal les nombres hexadécimaux suivants : $92_{16}$ ; $2C0_{16}$ ; $37FD_{16}$.
#
# Convertir en hexadécimal les nombres décimaux suivants : 75 ; 314 ; 25619.
#
# Quelle est l’étendue des nombres définis en hexadécimal sur 6 chiffres ?
#
# Exécuter les opérations $10111101_2 + 101111_2$, $1BF_{16} + A23_{16}$
#
# Quel est le code ASCII en hexadécimal correspondant à la chaine de caractères `1SI` ?
#
# >
#
#
# ## Vérification avec Python :
#
# La fonction `bin()` permet de convertir un nombre en binaire :
# In[ ]:
bin(91)
# In[ ]:
bin(0x5b)
# La fonction `hex()` permet de convertir un nombre en hexadécimal :
# In[ ]:
hex(91)
# In[ ]:
hex(0b1011011)
# La fonction `int()` permet de convertir un nombre en décimal :
# In[ ]:
int(0b1011011)
# In[ ]:
int(0x5b)
# ## Ressources :
# In[1]:
get_ipython().run_cell_magic('HTML', '', '\n \nBinary and Decimal Conversion from EICC on Vimeo.
\n\n')
# ## Références au programme :
#
#
#
#
# Compétences développées |
# Connaissances associées |
#
#
# Caractériser les échanges d’informations |
# Natures et caractéristiques des signaux, des
# données, des supports de communication... |
#
#
#
Ce document est mis à disposition selon les termes de la Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 4.0 International.
#
# Pour toute question, suggestion ou commentaire : eric.madec@ecmorlaix.fr