' 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"

 

 

 

 

 

 

RETOUR