Visualizza messaggio singolo
Vecchio 10 ottobre 11, 15:11   #2 (permalink)  Top
romoloman
Adv Moderator
 
L'avatar di romoloman
 
Data registr.: 15-08-2007
Residenza: sto a Massa ma sono molto Positivo
Messaggi: 12.069
Citazione:
Originalmente inviato da elicottero78 Visualizza messaggio
ciao,ancora una domanda x capire meglio la programmazione dei pic.....vi ricordo che sto tra mikroc e picgenius...quest ultimo mi sta semplificando la vita parecchio..essendo iin italiano poi....è una figata...ha i suoi limiti ma mi aiuta molto....

allora,sto usando un pic 16f676 con adc......e in base al valore del adc.....dato con il movimento di un trimmer.....muovo un servo

il mio problema è che ho gia tanti trimmer che però non mi portano adc da valore 0 a 1023......ma minimo partono da 320 a 1023

voglio mantenere questo problema xchè verrebbe fuori utile come programma base x i miei futuri progetti con altri tipi di sensori...e altre modalita

scrivo il programma in versione umana

ho iniziato cosi....pic collegato al lcd 16x2 e trimmer

accendo....valore=read_adc(0)

porto il trimmer al massimo...clicco il tasto n2
e salvo il valore adc come ADCMAX

porto il trimmer al minimo clicco il tasto n1
e salvo il valore adc come ADCMIN

ok ora so che
ADCMAX=1023

ora so che
ADCMIN=320
con altri trim avrei potuto avere altri valorei diversi

ora voglio che ADCMAX valga 210 inpulsi
e ADCMIN valga 90 inpulsi

gli inpulsi mi servono x il ciclo for tipo

OUTPUT1=1
for ciclo=0 to inpulsi
delay_precision_us(10)
endfor
OUTPUT1=0
delay_ms(20)

la mia domanda è...che proporzione o calcolo devo fare x far si che tra max e min
l adc e inpulsi si trovino in coincidenza?

io voglio che al trimer al minimo il servo è tutto a sinistra ma man mano che giro il trimmer verso il massimo ...il servo si deve muovere verso detra

spero di essere stato chiaro,grazie in anticipo e scusate le mie domande da ignorante
mi spieghi solamente perchè utilizzi:

for ciclo=0 to inpulsi
delay_precision_us(10)
endfor


Il ciclo for si becca a 4Mhz di clock 2us (1 per l'incremento della variabile e 1 per il test) solo lui... lo esegui 90 volte hai 180us che se ne vanno...
Verifica con un'oscilloscopio...

premesso che non conosco picgenius e i limiti delle sue funzioni, meglio un
delay_precision_us(10*impulsi);

per quello che riguarda l'impulso:
la variazione fra min e max del segnale di un servo stando a specifiche è 1000 (minimo 1000 max 2000)

adcrange=adcmax-adcmin
impulsi=int((adcrange/(adcval-adcmin))*100+100)
uscita=1
delay_precision_us(10*impulsi);
uscita=0

considerando il range 900-2100

adcrange=adcmax-adcmin
impulsi=int((adcrange/(adcval-adcmin))*120+90)
uscita=1
delay_precision_us(10*impulsi);
uscita=0
__________________
Vivere in qeusto mondo e molto belo belo e vale la pena starci ma a volte in questa UNICA vita che ci apartiene posono succedere cose brute brute alora mi chiedo perche siete incazziati domani pole esere anche lultimo
Grazie "TRANQUILLO"
FAI 15766
romoloman non è collegato   Rispondi citando