Sequencial super máquina

32
Sequencial “Supermáquina” (TEMPORIZAÇÃO SIMPLES)

description

circuito de eletronica

Transcript of Sequencial super máquina

  • Sequencial Supermquina(TEMPORIZAO SIMPLES)

  • Roteiro Sequencial Supermquina Materiais Pinos do PIC Fluxograma Temporizao Circuito no protoboard Melhoramentos Sugesto de Atividades

  • Sequencial

    Um sequencial basicamente um conjunto de leds que acedem e apagam em uma determinada

    ordem provocando algum tipo de efeito visual.

    O sequencial supermquina assim chamado graas a srie Supermquina dos anos 80, onde

    o carro do protagonista possua na sua parte frontal um sequencial onde as luzes acendiam de

    forma a provocar um efeito de vai-e-vem.

  • Materiais Gravador PIC 16F628A 8 Leds 8 Resistores de 1K 2 Suportes para Pilhas AA 4 Pilhas AA Protoboard e Fios

  • Pinos do PIC

  • Acende Led 0

    Fluxograma

    Apaga Led 0Acende Led 1

    Apaga Led 1Acende Led 2

    Apaga Led 2Acende Led 3

    Apaga Led 4Acende Led 5

    Apaga Led 5Acende Led 6

    Apaga Led 6Acende Led 7

    Configurao

    Apaga Led 3Acende Led 4

    INICIO

    Apaga Led 7Acende Led 6

    Apaga Led 5Acende Led 4

    Apaga Led 4Acende Led 3

    Apaga Led 3Acende Led 2

    Apaga Led 6Acende Led 5

    Apaga Led 2Acende Led 1

    Apaga Led 1

    Loop

  • Fazendo Sada com o PIC O controlador PIC tem 2 Portas para Entrada e Sada

    uma conhecida por Port A e a outra Port B. Usaremos Port B neste exemplo.

    O Port B do PIC tem o endereo 06H, e tem os seu bits ligados ao pinos externos do PIC, de acordo com a tabela a seguir:

    BIT PORTB Pino0 61 72 83 94 105 116 127 13

  • Configurando as Sadas As configuraes de E/S para cada Port so feitas usando os

    registradores TRISA e TRISB onde TRISA configura o PortA e TRISB o PortB, os endereos so 85H e 86H respectivamente.

    Para configurar algum pino de Port B como sada devemos desligar o bit correspondente em TRISB. Ou seja se queremos que o pino 6 de PortB seja sada (output) configuramos o Bit 6 de TRISB como 0. Para configurar como entrada configuramos o bit 6 como 1;

    fcil lembrar desta regra 0 para 0utput e 1 para 1nput Desta forma para configurar todos os pinos de port B como

    sada devemos zerar todos os bits de TRISB;

  • Instrues BCF e BSF As instrues BCF (Bit Clear File) e BSF (Bit

    Set File) so usadas para desligar e ligar bits especficos de um registrador.

    Ex BCF 06H,1 ; desliga o bit 1 de 6H BSF 06H,1 ; Liga o bit 1 de 6H

    A sintaxe destes comandos BCF Registrador, Bit BSF Registrador, Bit

  • Configurao

    Cdigo: ConfiguraoCONFIGURACAO

    BSF 03H,5 ; Seleciona banco 1 (seta RP0)CLRF 86H ; Reseta PortB (Todas os pinos como saida)BCF 03H,5 ; Seleciona banco 0 (reseta RP0)CLRF 06H ; Zera todos os pinos de PortB

    Depois veremos aRazo destas instrues

    Depois veremos aRazo destas instrues

  • Acende Led 0

    Fluxograma

    Apaga Led 0Acende Led 1

    Apaga Led 1Acende Led 2

    Apaga Led 2Acende Led 3

    Apaga Led 4Acende Led 5

    Apaga Led 5Acende Led 6

    Apaga Led 6Acende Led 7Configurao

    Apaga Led 3Acende Led 4

    INICIO

    Apaga Led 7Acende Led 6

    Apaga Led 5Acende Led 4

    Apaga Led 4Acende Led 3

    Apaga Led 3Acende Led 2

    Apaga Led 6Acende Led 5

    Apaga Led 2Acende Led 1

    Apaga Led 1

    Loop

  • BSF 86H,0

    Fluxograma

    BCF 86H,0BSF 86H,1

    BCF 86H,1BSF 86H,2

    BCF 86H,2BSF 86H,3

    BCF 86H,4BSF 86H,5

    BCF 86H,5BCF 86H,6

    BCF 86H,6BSF 86H,7Configurao

    BCF 86H,3BSF 86H,4

    INICIO

    BCF 86H,7BSF 86H,6

    BCF 86H,5BSF 86H,4

    BCF 86H,4BSF 86H,3

    BCF 86H,3BSF 86H,2

    BCF 86H,6BSF 86H,5

    BCF 86H,2BSF 86H,1

    BCF 86H,1

    Loop

  • CdigoCdigo: ex1-0.asm

    __CONFIG 0x3D18ORG 0x00CONFIGURACAO

    BSF 03H,5 ; Seleciona banco 1 (seta RP0)CLRF 86H ; Reseta PortB (Todas os pinos como saida)BCF 03H,5 ; Seleciona banco 0 (reseta RP0)CLRF 06H ; Zera todos os pinos de PortB

    LOOP

    BSF 06H,0 ; Liga RB0 (bit 0 de PortB)

    BCF 06H,0 ; Desliga RB0BSF 06H,1 ; Liga RB1 (bit 1 de PortB)

    BCF 06H,1 ; Desliga RB1BSF 06H,2 ; Liga RB2 (bit 2 de PortB)

    BCF 06H,2 ; Desliga RB2BSF 06H,3 ; Liga RB3 (bit 3 de PortB)

    BCF 06H,3 ; Desliga RB3BSF 06H,4 ; Liga RB4 (bit 4 de PortB)

    BCF 06H,4 ; Desliga RB4BSF 06H,5 ; Liga RB5 (bit 5 de PortB)

    CONTINUAO...BCF 06H,5 ; Desliga RB5BSF 06H,6 ; Liga RB6 (bit 6 de PortB)

    BCF 06H,6 ; Desliga RB6BSF 06H,7 ; Liga RB7 (bit 7 de PortB)

    BCF 06H,7 ; Desliga RB7BSF 06H,6 ; Liga RB6 (bit 6 de PortB)

    BCF 06H,6 ; Desliga RB6BSF 06H,5 ; Liga RB5 (bit 5 de PortB)

    BCF 06H,5 ; Desliga RB5BSF 06H,4 ; Liga RB4 (bit 4 de PortB)

    BCF 06H,4 ; Desliga RB4BSF 06H,3 ; Liga RB3 (bit 3 de PortB)

    BCF 06H,3 ; Desliga RB3BSF 06H,2 ; Liga RB2 (bit 2 de PortB)

    BCF 06H,2 ; Desliga RB2BSF 06H,1 ; Liga RB1 (bit 1 de PortB)

    BCF 06H,1 ; Desliga RB1

    GOTO LOOPEND

  • executvel: ex1-0.hexexecutvel: ex1-0.hexCdigoCdigo

    ex1-0.asmex1-0.asm

    :020000040000FA:100000008316860183128601861306140610861451:100010008610061506118615861106160612861616:0A002000861206170613861704283F:02400E00183D5B:00000001FF

    :020000040000FA:100000008316860183128601861306140610861451:100010008610061506118615861106160612861616:0A002000861206170613861704283F:02400E00183D5B:00000001FF

    Montagem

    Processo de Montagem

    $ gpasm -p16f628a ex1-0.asm

  • Simulao

    $ gpsim ex1-0.cod

    Observe que durante a simulao as sadas do controlador no esto alternando entre acesso e apagado com esperado.

    Inicie a simulaoVerifique a Breadboad

    Escolha Realtime with GUI(simulao em tempo real)

  • Simulao

    Pause a simulao

    Execute passo-a-passoas instrues do programa

    No passo-a-passo o comportamento o esperado. Qual ser o problema?Resposta: Prximo slide.

  • Resposta: Temporizao

  • Temporizao Entende-se por temporizao a capacidade de

    programar um evento para acontecer aps a passagem de um tempo especfico.

    No PIC no existem instrues que permitam fazer o controlador esperar um determinado intervalo de tempo, desta forma responsabilidade do programador prover esse tipo de funcionalidade.

    Existem 2 formas de temporizao com o PIC, a primeira e mais simples a queima de ciclos. A segunda usar os timers internos do PIC para essa finalidade. Aqui veremos apenas a primeira.

  • Temporizao A palavra de configurao que estamos usando

    aqui configura o oscilador interno do PIC que de 4Mhz.

    O PIC executa instrues a da velocidade do oscilador o que nos leva a uma taxa de 1 milho de instrues por segundo, ou seja uma instruo demora 1 microssegundo para ser executada.

    Com base nisto se quisermos um tempo de espera 1s temos que fazer o PIC executar 1 milho de instrues. Mas como fazer isso?

  • Temporizao Para prover a temporizao usaremos loops

    com a instruo: NOP (No OPeration) que serve apenas para Queimar um ciclo

    Observe o cdigo abaixo de loop infinito:

    Cdigo

    LOOPNOPNOP GOTO LOOP

    Esse loop leva 4us por interao, 1us para cada NOP e 2us para GOTO. Instrues de salto costumam levar 2 ciclos quando saltam

    Agora o que preciso fazer trabalhar esse loop de forma que ele execute por um nmero determinado de interaes.Ex: 250 interaes leva a uma espera de 1ms

  • Temporizao

    Cdigo

    MOVLW d'250'MOVWF 20H

    DL_1NOPDECFSZ 20H,1GOTO DL_1

    DECFSZEssa Instruo decrementa o contedo da posio 20h at este chegar a zero. Quando o valor armazenado em 20H chegar a zero, a instruo DECFSZ efetuar o salto da prxima instruo (GOTO DL_1) e sair do loop. Resultado: 1ms de espera (250x4us).

    Essas instrues inicializam o endereo de memria com o valor 250.

    Em termos da percepo humana, 1ms muito pouco. Para o olho humano perceber, com certa persistencia precisamos de um intervalo de pelo menos 1/50s ou seja 20ms

  • Temporizao

    Cdigo

    DELAY1MSMOVLW d'250'MOVWF 20H

    DL_1NOPDECFSZ 20H,1GOTO DL_1RETURN

    DELAY1MSEsse conjunto de instrues foi transformado em uma FUNO. Isso permite que em qualquer parte do cdigo o programador execute esse conjunto de instrues apenas executando CALL DELAY1MS. Isso tem algumas vantagens a principal delas no precisar replicar esse cdigo em todas as partes do programa

    DELAYEsse lao executa 250 vezes, a cada vez que executa chama a funo DELAY1MS 4 vezes. Ou seja uma espera aproximada de 1s. Convm transformar esse cdigo em funo.

    Cdigo

    MOVLW d'250'MOVWF 21H

    DL_2CALL DELAY1MSCALL DELAY1MSCALL DELAY1MSCALL DELAY1MSDECFSZ 21H,1GOTO DL_2

  • Fluxograma (com temporizao)

    BCF 86H,7BSF 86H,0

    BCF 86H,0BSF 86H,1

    BCF 86H,1BSF 86H,2

    BCF 86H,2BSF 86H,3

    BCF 86H,4BSF 86H,5

    BCF 86H,5BCF 86H,6

    BCF 86H,6BSF 86H,7

    Configurao

    BCF 86H,3BSF 86H,4

    INICIO

    Loop

    DELAY

    DELAY

    DELAY

    DELAY

    DELAY

    DELAY

    DELAY

    DELAY

  • BSF 86H,0

    Fluxograma

    BCF 86H,0BSF 86H,1

    BCF 86H,1BSF 86H,2

    BCF 86H,2BSF 86H,3

    BCF 86H,4BSF 86H,5

    BCF 86H,5BCF 86H,6

    BCF 86H,6BSF 86H,7Configurao

    BCF 86H,3BSF 86H,4

    INICIO

    BCF 86H,7BSF 86H,6

    BCF 86H,5BSF 86H,4

    BCF 86H,4BSF 86H,3

    BCF 86H,3BSF 86H,2

    BCF 86H,6BSF 86H,5

    BCF 86H,2BSF 86H,1

    BCF 86H,1

    Loop

    DELAY

    DELAY

    DELAY

    DELAY

    DELAY

    DELAY

    DELAY

    DELAY

    DELAY

    DELAY

    DELAY

    DELAY

    DELAY

    DELAY

    DELAY

  • Cdigo com temporizaoCdigo: ex1-1.asm

    __CONFIG 0x3D18ORG 0x00CONFIGURACAO

    BSF 03H,5 ; Seleciona banco 1 (seta RP0)CLRF 86H ; Reseta PortB (Todas os pinos como saida)BCF 03H,5 ; Seleciona banco 0 (reseta RP0)CLRF 06H ; Zera todos os pinos de PortBGOTO LOOP

    DELAY1MSMOVLW d'250'MOVWF 20H

    DL_1NOPDECFSZ 20H,1GOTO DL_1RETURN

    DELAY1SMOVLW d'250'MOVWF 21H

    DL_2CALL DELAY1MSCALL DELAY1MSCALL DELAY1MSCALL DELAY1MSDECFSZ 21H,1GOTO DL_2RETURN

    LOOP

    BSF 06H,0 ; Liga RB0 (bit 0 de PortB)

    CALL DELAY1SBCF 06H,0 ; Desliga RB0BSF 06H,1 ; Liga RB1 (bit 1 de PortB)

    CALL DELAY1SBCF 06H,1 ; Desliga RB1BSF 06H,2 ; Liga RB2 (bit 2 de PortB)

    CONTINUAO...CALL DELAY1SBCF 06H,2 ; Desliga RB2BSF 06H,3 ; Liga RB3 (bit 3 de PortB)

    CALL DELAY1SBCF 06H,3 ; Desliga RB3BSF 06H,4 ; Liga RB4 (bit 4 de PortB)

    CALL DELAY1SBCF 06H,4 ; Desliga RB4BSF 06H,5 ; Liga RB5 (bit 5 de PortB)

    CALL DELAY1SBCF 06H,5 ; Desliga RB5BSF 06H,6 ; Liga RB6 (bit 6 de PortB)

    CALL DELAY1SBCF 06H,6 ; Desliga RB6BSF 06H,7 ; Liga RB7 (bit 7 de PortB)

    CALL DELAY1SBCF 06H,7 ; Desliga RB7BSF 06H,6 ; Liga RB6 (bit 6 de PortB)

    CALL DELAY1SBCF 06H,6 ; Desliga RB6BSF 06H,5 ; Liga RB5 (bit 5 de PortB)

    CALL DELAY1SBCF 06H,5 ; Desliga RB5BSF 06H,4 ; Liga RB4 (bit 4 de PortB)

    CALL DELAY1SBCF 06H,4 ; Desliga RB4BSF 06H,3 ; Liga RB3 (bit 3 de PortB)

    CALL DELAY1SBCF 06H,3 ; Desliga RB3BSF 06H,2 ; Liga RB2 (bit 2 de PortB)

    CALL DELAY1SBCF 06H,2 ; Desliga RB2BSF 06H,1 ; Liga RB1 (bit 1 de PortB)

    CALL DELAY1SBCF 06H,1 ; Desliga RB1

    CALL DELAY1SGOTO LOOP

    END

  • Simulao

    Observe que o funcionamento agora est correto. Parabns voc conseguiu!

    $ gpsim ex1-0.cod

    Inicie a simulaoVerifique a Breadboad

  • O Circuito

    +

    +

    +

    +

    1K

    1K

    1K

    1K

    1K

    1K

    1K

    1K

  • Melhoramentos deste cdigo No programa optamos por ligar e desligar os

    bits da porta individualmente atravs das instrues BCF e BSF.

    Podemos minimizar bastante o cdigo tratando a porta como um byte completo, ao invs de tratar cada bit. Existe duas instrues que proporcionam o mesmo efeito do programa anterior que basicamente o rotacionamento do byte para direita ou esquerda, essas instrues so RRF e RLF respectivamente.

  • INICIO

    ConfiguraesLiga Led 0

    RotacionaEsquerda X2

    Led 7Est aceso?

    RotacionaDireita /2

    Led 0Est Acesso?

    No

    No

    Sim

    Sim

    INICIO

    ConfiguraesBSF 05H,0

    LOOPESQRLF 05,1

    BTFSS 05,7

    LOOPDIRRRL 05,1

    BTFSS 05,0

    No

    NoSim

    SimDELAY

    DELAY

    DELAYDELAY

    DELAY

    DELAY

    DELAY

    DELAYDELAY

    DELAY

    DELAY

  • Cdigo com TemporizaoMelhorado

    Cdigo: ex1-2.asm__CONFIG 0x3D18ORG 0x00

    GOTO CONFIGURACAODELAY1MS ; Funcao de Espera 1ms

    MOVLW d'250' ; $(20H) = 250MOVWF 20H ;

    DL_1NOP ; Queima 1 CicloDECFSZ 20H,1 ; Queima 1 Ciclo se 0GOTO DL_1 ; Queima 2 Ciclos

    ; Total 4 ciclos X 250 = 1000 ciclos gastos; 1000 X 0,000001s = 0,001s = 1ms

    RETURN ; Retorna

    DELAY1S ; Funcao espera 1sMOVLW d'50' ; $(21h) = 250MOVWF 21H ;

    DL_2CALL DELAY1MSCALL DELAY1MSCALL DELAY1MSCALL DELAY1MSDECFSZ 21H,1GOTO DL_2RETURN ; Retorna

    CONFIGURACAOBSF 03H,5 ; Seleciona banco 1 (seta RP0)CLRF 86H ; Reseta PortB (Todas os pinos como saida)BCF 03H,5 ; Seleciona banco 0 (reseta RP0)CLRF 06H ; Zera todos os pinos de PortBBSF 06H,0 ; Liga RB0 (bit 0 de PortB)

    LOOPESQCALL DELAY1SRLF 06H,1 ; Rotaciona para esquerdaBTFSS 06H,7 ; Sai do Loop se led 7 acessoGOTO LOOPESQ

    LOOPDIRCALL DELAY1SRRF 06H,1 ; Rotaciona para direitaBTFSS 06H,0 ; Sai do Loop se led 7 acessoGOTO LOOPDIRGOTO LOOPESQ

    END

  • Simulao

    Observe que o funcionamento TAMBEM est correto. S que agora com muito menos linhas de cdigo e consequentemente menos espao na memria do programa.

    $ gpsim ex1-0.cod

    Inicie a simulaoVerifique a Breadboad

  • Sugesto de Atividades 1) diminua o tempo de forma a parecer mais

    continuo o deslocamento do led acesso; 2)Altere o cdigo de forma que no ligamento do

    circuito todos os leds pisquem 5 vezes como forma de teste;

    3) Altere o cdigo para que existam 2 leds sempre acessos um se deslocando para direita e outro para esquerda;

    4) Altere o cdigo de forma que os dois leds acessos voltem quando se encontrarem.