timer variabile
9 Anni 7 Mesi fa #6
da Video Lab
Volere è Potere
Risposta da Video Lab al topic timer variabile
Non puoi usare il Timer1 montando il quarzo secondario da 32,768 khz e generare un interrupt ogni secondo ?
Il buon Gianni qui lo spiega molto bene:
www.settorezero.com/wordpress/corso-prog...di-orologi-e-timers/
Il buon Gianni qui lo spiega molto bene:
www.settorezero.com/wordpress/corso-prog...di-orologi-e-timers/
Volere è Potere
Si prega Accedi o Crea un account a partecipare alla conversazione.
- Video Lab
- Premium Member
Riduci
Di più
9 Anni 7 Mesi fa #7
da sharky
Risposta da sharky al topic timer variabile
ciao!
grazie della risposta, ma credo di essermi spiegato male..
in modo schematico il mio programma funziona cosi:
interupt tmr1 a un intervallo di circa 1 ms:
contatorex ++;
contatorey ++;
all interno del while:
if (contatorex > deltaTx){
stepperx(); //eseguo uno step del motore dell asse x.
}
if (contatorey > deltaTy){
steppery(); //eseguo uno step del motore dell asse y.
}
deltaTx e deltaTy contengono l intervallo al quale devo eseguire uno step. il problema è che sono valori float, e se ad esempio deltaTx = 2.1 e deltaTy = 2.4 (dato che contatorex è un INT e conta solo i ms interi) entrambi i motori faranno uno step ogni 2 ms. di conseguenza il motore x sarà leggermente troppo veloce, mentre il motore y sarà MOLTO troppo veloce.
pensavo di fare un interrupt ogni 0.1 ms per correggere l errore ma ho paura che generare gli interrupt cosi spesso crei problemi. Ho una porta seriale che è in continua comunicazione e l interrupt della seriale credo occupi più di 0.1 ms.
grazie della risposta, ma credo di essermi spiegato male..
in modo schematico il mio programma funziona cosi:
interupt tmr1 a un intervallo di circa 1 ms:
contatorex ++;
contatorey ++;
all interno del while:
if (contatorex > deltaTx){
stepperx(); //eseguo uno step del motore dell asse x.
}
if (contatorey > deltaTy){
steppery(); //eseguo uno step del motore dell asse y.
}
deltaTx e deltaTy contengono l intervallo al quale devo eseguire uno step. il problema è che sono valori float, e se ad esempio deltaTx = 2.1 e deltaTy = 2.4 (dato che contatorex è un INT e conta solo i ms interi) entrambi i motori faranno uno step ogni 2 ms. di conseguenza il motore x sarà leggermente troppo veloce, mentre il motore y sarà MOLTO troppo veloce.
pensavo di fare un interrupt ogni 0.1 ms per correggere l errore ma ho paura che generare gli interrupt cosi spesso crei problemi. Ho una porta seriale che è in continua comunicazione e l interrupt della seriale credo occupi più di 0.1 ms.
Si prega Accedi o Crea un account a partecipare alla conversazione.
- sharky
- Autore della discussione
- Senior Member
Riduci
Di più
- Messaggi: 59
- Ringraziamenti ricevuti 0
9 Anni 7 Mesi fa #8
da alfa75
Risposta da alfa75 al topic timer variabile
Secondo me la cosa è un pò problematica perchè gia con un interrupt di 1mS sei al limite visto che per trasmettere 10bit @9600bps ci vuole proprio 1mS
Si prega Accedi o Crea un account a partecipare alla conversazione.
- alfa75
- Platinum Member
Riduci
Di più
- Messaggi: 527
- Ringraziamenti ricevuti 86
9 Anni 7 Mesi fa #9
da sharky
Risposta da sharky al topic timer variabile
ciao! io trasmetto a 115200 bps...
Si prega Accedi o Crea un account a partecipare alla conversazione.
- sharky
- Autore della discussione
- Senior Member
Riduci
Di più
- Messaggi: 59
- Ringraziamenti ricevuti 0
Moderatori: Mauro Laurenti, Pinna, StefA, Matteo Garia
Registrati al sito
Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.