MICROCONTROLEUR 68HC11F1 - PowerPoint PPT Presentation

About This Presentation
Title:

MICROCONTROLEUR 68HC11F1

Description:

MICROCONTROLEUR 68HC11F1 Algorithmique appliqu au traitement du signal B.HOAREAU Lyc e Louis Payen Sommaire Pr sentation technique du controlboyF1 F-prog1 ... – PowerPoint PPT presentation

Number of Views:70
Avg rating:3.0/5.0
Slides: 31
Provided by: Bert241
Category:

less

Transcript and Presenter's Notes

Title: MICROCONTROLEUR 68HC11F1


1
MICROCONTROLEUR 68HC11F1
  • Algorithmique appliqué au traitement du signal

B.HOAREAU Lycée Louis Payen
2
Sommaire
  • Présentation technique du controlboyF1
  • F-prog1 Allumer / éteindre une led .
    Configuration E/S dun port.
  • F-prog2 Allumer - éteindre une led si appui sur
    capteur 1
  • F-prog3 Allumer - éteindre une led si appui sur
    capteur 1 ET 2
  • F-prog4 Allumer - éteindre une led si appui sur
    capteur 1 OU 2
  • F-prog5 Utilisation d'un masque
  • F-prog6 Clignotement conditionnel
  • F-prog7 Clignotement conditionnel 2
  • F-prog8 Générer une séquence en utilisant un
    tableau
  • F-prog9 Compter des impulsions et afficher sur
    leds
  • F-prog10 Générer un signal de rapport cyclique
    variable

3
  • F-anal1 Réaliser une conversion Analogique
    Numérique (CAN)
  • Notion sur les interruptions et principe général
    de mise en oeuvre
  • F-timer2 Utiliser le timer pour générer des
    impulsions
  • F-compt3.bas Compter des impulsions par
    interruptions (interruption sur A7 et
    interruption pour gestion de débordement comptage
    (overflow)
  • F-compt4.bas Mesurer une largeur dimpulsion
  • F-TOC Timer Output Compare (TOC) générer un
    signal carré haute ou basse fréquence sous
    interruption
  • F-TIC Timer Input Capture (TIC) mesurer une
    largeur dimpulsion ou une période
  • F-CNA mise en œuvre du triple CNA 8 bits max 512

4
Informations Techniques Carte ControlboyF1
Microcontrôleur 68HC11F1 16Mhz EEPROM 32k RAM
32k Liaison Rs232 Connecteur A PortA 8 entrées
ou sorties logiques Connecteur B PORTB 8
sorties logiques à Darlington 500mA
.50V.Connecteur C PORTC 8 entrées numériques
optocouplées Connecteur D PORTD 4 entrées ou
sorties logiques PORTG 2 entrées ou
sorties logiques Connecteur E PORTE 8 entrées
analogiques (CAN résolution 8 bits) . Peut être
utilisé aussi comme des entrées logiques
traditionnelles. Connecteur F PORT N 4
entrées logiques 3 sorties analogiques
avec CNA 8 bits (Max 512) Connecteur LCD
PORTM 6 sorties logiques PORTN 4
entrées logiques Connecteur X Extension bus du
68HC11F1 Gnd,Vcc,Rst,Irq,Xirq,R/W,E,CSIO2,D0
àD7 , A0 à A3
5
Fprog1 Allumer / éteindre une led .
Configuration E/S dun port
include "startcf1.bas" DDRD
0 ' Port D en entrée DDRA 00001111
' A0 à A3 en sortie A4 à A7 en entrée '
programme principal ' Prog1 Allumer - éteindre
une led do PORTA.0 0 '
allumer tempo(200)
PORTA.0 1 ' Eteindre tempo(200)
loop
boucler à do ' fin du programme
principal ' Sous programmes et fonctions
function tempo(cnt) int i, k for cntcnt to
0 step -1 for i0 to 100 next next return
0 end function
6
  • F-prog2 Allumer - éteindre une led si appui sur
    capteur 1

Algo Si capteur 1 appuyé alors allumer led
rouge sinon éteindre led rouge
' programme principal ' Prog2 Allumer -
éteindre une led si appui sur capteur 1
PORTA 00001111 ' Initialisation (éteindre
leds) do If PORTA.4 0
then PORTA.1 0 ' allumer led
rouge else PORTA.1 1 '
éteindre led rouge end if
loop ' fin du
programme principal
7
Prog3 Allumer - éteindre une led si appui sur
capteur 1 ET capteur 2
' programme principal ' Prog3 Allumer -
éteindre une led si appui sur capteur 1 et 2
PORTA 00001111 ' Initialisation
(éteindre leds) do
If PORTA.4 0 and PORTA.5 0 then
PORTA.1 0 ' allumer led rouge else
PORTA.1 1 ' éteindre led rouge
end if loop
' fin du programme principal
8
Prog4 Allumer - éteindre une led si appui sur
capteur 1 OU 2
' Prog4 Allumer - éteindre une led si appui sur
capteur 1 OU 2 PORTA 00001111 '
Initialisation (éteindre leds) do
If PORTA.4 0 OR PORTA.5 0 then
PORTA.1 0 ' allumer led rouge
else PORTA.1 1 ' éteindre led
rouge end if loop
' fin du programme principal
9
Prog5 Utilisation d'un masque
Modifier un bit sans toucher aux autres
' Prog5 Utilisation d'un masque PORTA
00001111 ' Initialisation (éteindre leds)
do If PORTA.4 0 then
PORTA PORTA AND 11110101 ' allumer
led 2 et Led 4 else PORTA
PORTA OR 00001010 ' éteindre led 2 et led 4
end if loop
' fin du programme principal
10
Prog6 Clignotement conditionnel
' programme principal ' Prog6 Clignotement
conditionnel PORTA 00001111 '
Initialisation (éteindre leds) do
do while PORTA.4 0
tant que capteur appuyé PORTA.0
0 allumer led
tempo(100) PORTA.0 1
Eteindre led
tempo(100) loop
Boucler à do loop
' fin du programme
principal
11
' Prog7 Clignotement conditionnel 2
Tant que capteur activé, faire clignoter led
verte sinon faire clignoter led rouge
' programme principal ' Prog7 Clignotement
conditionnel 2 PORTA 00001111 '
Initialisation (éteindre leds) do
do while PORTA.4 0
PORTA.0 0 tempo(100)
PORTA.0 1 tempo(100)
loop PORTA.1 0
tempo(100) PORTA.1 1
tempo(100) loop
' fin du programme principal
12
' Prog8 Générer une séquence en utilisant un
tableau
include "startcf1.bas" Byte T(5),
j déclaration du tableau
DDRD 0 ' Port D en entrée DDRA
00001111 ' A0 à A3 en sortie A4 à
A7 en entrée T(0) 00001010
Initialisation T(1)
00000110 T(2) 00000101 T(3)
00001001 ' programme principal ' Prog8
Générer une séquence en utilisant un tableau '
PORTA 00001111 ' Initialisation
(éteindre leds) do for
j 0 to 3 J sincrémente de 0
à 3 PORTA T(j)
Affectation du tableau T(j) au port A
tempo(400) next j loop
' fin du programme
principal
13
Prog9 Compter des impulsions et afficher sur
leds
' programme principal ' Prog9 Compter des
impulsions et afficher sur leds ' PORTA
00001111 ' Initialisation (éteindre leds)
do do loop until
PORTA.4 1 Attendre capteur ouvert do

loop until PORTA.4 0 Attendre capteur fermé
compteur compteur 1 PORTA
compteur XOR 00001111 Inverse pour
affichage tempo(100) ' à
cause des rebonds loop
' fin du programme principal
14
Prog10 Générer un signal de rapport cyclique
variable
Byte j int T, Th DDRD 0 '
Port D en entrée DDRA 00001111
' A0 à A3 en sortie A4 à A7 en entrée
T 500 Th 100 ' programme
principal ' Prog10 Rapport cyclique variable '
Si T1 appuyé, TH augmente à 100 ' Si T2 appuyé,
TH diminue à 0 PORTA 00001111 '
Initialisation (éteindre leds) do
PORTA.1 0 tempo(Th) PORTA.1
1 tempo(T-Th) if
PORTA.4 0 and Thlt(T-10) then
Th Th10 end if if PORTA.5
0 and Thgt10 then Th Th-10
end if loop
' fin du programme principal
15
F-ANAL1 Réaliser une Conversion Analogique
Numérique (CAN)
include "startcf1.bas" byte b, c DDRD
0 ' Port D en entrée DDRA 00001111
' A0 à A3 en sortie A4 à A7 en
entrée lcdinit() print "CONVERSION"
' programme principal OPTIONS.7 1 ' Valider
CNA do c analogin(0) ' Conversion
sur E0 print "CAN", c Affichage
sur LCD tempo(200)
loop ' fin du programme principal '
analog in
function analogin(ch) ' ch 0
pour E0 à 7 pour E7 ADCTL ch ' lance le
CNA do loop until ADCTL.71 ' attendre return
ADR ' registre contient le resultat end function
16
Notion sur les interruptions et principe général
de mise en oeuvre
Lorsque le microprocesseur exécute les
instructions du programme principal , il peut
être interrompu par un signal interne (timer) ou
externe (Patte PA7) pour exécuter une tâche
spécifique appelée routine dinterruption (ou
sous programme dinterruption) . A la fin de
lexécution de la routine, le processeurreprend
lexécution du programme principal là ou il
lavait quitté. Lintérêt principal dune
interruption est de réaliser des tâches
(comptage, génération de signaux ) sans
utiliser tout le temps machine . Par exemple,
pour compter des impulsions on a vu dans
lexempledu programme F-Prog9 quil faut
détecter le front montant du signal le
microprocesseur passe 98 deson temps à attendre
larrivée de limpulsion . De même, pour générer
un signal carré par exemple, le processeur va
passer tout son temps à attendre (temporisations
temps haut et temps bas du signal)alors quil
pourrait faire mille autres choses ! Attention
les interruptions ne résolvent pas les
problèmes dalgorithmique
La configuration consiste à1- Faire les
paramétrages éventuels 2- Valider
linterruption (masque à 1) 3- Valider flag4-
CLI (I0 du registre CCR) A la fin de la routine
dinterruption il faut à nouveau valider le flag
afin dautoriser une nouvelle interruption.Lorsqu
une interruption est générée, elle ne doit pas
elle même être interrompue (le drapeau flag 
est automatiquement positionné par le
microcontrôleur)
17
F-timer2 Utiliser le timer pour générer des
impulsions
' Utilisation du Timer ' Clignoter led ROUGE à
basse fréquence sous interruption ' Pour modifier
le timer (CboyF1 16mhz) ' PACTTL.1 PACTL.0
(détermine le temps entre 2 interruptions timer
) ' 0 0 2,05 ms ' 0 1
4,1 ms ' 1 0 8,2 ms ' 1
1 16,4 ms include "startcf1.bas"
byte t, passage, flag ' Configuration
DDRD 0 ' Port D en entrée DDRA
01001111 ' A0 à A3 en sortie
A4,A5,A7 en entrée A6 en sortie Paramétrage
interruption PACTL.1 1 '
selectionner la vitesse (16,4ms sur cboyF1
16Mhz) PACTL.0 1 ' en fonction de
ce qu'on souhaite
' Voir tableau en haut du programme TMSK2.6
1 ' Validation interruption timer (masque à 1)
TFLG2.6 1
flag dinterruption timer cli ' autoriser les
interruptions (affecte bit I du CCR)
18
' initialisation passage 0
flag 0 Programme principal do
PORTA.0 0 ' Allumer led verte
tempo(200) PORTA.0 1 Éteindre led
verte tempo(200) loop
' Fonction interruption du TIMER
interrupt function rtiint at FFF0 adresse
spécifique interruption timer
passagepassage1 if passage gt20 then
2016.4ms 328ms if flag1 then
PORTA.1 0 ' Allumer led rouge
flag 0 else
PORTA.1 1 ' Eteindre led rouge
flag 1 end if
passage 0 end if TFLG2.6 1 '
autoriser interruption à nouveau (obligatoire
!) end function
19
  • F-compt3.bas Compter des impulsions par
    interruptions (interruption sur A7 et
    interruption pour gestion de débordement comptage
    (overflow)

include "startcf1.bas" BYTE n,nt,
flag,j BYTE T INT
comp,comp2,mb DDRD 0 ' Port D en
entrée DDRA 01001111 ' A0 à A3
en sortie A4,A5,A7 en entrée A6 en sortie
' utilisation du registre PA
Pulse Accumulator PACTL.50 '
PMOD 1 Mode Pulsetimer mesure le temps A7 mis
à 1 '
PMOD 0 Mode comptage
' (Ne pas confondre avec le timer)
PACTL.41 ' PEDG 0 PACTL.61
' Validation pour travailler en
compteur/pulsetimer sur A7 TMSK2.41
' PAII 1 Validation interruption sur
A7 TFLG2.41 ' PAIF 1 Flag
Autorise nouvelle interruption sur A7
TMSK2.51 ' POVI 1 Validation
Interruption overflow TFLG2.51
' POVF 1 Flag autorise new int overflow
TMSK2.60 ' RTII0 Inhibition du
timer (arret timer) TFLG2.60
' RTIF0 Flag associé au timer
cli ' autoriser les inter
20
lcdinit() print "Comptage" do
comp20 PACNT0
PACNT est un registre de comptage
tempo(500) qui sincrémente à
chaque impulsion sur A7 compPACNT
on récupère la valeur du registre
print "comp",comp '
affiche valeur compteur print
"comp2",comp2," " ' si débordement de comp
loop ' interruption de fin
d'impulsion ' Survient à la fin de
l'impulsion sur A7 interrupt function
rtiint at FFDA spécifique pulsetimer
PORTA.61 ' Pour visualiser
l'interruption for j1 to 100 '
Génère une petite impulsion sur A6
NOP next j PORTA.60
if flag1 then flag0
PORTA.2 0 else
flag1 PORTA.2 1 end if
TFLG2.4 1 ' PAIF à 1 pour autoriser nouvelle
interruption end function
' interruption pour overflow
Exécuté si PACNT est passé de
255 à 0 interrupt function
overflow at FFDC comp2
comp21 TFLG2.5 1 ' Autorise
int POVF 1 end function
21
F-compt4.bas Mesurer une largeur dimpulsion
' Mesurer une largeur d'impulsion ' Régler les
impulsions à 5ms environ pour les tests ' Faire
varier très doucement la largeur d'impulsion (ou
freq) include "startcf1.bas" BYTE n,nt,
flag,j BYTE T byte
comp,comp2,mb DDRD 0 ' Port D en
entrée DDRA 01001111 ' A0 à A3
en sortie A4,A5,A7 en entrée A6 en sortie
' utilisation du registre PA
Pulse Accumulator PACTL.51 '
PMOD 1 Mode Pulsetimer mesure le temps A7 mis
à 1 '
PMOD 0 Mode comptage d'impulsions
' (Ne pas confondre avec le
timer) PACTL.40 ' PEDG 0
PACTL.61 ' PAEN Validation
pour travailler en compteur/pulsetimer sur A7
TMSK2.41 ' PAII 1 Validation
interruption sur A7 TFLG2.41
' PAIF 1 Flag Autorise nouvelle interruption
sur A7 TMSK2.50 '
POVI 0 Pas de validation Interruption overflow
TFLG2.50 ' POVF 0 Flag
autorise pas new int overflow
' Ne pas activer si mode pulsetimer sur
A7 TMSK2.60 ' RTII0
Inhibition du timer (arret timer)
TFLG2.60 ' RTIF0 flag lié au timer
cli ' autoriser les inter
22
lcdinit() print "Comptage" do
wai ' attendre interruption
comp20 ' initialisation PACNT0
wai ' attendre nouvelle
interruption compPACNT
print "comp",comp ' affiche valeur
compteur tempo(500) loop
' interruption de fin d'impulsion '
Survient à la fin de l'impulsion sur A7
interrupt function rtiint at FFDA
PORTA.61 ' Pour visualiser
l'interruption for j1 to 100 '
Génère une petite impulsion sur A6 NOP
next j PORTA.60 if
flag1 then flag0
PORTA.2 0 else flag1
PORTA.2 1 end if
TFLG2.4 1 ' PAIF à 1 pour
autoriser nouvelle interruption
end function
23
F-TOC Timer Output Compare (TOC) générer un
signal carré haute ou basse fréquence sous
interruption
Une interruption est générée chaque fois que le
free compteur atteint une valeur de comparaison
' OUTPUT COMPARE générer un signal carré '
Régler oscillo sur 200us/carreau ' Visualiser le
signal sur A6 ' Modifier les valeurs de
comparaison dans routine d'interruption
outputcompare include "startcf1.bas" '
definitions supplémentaires int
TIC3 at 1014 ' résultat de input capture
int TOC2 at 1018 ' valeur de
comparaison pour outputcapture sur A6
byte TCTL1 at 1020 byte TCTL2 at
1021 byte TMSK1 at 1022 byte
TFLG1 at 1023 BYTE n,nt,
flag,j BYTE T byte comp,comp2,mb
int resultat, last flag
0 DDRD 0 ' Port D en entrée DDRA
01001111 ' A0 à A3 en sortie
A4,A5,A7 en entrée A6 en sortie

24
' utilisation du registre PA Pulse
Accumulator PACTL.51 ' PMOD
1 Mode Pulsetimer mesure le temps A7 mis à 1
' PMOD 0 Mode
comptage d'impulsions
' (Ne pas confondre avec le timer)
PACTL.40 ' PEDG 0 PACTL.60
' PAEN Validation pour travailler en
compteur/pulsetimer sur A7 TMSK2.40
' PAII 1 Validation interruption sur
A7 TFLG2.40 ' PAIF 1 Flag
Autorise nouvelle interruption sur A7
TMSK2.50 ' POVI 1 Validation
Interruption overflow TFLG2.50
' POVF 1 Flag autorise new int overflow
' Ne pas activer si mode
pulsetimer sur A7 TMSK2.60
' RTII0 Inhibition du timer (arret timer)
TFLG2.60 ' RTIF0 lié au timer
(flag indiquant qu'il vient d'y
avoir une interruption
timer afin que l'interruption ne soit pas
interrompue elle même (par
le timer) si trop longue
...) . Doit être remis à 1 dans le sous programme
d'interruption si on
veut une nouvelle interruption du
timer. Ne devrait pas être le cas ici puisqu'on
utilise le pusletimer...)
' Configuration pour input capture sur A0 '
DDRA.0 0 ' A0 en entrée
TMSK1.0 0 ' validation interruption
Input Capture sur A0 TFLG1.0 0
' flag associé TCTL2 0 '
Config pour mesure entre 2 fronts descendant
' Configuration pour Output Compare
OC2 TMSK1.6 1 ' validation
interruption output capture sur A6 / Oc2
TFLG1.6 1 ' Flag associé
TCTL1.7 0 ' Config fonctionnement
sortie A6 page 115 doc motorola TCTL1.6
0 ' si 1, A6 change d'état (toggle) à
chaque interruption '
conseil hoareau toujours mettre à 0 TCTL1 car
sinon même lorsque ' le
68HC11 est en stop, un signal carré est généré ,
le free compteur ' ne
s'arrêtant jamais ... TOC2 1000
' Valeur de comparaison
25
cli ' autoriser les inter
lcdinit() print "OUTPUT COMPARE"
do print "Voir signal sur A6"
tempo(500)
loop Chaque fois que
freecompteurtoc2, une interruption est générée
interrupt function outputcompare at FFE6
' adresse specifique if flag1 then
PORTA.6 1 ' rien ne m'empêche
d'utiliser une autre sortie !!! TOC2
TOC2 1000 ' temps haut 1000 flag
0 else PORTA.6 0
TOC2 TOC2 2000 ' temps bas 2000
flag 1 end if TFLG1.6 1 '
autoriser nouvelle interruption OutputCompare sur
A6 /oc2 end
function
26
  • F-TIC Timer Input Capture (TIC) mesurer une
    largeur dimpulsion ou une période

A chaque front (montant ou descendant ou
successif suivant config) la valeur du free
compteur est stockée dans registre TIC
' INPUT CAPTURE Mesure une période ' Régler
oscillo sur 2ms/carreau ' GBF TTL 400Hz
modifier symétrie ' Affichage sur lcd ' include
"startcf1.bas" ' definitions
supplémentaires int TIC1 at 1010 '
résultat de input capture sur PA2 . Int FFEE
int TIC2 at 1012 ' résultat de input
capture sur PA1 . Int FFEC int
TIC3 at 1014 ' résultat de input capture sur
PA0 . Int FFEA int TOC2 at
1018 ' valeur de comparaison pour
outputcapture sur A6 int FFE6 byte
TCTL1 at 1020 byte TCTL2 at 1021
byte TMSK1 at 1022 byte TFLG1 at
1023 BYTE n,nt, flag,j
BYTE T byte comp,comp2,mb int
resultat, last flag 0 DDRD 0 '
Port D en entrée DDRA 01001101 '
A0 A2 A3 A6 en sortie A1, A4,A5,A7 en entrée
' utilisation du registre
PA Pulse Accumulator PACTL.51
' PMOD 1 Mode Pulsetimer mesure le temps
A7 mis à 1 ' PMOD
0 Mode comptage d'impulsions
' (Ne pas confondre avec le timer)
PACTL.40 ' PEDG 0
PACTL.60 ' PAEN Validation pour
travailler en compteur/pulsetimer sur A7

27
TMSK2.40 ' PAII 1 Validation
interruption sur A7 TFLG2.40
' PAIF 1 Flag Autorise nouvelle interruption
sur A7 TMSK2.50 '
POVI 1 Validation Interruption overflow
TFLG2.50 ' POVF 1 Flag autorise new
int overflow ' Ne
pas activer si mode pulsetimer sur A7
TMSK2.60 ' RTII0 Inhibition du
timer (arret timer) TFLG2.60
' RTIF0 lié au timer (flag indiquant qu'il vient
d'y avoir une interruption timer afin que
l'interruption ne soit pas interrompue elle même
(par le timer) si trop longue ...) . Doit être
remis à 1 dans le sous programme d'interruption
si on veut une nouvelle interruption du timer. Ne
devrait pas être le cas ici puisqu'on utilise le
pusletimer...)
' Configuration pour Output Compare OC2
TMSK1.6 0 ' validation
interruption output capture sur A6
TFLG1.6 0 ' Flag associé
TCTL1.7 0 ' Config fonctionnement
sortie A6 page 115 doc motorola TCTL1.6
0 ' si 1, A6 change d'état (toggle) à
chaque interruption '
conseil hoareau toujours mettre à 0 TCTL1 car
sinon même lorsque ' le
68HC11 est en stop, un signal carré est généré ,
le free compteur ' ne
s'arrêtant jamais ... TOC2 1000
' Valeur de comparaison '
Configuration pour input capture sur A1
' Vérifier plus haut que A1 en entrée pour
inputcapture IC2 TMSK1.1 1 '
validation interruption Input Capture sur A1
TFLG1.1 1 ' flag associé
TCTL2 00000100 ' b3 b2 (pour IC2)
' 0 0
pas de déclenchement
' 0 1 mesure période
' 1 0 mesure
période '
1 1 mesure entre 2 fronts ' Pour
IC1 il faut configurer les bits b1 b0 .. voir
page 110 du 68HC11 cli ' autoriser
les inter last0 resultat 0
lcdinit() print "INPUT Capture"
tempo(10)
28
do print "INPcapt", resultat
tempo(500)
loop interrupt function
inputcapture at FFEC ' adresse specifique pour
IC2 resultat TIC2-last ' Input
capture sur A1 registre TIC2 last
TIC2 PORTA.61 ' Pour
visualiser l'interruption for j1 to
100 ' Génère une petite impulsion sur A6
NOP next j PORTA.60
if flag1 then flag0
PORTA.2 0 else
flag1 PORTA.2 1 end
if TFLG1.1 1 ' autoriser nouvelle
interruption input capture sur A1 end function
A chaque interruption, la valeur du free
compteur est recopiée dans TIC2Il faut faire une
soustraction avec lancienne valeur de TIC2 pour
connaître la largeur de limpulsion (ou période)
29
Mise en œuvre du triple CNA 8bits (max512) de la
carte cboyF1
Le Max512 dispose de 3 sorties analogiques . 3
lignes en entrées permettent de piloter le
circuit 1 ligne /CS pour la sélection (DACCS) 1
ligne DIN pour les données séries (DACDIN) 1
ligne SCLK dhorloge (DACSCLK) 1 mot de 16
bits doit être chargé en série (ligne DIN) pour
contrôler lun des 3 CAN Les 8 bits de poids
forts permettent (en autre) de sélectionner lun
des 3 CAN Les 8 bits de poids faibles doivent
contenir la valeur à convertir Exemple
Sélection valeur
LC LB LA 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 1
Le CAN 1 est sélectionné et 67 est chargé pour
conversion 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 1
Le CAN 3 est sélectionné et 9 est chargé pour
conversion Un front descendant sur /CS indique
au MAX512 le début du transfert
(initialisation) Il est possible de charger
simultanément 2 ou 3 CAN, mais avec la même
valeur ! Le décalage se fait à chaque front
montant dhorloge Un front montant du /CS
entraîne lexécution du mot transféré .
30
Do for j0 to 255 '
pour générer une rampe
analogout(4, j) ' envoi sur convertisseur
3 de la valeur i tempo(1)
' pour modifier la pente de la rampe
next j Loop ' Voir chronogramme du
max 512 et schéma de câblage des entrées (Doc
controlord) function analogout(ch, val) ' 1
A, 2 B, 4 C PORTM 0x20 ' CS 0 0x
signifie hexadécimal. Initialisation max512(ch)
' Envoie dabord du numéro de
CAN max512(val) ' Envoie de la
donnée à convertir PORTM 0x30 ' CS 1
Fin transfert, exécution. end function
function max512(val) ' le nom val
est mal choisi attention à la confusion ! byte
cnt for cnt 0 to 7 ' 8 bits à
transférer if val and 0x80 then ' On fait un
masque pour test bit poids fort
' test vrai bit poids fort vaut 1 PORTM
0x22 ' SDIN 1 (on envoie 1) PORTM 0x23 '
SCLK 1 (front montant horloge) else 'sinon
c'est que bit poids fort vaut 0 PORTM 0x20 '
SDIN 0 (on envoie 0) PORTM 0x21 ' SCLK 1
(front montant horloge) end if PORTM
0x20 ' SCLK 0 (horloge à 0) val val val
' décalage à gauche (val2) pour bit
suivant next cnt end function
Write a Comment
User Comments (0)
About PowerShow.com