343o de Temporizadores - Diogo
-
Upload
diogo-leonardo -
Category
Documents
-
view
9 -
download
2
description
Transcript of 343o de Temporizadores - Diogo
-
23/04/2015
Criao de temporizadores.
Diogo Ferreira
Sistemas Digitais III - abr-15
FEPI Centro Universitrio de Itajub
Sistemas Digitais III
Temporizao
Entende-se por temporizao a capacidade de programar umevento para acontecer aps a passagem de um tempo especfico.
Nos micrcontroladores da famlia PIC no existem instrues quepermitam fazer o microcontrolador aguardar um determinado intervalode tempo, sendo desta
forma , responsabilidade do programador implementar esse tipo defuncionalidade.
Existem 2 formas de temporizao com o Microcontrolado PIC:
- 1 Forma: manter o microcontrolador ocupado por N ciclos de mquina;
- 2 Forma: utilizar temporizadores internos do microcontrolador;
-
23/04/2015
Temporizao 1 Forma
Para implementar a temporizao atravs da ocupao do microcontrolador por Nciclos de mquina temos que partir de algumas premissas:
1- Para cada tipo de instruo executada, o microcontrolador leva umcerto nmero de ciclos de mquina.
2- Por ser implementado com a arquitetura Havard, a microcontroladorPIC executa a maioria das instrues em apenas um ciclo de mquina.
3- As excees ficam por conta das instrues de desvio condicional,chamadas e retornos de subrotinas.
4 - Os microcontroladores PIC executam 1 ciclo de mquina a cada 4 ciclos dosclock do oscilador utilizado.
Por exemplo, supondo uma frequncia do oscilador de clock de 4Mz teremos umciclo de clock de 0,25 microsegundos e um ciclo de mquina de 1 microsegundo.
Lembrando que: f = , onde f (frequncia em Hz) e T ( tempo em segundos)
-
23/04/2015
Sabendo se os tempos que as instrues levam para serem executadas,podemos calcular o tempo que ir levar entre dois eventos.
Como exemplo vamos supor que o circuito abaixo foi montado:
E deseja-se que o LED acenda e apague em intervalos de 5 microsegundos.
Para facilitar o trabalho vamos supor que o microcontrolador PIC16f628Aest operando com um clock de 4MHz do oscilador interno do mesmo ( o que nos d um tempo de ciclo de mquina de 1 microsegundo ).
O fragmento de programa abaixo uma tentativa de se implementar o pedido:
.
.
.#DEFINE LED PORTB,0 ; Associa LED a RB0...Loop: ; Loop principal
BSF LED ; acende o LEDNOP ; 1 ciclo de mquinaNOP ; 1 ciclo de mquinaNOP ; 1 ciclo de mquinaNOP ; 1 ciclo de mquinaNOP ; 1 ciclo de mquinaBCF LED ; apaga o LEDNOP ; 1 ciclo de mquinaNOP ; 1 ciclo de mquinaNOP ; 1 ciclo de mquinaNOP ; 1 ciclo de mquinaNOP ; 1 ciclo de mquina
GOTO Loop ; final do Loop principal
-
23/04/2015
Se fossemos mais exigentes teramos que atentar para alguns detalhes emelhorar a temporizao desejada :
.
.
.#DEFINE LED PORTB,0 ; Associa LED a RB0...Loop: BSF LED
NOPNOPNOPNOPBCF LED NOPNOPNOP
; 1 ciclo de mquina - acende o LED; 1 ciclo de mquina; 1 ciclo de mquina; 1 ciclo de mquina; 1 ciclo de mquina; 1 ciclo de mquina - apaga o LED; 1 ciclo de mquina; 1 ciclo de mquina; 1 ciclo de mquina; 2 ciclos de mquina volta ao LoopGOTO Loop
Apesar dessa tcnica resolver os problemas em que temos intervalos de temporizao pequemos, para valores maiores podemos melhorar a maneira que contamos os ciclos de maquina.
.#DEFINE LED PORTB,0 ; Associa LED a RB0#DEFINE..Loop:
TEMPO 0x20 ; Associa o registrador 0x20 ao smbolo TEMPO
MOVLW MOVWF
BSF LED
0XFF TEMPO
; MOVIMENTA 0xFF PARA W; MOVIMENTA 0xFF PARAAVARIVEL TEMPO
; SETA LED
BCF LED ; RESETA LED
GOTO Loop ; SALTA PARA O COMEO DO LOOP PRINCIPAL
LACO_L: NOP ; AGUARDA 1 CICLO
DECFSZ TEMPO ; DECREMENTA TEMPO E SALTA SE VALOR ZEROGOTO LACO_L ; SALTA PARA O LABEL LACO_L
MOVLW 0XFF ; MOVIMENTA 0xFF PARA W
MOVWF TEMPO ; MOVIMENTA 0xFF PARAAVARIVEL TEMPO
LACO_D: NOP ; AGUARDA 1 CICLO
DECFSZ TEMPO ; DECREMENTA TEMPO E SALTA SE VALOR ZEROGOTO LACO_D ; SALTA PARA O LABEL LACO_D
-
23/04/2015
Aprxima melhoria seria a criao de uma sub-rotina com o cdigo da temporizao:
.
.#DEFINE LED PORTB,0 ; Associa LED a RB0#DEFINE TEMPO 0x20..Loop: BSF LED ; SETA LED
CALL ATRASO ; CHAMAAROTINADE ATRASO
BCF LED ; RESETA LED
CALL ATRASO
GOTO Loop
; CHAMAAROTINADE ATRASO
; SALTA PARA O COMEO DO LOOP PRINCIPAL
RETURN
ATRASO: MOVLW 0XFF ; MOVIMENTA 0xFF PARA W
MOVWF TEMPO ; MOVIMENTA 0xFF PARAAVARIVEL TEMPOLACO: NOP ; AGUARDA 1 CICLO
DECFSZ TEMPO ; DECREMENTA TEMPO E SALTA SE VALOR ZEROGOTO LACO ; SALTA PARA O LABEL LACO
Para a obteno de maiores perodos de temporizao podemos utilizar o aninhamento de vrios laos, como no exemplo abaixo:
T 250ms:
RETURN
Contabilizando o tempo de mquina de todas as instrues envolvidas temos:
T = 4 + 250 * ( 2 + 248 * 4 + 1 + 2 + 1 + 2 ) + 2 + 2 = 250.008 microsegundos
MOVLW MOVWF
0XFA TEMPO
; MOVIMENTAO VALOR 250 PARA w; MOVIMENTAO VALOR 250 PARAA VARIVEL TEMPO
LACOA: MOVLW MOVWF
0XF8 AUX
; MOVIMENTAO VALOR 248 PARAW; MOVIMENTAO VALOR 248 PARAA VARIVEL AUX
LACOB: NOP DECFSZ AUX
GOTO LACOB
DECFSZ GOTO
TEMPO LACOA
-
23/04/2015
Partindo-se do hardware abaixo, desenvolver um programa em assembly que acenda e apague uma sequncia de LED, em intervalos de 1segundo.
O diagrama de temporizao do acender e apagar dos LEDs deve ser o seguinte :
-
23/04/2015
Partindo-se do hardware original acrescentar uma chave para que se escolha a direo da sequencia a ser obedecida:
Chave
fechadaChave
aberta