Le fichier source est
téléchargeable
ICI.
Nous
abordons ici une des partie les plus intéressantes de notre projet
: les Convertisseurs Analogique/ Numérique du HC12. ( A ne pas confondre
avec les bus série CAN du HC12) . Avec le 68HC11 nous disposons
d'un CA/N de 8
canaux, 8 bits, le HC12 nous en propose deux fois plus : deux
convertisseurs A/N 8 ou 10 bits de 8 voies, ATD0 et ATD1. La tension
d'entrée doit être comprise entre 0 et 5,2 volts. Pour plus de
précisions consulter la documentation du HC12.
Pour commencer nous avons écrit un petit programme test qui lit une
tension sur une entrée du CA/N et met celle-ci en mémoire à l'adresse
$1000. Nous lisons donc le résultat en affichant la mémoire à
partir de cette adresse et convertissons le résultat donné en hexa à
l'aide de la calculatrice scientifique du système d'exploitation. Mais
comme nous maitrisons maintenant l'affichage nous afficherons le
résultat sur l'écran LCD.
Mais auparavent il nous faut installer sur notre carte un
potentiomètre qui fournira la tension à mesurer. Une des extrémités du
potentiomètre est reliée au + de l'alimentation, l'autre au - et le
curseur à la broche PAD00 (broche 25 du connecteur X6 de CardS12).
Examinons
maintenant les parties essentielles du programme.
* Initialisation des registres pour les convertisseurs A/N
MOVB #$80,ATD0CTL2
MOVB #$20,ATD0CTL3
MOVB #$83,ATD0CTL4
Les registres du HC12 utilisés pour cette application sont
ATD0CTL2,
ATD0CTL3,
ATD0CTL4 et
ATD0CTL5.
Le nombre hexa figurant sous le nom du registre est son adresse en mémoire.
ATD0CTL2
$0080
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
ADPU |
AFFC
|
AWAI
|
ETRIGLE |
ETRIGP
|
ETRIG
|
ASCIE
|
ASCIF
|
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
La mise à 1 du bit b7 (A/D power up) nous permet de valider le
convertisseur ATD0.
Par défaut les convertisseurs ne sont pas alimentés pour économiser
l'alimentation du HC12.
ATD0CTL3 $0083
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
0
|
S8C
|
S4C
|
S2C
|
S1C
|
FIFO
|
FRZ1
|
FRZ0
|
0 |
0
|
0 |
1 |
0 |
0 |
0 |
0 |
Les bits b3 à b6
permettent de définir le nombre de conversions par séquence. Au reset du HC12 ce nombre est mis à
4. Ici nous avons choisi 2.
ATD0CTL4
$0084
b7
|
b6
|
b5
|
b4
|
b3
|
b2
|
b1
|
b0
|
SRES8 |
SMP1 |
SMP0 |
PRS4 |
PRS3 |
PRS2 |
PRS1 |
PRS0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
Les bits b0 à b4 servent à programmer le prédiviseur pour avoir la
vitesse maximum. Comme nous avons une fréquence bus de 16 MHz le
prédiviseur doit être mis à 3.
FBus MHz 2 4
8 12
16
20 24
Prédiviseur 0 0
1 2
3
4 5
Les bits b5 et b6 permettent de régler la vitesse
d'échantillonage; 00 pour la vitesse maximum ou 11 pour une
vitesse plus lente mais plus précise.
Enfin le bit b7 permet de choisir la résolution : 0 pour 10 bits ou 1
pour 8 bits. Nous avons choisi une résolution sur 8 bits.
**********************************
* Partie principale du
programme *
**********************************
LECTURE
MOVB #$80,ATD0CTL5
FIN_CONV0
LDAA ATD0STAT0 ; attente fin de
conversion
ORAA #$7F
; extraction du bit b15 (SCF)de
ATD0CTL5
CMPA #$FF ; SCF = 1 ?
BNE FIN_CONV0 ; non --> FIN_CONV0
LDD
ATD0DR0H ; oui --> mise en mémoire de
tension (en hexa)
STD
TENSION0
Une écriture dans le registre ATD0CTL5 lance une séquence de
conversion.
b0, b1, b2 indiquent le numéro du canal concerné (de 0 à 7)
ATD0CTL5
$0085
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
cadrage |
S8CM
|
SCAN
|
MULT
|
CD
|
CC
|
CB
|
CA
|
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
ATD0CTL5 est utilisé pour
choisir le mode de conversion, les canaux à convertir et pour
initialiser la conversion.
cadrage indique le cadrage des 10 bits sur 16 bits , 0 à gauche, 1 à droite.
S8CM est utilisé pour choisir le nombre de conversions : 0 pour 4
conversions ou 1 pour 8 conversions.
SCAN est utilisé pour choisir entre une simple conversion (0) ou une
conversion continue (1).
MULT détermine si la conversion s'effectue sur un seul canal ou
plusieurs canaux. Si MULT = 0, le convertisseur effectue toutes les
conversions sur un seul canal sélectionné par CD, CC, CB et CA. Si MULT
= 1, la conversion s'effectue sur plusieurs canaux différents dans le
groupe défini par CD, CC, CB et CA