Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

TIMER1 e MikroC - numeri decimali e numeri binari

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] TIMER1 e MikroC - numeri decimali e numeri binari

Messaggioda Foto Utentempeino » 9 dic 2025, 10:06

Buongiorno
Utilizzando il linguaggio c e mikroc possiamo lavorare con i numeri decimali.
Il mio problema nasce nel momento in cui voglio caricare un numero decimale nei registri del TIMER1 :
TMR1H
TMR1L.
Qualcuno potrebbe dirmi che basterebbe convertire il numero decimale in un numero binario.
Ok .... ma in fase di programmazione come si fa???
Grazie.
Massimo.
Avatar utente
Foto Utentempeino
595 4 11
Frequentatore
Frequentatore
 
Messaggi: 117
Iscritto il: 27 mar 2011, 18:21

0
voti

[2] Re: TIMER1 e MikroC - numeri decimali e numeri binari

Messaggioda Foto UtenteWALTERmwp » 9 dic 2025, 16:22

Lo si potrebbe immaginare però, specifica il microcontrollore ...

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
30,2k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 8982
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[3] Re: TIMER1 e MikroC - numeri decimali e numeri binari

Messaggioda Foto Utentegvee » 9 dic 2025, 17:03

mpeino ha scritto:Ok .... ma in fase di programmazione come si fa???

Cosa vuol dire?

Parli di notazione decimale, poi esadecimale e binario.
Non si capisce il problema.
Avatar utente
Foto Utentegvee
1.475 5 7
Sostenitore
Sostenitore
 
Messaggi: 525
Iscritto il: 11 feb 2018, 20:34

0
voti

[4] Re: TIMER1 e MikroC - numeri decimali e numeri binari

Messaggioda Foto Utentempeino » 9 dic 2025, 20:14

Innanzitutto vi ringrazio per le risposte.
Il PIC è il 18f4550.
Poniamo di caricare un numero decimale ad esempio il numero 1000 decimale nei registri del TIMER1 che sono
TMR1H e TMR1L .
Bisognerebbe prima scomporre il il numero decimale in un numero binario e qua nasce il problema .
E probabile che ho trovato la soluzione ma comunque un vostro parere non mi dispiacerebbe...
Massimo
Avatar utente
Foto Utentempeino
595 4 11
Frequentatore
Frequentatore
 
Messaggi: 117
Iscritto il: 27 mar 2011, 18:21

0
voti

[5] Re: TIMER1 e MikroC - numeri decimali e numeri binari

Messaggioda Foto UtenteGioArca67 » 9 dic 2025, 20:56

Non serve convertire in binario
devi spezzare 1000 in due numeri H e L in modo tale che H*256+L=1000
H=int(1000/256)=3
L=1000-256*H=232
Avatar utente
Foto UtenteGioArca67
4.565 4 6 9
Master EY
Master EY
 
Messaggi: 4589
Iscritto il: 12 mar 2021, 9:36

0
voti

[6] Re: TIMER1 e MikroC - numeri decimali e numeri binari

Messaggioda Foto Utentempeino » 9 dic 2025, 21:42

Scusami non sono un programmatore purosangue ma un autodidatta.
Ho capito il senso ma il segno di puntatore non lo capisco H*256+L=1000
comunque vediamo se ho capito:
dividi la variabile per 256 ( (1000/256)=3) e il valore ottenuto lo metti nel registro TMR1H
e poi sottrai 1000- 256 = 232 e lo carichi in TMR1L

Ma la cosa importante che ho dato per scontato il compilatore non accettava numeri decimali, mi sbagliavo...
grazie per il prezioso consiglio.
Massimo
Avatar utente
Foto Utentempeino
595 4 11
Frequentatore
Frequentatore
 
Messaggi: 117
Iscritto il: 27 mar 2011, 18:21

0
voti

[7] Re: TIMER1 e MikroC - numeri decimali e numeri binari

Messaggioda Foto UtenteGioArca67 » 9 dic 2025, 23:08

* è una moltiplicazione non un puntatore
facciamo un altro esempio:
devi caricare 3482 nei due registri TMR1H e TMR1L
fai 3482 / 256 = 13,6015625
prendi la parte intera cioè 13 e la metti in TMR1H

poi moltiplichi 13 per 256 e ottieni 13*256=3328
sottrai questo numero a quello di partenza: 3482-3328=154
metti 154 in TMR1L
Avatar utente
Foto UtenteGioArca67
4.565 4 6 9
Master EY
Master EY
 
Messaggi: 4589
Iscritto il: 12 mar 2021, 9:36

0
voti

[8] Re: TIMER1 e MikroC - numeri decimali e numeri binari

Messaggioda Foto Utentempeino » 10 dic 2025, 0:13

adesso e molto piu chiaro
grazie
Avatar utente
Foto Utentempeino
595 4 11
Frequentatore
Frequentatore
 
Messaggi: 117
Iscritto il: 27 mar 2011, 18:21

0
voti

[9] Re: TIMER1 e MikroC - numeri decimali e numeri binari

Messaggioda Foto Utenteharpefalcata » 10 dic 2025, 10:48

Non capisco in che modo un timer che, per sua stessa natura è un modulo discreto possa avere qualcosa a che fare con i calcoli in virgola mobile.

Il timer funziona in questo modo. Ipotizzando alcune cose, che non hai specificato, ad esempio, che tu usi un clock di base derivato da un quarzo d 8 MHz, ma potrebbe essere un valore qualunque, e che tu stia usando un prescaler impostato per esempio a 256 ma, anche qui, potrebbe essere un valore qualunque potremo fare alcune considerazioni.

8 MHz, corrispondono ad una durata del clock pari ad 1 / (8 MHz) = 1/ (8*10^6 Hz) = (1/8)*10^(-6) = 0.125 * 10^(-6) = 125 * 10^(-3) = 125 mS.

Questo significa che il clock del quarzo ha una durata di 125 milli secondi.

Se non ricordo male, i PIC hanno un core che, per eseguire una istruzione del timer ha questo ciclo: read, fetch, decode, execute. Questo vuol dire che un tick del timer, completerà in 4 * 125 mS = 500 mS .

Arrivati a questo punto, il timer1, che hai scelto, è suddiviso in TMR1H e TMR1L, entrambi, presi separatamente, ad otto bit, quindi il Timer 1 è un timer a 16 bit: gli otto del timer low e gli otto del timer high. Questo significa che 2^16 = 65.536 iterazioni.

Quindi possiamo calcolare il fondoscala del nostro timer: 65.536 * 500 mS * 256 = 8.388.608 mS .
L'ultimo 256 è il prescaler, che avevamo ipotizzato impostato a 256, ovvero il massimo per un registro ad otto bit, ma non ricordo se nel tuo esatto modello di microcontroller il prescaler è ad otto o sedici bit.

In ogni caso, abbiamo: 8.388.608 mS = 8.388.608 / 1000 = 8.388,608 secondi
8.388,608 / 60 = 140 minuti
140 / 60 = 2.3 ore

Quindi il tuo timer, con questi presupposti potrà contare fino a circa due ore e mezza, prima di andare in overflow e ricominciare da capo.

A questo punto la domanda è: ipotizzando che tu voglia creare un timer che ti generi un evento ad intervalli regolari ogni (ad esempio) tre secondi, come farai? Sai che il tick minimo durerà 500 mS, quindi farai 3 / 500 mS = 6.

Devi quindi impostare il valore dei due registri in modo che vadano in overflow dopo sei iterazioni. Sapendo che i registri TMR1H e TMR1L, combinati, sono sedici bit e che quindi ti daranno 2^16 = 65.536 iterazioni, farai 65536 - 6 = 65530.

Convertiamo quest'ultimo in esadecimale: 65.530 = 0x0FFFA . Caricherai quindi TMR1H = 0x0FF e TMR1L = 0x0FA.

In tutto questo, non vedo da nessuna parte la virgola mobile ed i decimali in genere.
Avatar utente
Foto Utenteharpefalcata
326 1 3 6
Stabilizzato
Stabilizzato
 
Messaggi: 422
Iscritto il: 28 lug 2015, 21:03

0
voti

[10] Re: TIMER1 e MikroC - numeri decimali e numeri binari

Messaggioda Foto UtenteGioArca67 » 10 dic 2025, 11:06

Certo.
Come hai fatto la conversione 65530 = 0XFFFA ?
Avatar utente
Foto UtenteGioArca67
4.565 4 6 9
Master EY
Master EY
 
Messaggi: 4589
Iscritto il: 12 mar 2021, 9:36

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti