Pagina 1 di 1

gestione tempo in mikrobasic

Inviato: 12 gen 2012, 10:15
da gyser116
Salve a tutti... tempo fa ho realizzato un piccolo programma con mikrobasic che mi permettesse di simulare la campanella per un incontro di boxe. Per chi non lo sapesse, nella boxe, i pugili si affrontano per un tempo di 3 min e si riposano per un tempo di 1 minuto.
Una volta programmato il PIC ho notato che per la gestione di intervalli superiori a 1 min il timer del PIC non è più preciso. Nella compilazione del programma ho usato il semplice delay_ms, ma come detto prima non ottengo intervalli non precisi. Come posso risolvere questo problema. Eccovi il programma in mikrobasic:

main:

trisb=0 'imposto tutte le porte B come uscita
portb=0 'porto a livello basso tutte le porte B

inizio:
portb.0=1 'suono della campanella che invita a preparare i due pugili
delay_ms(1000) 'imposto la durata del suono della campanella pari ad 1 sec
portb.0=0 'spegnimento della campanella
portb.1=1 'accensione del led verde che mi indica che sono iniziati i tre min di combattimento
delay_ms(180000) 'il led verde rimane acceso per 3 min
portb=1=0 'spegnimento del led verde
portb.0=1 'suono della campanella che indica la fine del round
delay_ms(1000) 'imposto la durata del suono della campanella pari ad 1 sec
portb.0=0 'spegnimento della campanella
portb.2=1 'accensione del led rosso che indica l'inizio dell'intervallo tra i round
delay_ms(60000) 'il led rosso rimane acceso per 1 min
portb.2=0 'spegnimento del led rosso

GOTO inizio ' ripetizione del ciclo

end

O_/

Re: gestione tempo in mikrobasic

Inviato: 12 gen 2012, 13:40
da Paolino
Per tempistiche così lunghe, le funzioni di delay "preconfezionate" (cioè di libreria) non sono proprio il massimo. Il valore della base dei tempi che viene utilizzato da queste funzioni si basa sulla frequenza Fosc dell'oscillatore principale. Fosc viene divisa da prescaler e postscaler per poter avere la migliore approssimazione. E, proprio perché di approssimazione stiamo parlando, un errore di 1% su 1 ms diventa, su 3 minuti di tempo, 1.8 secondi di errore. Se l'errore fosse maggiore, per tempi lunghi la temporizzazione inizia a fallire.

Ma cosa fare, allora?

Per questo tipo di temporizzazioni si utilizza di solito un oscillatore da 32768 Hz, collegato all'ingresso di TIMER 1 che (quasi) tutti i PIC hanno. Con qualche "trucchetto" firmware e con l'utilizzo tassativo degli interrupt, si arriva ad avere una temporizzazione molto precisa di 1s. La precisione dipende di per sé dal quarzo da 32768 Hz e da quanto resta stabile in frequenza con la temperatura.
Dovresti dirci:
1. che PIC utilizzi;
2. se sei disposto a modificare il circuito del timer;
3. se puoi fornirci lo schema (anche parziale basta che si vedano le connessioni del PIC), disegnandolo con FIDOCADJ.

Ciao.

Paolo.

Re: gestione tempo in mikrobasic

Inviato: 17 gen 2012, 10:13
da gyser116
Allora il PIC utilizzato è un PIC16F628A.
Per quanto riguarda la modifica del circuito, posso modificarlo senza problemi.
Lo schema invece eccolo qua:

http://imageshack.us/photo/my-images/40 ... nejvz.png/


O_/

Re: gestione tempo in mikrobasic

Inviato: 17 gen 2012, 10:21
da Paolino
gyser116 ha scritto:Lo schema invece eccolo qua...

Meglio se lo ridisegni con FidoCadJ!

Ciao.

Paolo.