' commande de 12 servo moteurs sous interruption
' B.Hoareau Le 7 octobre 2002 Lycée Louis Payen REUNION
' version 2
' Caractéristique :
' 12 degré par pas pour le CBOY3 (8Mhz)
' 6 degré par pas pour le CBOYF1 (16Mhz)
' Le portb est inversé , car connecté au darlington collecteur ouvert
#include "startcf1.bas"
byte t,i1,S,Sb
byte A,B,C,D,E,F,G,H,I,J,K,L
byte As,Bs,Cs,Ds,Es,Fs,Gs,Hs,Is,Js,Ks,Ls
int minute
DDRA = 255 ' Port A en sortie
' lcdinit() ' enable l'afficheur
PACTL.1 = 1 ' selectioner la vitesse
PACTL.0 = 1
TMSK2.6 = 1 ' declencher le timer
cli ' autoriser les inter
' Changer les valeurs ci-dessous pour modifier la
' largeur des impulsions (max :33 pour cboy3, 66 pour cboyf1 16mhz 49 pour le 12Mhz) "Une largeur d' impulsion correspond à 3 \ degrés dans la réalité"
A = 60 ' A0 max:75 (sens horaire) min:35 (sens anti-horaire) "Modifie l'angle de rotation de la base"
B = 50 ' A1 et A2 min:22 (ouvert) max:55 (fermé) "Modifie la position de l'avant bras"
C = 30 ' A2 min:22 (ouvert) max:55 (fermé) "Modifie la position de l'avant bras"
D = 60 ' A3 min:46 (pince fermée) , max:60 (pince ouverte) "Modifie l'angle d'ouverture de la pince"
E = 45 ' A4 max:48 (ouvert) min:25 (fermé) "Modifie la position du bras"
F = 45 ' A5 min:22 (ouvert) , max:65 (fermé) "Modifie la position de l'orienteur pince"
do ' pour toujours
A = 60 ' A0 max:75 (sens horaire) min:30 (sens anti-horaire)
B = 50 ' A1 et A2 min:22 (ouvert) max:55 (fermé)
C = 50 ' A2 min:22 (ouvert) max:55 (fermé) "Cette partie du programme constitue la mise
D = 55 ' A3 min:46 (pince fermée) , max:60 (pince ouverte) en position initiale du robot"
E = 48 ' A4 max:48 (ouvert) min:25 (fermé)
F = 60 ' A5 min:22 (ouvert) , max:65 (fermé)
tempo(2000)
A = 50 ' A0 max:75 (sens horaire) min:30 (sens anti-horaire) "Ici la base tourne de 30° dans le sens
B = 50 ' A1 et A2 min:22 (ouvert) max:55 (fermé) anti-horaire"
C = 50 ' A2 min:22 (ouvert) max:55 (fermé)
D = 55 ' A3 min:46 (pince fermée) , max:60 (pince ouverte)
E = 48 ' A4 max:48 (ouvert) min:25 (fermé)
F = 60 ' A5 min:22 (ouvert) , max:65 (fermé)
tempo(2000)
A = 50 ' A0 max:75 (sens horaire) min:30 (sens anti-horaire)
B = 50 ' A1 et A2 min:22 (ouvert) max:55 (fermé)
C = 50 ' A2 min:22 (ouvert) max:55 (fermé)
D = 55 ' A3 min:46 (pince fermée) , max:60 (pince ouverte)
E = 48 ' A4 max:48 (ouvert) min:25 (fermé)
F = 38 ' A5 min:22 (ouvert) , max:65 (fermé) "Ici l'orienteur-pince se baisse de 22°"
tempo(2000)
A = 50 ' A0 max:75 (sens horaire) min:30 (sens anti-horaire)
B = 50 ' A1 et A2 min:22 (ouvert) max:55 (fermé)
C = 50 ' A2 min:22 (ouvert) max:55 (fermé)
D = 55 ' A3 min:46 (pince fermée) , max:60 (pince ouverte)
E = 34 ' A4 max:48 (ouvert) min:25 (fermé) "Ici le bras se lève de 14°"
F = 38 ' A5 min:22 (ouvert) , max:65 (fermé)
tempo(2000)
A = 50 ' A0 max:75 (sens horaire) min:30 (sens anti-horaire)
B = 35 ' A1 et A2 min:22 (ouvert) max:55 (fermé) "Ici l'avant-bras se baisse 15°"
C = 35 ' A2 min:22 (ouvert) max:55 (fermé)
D = 55 ' A3 min:46 (pince fermée) , max:60 (pince ouverte)
E = 34 ' A4 max:48 (ouvert) min:25 (fermé)
F = 38 ' A5 min:22 (ouvert) , max:65 (fermé)
tempo(3000)
loop
function tempo(cnt)
int i, k
for cnt=cnt to 0 step -1 "Cette partie permet la temporisation des différents mouvements
for i=0 to 100 ce qui permet aussi une décomposition en plusieurs positions"
next i
next cnt
end function
interrupt function rtiint at $FFF0
PORTA = 255
PORTB = 0
As=A
Bs=B
Cs=C
Ds=D
Es=E
Fs=F
Gs=G
Hs=H
Is=I
Js=S
Ks=K
Ls=L
S = 255 ' pour port A
Sb = %00000000 ' pour port B
t = 75 ' t=80 pour le cboyF1 16Mhz
' Attention, ne pas modifier les registres A et B
LDAA S
LDAB Sb
boucle:
DEC A
BNE suite1
ANDA #%11111110
suite1:
DEC B
BNE suite2
ANDA #%11111101
suite2:
DEC C
BNE suite3
ANDA #%11111011
suite3:
DEC D
BNE suite4
ANDA #%11110111
suite4:
DEC E
BNE suite5
ANDA #%11101111
suite5:
DEC F
BNE suite6
ANDA #%11011111
suite6:
DEC G
BNE suite7
ANDA #%10111111
suite7:
DEC H
BNE suite10
ANDA #%01111111
' Pour le port B
suite10:
DEC K
BNE suite11
ORAB #%00001000
suite11:
DEC L
BNE suite12
ORAB #%00010000
suite12:
STAA PORTA
STAB PORTB
DEC t
BNE boucle
PORTA = 0
PORTB = 24
A = As
B = Bs
C = Cs
D = Ds
E = Es
F = Fs
G = Gs
H = Hs
I = Is
J = Js
K = Ks
L = Ls
TFLG2.6 = 1 ' autoriser ints a nouveau
end function
' #include "lcd.bas"