bonjour Tango et à tous,
ton programme basic tiens un peu la route ,
mais des delay (instruction basic) de 1µS sont difficile à obtenir avec FOSC=4MHz
si on a pas une FOSC tres élevée 16,32 voir 48MHz.
Algorithme :
toutes les 20ms
generer le delay minima de 1000µS
puis rajouter un delay en µS de 20 à 1000 pour couvrir 1mS à 2mS, par pas de 10µS, le point de repos étant 1,5mS
lecture de l'ADC (prend minimum 22µS)
supprimer les boucles basic : d'autant que la
simple boucle for next va deja bouffer 9µS à chaque cycle ..
Code : Tout sélectionner
while true
while t=0 ' attend l'interrupt
wend
GPIO.1 = 1
t=0
pos =2+ ADC_read(0) >>3 ' si lecture du potentiomètre sur GPIO.0 sur 10 bits recadrer à 0 à 127 en divisant par 8
'Delay minimum de depart
delay_us (1000-22-20) ' valeur à ajuster : 1000µS - duree acquis ADC >=22µS - quelques µS - Talon de 2x10µS
' Delay_Cyc(dim Cycles_div_by_10 as byte)
' Value Cycles_div_by_10 must be between 2 and 257.<- ???? minima=2 maxima=255
Delay_Cyc(pos)
GPIO.1 = 0
wend
le premier delay de 1000µS sera à reduire pour defalcquer la duree de lecture ADC >=22µS
les quelques instructions autour et l'offset de 2x10µS du à l'usage de Delay_cyc
Mais il y a un piege avec cette fonction Delay_Cycl'argument doit etre compris entre 2 et 255 ( non pas 257 ! un byte ne dépasse pas 255 ) sinon
plantage programmemerçi qui : MikroE !
il faut donc un petit talon sur le potentiometre pour avoir ADC=16 points au minima ( /8 => 2)
ou par soft imposer pos minima en rajoutant 2 à ADC_read()
voir avec debuggeur mikrobasic et WatchClock en mode pas à pas
Le point zero serait donc au milieu de la course du potar (lineaire)
code non testé en reel
mais Delay_µS() donne bien un delay approprié (testé ave Watchclock)
Delay_Cyc(100) donne bien 1000µS