0% acharam este documento útil (0 voto)
327 visualizações32 páginas

Guia de Sequencial Supermáquina

O documento descreve um projeto de um sequencial supermáquina usando um PIC16F628A. O sequencial faz com que uma série de LEDs acendam e apaguem em uma ordem específica para criar um efeito visual. O documento explica os materiais necessários, como configurar as saídas digitais do PIC para controlar os LEDs e como adicionar temporização ao código para que os LEDs fiquem acesos por períodos determinados de tempo.

Enviado por

AndréViana
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
327 visualizações32 páginas

Guia de Sequencial Supermáquina

O documento descreve um projeto de um sequencial supermáquina usando um PIC16F628A. O sequencial faz com que uma série de LEDs acendam e apaguem em uma ordem específica para criar um efeito visual. O documento explica os materiais necessários, como configurar as saídas digitais do PIC para controlar os LEDs e como adicionar temporização ao código para que os LEDs fiquem acesos por períodos determinados de tempo.

Enviado por

AndréViana
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 32

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

Fluxograma
INICIO
Apaga Led 2
Acende Led 3

Apaga Led 6
Acende Led 7

Apaga Led 4
Acende Led 3

Apaga Led 3
Acende Led 4

Apaga Led 7
Acende Led 6

Apaga Led 3
Acende Led 2

Apaga Led 4
Acende Led 5

Apaga Led 6
Acende Led 5

Apaga Led 2
Acende Led 1

Apaga Led 5
Acende Led 6

Apaga Led 5
Acende Led 4

Apaga Led 1

Configurao
Loop
Acende Led 0

Apaga Led 0
Acende Led 1
Apaga Led 1
Acende Led 2

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
Pino
0

10

11

12

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

Depois veremos a
Razo destas instrues

Cdigo: Configurao
CONFIGURACAO
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

Fluxograma
INICIO

Configurao
Loop

Apaga Led 2
Acende Led 3

Apaga Led 6
Acende Led 7

Apaga Led 4
Acende Led 3

Apaga Led 3
Acende Led 4

Apaga Led 7
Acende Led 6

Apaga Led 3
Acende Led 2

Apaga Led 4
Acende Led 5

Apaga Led 6
Acende Led 5

Apaga Led 2
Acende Led 1

Apaga Led 5
Acende Led 6

Apaga Led 5
Acende Led 4

Apaga Led 1

Acende Led 0

Apaga Led 0
Acende Led 1

Apaga Led 1
Acende Led 2

Fluxograma
INICIO

Configurao
Loop

BCF 86H,2
BSF 86H,3

BCF 86H,6
BSF 86H,7

BCF 86H,4
BSF 86H,3

BCF 86H,3
BSF 86H,4

BCF 86H,7
BSF 86H,6

BCF 86H,3
BSF 86H,2

BCF 86H,4
BSF 86H,5

BCF 86H,6
BSF 86H,5

BCF 86H,2
BSF 86H,1

BCF 86H,5
BCF 86H,6

BCF 86H,5
BSF 86H,4

BCF 86H,1

BSF 86H,0

BCF 86H,0
BSF 86H,1

BCF 86H,1
BSF 86H,2

Cdigo
Cdigo: ex1-0.asm

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

__CONFIG 0x3D18
ORG 0x00
CONFIGURACAO
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

BCF 06H,6 ; Desliga RB6


BSF 06H,7 ; Liga RB7 (bit 7 de PortB)
BCF 06H,7 ; Desliga RB7
BSF 06H,6 ; Liga RB6 (bit 6 de PortB)
BCF 06H,6 ; Desliga RB6
BSF 06H,5 ; Liga RB5 (bit 5 de PortB)

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

BCF 06H,5 ; Desliga RB5


BSF 06H,4 ; Liga RB4 (bit 4 de PortB)

BCF 06H,0 ; Desliga RB0


BSF 06H,1 ; Liga RB1 (bit 1 de PortB)

BCF 06H,4 ; Desliga RB4


BSF 06H,3 ; Liga RB3 (bit 3 de PortB)

BCF 06H,1 ; Desliga RB1


BSF 06H,2 ; Liga RB2 (bit 2 de PortB)

BCF 06H,3 ; Desliga RB3


BSF 06H,2 ; Liga RB2 (bit 2 de PortB)

BCF 06H,2 ; Desliga RB2


BSF 06H,3 ; Liga RB3 (bit 3 de PortB)

BCF 06H,2 ; Desliga RB2


BSF 06H,1 ; Liga RB1 (bit 1 de PortB)

BCF 06H,3 ; Desliga RB3


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

BCF 06H,1 ; Desliga RB1


GOTO LOOP
END

Processo de Montagem

Cdigo
Cdigo

executvel: ex1-0.hex
executvel: ex1-0.hex

$ gpasm -p16f628a ex1-0.asm


ex1-0.asm
ex1-0.asm

Montagem

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

Simulao
$ gpsim ex1-0.cod

Escolha Realtime with GUI


(simulao em tempo real)

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

Simulao
Execute passo-a-passo
as instrues do programa
Pause a simulao

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:

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

Cdigo

LOOP
NOP
NOP
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

Temporizao

Essas instrues inicializam


o endereo de memria com
o valor 250.

Cdigo

DL_1

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

MOVLW d'250'
MOVWF 20H
NOP
DECFSZ 20H,1
GOTO DL_1

DECFSZ
Essa 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).

Temporizao

Cdigo
DELAY1MS
MOVLW d'250'
MOVWF 20H
DL_1
NOP
DECFSZ 20H,1
GOTO DL_1
RETURN

DELAY1MS
Esse 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

Cdigo

DL_2

DELAY
Esse 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.

MOVLW d'250'
MOVWF 21H
CALL DELAY1MS
CALL DELAY1MS
CALL DELAY1MS
CALL DELAY1MS
DECFSZ 21H,1
GOTO DL_2

Fluxograma (com temporizao)


INICIO

BCF 86H,2
BSF 86H,3

Configurao

DELAY

Loop

BCF 86H,3
BSF 86H,4

DELAY

DELAY

BCF 86H,7
BSF 86H,0
DELAY
BCF 86H,0
BSF 86H,1

DELAY

BCF 86H,4
BSF 86H,5
DELAY
BCF 86H,5
BCF 86H,6

DELAY
DELAY
BCF 86H,1
BSF 86H,2

BCF 86H,6
BSF 86H,7

Fluxograma
INICIO

DELAY

DELAY

DELAY

Configurao

BCF 86H,2
BSF 86H,3

BCF 86H,6
BSF 86H,7

BCF 86H,4
BSF 86H,3

DELAY

DELAY

DELAY

BCF 86H,3
BSF 86H,4

BCF 86H,7
BSF 86H,6

BCF 86H,3
BSF 86H,2

DELAY

DELAY

DELAY

BCF 86H,4
BSF 86H,5

BCF 86H,6
BSF 86H,5

BCF 86H,2
BSF 86H,1

DELAY

DELAY

DELAY

BCF 86H,5
BCF 86H,6

BCF 86H,5
BSF 86H,4

BCF 86H,1

Loop
BSF 86H,0
DELAY
BCF 86H,0
BSF 86H,1
DELAY
BCF 86H,1
BSF 86H,2

DELAY

Cdigo com temporizao


Cdigo: ex1-1.asm

CONTINUAO...
CALL DELAY1S
BCF 06H,2 ; Desliga RB2
BSF 06H,3 ; Liga RB3 (bit 3 de PortB)

__CONFIG 0x3D18
ORG 0x00
CONFIGURACAO
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
GOTO LOOP
DELAY1MS
MOVLW d'250'
MOVWF 20H
DL_1
NOP
DECFSZ 20H,1
GOTO DL_1
RETURN

CALL DELAY1S
BCF 06H,3 ; Desliga RB3
BSF 06H,4 ; Liga RB4 (bit 4 de PortB)
CALL DELAY1S
BCF 06H,4 ; Desliga RB4
BSF 06H,5 ; Liga RB5 (bit 5 de PortB)
CALL DELAY1S
BCF 06H,5 ; Desliga RB5
BSF 06H,6 ; Liga RB6 (bit 6 de PortB)
CALL DELAY1S
BCF 06H,6 ; Desliga RB6
BSF 06H,7 ; Liga RB7 (bit 7 de PortB)
CALL DELAY1S
BCF 06H,7 ; Desliga RB7
BSF 06H,6 ; Liga RB6 (bit 6 de PortB)

DELAY1S
MOVLW d'250'
MOVWF 21H
DL_2
CALL DELAY1MS
CALL DELAY1MS
CALL DELAY1MS
CALL DELAY1MS
DECFSZ 21H,1
GOTO DL_2
RETURN

CALL DELAY1S
BCF 06H,6 ; Desliga RB6
BSF 06H,5 ; Liga RB5 (bit 5 de PortB)
CALL DELAY1S
BCF 06H,5 ; Desliga RB5
BSF 06H,4 ; Liga RB4 (bit 4 de PortB)
CALL DELAY1S
BCF 06H,4 ; Desliga RB4
BSF 06H,3 ; Liga RB3 (bit 3 de PortB)
CALL DELAY1S
BCF 06H,3 ; Desliga RB3
BSF 06H,2 ; Liga RB2 (bit 2 de PortB)

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

CALL DELAY1S
BCF 06H,2 ; Desliga RB2
BSF 06H,1 ; Liga RB1 (bit 1 de PortB)

CALL DELAY1S
BCF 06H,0 ; Desliga RB0
BSF 06H,1 ; Liga RB1 (bit 1 de PortB)
CALL DELAY1S
BCF 06H,1 ; Desliga RB1
BSF 06H,2 ; Liga RB2 (bit 2 de PortB)

CALL DELAY1S
BCF 06H,1 ; Desliga RB1

CALL DELAY1S
GOTO LOOP
END

Simulao
$ gpsim ex1-0.cod

Inicie a simulao
Verifique a Breadboad
Observe que o funcionamento agora est correto. Parabns voc conseguiu!

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

INICIO

Configuraes
Liga Led 0

Configuraes
BSF 05H,0

Rotaciona
Esquerda X2
DELAY

LOOPESQ
RLF 05,1
DELAY

Led 7
Est aceso?

DELAY

No

BTFSS 05,7

Sim

Sim
DELAY

DELAY
DELAY

Rotaciona
Direita /2
DELAY

Led 0
Est Acesso?
Sim

DELAY

No

LOOPDIR
RRL 05,1
DELAY

DELAY
No

BTFSS 05,0
Sim

No

DELAY

Cdigo com Temporizao


Melhorado
Cdigo: ex1-2.asm
__CONFIG 0x3D18
ORG 0x00
GOTO CONFIGURACAO
DELAY1MS
; Funcao de Espera 1ms
MOVLW d'250' ; $(20H) = 250
MOVWF 20H
;
DL_1
NOP
; Queima 1 Ciclo
DECFSZ 20H,1 ; Queima 1 Ciclo se <> 0
GOTO 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 1s
MOVLW d'50'
; $(21h) = 250
MOVWF 21H
;
DL_2
CALL DELAY1MS
CALL DELAY1MS
CALL DELAY1MS
CALL DELAY1MS
DECFSZ 21H,1
GOTO DL_2
RETURN
; Retorna
CONFIGURACAO
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
BSF 06H,0 ; Liga RB0 (bit 0 de PortB)
LOOPESQ
CALL DELAY1S
RLF 06H,1 ; Rotaciona para esquerda
BTFSS 06H,7 ; Sai do Loop se led 7 acesso
GOTO LOOPESQ
LOOPDIR
CALL DELAY1S
RRF 06H,1 ; Rotaciona para direita
BTFSS 06H,0 ; Sai do Loop se led 7 acesso
GOTO LOOPDIR
GOTO LOOPESQ
END

Simulao
$ gpsim ex1-0.cod

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

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.

Você também pode gostar