TIMER 1 (TMR1): modificare il registro OCR1A durante l'esecuzione con una variabile

Salve a tutti.
A seguito dei suggerimenti che mi sono stati dati in relazione ad un altro topic che ho aperto qualche giorno fa, ho capito che al mio caso farebbe comodo l'uso del TIMER 1 per determinare in modo più preciso i millisecondi che dovrebbe fare ogni step del mio motore passo passo.

Ho studiato quindi i Timer (e spero di averlo fatto bene) e ho preso in considerazione il Timer 1 in quanto 16 bit e che pertanto mi può fare al massimo 65536 conteggi.

Ho imparato a calcolare il valore del Compare Match Register, OCR1A, in base ai secondi che mi servono, così:

((tempoinsecondi*1000000)/((1/((16000000 /prescaler)/1000))*1000))-1

Ad esempio, impostando il prescaler a 1024 e quindi impostando il registro TCCR1B così:

TCCR1B |= (1 << CS12) | (1 << CS10);

Se devo calcolare il valore del registro OCR1A, per fare in modo di ottenere 1 interrupt ad un secondo, OCR1A sarà uguale a:

OCR1A = ((1*1000000)/((1/((16000000 /1024)/1000))*1000))-1

Quindi uguale a 15624, in pratica 1hz.

Fin qui sembra tutto chiaro.
Però mi chiedevo, siccome ho la necessità di cambiare ogni volta la temporizzazione degli step del mio motore passo passo, quindi necessito di cambiare il valore di OCR1A di volta in volta mentre il tutto è in esecuzione. Infatti attraverso una formula ricavo in quanti millisecondi il mio motore deve fare uno step e questo valore lo salvo in una variabile.

C'è un modo per modificare il valore di OCR1A in base a come il valore della variabile sopra citata cambia? Ho provato in diversi modi ma non ho sortito gli effetti sperati.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.