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?
Subroutine 5ms con quarzo 4 MHz 16F84A
Moderatore:
Paolino
11 messaggi
• Pagina 1 di 2 • 1, 2
0
voti
Puoi provare a visitare questa pagina.
Inserendo i dati che vuoi tu (Fosc = 4MHz, ritardo di 5ms), ottieni qualcosa del tipo:
Non so quanto possa essere preciso, qualche misura la farei.
Perché no vuoi scomodare il TMR0?
Ciao.
Paolo.
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
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-

Paolino
32,6k 8 12 13 - G.Master EY

- Messaggi: 4226
- Iscritto il: 20 gen 2006, 11:42
- Località: Vigevano (PV)
0
voti
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?
poi volevo sapere quanti ms usate solitamente per fare l'operazione del multiplex...5ms ? 100ms?
-

carlomusumeci
353 5 7 - Sostenitore

- Messaggi: 526
- Iscritto il: 8 apr 2011, 0:35
0
voti
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.
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
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-

Paolino
32,6k 8 12 13 - G.Master EY

- Messaggi: 4226
- Iscritto il: 20 gen 2006, 11:42
- Località: Vigevano (PV)
0
voti
Ciao
Paolino 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
è sbagliato il meccanismo?
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?
-

carlomusumeci
353 5 7 - Sostenitore

- Messaggi: 526
- Iscritto il: 8 apr 2011, 0:35
0
voti
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.
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.
0
voti
Ciao
Dryden,
Questo, naturalmente, a prescindere dal linguaggio che si utilizza.
Saluti
se hai inteso scrivere che la macro verrebbe eseguita all'interno della routine di interrupt questo non costituisce proprio una corretta soluzione.Dryden ha scritto:Non ti conviene fare una macro con dentro tutti i numeri da visualizzare e poi chiamare la macro all'interrupt?
Questo, naturalmente, a prescindere dal linguaggio che si utilizza.
Saluti
W - U.H.F.
-

WALTERmwp
30,2k 4 8 13 - G.Master EY

- Messaggi: 8982
- Iscritto il: 17 lug 2010, 18:42
- Località: le 4 del mattino
0
voti
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?
-

carlomusumeci
353 5 7 - Sostenitore

- Messaggi: 526
- Iscritto il: 8 apr 2011, 0:35
2
voti
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
inizialmente visualizzavo il numero '11' poi mi sono "divertito" e ho creato qualche gioco carino
Grazie
-

carlomusumeci
353 5 7 - Sostenitore

- Messaggi: 526
- Iscritto il: 8 apr 2011, 0:35
0
voti
Ciao
carlomusumeci.
Complimenti per la realizzazione
Una domanda: come hai poi realizzato la temporizzazione? RItardo fisso o interrupt di TMR0?
Ciao.
Paolo.
Complimenti per la realizzazione
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
-------------------------------------------------------------
PIC Experience - http://www.picexperience.it
-

Paolino
32,6k 8 12 13 - G.Master EY

- Messaggi: 4226
- Iscritto il: 20 gen 2006, 11:42
- Località: Vigevano (PV)
11 messaggi
• Pagina 1 di 2 • 1, 2
Torna a Firmware e programmazione
Chi c’è in linea
Visitano il forum: Nessuno e 3 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)


