Commits

Pierre Surply committed f2abd80

sout3: redac CAN

Comments (0)

Files changed (3)

doc/img/can.png

Added
New image

doc/sout3/annexe_surf.md

 \caption{Format de trame}
 \end{figure}
 
+\begin{figure}[!h]
+\centering
+\includegraphics[scale=0.45]{../img/can.png}
+\caption{Fonctionnement du CAN}
+\label{can}
+\end{figure}
+
 \begin{figure}[h]
 \centering
 \includegraphics[scale=0.5]{../img/leds.jpg}

doc/sout3/drivers.md

 
 ### Convertisseur Analogique vers Numérique
 
-Le microcontrôleur est muni d'un convertisseur analogique vers numérique à approximation successives. Ce périphérique est indispensable pour pouvoir exploiter les potentiomètres de la surface.
+Le microcontrôleur est muni d'un convertisseur analogique vers numérique à approximations successives. Ce périphérique est indispensable pour pouvoir exploiter les potentiomètres de la surface. \ref{can}
 
-#### Utilisation du CAN
+#### Utilisation du `CAN`
+
+Le convertisseur de `Atmega 1280` est connecté à un multiplexeur analogique 16 canaux qui permet de prendre en charge 16 entrées de tensions mappé sur le Port `F` et `K` du composant. La tension se référe bien sûr à la masse (0V).
+
+Le `CAN` convertit une tension analogique en une valeur codée sur 10 bits grâce à des approximations successives. La valeur minimale représente la masse (0V) et la maximale représente la tension de référence présente sur le pin `AREF` du microcontrôleur moins 1. Optionellement, le pin `AVCC` ou une tension interne (1.1V ou 2.56V) peut être connecté sur la broche `AREF`.
+
+##### Le registre `ADMUX` (`ADC` `M`ultiplexer `S`election `R`egister)
+
+Le registre `ADMUX` permet de contrôler le multiplexeur analogique du `CAN`.
+
+- Les bits 7:6 permettent de sélectionner la tension de référence. Dans notre cas, nous utilisons la tension AVCC avec un condensateur externe (présent sur la carte `Atmega 1280`) : cela équivaut à la valeur 01.
+- Le bit 5 permet d'aligner les 10 bits de résultat à gauche. Ici, nous les alignerons à droite.
+- Les bits 4:0 permet de choisir le canal et le gain que le multiplexeur sélectionnera. Cette valeur dépend donc de l'entrée que l'on souhaite convertir.
+
+##### Le registre `ADCSRA` (`ADC` `C`ontrol and `S`tatus `R`egister `A`)
+
+Ce registre permet de définir le comportement global du `CAN` et de lancer une conversion.
+
+- Le bit 7 permet d'activer le `CAN`.
+- Le bit 6 permet de lancer une conversion
+- Le bit 5 permet de lancer automatiquement une conversion lorsqu'un front montant est détecté.
+- Le bit 4 est mis à 1 lorsqu'une conversion est terminée.
+- Le bit 3 permet d'activer une interruption lorsqu'une conversion est terminée.
+- Les bit 2:0 permettent de définir la prédivision qui sera appliquée entre signal d'horloge `XTAL` et l'horloge qui cadence le convertisseur. Ici, nous appliquerons un facteur de 128 (ce qui correspond à une valeur de 111).
+
+##### Les registres `ADCL` et `ADCH` (`ADC` Data Register)
+
+Ces registres contiennent le resultat de la conversion sur 10 bits.. Lorsque l'alignement est à gauche, le registre `ADCL` contient les 8 bits de poids faibles et le registre `ADCH` contient les 2 bits de poids forts.
+
+##### Pilote du convertisseur en *Mara*
+
+    func analog_read(channel, aref)
+      @ADCSRB <- 0
+      @ADMUX <- (aref bitls 6) bitor (channel bitand 0x07)
+      @ADCSRA <- 0b11010111
+      waitfor ((@ADCSRA bitrs 6) bitand 1)
+      return asm "lds r24, ADCL
+                  lds r25, ADCH"
+    end
 
 #### Problèmes rencontrés
+
+La bonne manière de faire pour réaliser un tel circuit éléctronique aurait été d'utiliser des bobines et des condensateurs pour filtrer les écarts de tensions et ainsi diminuer le bruit.
+
+En effet, après de nombreux essais, nous avons remarqué que les 4 bits de poids faibles du registre `ADCL` semblent prendre des valeurs complétement aléatoire. Nous sommes donc contraint de nous baser sur une résultat sur 6 bits. Nos potentiomètres peuvent donc seulement prendre des valeurs entre 0 et 63 : cela est cependant suffisant pour notre surface mais aurait pû poser plus de problèmes sur une utilisation plus "sensible".