Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Ottenere 1 Hz precisissimo, 16f84a

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[11] Re: Ottenere 1 Hz precisissimo, 16f84a

Messaggioda Foto Utentecarlomusumeci » 5 apr 2015, 18:53

ma così facendo,se applico 1 Hz a RA4 e settando nel registro OPTION il bit TOCS a 1 e PSA a 1,arriva direttamente al registro tmr0 l'impulso di un secondo...e prima che generi un interrupt dovranno passare 255 secondi o sbaglio?
...un'altra confusione mentale: io nel programma che ho scritto genero il ritardo di un secondo chiamando (CALL Delay1s) utilizzando l'interrupt come viene chiamato il ritardo?
(scusate ma vorrei capire il meccanismo)
Ultima modifica di Foto Utentecarlomusumeci il 5 apr 2015, 18:59, modificato 1 volta in totale.
Avatar utente
Foto Utentecarlomusumeci
353 5 7
Sostenitore
Sostenitore
 
Messaggi: 526
Iscritto il: 8 apr 2011, 0:35

0
voti

[12] Re: Ottenere 1 Hz precisissimo, 16f84a

Messaggioda Foto Utentesimo85 » 5 apr 2015, 18:58

Se tu usi il 4060 con il 4013 la frequenza di 1 Hz già ce l'hai e a questo punto chi se lo infischia il TMR0 ? :-)

Se vuoi sfruttare una interruzione con il micro ogni 1 s, usando il circuito postato ti basta collegare l'uscita dell' oscilatore al pin RB0/IINT cosi:



Attenzione che non ho controllato il circuito qui sopra con i datasheet. Suppongo lo avrai controllato tu !

O_/
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[13] Re: Ottenere 1 Hz precisissimo, 16f84a

Messaggioda Foto UtenteArrow » 5 apr 2015, 19:00

Esatto, e incrementerai il contatore di 1 ogni volta che si attiva l'interrupt (lo chiami nella ISR).
Avatar utente
Foto UtenteArrow
103 1 6
Frequentatore
Frequentatore
 
Messaggi: 166
Iscritto il: 11 giu 2014, 22:12

0
voti

[14] Re: Ottenere 1 Hz precisissimo, 16f84a

Messaggioda Foto Utentecarlomusumeci » 5 apr 2015, 19:04

quindi ad esempio le istruzioni che incrementano le unità le metto dentro il vettore di interrupt

ad esempio
Codice: Seleziona tutto
0x04
;interrupt
incf UNITA ;incrementa display unita'
RETFIE
Avatar utente
Foto Utentecarlomusumeci
353 5 7
Sostenitore
Sostenitore
 
Messaggi: 526
Iscritto il: 8 apr 2011, 0:35

0
voti

[15] Re: Ottenere 1 Hz precisissimo, 16f84a

Messaggioda Foto UtenteArrow » 5 apr 2015, 19:08

Più o meno si, in C io farei così:

Codice: Seleziona tutto
void gpioISR()
{
contatore++
}
...

...
//main
void main()
{
//funzione per fare cambiare il valore nel display
}



ovviamente con tutte le definizioni e robe che servono...
Avatar utente
Foto UtenteArrow
103 1 6
Frequentatore
Frequentatore
 
Messaggi: 166
Iscritto il: 11 giu 2014, 22:12

0
voti

[16] Re: Ottenere 1 Hz precisissimo, 16f84a

Messaggioda Foto Utentecarlomusumeci » 5 apr 2015, 19:11

vabene ragazzi il problema è che facendo avvenire un interrupt ogni secondo non potrei utilizzare il PIC per svolgere anche altre operazioni...poiché il programma viene interrotto in continuazione...quindi forse meglio cercare di capire come fare utilizzando il tmr0...
Avatar utente
Foto Utentecarlomusumeci
353 5 7
Sostenitore
Sostenitore
 
Messaggi: 526
Iscritto il: 8 apr 2011, 0:35

0
voti

[17] Re: Ottenere 1 Hz precisissimo, 16f84a

Messaggioda Foto UtenteArrow » 5 apr 2015, 19:15

Scusami, ma se vuoi una cosa precisissima al massimo devi comunque usare un interrupt (a parer mio) poi in un secondo il processore dovrebbe riuscire a fare tante di quelle istruzioni che anche se venisse interrotto 1 volta al secondo non cambierebbe tanto, il tutto dipende da cosa ci devi fare in contemporanea...
Avatar utente
Foto UtenteArrow
103 1 6
Frequentatore
Frequentatore
 
Messaggi: 166
Iscritto il: 11 giu 2014, 22:12

0
voti

[18] Re: Ottenere 1 Hz precisissimo, 16f84a

Messaggioda Foto Utentesimo85 » 5 apr 2015, 19:16

Ma tu cosa devi fare in questa interruzione ?

Se devi solo incrementare di un valore il registro, non mi sembra ci siano problemi...
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

0
voti

[19] Re: Ottenere 1 Hz precisissimo, 16f84a

Messaggioda Foto Utentecarlomusumeci » 5 apr 2015, 19:28

Devo incrementare 2 registri,Decine e Unita,,, ma se dovrei fare un orologio dovranno essere 4 Display=4 registri...non diventerebbe un po complicato fare tutto dall'interrupt?
non sarebbe meglio utilizzare una " CALL" che contenga il perfetto ritardo di un secondo? o sarebbe una cosa infattibile?
perche io nel programma che ho scritto ho fatto così e effettivamente tutto funziona ma non è molto preciso...sarebbe cosa poco corretta generare il ""secondo"" in questo modo? senza scomodare componenti esterni?
Avatar utente
Foto Utentecarlomusumeci
353 5 7
Sostenitore
Sostenitore
 
Messaggi: 526
Iscritto il: 8 apr 2011, 0:35

0
voti

[20] Re: Ottenere 1 Hz precisissimo, 16f84a

Messaggioda Foto Utentesimo85 » 5 apr 2015, 19:40

Usa l'interruzione per attivare un flag e lo gestisci nel programma principale..

Poi non è che per incrementare di uno un valore ci voglia chissà quanto tempo ... tra una interruzione e l'altra in un secondo, con un clock a 4 MHz di tempo ne hai..

Osserva bene i diagrammi temporali dei tempi di istruzioni (se non ricordo male i PIC impieghino 4 cicli di clock per ciascuna) e fatti i tuoi conti.

Prova..

O_/
Avatar utente
Foto Utentesimo85
30,9k 7 12 13
Disattivato su sua richiesta
 
Messaggi: 9927
Iscritto il: 30 ago 2010, 4:59

PrecedenteProssimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 12 ospiti