343o de temporizadores - diogo

7
23/04/2015 Criação de temporizadores. Diogo Ferreira ([email protected]) Sistemas Digitais III - abr-15 FEPI – Centro Universitário de Itajubá Sistemas Digitais III Temporização Entende-se por temporização a capacidade de programar um evento para acontecer após a passagem de um tempo específico. Nos micrcontroladores da família PIC não existem instruções que permitam fazer o microcontrolador aguardar um determinado intervalo de tempo, sendo desta forma , responsabilidade do programador implementar esse tipo de funcionalidade. Existem 2 formas de temporização com o Microcontrolado PIC: - 1ª Forma: manter o microcontrolador ocupado por N ciclos de máquina; - 2ª Forma: utilizar temporizadores internos do microcontrolador;

Upload: diogo-leonardo

Post on 08-Nov-2015

9 views

Category:

Documents


2 download

DESCRIPTION

Aula temporizadores PIC

TRANSCRIPT

  • 23/04/2015

    Criao de temporizadores.

    Diogo Ferreira

    ([email protected])

    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