10 ottobre 11, 13:02 | #1 (permalink) Top |
User Data registr.: 14-05-2005 Residenza: bergamo
Messaggi: 1.278
| quale calcolo o proporzione x questo adc-pic?
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 Ultima modifica di elicottero78 : 10 ottobre 11 alle ore 13:06 |
10 ottobre 11, 15:11 | #2 (permalink) Top | |
Adv Moderator Data registr.: 15-08-2007 Residenza: sto a Massa ma sono molto Positivo
Messaggi: 12.071
| Citazione:
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 | |
10 ottobre 11, 21:27 | #3 (permalink) Top |
User |
Alcuni consigli hw e sw: - Il potenziometro deve avere un valore massimo di 2k2. - Fra il cursore del potenziometro ed il pin del A/D metti una resistenza del valore compreso fra 330 e 680 ohm. - Fra il pin del A/D e massa, molto vicino al pin del micro metti un condensatore ceramico da 100nF. Poichè hai un tempo di refresh del PWM di 10..20ms puoi effettuare una media mobile su 8...64 campionamenti del A/D, poi accumulare per 16..32 volte tale media ed alla fine con uno shift a dx di 4 o 5 ottieni il valore della tensione del potenziometro bello stabile e pulito. Se vuoi posso pubblicare 4 righe di codice. Se hai il valore minimo di 300 circa occhio alla lunghezza che collega il terminale negativo del potenziometro a massa ed al punto di collegamento.
__________________ Peace & Love Fate le cose nel modo più semplice possibile, ma senza semplificare. (A. Einstein) |
10 ottobre 11, 21:55 | #4 (permalink) Top | |
User Data registr.: 14-05-2005 Residenza: bergamo
Messaggi: 1.278
| Citazione:
| |
10 ottobre 11, 21:59 | #5 (permalink) Top | |
User Data registr.: 14-05-2005 Residenza: bergamo
Messaggi: 1.278
| Citazione:
cosa intendi con.... occhio alla lunghezza tra terminale a massa e punto di collegamento? grazie mille | |
11 ottobre 11, 12:11 | #6 (permalink) Top |
Adv Moderator Data registr.: 15-08-2007 Residenza: sto a Massa ma sono molto Positivo
Messaggi: 12.071
| Giusto per farti una cultura: Chapter 9: Instruction Set - Book: PIC Microcontrollers qui puoi trovare i tempi di esecuzione delle singole istruzioni. tieni presente che ammesso che picgenius ottimizzi il codice un ciclo for è così costituito: assegnazione del valore iniziale alla variabile usata per il loop 1usec esecuzione del loop (variabile dipende dal codice che ci metti) incremento della variabile (1us) test con skip della prossima istruzione (1us) jump ad inizio loop (2us) quindi ogni ciclo di un loop vuoto scritto in assembly prende almeno 4us (non 2 come ti avevo detto, visto che mi ero dimenticato il jump) +1 per l'inizializzazione iniziale anche il più stupido loop for i=0 to 0 end for prende 1us (assegnazione) + 1us (incremento) + 2us (test con skip della prossima istruzione visto che il PC viene modificato dato che il loop termina subito) Se si vuole estrema precisione nei loop questi tempi vanno tenuti in considerazione. Se ben implementata la delay_precision_us è molto più precisa di quanto tu non possa fare con un loop. Altrimenti per generare impulsi precisi vanno usati gli interrupt e timer interni, ma non so se con picgenius si possa fare.
__________________ 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 |
11 ottobre 11, 12:35 | #7 (permalink) Top |
User |
Prima l' hw: i fili che provengono dal potenziometro è bene che siano saldati sul c.s. il più vicino possibile ai piedini del PIC, quindi prossimi al pin del GND, Vcc, ed ingresso A/D; ciò per evitare di captare disturbi da (anelli di massa) ground-loop. ed ecco un campione di codice che ho cercato di commentare al meglio, se non ti è chiaro chiedi: Codice: byte Tic = 0, // Contatore ciclo PunMMA = 0; // Contatore puntatore tabella media mobile word ADrdAcc = 0, // Buffer ultima lettura A/D converter Acc1A = 0, // Valore media mobile Acc2A = 0, // Accumulatore misura mediata VAlAcc = 0, // Valore filtrato Acceleratore TabMMA[8] = {0}; // Tabella per media mobile void MisAcc() { ADCON0 = 0b00000001; // Seleziona il canale Acceleratore Delay10TCYx(5); // Ritardo per consentire la commutazione // ingresso A/D converter e stabilizzazione ADCON0bits.GO = 1; // Avvia la conversione A/D while(ADCON0bits.GO){} // Attende la fine della conversione A/D ADrdAcc = ReadADC(); // Salva nel buffer il valore campionato PunMMA = (++PunMMA & 7); // Incrementa il puntatore della tabella // ciclandolo fra 0 -> 7, per altri valori // sostituire con: ++PunMMA .... if(PunMMA == xx) PunMMA = 0; Acc1A = Acc1A - TabMMA[PunMMA] + ADrdAcc; // Calcola la media mobile fra 8 (o xx) campionamenti TabMMA[PunMMA] = ADrdAcc; // Aggiorna la media mobile con l'ultimo valore campionato Acc2A = Acc2A + Acc1A; // Aggiorna il valore dell'accumulatore con l'ultima media ++Tic; // Incrementa il contatore ciclo if(Tic == 16) // Media fra 16 valori filtrati { ValAcc = Acc2A / 16; // Calcola il valore filtrato Acceleratore (anche ValAcc = Acc2A >>4) Tic = 0; // Azzera il contatore ciclo Acc2A = 0; // Azzera accumulatore } }
__________________ Peace & Love Fate le cose nel modo più semplice possibile, ma senza semplificare. (A. Einstein) |
Bookmarks |
| |
Discussioni simili | ||||
Discussione | Autore discussione | Forum | Commenti | Ultimo Commento |
Giusta proporzione pignone/corona | Zephyr | Automodellismo Mot. Elettrico Off-Road | 2 | 16 marzo 11 16:20 |
aiuto utilizzo ADC x pic16f883 | Milus | Circuiti Elettronici | 6 | 01 luglio 09 08:55 |
Quale Modello questo è il dilemma... | Butterfly | Aeromodellismo Principianti | 48 | 13 ottobre 08 19:23 |
Proporzione da disegno | kitaro | Aeromodellismo Progettazione e Costruzione | 16 | 10 gennaio 08 21:32 |
Pic, mio caro Pic.... | fai4602 | Circuiti Elettronici | 7 | 24 novembre 03 19:34 |