funzione delay

  • paolotherocker
  • Autore della discussione
  • Visitatori
  • Visitatori
12 Anni 11 Mesi fa #1 da paolotherocker
funzione delay è stato creato da paolotherocker
salve a tutti!
nella libreria laurtec è compresa una funzione che genera un delay pari ai millisecondi passati. Avrei bisogno di comprendere la logica di funzionamento di tale funzione, perché ho necessità di crearne una che genera un delay del numero di microsecondi passati. Lo so che si tratta di una funzione molto semplice però non riesco a capire se è dovuta ad un ragionamento empirico (cioè vedere il ciclo for quante istruzioni copre) oppure ad un ragionamento basato su clock o altro.
Code:
void delay_ms (int value) { unsigned int reference = 0; unsigned int mainDelay; unsigned int subDelay; reference = value * delay_quartz_frequency_value; for (mainDelay = 0; mainDelay < reference; mainDelay++) { for (subDelay = 0; subDelay < 12; subDelay++); } }

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Akuryu
  • Premium Utente
  • Premium Utente
Di più
12 Anni 11 Mesi fa #2 da Akuryu
Risposta da Akuryu al topic Re: funzione delay
Allora vediamo se riesco ad esserti utile
Code:
void delay_ms (int value) { unsigned int reference = 0; unsigned int mainDelay; unsigned int subDelay;

Allora nome della funzione che pretende un valore, fino a quitutto chiaro, poi crea delle variabili di funzione che chiama reference mainDelay e SubDelay
Code:
reference = value * delay_quartz_frequency_value;

reference assume il valore che riguarda la frequenza del quarzo, se consideri che nella freedom abbiamo di base un quarzo da 20000 hrz. avremo un referenz di 20000 agni microsecondo
Code:
for (mainDelay = 0; mainDelay < reference; mainDelay++) { for (subDelay = 0; subDelay < 12; subDelay++); } }

qui avviene la magia, per ogni 12 cicli del subdelay maindelay aumenta di 1. fino ad arrivare ai 20000 per microsecondo, quindi da questo calcolo abbiamo che

12 * 20000 = 240000, passati i quali in teoria è passato un micro secondo. spero di aver spiegato al meglio la cosa.

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • paolotherocker
  • Autore della discussione
  • Visitatori
  • Visitatori
12 Anni 11 Mesi fa #3 da paolotherocker
Risposta da paolotherocker al topic Re: funzione delay

reference assume il valore che riguarda la frequenza del quarzo, se consideri che nella freedom abbiamo di base un quarzo da 20000 hrz. avremo un referenz di 20000 agni microsecondo

scusami ma il quarzo è da 20MHz, che sono 20,000,000 non 20,000. Poi quella variabile è utilizzata come valore in MHz. Inoltre il pic in realtà non lavora a 20MHz ma a 5MHz, perché per ogni istruzione ha bisogno di 4 colpi di clock:

quindi sarà passato un microsecondo ogni 5 istruzioni.

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • Pinna
  • Moderatore
  • Moderatore
Di più
12 Anni 11 Mesi fa - 12 Anni 11 Mesi fa #4 da Pinna
Risposta da Pinna al topic Re: funzione delay
Provo a rispondere io, in base all'analisi temporale (pag. 84 C18 step by step) che ho fatto:
i dodici cicli della variabile subDelay servono a raggiungere un valore teorico di 50 usec. Ricordando che il periodo del clock utilizzato è uguale a:

1 sec / 20000000 Hz =0.05 usec

la stessa formula può essere scritta anche come:

((1000 msec /20000000 Hz).

Dividendo tutto per 1000, per semplificare i calcoli si ha:

1 msec/20000 KHz è uguale a 0,00005 msec, cioè 0.05 usec

1 msec = 20000 KHz *0.00005 msec che scrvo, sempre per semplificare i calcoli,:

1 msec = 20 MHz * 0.05 msec = 20 * 50 usec (quelli trovati con l'analisi temporale)


Da qui il calcolo finale: msec * 20 MHz * 50 usec, che è la risultante di semplificazioni matematiche



Ovviamente, la misura del secondo, preso come unità di misura, si discosta leggermente: ho infatti misurato un valore reale di 1.016 sec., questo perchè è difficile avere 50 usec esatti per via di vari parametri.

Ne approffitto per augurare una Buona Pasqua a voi e famiglia



@ Mauro: se ho detto grosse corbellerie, correggimi qui, su questo forum e mettimi pure alla berlina

Chi vola vale, chi vale vola, chi non vola è un vile
Ultima Modifica 12 Anni 11 Mesi fa da Pinna.

Si prega Accesso o Crea un account a partecipare alla conversazione.

  • paolotherocker
  • Autore della discussione
  • Visitatori
  • Visitatori
12 Anni 11 Mesi fa #5 da paolotherocker
Risposta da paolotherocker al topic Re: funzione delay
grazie per l'aiuto

Si prega Accesso o Crea un account a partecipare alla conversazione.

Moderatori: Mauro LaurentiPinnaStefAMatteo Garia

Registrati al sito

Accedi a tutte le risorse e articoli non visibili pubblicamente, puoi registrarti con pochi passi.

Registrati al sito LaurTec.

Forum - Ultimi messaggi