Newsgroup: it.comp.os.linux.development
Titolo: help basic....

Ho comprato una schedina per controllare 3 motori passo passo e con essa 
mi hanno dato un programmino per pilotarla in basic. solo che il basic
non
lo so bene...
Qualcuno mi dà una mano a capire bene cosa fa?
Le righe in cui scrive a video e chede input le ho capite. Non ho 
capito a cosa serve la riga 5 e non ho capito bene come funzionano le
subroutine.
Ecco il sorgente e grazie.
2 COLOR 2, 4, 7
3 SCREEN 0
5 DEF SEG = 64: a = PEEK(8) + PEEK(9) * 256: OUT a, 0
10 xa = 38: xb = 14: xc = 76: xd = 100: xe = 0
20 ya = 56: yb = 112: yc = 82: yd = 26: ye = 0
30 za = 73: zb = 97: zc = 35: zd = 11: ze = 0
35 REM
40 passi = 0: numero.di.giri = 0
50 CLS
60 LOCATE 2, 4: PRINT "Indicare numero di passi:";
70 INPUT passi
80 LOCATE 4, 4: PRINT "Indicare rallentamento:";
90 INPUT numero.di.giri
100 LOCATE 6, 6: PRINT "Selezionare motore"
105 LOCATE 7, 6: PRINT "e direzione di rotazione"
110 LOCATE 10, 6: PRINT "1. Motore 1 destroso"
120 LOCATE 11, 6: PRINT "2. Motore 1 sinistroso"
130 LOCATE 12, 6: PRINT "3. Motore 2 destroso"
140 LOCATE 13, 6: PRINT "4. Motore 2 sinistroso"
150 LOCATE 14, 6: PRINT "5. Motore 3 destroso"
160 LOCATE 15, 6: PRINT "6. Motore 3 sinistroso"
170 LOCATE 17, 6: a$ = INKEY$: INPUT a$
176 IF a$ = "0" THEN GOTO 260
180 IF a$ = "" THEN GOTO 170
190 IF a$ = "1" THEN GOSUB 1000: GOTO 40
200 IF a$ = "2" THEN GOSUB 1100: GOTO 40
210 IF a$ = "3" THEN GOSUB 1200: GOTO 40
220 IF a$ = "4" THEN GOSUB 1300: GOTO 40
230 IF a$ = "5" THEN GOSUB 1400: GOTO 40
240 IF a$ = "6" THEN GOSUB 1500: GOTO 40
250 GOTO 170
260 END
270 REM
1000 'motore 1. destroso
1010 FOR n = 1 TO passi
1020 OUT a, xa
1030 xe = xa: xa = xb: xb = xc: xc = xd: xd = xe
1040 FOR m = 1 TO numero.di.giri: NEXT m
1050 NEXT n
1060 OUT a, 0
1070 RETURN
1080 :
1100 'motore 1.sinistroso
1110 FOR n = 1 TO passi
1120 OUT a, xa
1130 xe = xd: xd = xc: xc = xb: xb = xa: xa = xe
1140 FOR m = 1 TO numero.di.giri: NEXT m
1150 NEXT n
1160 OUT a, 0
1170 RETURN
1180 :
1200 'motore 2.destroso
1210 FOR n = 1 TO passi
1220 OUT a, ya
1230 ye = ya: ya = yb: yb = yc: yc = yd: yd = ye
1240 FOR m = 1 TO numero.di.giri: NEXT m
1250 NEXT n
1260 OUT a, 0
1270 RETURN
1300 'motore 2. sinistroso
1310 FOR n = 1 TO passi
1320 OUT a, ya
1340 FOR m = 1 TO numero.di.giri: NEXT m
1330 ye = yd: yd = yc: yc = yb: yb = ya: ya = ye
1350 NEXT n
1360 OUT a, 0
1370 RETURN
1400 'motore 3.destroso
1410 FOR n = 1 TO passi
1420 OUT a, za
1430 ze = za: za = zb: zb = zc: zc = zd: zd = ze
1440 FOR m = 1 TO numero.di.giri: NEXT m
1450 NEXT n
1460 OUT a, 0
1470 RETURN
1500 'motore 3.sinistroso
1510 FOR n = 1 TO passi
1520 OUT a, za
1530 ze = zd: zd = zc: zc = zb: zb = za: za = ze
1540 FOR m = 1 TO numero.di.giri: NEXT m
1550 NEXT n
1560 OUT a, 0
1570 RETURN
-- 
Non c'è più forza nella normalità, c'è solo monotonia.

1060 OUT a, 0
questo, probabilmente, fermera' il motore e azzerera' il contatore di
posizione.
Hmm, mi hai fatto tornare la voglia di giocherellare con la ferraglia.
E' un prodotto commerciale? Si trova facilmente? costa uno sproposito?
Quando i ero interessato io, si trovavano solo pezzi industriali, che
avevano il brutto vizio di considerare il prezzo come una frazione del
bilancio della general motors.:-(
-- 
           |Save our planet!
  Ciao     |Save wildlife;
  roberto  |For your E-MAIL use only recycled Bytes !!
           |roberto poggi  
rpo...@softhome.net

1020 OUT a, xa
Tutte le istruzioni OUT di questo tipo sputano valori sulla porta.
Lo zero e' probabilmente una forma di reset.
--
Andrea Laforgia - walkietalkie(at)
libero.it
#exclude <windows.h>

 1120 OUT a, xa
Qua sotto abbiamo lo stesso shift di sopra, ma in 
"direzione" diversa



Una volta capito bene cosa c'è all'indirizzo 0040:0008 ( che per caso la 
scheda si collega alla parallela ? ) non credo ci siamo altri problemi.
L'unica cosa dubbia è come mantenere in movimento + motorini .... Non credo 
che sia possibile ( in generale ) 

Legge la word all'indirizzo 0x0064:0x0008 che deve contenere il numero
Ops... scusate, non e' 0x0064 ma 0x0040 (come dice giustamente
Goffredo). L'indirizzo e' 0x0064:0x0008.


 che sia possibile ( in generale )
appunto, si può muovere un motore per volta. Però penso che se si vuole
mouvendo
i motori di pochi passi alternativamente si posso "interpolare" un
movimento 
normale.


 bilancio della general motors.:-(
Ma se vai in una feria di hobbistica sei a posto.
-- 
Non c'č piů forza nella normalitŕ, c'č solo monotonia.

 normale.
In realta forse scambiando i fili in maniera che le 3 sequenze dei motorini 
( xa,xb,xc,xd = ya,yb,yc,yd )  sono uguali  forse ( alemeno nella stessa 
direzione ) qualcosa si può fare ...

Ma se vai in una feria di hobbistica sei a posto.
Ok, credevo in una schedina interna, pilotaggi con la parallela ne avevo
trovati parecchi, ad esempio su circuit cookbook.
http://www.ee.ualberta.ca/html/cookbook.html


 Goffredo). L'indirizzo e' 0x0064:0x0008.
Tranquillo ho sbagliato anche io; l'indirizzo giusto è 
0x0040:0908 

0x0040:0908 
Hmmmm... xche' ? 


 Hmmmm... xche' ?
5 DEF SEG = 64: a = PEEK(8) + PEEK(9) * 256: OUT a, 0
64=0x40
8=8
9*256=0x0900
Messi insieme
0040:0908    ( ma se ben ricordo forse č proprio l'indirizzo fisico 
0x004908 .... )
Ho sparato qualche ca%%ata ?

Ho sparato qualche ca%%ata ?
Ehm... forse si' :)
Nel senso che PEEK serve a estrarre il valore da una locazione di
memoria.
PEEK(8) + PEEK(9) * 256 
significa prendere il valore della locazione 0x0008 e il valore
della locazione 0x0009, shiftandolo di 8 posizioni.
Quindi, evidentemente, il valore desiderato e' una word il cui
indirizzo e' 0x0040:0x0008 (il byte piu' significativo, secondo
l'endianess Intel, compare dopo quello meno significativo).


 Ehm... forse si' :)
Si direi proprio di si ( la vecchiaia .... )