Robotique : Commande d'un moteur pas à pas avec un Oric Atmos
L'idée
Il y a quelque temps j'ai ressorti mon vieux Oric Atmos, mon premier ordinateur des années 1984, avec l'idée d'en faire quelque chose. Après une recherche sur internet, j'ai trouvé des pages le Club Europe Oric avec des adeptes, de la documentation, des jeux et des programmes à charger.
Comme l'Oric possède un connecteur 2 x 17 br qui permet un accès direct au Bus du processeur 6502, cadencé à 1 MHz, pourquoi ne pas essayer une application de robotique ? Comme la commande d'un moteur pas à pas (récupéré sur une vielle imprimante).
|
![]() |
|
|
|
Commande d'un interrupteur et d'une LED
Pour tester le fonctionnement de cette carte on pourra connecter un interrupteur et une LED avant d'y relier une carte de commande pour moteur pas à pas. |
|
![]() |
|
1 REM " Test P.I.A." |
|||||||||||||||
10 POKE#3F1,0 | Mise à 0 du registre de contrôle pour l'accés au registre de transfert du port A | |||||||||||||||
20 POKE#3F0,255 | Bits du port A en sorties | |||||||||||||||
30 POKE#3F1,255 | Mise à 1 du registre de contrôle pour l'accés au registre de données du port A | |||||||||||||||
40 POKE#3F3,0 | Mise à 0 du registre de contrôle pour l'accés au registre de transfert du port B | |||||||||||||||
50 POKE#3F2,0 | Bits du port B en entrées | |||||||||||||||
60 POKE#3F3,255 | Mise à 1 du registre de contrôle pour l'accés au registre de données du port B | |||||||||||||||
70 A=PEEK(#3F2) | Attente de la mise à 0 d'un interrupteur | |||||||||||||||
80 IF A=0 THEN GOTO 100 | ||||||||||||||||
90 GOTO 70 | ||||||||||||||||
100 POKE #3F0,0 | Boucle pour le clignotement de la LED | |||||||||||||||
110 WAIT50 | ||||||||||||||||
120 POKE#3F0,255 | ||||||||||||||||
130 WAIT50 |
||||||||||||||||
140 GOTO 70 |
Commande d'un moteur Pas à Pas
|
Pour la commande un moteur pas à pas nécesite 2 signaux rectangulaires déphasés de pi/2 |
|
![]() |
|
|
|
![]() |
|
10 REM " commande moteur " |
|||||||||
20 POKE#3F1,0 | Mise à 0 du registre de contrôle pour l'accés au registre de transfert du port A | |||||||||
30 POKE#3F0,255 | Bits du port A en sorties | |||||||||
40 POKE#3F1,255 | Mise à 1 du registre de contrôle pour l'accés au registre de données du port A | |||||||||
50 CLS : HIRES | Tracé d'un cercle à l'écran | |||||||||
60 CURSET 50,100,0 | ||||||||||
70 CIRCLE 44,1 | ||||||||||
80 PRINT"ANGLE DE ROTATION" | Entrée de l'angle de rotation en degrés | |||||||||
90 INPUT C | ||||||||||
100 CURSET 50,100,0 : DRAW B,A,0 | Effacement de la droite précédente à l'écran | |||||||||
110 A=INT(40*SIN((C/180)*PI)) | Tracé de la droite correspondante à l'angle de rotation | |||||||||
120 B=INT(40*COS((C/180)*PI)) | ||||||||||
130 CURSET 50,100,0 | ||||||||||
140 DRAW B,A,1 |
||||||||||
150 D=C/15 : FOR T=0 TO D-1 | Boucle avec les valeurs décimales sur le Port A du tableau ci-contre | |||||||||
160 POKE#3F0,64 | ||||||||||
170 WAIT2 | ||||||||||
180 POKE#3F0,192 | ||||||||||
190 WAIT2 | ||||||||||
200 POKE#3F0,128 | ||||||||||
210 WAIT2 | ||||||||||
220 POKE#3F0,0 | ||||||||||
230 WAIT2 | ||||||||||
240 NEXT T | ||||||||||
250 GOTO 80 |