Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Subroutine 5ms con quarzo 4 MHz 16F84A

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] Subroutine 5ms con quarzo 4 MHz 16F84A

Messaggioda Foto Utentecarlomusumeci » 1 apr 2015, 15:04

PIC16F84A
Salve qualcuno puo indicarmi una subroutine che mi generi 5 ms di ritardo (delay) con quarzo 4 MHz ?
la dovrei utilizzare per la gestione in multiplexer...
Scritta in assembly...anche qualcosa di semplice decrementando qualche registro...
non vorrei utilizzare il Tmr0...

voi solitamente quanti ms di ritardo utilizzate per il multiplex?
Avatar utente
Foto Utentecarlomusumeci
353 5 7
Sostenitore
Sostenitore
 
Messaggi: 526
Iscritto il: 8 apr 2011, 0:35

0
voti

[2] Re: Subroutine 5ms con quarzo 4 MHz 16F84A

Messaggioda Foto UtentePaolino » 1 apr 2015, 15:38

Puoi provare a visitare questa pagina.
Inserendo i dati che vuoi tu (Fosc = 4MHz, ritardo di 5ms), ottieni qualcosa del tipo:

Codice: Seleziona tutto
; Delay = 0.005 seconds
; Clock frequency = 4 MHz

; Actual delay = 0.005 seconds = 5000 cycles
; Error = 0 %

   cblock
   d1
   d2
   endc

Delay
         ;4993 cycles
   movlw   0xE6
   movwf   d1
   movlw   0x04
   movwf   d2
Delay_0
   decfsz   d1, f
   goto   $+2
   decfsz   d2, f
   goto   Delay_0

         ;3 cycles
   goto   $+1
   nop

         ;4 cycles (including call)
   return
; Generated by http://www.golovchenko.org/cgi-bin/delay (December 7, 2005 version)
; Wed Apr 1 13:37:40 2015 GMT
; See also various delay routines at http://www.piclist.com/techref/microchip/delays.htm


Non so quanto possa essere preciso, qualche misura la farei.

Perché no vuoi scomodare il TMR0?

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,4k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4203
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[3] Re: Subroutine 5ms con quarzo 4 MHz 16F84A

Messaggioda Foto Utentecarlomusumeci » 1 apr 2015, 16:48

non so non è sprecato utilizzare il tmr0 per il multiplexer? la cosa verrebbe piu semplificata?
poi volevo sapere quanti ms usate solitamente per fare l'operazione del multiplex...5ms ? 100ms?
Avatar utente
Foto Utentecarlomusumeci
353 5 7
Sostenitore
Sostenitore
 
Messaggi: 526
Iscritto il: 8 apr 2011, 0:35

0
voti

[4] Re: Subroutine 5ms con quarzo 4 MHz 16F84A

Messaggioda Foto UtentePaolino » 1 apr 2015, 17:16

Dovresti illustrare che cosa devi multiplexzare. Display? Di che tipo? Oppure qualcos'altro?

Se fossero display, ad esempio 4, personalmente impiegherei un timer (TMR0 ad esempio) con la gestione dell'interrupt. Sull'evento overflow del timer, si scatena l'interrupt che permette di pilotare la linea multiplex desiderata.

Quantificare il tempo è ancora una questione da chiarire sulla base dell'applicazione. Con i display (ancora loro) devi garantire che ci siano una buona luminosità dei caratteri e l'assenza di sfarfallii (flickering), davvero fastidiosi. Se hai fino a 4 display, credo che 50ms può essere una base di partenza dalla quale poi scostarsi gradatamente per ottimizzare il tutto.

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,4k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4203
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

0
voti

[5] Re: Subroutine 5ms con quarzo 4 MHz 16F84A

Messaggioda Foto Utentecarlomusumeci » 1 apr 2015, 21:30

Ciao Foto UtentePaolino grazie devo pilotare un riquadro pieno di led...per esempio prendo un quadro 4x4 = 16 led... ma che successivamente potrebbe diventare un 8x8 per visualizzare caratteri (lettere) piu chiari...
li piloto tramite la sola portb... dal bit 0 al bit 3 piloto le basi da bit 4 a bit 7 piloto le linee orizzontali...
mettiamo il caso voglio visualizzare il numero "11" (poco chiaro,ma è un esempio) faccio così...dimmi se giusto

Codice: Seleziona tutto
visual11
movlw B'01001000'
movwf portb
call     5ms
movlw B'11110100'
movwf portb
call     5ms
movlw B'01000010'
movwf portb
call     5ms
movlw B'11110001'
movwf portb
call     5ms
goto    visual11


è sbagliato il meccanismo?

Avatar utente
Foto Utentecarlomusumeci
353 5 7
Sostenitore
Sostenitore
 
Messaggi: 526
Iscritto il: 8 apr 2011, 0:35

0
voti

[6] Re: Subroutine 5ms con quarzo 4 MHz 16F84A

Messaggioda Foto UtenteDryden » 2 apr 2015, 13:08

non programmo in assembly ma:

Non ti conviene fare una macro con dentro tutti i numeri da visualizzare e poi chiamare la macro all'interrupt?

I led li devi pilotare insieme, devi vederlo come "led unico che forma il numero desiderato"

Calcola che devi "accendere" i led con una frequenza di almeno 25/30hz altrimenti vedrai sfarfallii

il ritardo va posto tra la fine del numero visualizzato e l'aggiornamento dei led con il numero nuovo.
Avatar utente
Foto UtenteDryden
20 4
New entry
New entry
 
Messaggi: 97
Iscritto il: 1 gen 2011, 14:37
Località: Bolzano

0
voti

[7] Re: Subroutine 5ms con quarzo 4 MHz 16F84A

Messaggioda Foto UtenteWALTERmwp » 2 apr 2015, 13:37

Ciao Foto UtenteDryden,
Dryden ha scritto:Non ti conviene fare una macro con dentro tutti i numeri da visualizzare e poi chiamare la macro all'interrupt?
se hai inteso scrivere che la macro verrebbe eseguita all'interno della routine di interrupt questo non costituisce proprio una corretta soluzione.
Questo, naturalmente, a prescindere dal linguaggio che si utilizza.

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

0
voti

[8] Re: Subroutine 5ms con quarzo 4 MHz 16F84A

Messaggioda Foto Utentecarlomusumeci » 2 apr 2015, 17:45

Ciao,grazie della risposta...credo che la chiamata del ritardo lo messa al punto giusto...certamente poi verrà strutturata meglio la visualizzazione dei numeri con le macro..è giusto il codice che ho scritto?
Avatar utente
Foto Utentecarlomusumeci
353 5 7
Sostenitore
Sostenitore
 
Messaggi: 526
Iscritto il: 8 apr 2011, 0:35

2
voti

[9] Re: Subroutine 5ms con quarzo 4 MHz 16F84A

Messaggioda Foto Utentecarlomusumeci » 5 apr 2015, 16:04

Grazie ragazzi sono riuscitto nella realizzazione del multiplexer...allego un video che ho girato...[url]https://www.youtube.com/watch?v=[/url]

inizialmente visualizzavo il numero '11' poi mi sono "divertito" e ho creato qualche gioco carino
Grazie
Avatar utente
Foto Utentecarlomusumeci
353 5 7
Sostenitore
Sostenitore
 
Messaggi: 526
Iscritto il: 8 apr 2011, 0:35

0
voti

[10] Re: Subroutine 5ms con quarzo 4 MHz 16F84A

Messaggioda Foto UtentePaolino » 6 apr 2015, 8:23

Ciao Foto Utentecarlomusumeci.
Complimenti per la realizzazione :ok:

Una domanda: come hai poi realizzato la temporizzazione? RItardo fisso o interrupt di TMR0?

Ciao.

Paolo.
"Houston, Tranquillity Base here. The Eagle has landed." - Neil A.Armstrong

-------------------------------------------------------------

PIC Experience - http://www.picexperience.it
Avatar utente
Foto UtentePaolino
32,4k 8 12 13
G.Master EY
G.Master EY
 
Messaggi: 4203
Iscritto il: 20 gen 2006, 11:42
Località: Vigevano (PV)

Prossimo

Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti