Download PDF
ads:
UNIVERSIDADE FEDERAL DE MINAS GERAIS
ESCOLA DE ENGENHARIA
DEPARTAMENTO DE ENGENHARIA NUCLEAR
Programa de Pós-Graduação em Ciências e Técnicas Nucleares
CONTROLE DE POSICIONAMENTO DE UM DETECTOR USANDO CIRCUITO
ELETRÔNICO MICROCONTROLADO E PROGRAMAÇÃO ASSEMBLY.
Abner Pinto da Fonseca
Belo Horizonte
2008
ads:
Livros Grátis
http://www.livrosgratis.com.br
Milhares de livros grátis para download.
2
Abner Pinto da Fonseca
CONTROLE DE POSICIONAMENTO DE UM DETECTOR USANDO CIRCUITO
ELETRÔNICO MICROCONTROLADO E PROGRAMAÇÃO ASSEMBLY.
Dissertação apresentada ao Programa de Pós-
Graduação em Ciências e Técnicas Nucleares da
Escola de Engenharia da Universidade Federal de
Minas Gerais, como requisito parcial para obtenção
do título de Mestre em Ciências e Técnicas
Nucleares.
Área: Ciências das Radiações
Orientador: Prof. Arno Heeren de Oliveira
Departamento de Engenharia Nuclear
Belo Horizonte
2008
ads:
3
Dedico este trabalho aos meus pais José Fonseca
e Conceição, os quais são as referências fortes de
retidão na minha vida.
A todos os meus irmãos: Antônio, Maria Eunice,
Arlei, Acir, Aécio, Aures, Ana Maria e Érika,
componentes dessa grande e importante família da
minha vida.
A minha querida esposa Shirley Martins da Costa
Fonseca por todos os momentos de amparo e
perseguição conjunta aos nossos grandes objetivos.
A meu grande filho Bruno Martins da Costa Fonseca,
o qual esteve, está e estará em primeiro plano por
todo sempre.
4
Agradecimentos.
Agradeço a todos que direta ou indiretamente sentiram minha falta, mas compreenderam estes
meus momentos de ausência, aos quais debruçava-me sobre esta dissertação para sua
materialização.
Ao Prof. Arno que pacientemente me orientou rumo ao objetivo maior desse projeto.
Ao meu filho Bruno pelo tempo dedicado em desenhos e críticas.
À minha esposa Shirley por tudo.
5
"Uma vida sem investigação não é digna de ser vivida.”
Platão
6
Índice:
RESUMO..................................................................................................................................13
ABSTRACT .............................................................................................................................14
INTRODUÇÃO........................................................................................................................15
Capítulo 1. REVISÃO BIBLIOGRÁFICA ..............................................................................17
1.1 O microcontrolador PIC16F877A ......................................................................................17
1.1.1 Recursos disponíveis ...................................................................................................18
1.1.2 Características elétricas ...............................................................................................19
1.1.3 Arquitetura externa e interna.......................................................................................20
1.1.3.1 Lay-out externo.....................................................................................................20
1.1.3.2 Lay-out interno e processamento básico...............................................................21
1.1.4 O clock e os ciclos de máquina....................................................................................25
1.1.5 Memória de dados .......................................................................................................27
1.1.6 Alguns Registradores Especiais ..................................................................................29
1.1.6.1 Registradores Especiais de uso geral....................................................................30
a) Registrador STATUS ...............................................................................................30
b) Registrador OPTION_REG......................................................................................31
1.1.6.2 Registrador INTCON ...........................................................................................33
1.1.6.3 Registradores Especiais, PORTx e TRISx ...........................................................34
1.1.7 A Memória de Programa e a Pilha (Stack) ..................................................................35
1.1.8 Conjunto das instruções...............................................................................................37
1.2 Comunicação externa através do LCD...............................................................................40
1.2.1 O Display de Cristal Líquido (LCD)...........................................................................41
1.2.2 O Registrador de deslocamento, circuito integrado 74164. ........................................44
7
1.3 Motor de Passo ...................................................................................................................47
1.3.1 Aplicação.....................................................................................................................47
1.3.2 Caracterização, tipos e funcionamento básico.............................................................47
1.3.3 Escolhendo um motor de passo. ..................................................................................49
Capítulo 2. MATERIAIS E MÉTODOS..................................................................................54
2.1 Hardware – circuitos eletro-eletrônicos..............................................................................54
2.1.1 Fonte de alimentação...................................................................................................54
2.1.2 Motor de passo ............................................................................................................55
2.1.2.1 Driver e ligação das bobinas do motor de passo .....................................................58
Capítulo 3. RESULTADOS E CONCLUSÃO.........................................................................61
3.1 A placa principal - contém o MCU ....................................................................................61
3.2 Mecânica – o lay-out final....................................................................................................63
3.3 Softwares ............................................................................................................................64
3.3.1 Softwares de apoio.......................................................................................................64
3.4 Visualização final do projeto..............................................................................................68
3.5 CONCLUSÃO...................................................................................................................72
REFERÊNCIAS BIBLIOGRÁFICAS .....................................................................................74
ANEXOS..................................................................................................................................77
A1 – Softwares – programas em assembly..............................................................................77
a) Programa Principal.......................................................................................................77
b) Sub-rotinas de apoio ao programa principal ................................................................86
b1) Rotina principal......................................................................................................86
b2) Rotinas de apoio.....................................................................................................88
1) Rotina para controle da escrita no LCD...............................................................88
2) Rotinas de mensagens para o LCD ......................................................................89
8
3) Rotinas auxiliares às rotinas de mensagens. ........................................................95
4) Rotina de controle da rotação do motor de passo ................................................97
5) As demais rotinas .................................................................................................98
A2 – Estimando o torque do sistema motor-haste-mesa .......................................................105
9
LISTA DE TABELAS
Tabela 1.1 – Registradores Especiais e de Propósito Geral – RAM ........................................28
Tabela 1.2 – Registrador STATUS...........................................................................................30
Tabela 1.3 – Registrador OPTION_REG.................................................................................31
Tabela 1.4 – Bits PS2, PS1 e PS0.............................................................................................32
Tabela 1.5 – Registrador INTCON...........................................................................................33
Tabela 1.6 – Registrador TRISx...............................................................................................35
Tabela 1.7 – Registrador PORTx .............................................................................................35
Tabela 1.8 – Instruções do PIC – Operações orientadas a bit. .................................................38
Tabela 1.9 – Instruções do PIC – Operações para diversos controles......................................39
Tabela 1.10 – Instruções do PIC – Operações orientadas a byte..............................................39
Tabela 1.11 – Instruções do PIC – Operações com valores numéricos....................................40
Tabela 1.12 – Pinos do PIC para comunicação com o LCD. ..................................................40
Tabela 1.13 – Caracterização dos pinos do LCD ....................................................................42
Tabela 1.14 – Tabela de funcionamento do CI 74164.............................................................45
Tabela 1.15 – Ligação do CI 74164 com o LCD (dados)........................................................46
Tabela 1.16 – Código binário que aciona o motor de passo unipolar. ....................................49
Tabela 1.17 – Ângulo do Passo e respectivos Passos por Volta. ............................................51
Tabela 1.18 – Dados relevantes de alguns motores de passo..................................................53
Tabela 2.1 – Dados relevantes do motor de passo usado no projeto.......................................55
10
LISTA DE FIGURAS
Figura 1.1 – Lay-out externo do microcontrolador PIC16F877A ............................................20
Figura 1.2 – Lay-out interno do microcontrolador PIC16F877A.............................................21
Figura 1.3 – Ciclos de máquina – busca e execução de instruções ..........................................26
Figura 1.4 – Memória de Programa e Pilha..............................................................................36
Figura 1.5 – Lay-out externo do LCD 2 linhas x 16 colunas ..................................................42
Figura 1.6 – Fluxograma - Inicialização do LCD.....................................................................43
Figura 1.7 – Lay-out do CI 74164, shift register......................................................................44
Figura 1.8 – Formas de onda do CI 74164 – domínio do tempo..............................................45
Figura 1.9 – Identificação dos torques dos motores de passo (curvas genéricas) ....................52
Figura 1.10 – Exemplos de curvas de torque de alguns motores de passo...............................53
Figura 2.1 – Circuito da fonte de alimentação. ........................................................................55
Figura 2.2 – Curvas dos torques dinâmicos do motor de passo 23LM-K005. .........................56
Figura 2.3 – Identificação do motor pelo sistema numérico do fabricante. .............................56
Figura 2.4 – Detalhes do estator (à esquerda) e rotor (à direita) do motor de passo................57
Figura 2.5 – Motor de passo aberto – todos os seus componentes..........................................57
Figura 2.6 – Lay-out do rotor e rotor-estator do motor de passo híbrido.................................58
Figura 2.7 – Identificação das bobinas do motor de passo unipolar. .......................................59
Figura 2.8 – Driver para o motor de passo unipolar.................................................................59
Figura 3.1 – Circuito principal – contém o PIC16F877A. .......................................................61
Figura 3.2 – Ligação CI74164(Shift Register) e LCD ao MCU...............................................62
Figura 3.3 – Lay-out da estrutura mecânica. ............................................................................63
Figura 3.4 – PCI fonte alimentação - Lado da Solda (esquerda)..............................................64
Figura 3.5 – PCI fonte alimentação - Lado dos componentes (direita)....................................64
Figura 3.6 – PCI Driver do motor de passo – lado da solda. ...................................................65
11
Figura 3.7 – PCI Driver do motor de passo – lado dos componentes......................................65
Figura 3.8 – PCI Placa principal com o PIC16F877A – lado da solda. ...................................66
Figura 3.9 – PCI Placa principal com o PIC16F877A – lado dos componentes......................67
Figura 3.10 – Detalhe construtivo da mesa móvel ...................................................................68
Figura 3.11 – Visão geral do projeto, sem acabamento, primeiro ângulo................................69
Figura 3.12 – Visão geral do projeto, sem acabamento, segundo ângulo. ...............................69
Figura 3.13 – Visão geral do projeto, sem acabamento, terceiro ângulo. ................................70
Figura 3.14 – Fonte de alimentação, placas driver motor de passo e do microcontrolador.....70
Figura 3.15 – A Placa principal – contém o MCU...................................................................71
Figura 3.16 – Visão geral do projeto, com acabamento...........................................................71
Figura 3.17 – Display LCD indicando o Afastamento rápido da Posição_0............................72
Figura A1 – Programa Principal – Início. ................................................................................77
Figura A2 – Programa Principal – Configurações e definições e detecção chave apertada.....80
Figura A3 – Programa Principal – Final. Tratamento de uma tecla pressionada e chamada da
rotina principal..................................................................................................................85
Figura A4 – Rotina Principal – Exemplo para uso das demais rotinas produzidas..................86
Figura A5 – Rotina para escrever no LCD...............................................................................88
Figura A6 – Mensagens no LCD..............................................................................................90
Figura A7 – Rotinas de apoio às de Mensagens.......................................................................95
Figura A8 – Rotina controle 1mm deslocamento da mesa móvel............................................98
Figura A9 – Rotina para conversão hexadecimal em ASCII....................................................99
Figura A10 – Rotina inversão das posições dos nibbles. .......................................................101
Figura A11 – Rotinas de atraso do motor e de 1ms................................................................103
Figura A12 – Forma de onda do sinal de clock do motor de passo........................................106
Figura A13 – Indicação do torque e velocidade de trabalho do sistema projetado................106
12
LISTA DE ABREVIATURAS
ASCII American Standard Code for Information Interchange, Código padrão
americano para troca de informações;
BIT BInary digiT, é menor unidade digital de informação;
BYTE É o agrupamento de 8 bits;
CISC Complex Instruction Set Computer, ou computador que faz uso de um
grande conjunto de instruções;
CPU Central Processing Unit, ou Unidade Central de Processamento;
DIP Dual-in-line package, invólucro de alguns circuitos integrados, os quais
têm pinos paralelos;
EPROM Eraseble PROM, é uma memória PROM apagável por luz ultravioleta.
E
2
PROM Memória EPROM apagável Eletricamente;
FLASH EEPROM Memória EEPROM com baixo tempo de acesso, da ordem de 100ns.
GND Ground, ou Terra da fonte de alimentação;
LCD Liquid Crystal Display, ou Display (ou visor) de Cristal Líquido;
LED Light Emitter Diode, ou diodo emissor de luz.
LIFO Last In First Out, ou é um procedimento operacional de manipulação de
dados, onde o último dado a entrar num dispositivo é o primeiro a sair.
I
2
C Inter-Integreted Circuit, é um protocolo de comunicação serial e
síncrono, para comunicação entre CIs.
I/O Input/Output, ou entrada/saída;
MCU Micro Controller Unit, ou microcontrolador;
MPU Micro Processor Unit, ou microprocessador;
NIBBLE É o agrupamento de 4 bits.
PC Program Counter, ou contador de programa.
PROM Programmable ROM ou memória somente de leitura programável.
RAM Random Access Memory, ou memória de acesso aleatório;
RISC Reduced Instruction Set Computer, ou computador que faz uso de um
reduzido conjunto de instruções;
ROM Read Only Memory, ou memória somente de leitura;
TTL Transistor-Transitor Logic, ou lógica construída a base de transistores;
13
RESUMO
O objetivo deste trabalho foi a construção de um circuito eletrônico
microcontrolado e programas assembly que suportam o controle do posicionamento de uma
câmara de ionização em relação a uma fonte radioativa. Para este banco de posicionamento
foi construída uma infra-estrutura mecânica, a qual comportou todo o circuito eletrônico e, um
motor de passo diretamente acoplado a uma haste rosqueada que, a cada fração de volta,
movimenta uma mesa a passos eqüidistantes.
Para este sistema foi construído três placas de circuito impresso, as quais alojam
todo o circuito eletrônico necessário, que são: a) a placa da fonte de alimentação; b) a placa de
circuito impresso principal (a que contém o microcontrolador PIC, a interface com o LCD, o
teclado, o banco de memória serial e conectores de entrada/saída para diversos fins); c) a
placa para interface com o motor de passo.
Em termos das rotinas em assembly foi desenvolvido uma rotina para o controle
da escrita no LCD (dado enviado serialmente, objetivando a otimização dos recursos do PIC),
a rotina para leitura do teclado e a rotina para o controle do motor de passo juntamente com a
indicação no LCD da posição onde a mesa móvel se encontra em cada momento do
processamento.
14
ABSTRACT
The objective was the construction of a microcontroller eletronic circuit and assembly
softwares that support the position control of a ionization chamber in relation radioactive
source. For this position bank was built a mechanical infrastructure, containing the entire
eletronic circuit and a step motor directly joined to a threaded pole, which move table by a
equidistant steps in each fraction of a turn.
For this system was built three Printed Circuit Board (PCB), containing the entire
electronic circuit needed, which are: a) the source power board; b) the main printed circuit
board (having the PIC microcontroller, the LCD interface, the keyboard, the serial memory
bank and the I/O socket for another purpouses; c) the board for interface with the step motor.
In terms of the assembly routines was developed the routine for the write control on
the LCD (data serial sended in order to optimize the PIC resources), the routine for the
keyboard read and the routine for the step motor control together with the indication on LCD
of the mobile table position at each moment of the process.
15
INTRODUÇÃO
Este projeto foi um passo intermediário para se ter um sistema automatizado das
medidas da carga elétrica (via eletrômetro) gerada no gás contido numa câmara de ionização.
Pela medida da carga elétrica, esta resultante da interação da radiação com o gás no interior
do detector, é possível a determinação da dose absorvida, a certa distância fonte-detector, a
qual é definida como a energia absorvida por unidade de massa do material absorvedor,
(Knoll, 1989, p.61). Um sistema de posicionamento fonte-detector é composto de uma
estrutura mecânica, contendo uma parte móvel (mesa), que se desloca devido ao acoplamento
a uma haste com rosca sem fim, acionada por um motor de passo, e um ponto de referência
(estático) onde se fixará um dos elementos, seja a fonte radioativa ou o detector.
Em termo eletro-eletrônico, foi: (a) utilizado um motor de passo híbrido, que é a
combinação dos tipos relutância variável e imã permanente, com enrolamentos unipolar,
alimentados em +12Vcc e um específico circuito de controle (driver); (b) construído uma
fonte de alimentação (GND, +5Vcc e +12Vcc); (c) construído um circuito contendo o
microcontrolador PIC16F877A (núcleo do projeto) com suporte a diversos periféricos, como
a interface com o LCD (hardware e software, transmissão serial dos dados), e as saídas para o
controle do motor de passo (clock e direção da rotação); e por fim, mas muito importante, (d)
desenvolvido várias rotinas em linguagem de programação assembly, as quais suportam todo
este projeto.
O objetivo foi, portanto, o desenvolvimento de um sistema de controle de
posicionamento, de alta precisão, entre uma câmara de ionização e uma fonte radioativa. Este
sistema de posicionamento será a infra-estrutura básica para se conseguir a automação plena
das medidas da carga elétrica, a qual guarda relação com a dose absorvida.
Este trabalho é composto de três capítulos. O primeiro, Revisão Bibliográfica,
proporcionou um suporte teórico à totalidade deste projeto, baseando-se nos dados
16
encontrados na literatura. O segundo, Materiais e Métodos, foi dedicado ao desenvolvimento
e construção da eletrônica (hardwares) e dos softwares necessários para a obtenção dos
resultados esperados. O terceiro, Resultados e Conclusão, foi apresentado a implementação
final do projeto (mecânico, eletrônico, softwares), que será a base aos futuros
desenvolvimentos, cujo escopo respalda na automação plena da coleta de dados.
17
Capítulo 1. REVISÃO BIBLIOGRÁFICA
Colocar-se-á em relevo neste capítulo os quesitos que suportem este primeiro
momento do projeto ora proposto. Deste modo, foi necessário um suficiente estudo (no limite
do devido) sobre o microcontrolador PIC16F877A, da Microchip, sobre o circuito integrado
74164 (registrador de deslocamento), sobre o Display de Cristal Líquido (LCD) e sobre o
motor de passo. Deve-se observar que o estudo sobre a memória serial 24LC256 e a
comunicação RS232 serão cumpridos na seqüência acadêmica deste curso.
1.1 O microcontrolador PIC16F877A
1
Um microcontrolador (MCU) é um componente eletrônico com vários recursos
integrados em um só invólucro
2
(DIP), o qual só realiza alguma tarefa se for devidamente
programado. A sua programação pode ser realizada utilizando uma linguagem de alto nível (à
luz da linguagem humana) ou de baixo nível (à luz da linguagem entendida pela máquina). A
linguagem assembly é uma linguagem de programação de baixo nível (tem relação direta com
a linguagem de máquina), a qual consome, caso construa-se eficientes rotinas, o menor espaço
da memória do microcontrolador – memória de programa, que é, por vezes, um recurso
escasso nesses dispositivos eletrônicos, e foi por isso que se escolheu esta linguagem para
trabalhar (Pereira, 2003).
1
Deve-se observar que a fonte bibliográfica primária referente a um específico componente eletrônico é o data
sheet produzido e editado pelo seu fabricante. O data sheet do PIC16F877A, da Microchip, é composto por 232
páginas contendo toda informação técnica que o fabricante julgou ser suficiente ao devido uso deste circuito
integrado. Então, neste texto, não poderia ser diferente, buscou os fundamentos técnicos do MCU no referido
data sheet, com suporte, também, em outras literaturas.
2
Um microcontrolador contém em um único circuito integrado todos os blocos funcionais de um
microprocessador (MPU) e bancos de memórias voláteis e não voláteis e vários dispositivos de I/O. É um
verdadeiro microcomputador dentro de um único DIP (Zanco, 2005, p.33).
18
O microcontrolador participa de todas as operações deste projeto, dado que é o
cerne do mesmo. Mas focou-se no estritamente necessário, pois ele é muito mais do que se vê
aqui.
1.1.1 Recursos disponíveis
3
¾ Microcontrolador de 40 pinos;
¾ Barramento de programa de 14 linhas (uma linha para cada bit a ser transferido);
¾ Barramento de dados de 8 linhas ou 8 bits;
¾ PC (Program Counter) de 13 bits para endereçamento da memória de programa;
¾ Pilha (Stack) de 8 níveis;
¾ Set de 35 instruções;
¾ 33 pinos de I/O em 5 portas, ou PORTA (RA
5
a RA
0
), PORTB (RB
7
a RB
0
),
PORTC (RC
7
a RC
0
), PORTD (RD
7
a RD
0
), PORTE (RE
2
a RE
0
);
¾ Suporta 15 tipos de interrupções do processamento, por devidas solicitações, as
quais desviam o processamento para a rotina que as atendem;
¾ Memória de programa, FLASH E
2
PROM de 8K x 14 bits (palavras de 14 bits por
posição endereçada);
¾ Memória de dados voláteis, RAM de 368 x 8 bits (para uso geral pelo usuário,
sendo que cada endereço armazena um byte). Deve-se observar que toda a
memória RAM é composta por 512 x 8 bits (endereços de 000h a 1FFh), sendo os
368 supracitado, 77 x 8 bits para registradores especiais ou SFR, Special Functions
Registers (alguns deles são espelhados) e 19 são indisponíveis. Os 48 restantes não
são fisicamente implementados e nestes estão contidos os mencionados
registradores espelhados.
3
Microchip, 2003, p.1-5
19
¾ Memória de dados não voláteis, EEPROM de 256 x 8 bits (cada endereço
armazena um byte) [recurso não utilizado neste projeto, pois esta quantidade
endereçada é insuficiente, por isso foi necessário o uso de um banco de memória
EEPROM externa];
¾ Três timers, 2 de 8 bits [Timer0 (TMR0)] e [Timer2 (TMR2)] e 1 de 16 bits
[Timer1 (TMR1)] [recursos não utilizados neste projeto];
¾ Comunicações seriais SPI, I
2
C e USART [nesta etapa do trabalho nenhum desses
recursos serão utilizados, mas, a posteriori, a comunicação I
2
C (comunicação com
a memória EEPROM serial 24LC256) e a USART (comunicação com o PC),
provavelmente, serão;
¾ Oito conversores A/D de 10 bits e dois módulos comparadores analógicos
[recursos não utilizados neste projeto];
¾ Dois módulos CCP (Capture, Compare e PWM) [recursos não utilizados neste
projeto];
1.1.2 Características elétricas
4
¾ Tensão de alimentação: de 4,0V a 5,5Vcc para clock de até 20 MHz;
¾ Tensão de alimentação: de 2,0 a 5,5Vcc para clock de até 4 MHz, mas deve-se
verificar se a função BOR (Brown-out Reset) está ativa, pois esta função é
acionada quando 3,65 V
BOR
4,35 V;
¾ Tensão máxima no pino V
DD
(alimentação positiva) em relação ao V
SS
: -0,3 a 7,5V
¾ Temperatura ambiente, de trabalho: -55
o
a +125
o
C;
¾ Temperatura de armazenamento: -65
o
a +150
o
C;
¾ Dissipação máxima de energia: 1,0 W;
4
Microchip, 2003, p.173.
20
¾ Corrente máxima de saída do pino Vss (GND): 300 mA;
¾ Corrente máxima que entra no pino V
DD
(alimentação positiva): 250 mA
¾ Corrente máxima de entrada ou de saída em algum pino de I/O: 25 mA;
¾ Corrente máxima de entrada e saída das Portas de I/O: 200 mA
1.1.3 Arquitetura externa e interna
1.1.3.1 Lay-out externo
O circuito integrado do MCU utilizado foi confeccionado em um DIP de 40 pinos
(Figura 1.1), sendo que 2 destes pinos (V
SS
) são utilizados para ligar o terra (GND), 2 para
ligar o terminal positivo da fonte de alimentação (V
DD
) [de +2,0 a +5,5Vcc, dependendo da
freqüência do clock e da função BOR (Brown-out Reset)], 1 para Reset externo (/MCLR), 2
para o sinal de clock ou relógio (OSC1/CLKIN e OSC2/CLKOUT), de até 20 MHz (foi usado
neste projeto um cristal de 4MHz), e os demais 33 pinos são terminais ou portas para I/O
(entrada e saída de dados) [PORTA (RA
5
a RA
0
), PORTB (RB
7
a RB
0
), PORTC (RC
7
a RC
0
),
PORTD (RD
7
a RD
0
), PORTE (RE
2
a RE
0
)];
Figura 1.1 – Lay-out externo do microcontrolador PIC16F877A (Microchip, 2003, p.3).
21
1.1.3.2 Lay-out interno e processamento básico
A Figura 1.2, abaixo, mostra os detalhes da arquitetura interna do microcontrolador
PIC16F877A os quais o fabricante julgou serem suficientes para o seu uso.
Figura 1.2 – Lay-out interno do microcontrolador PIC16F877A (Microchip, 2003, p.7).
22
O microcontrolador PIC16F877A é uma arquitetura baseada na tecnologia RISC
5
que reconhece apenas 35 instruções, cujas codificações plenas passam por um barramento
interno (Program Bus) de 14 linhas (cada linha, ou trilha, transporta um bit) para a
transferência interna do OPCODE [código de operação e operando (normalmente simbolizado
pela letra k, denotando um valor numérico, ou f, denotando o nome ou endereço de um
registrador definido ou não pelo programador, em cujo interior tem-se bits simbolizados pela
letra b, que denota a posição do bit dentro do referido registrador f.)]. Há uma
correspondência direta entre o OPCODE e uma determinada instrução. O código de operação
também é conhecido por código objeto (Maldonado, 1990, p.62 e 67).
O programa do usuário é carregado na memória de programa, que é uma memória
FLASH EEPROM de 8k x 14 bits (memória não volátil, ou seja, sua informação não se perde
quando a máquina é desligada), representando 8.192 posições endereçadas (correspondem aos
endereços de 0000 a 1FFF, em hexadecimal), onde armazenam em cada uma dessas posições
14 bits (OPCODE + operando), os quais quando devidamente endereçados saem pelo
barramento de programa.
O contador de programa (PC, Program Counter) é um contador síncrono cuja
contagem é seqüencial e crescente. Esta contagem começa imediatamente após receber um
sinal de reset, nível lógico baixo no pino 1 ou /MCLR, em 0000h (Oliveira, 1983, p.105). A
seqüência de sua contagem só é quebrada quando uma instrução que promova algum salto for
executada. As saídas desse contador de programa estão diretamente associadas ao
endereçamento da memória de programa (Oliveira, 1986, p.35).
Uma vez que um OPCODE e operando se encontram no barramento de programa,
ele (o OPCODE) deverá ser decodificado para que a CPU (ou os blocos funcionais que
correspondem às atividades executadas por uma CPU) “saiba” o que será executado.
5
Uma boa discussão sobre as tecnologias RISC e CISC pode ser encontrada em Tanenbaum, 2001, p.27.
23
Inicialmente, e temporariamente, todo o OPCODE e operando (ou código objeto e operando)
ficam armazenados no registrador de instrução (IR), de onde os bits correspondentes à
identificação da instrução (OPCODE ou código objeto) são apresentados às entradas do
dispositivo digital combinacional denominado por decodificador de instrução e controle, o
qual, após realizar a decodificação da instrução, ou seja, extrair do código o seu significado,
promoverá a geração dos sinais de controle necessários à plena execução da instrução em
voga, procedimento conhecido por ciclo de busca (fetch) e execução de uma instrução (Tocci,
2003, p.694).
O PIC16F877A tem oito níveis de pilha (stack). Entende-se por pilha um lugar
construído com memória volátil onde se guardará o endereço de retorno ao programa
principal quando uma instrução quebrar a seqüência, porém, temporária, da execução desse
programa. O mecanismo de funcionamento da pilha é LIFO, ou Last In First Out, ou seja, o
último dado a entrar na pilha será o primeiro a sair dela (Taub, 1982, p.410). Como a pilha do
MCU em voga só tem oito níveis, estes passam a ser um ponto em que o projetista deve ter
atenção para não superá-los, pois caso ocorra, perder-se-á o devido retorno ao programa
principal. As instruções que usam a pilha são: CALL, RETLW, RETURN e solicitações de
interrupção, cujo retorno ao fluxo normal do programa se dá pela instrução RETFIE.
A arquitetura interna do PIC16F877A contém uma memória RAM (memória
volátil, ou seja, sua informação é perdida quando a máquina é desligada). Esta memória foi
dividida em 4 partes, ou 4 bancos, denominados por Banco 0 a Banco 3 (selecionados pelos
bits RP1 e RP0 de um registrador chamado de STATUS, que mantém correspondência binária
e decimal). Cada um desses bancos comporta até 128 bytes endereçáveis. Os endereços mais
baixos da RAM foram reservados e receberam funções e nomes predeterminados pelo
fabricante. São os chamados Registradores Especiais (ou Special Function Registers, SFRs).
Os demais endereços ou são indisponíveis (inacessíveis), ou são de propósitos gerais, estes
24
chamados de Registradores de Uso Geral (General Purpose Registers), os quais são usados
livremente pelo programador, nomeando-os de acordo com suas específicas funções
condizentes à realização do programa que dá solvência a um determinado problema
(Micrichip, 2003, p.16, 17 e 22).
O registrador W (Work, que noutras tecnologias é denominado de Acumulador)
participa em muitas das instruções do PIC. Observe a sua proximidade, no lay-out, com a
ULA (Unidade Lógica e Aritmética). A ULA, como o próprio nome já sugere, é responsável
por realizar as operações lógicas e aritméticas, além das rotações (bit-a-bit) à esquerda e à
direita de um byte residente em um registrador.
As portas de I/O promovem os meios necessários para o componente se
comunicar com o mundo exterior. Através delas o MCU pode ler um dado externo, trazendo-o
para o seu interior e processando-o. O MCU pode, também, enviar um dado para fora, o que é
o mesmo que escrever este dado num dispositivo de saída, quando da execução de alguma
tarefa. O PIC16F877A tem 33 pinos com estas funções de I/O.
O reset do MCU (PC Å 0000h) pode ocorrer através do acionamento de um botão
externo ao microcontrolador, de tal forma que, ao ser acionado, faz com que o nível lógico no
pino 1 ( /MCLR) vá para zero (ou nível lógico baixo em lógica positiva). O reset também
ocorre no ato de ligar a máquina, que é o POR (Power-on Reset), ou ainda, caso a tensão de
alimentação caia abaixo de 4,0 V (tipicamente, caso configurado para isto) por um tempo
próximo a 100µs, que é o BOR (Brown-out Reset). O WDT (ou Watchdog Timer), é um
temporizador cuja principal característica é evitar que o sistema trave por problemas no
software. Caso esta função esteja ativa e não receber em tempos predeterminados uma
instrução que zere este contador (instrução CLRWDT) e expirar a sua contagem, ou ocorrer o
chamado time-out, implicará no reset do microcontrolador, o que é o mesmo que reiniciar o
programa (Micrichip, 2003, p.146 e 148).
25
Desta maneira, mostrou-se o interior do MCU e também, sucintamente, como seus
blocos participam dos processamentos. Na seqüência, serão apresentados os ciclos de
máquina e alguns registradores especiais (ou Special Function Registers, SFRs) - não todos,
mas os que suportam este projeto -, e, por fim, mas muito importante, um estudo sobre as
instruções que o MCU reconhece e executa.
1.1.4 O clock e os ciclos de máquina
O sinal de clock é fundamental para o funcionamento do microcontrolador. Ele é a
referência de tempo para todo o sistema. Sua freqüência f
OSC
(freqüência do oscilador, ou do
cristal
6
, injetada no pino 13 – OSC1/CLKIN) é, internamente ao MCU, dividida por quatro
para gerar os sinais de clocks defasados e identificados por Q1, Q2, Q3 e Q4 (quatro ondas
quadradas) (Souza, 2005, p.24). O contador de programa (PC) é incrementado (ou seja, é
somado 1 ao seu valor presente) na fase Q1 (instante em que já existe uma instrução sendo
processada) e, quando estiver na fase Q4, momento em que a instrução atual terminará de ser
processada, o PC apontará, ou endereçará, para uma nova instrução, a qual será copiada
(transmitida) da memória de programa para o registrador de instrução (IR) nesta fase Q4. A
nova instrução, uma vez armazenada no registrador de instrução, será decodificada (gerando
todos os sinais de controles necessários à sua plena execução) e executada durante o ciclo de
máquina de Q1 a Q4. Este procedimento de buscar uma instrução em um ciclo de máquina e
executá-la em outro ciclo de máquina, juntamente com a busca da próxima instrução a ser
executada, é conhecido por PIPELINE (Tanenbaum, 2001, p.25). Então, em um determinado
ciclo de máquina busca-se uma instrução (Ciclo de Busca da instrução ou FETCH),
6
Os cristais de quartzo quando submetidos a compressão geram uma d.d.p., e quando submetidos a uma
diferença de potencial elétrico eles são deformados mecanicamente (efeito piezoelétrico). As dimensões
mecânicas da lâmina do cristal caracterizam a freqüência de oscilação (ressonância) desse cristal. Esta freqüência
de ressonância está compreendida entre 1 kHz até 200 MHz, sendo que até 15 MHz, os cristais trabalham na
26
executando-a no ciclo de máquina imediatamente adjacente (Ciclo de Execução da instrução).
A Figura 1.3 exemplifica o que foi apresentado acima.
Figura 1.3 – Ciclos de máquina – busca e execução de instruções, (Souza, 2005, p.25)
Para calcular o tempo de cada ciclo de máquina (em cada ciclo é buscada e
executada uma instrução), tendo como base o dispositivo oscilador, por exemplo, um cristal,
basta fazer o seguinte cálculo:
1 Onde: T
cy
= Tempo de cada Ciclo de Máquina = 4 x Tosc
T
cy
=
( fosc/4 ) Tosc = Período do oscilador = 1/ fosc
fosc = Freqüência do oscilador (cristal)
Assim sendo, como foi usado nesse projeto um cristal cuja freqüência é de 4
MHz, implica em um T
CY
de 1 µs (Souza, 2005, p.24), que é o tempo necessário para a plena
execução da maioria das instruções, pois algumas poucas instruções utilizam dois ciclos de
máquina. Este dado é útil, principalmente, quando o processamento tem compromisso com
freqüência fundamental, enquanto os que trabalham acima dessa freqüência operam com algum dos harmônicos
27
acontecimentos externos, ou com certos instantes em que um evento acontece, nos quais o
MCU deve ler algum dado vindo de fora para compor ao processamento, ou, ainda, na
construção de sub-rotinas de atraso (delay).
1.1.5 Memória de dados
O fabricante Microchip construiu o banco de Registradores Especiais e de
Propósito Geral em uma memória RAM estática de 512 x 8 bits (endereços de 000h até
1FFh), sendo que 368 desses endereços são para os Registradores de Propósito Geral. Estes
são os lugares onde os programadores constróem suas variáveis ou são os registradores que
são nomeados pelos programadores de forma a que sejam dedicados e orientados à solução de
um problema.
A memória RAM foi dividida em 4 bancos (Banco 0 a Banco3) selecionáveis
pelos bits RP1 e RP0 do registrador STATUS. Assim 00 (RP1=0 e RP0=0) selecionam o
Banco 0; 01 selecionam o Banco1; 10 selecionam o Banco 2; e, por fim, 11 selecionam o
Banco 3. A Figura 1.4 detalha melhor esta memória com os seus respectivos endereços em
hexadecimal e nomes dos registradores especiais, ou SFRs (Special Function Registers),
fornecidos pelo próprio fabricante do MCU (Souza, 2006, p.30).
ímpares. (Gomes, 1985, p.411-413).
28
Tabela 1.1 – Registradores Especiais e de Propósito Geral – RAM (Microchip, 2003, p.17)
Mapa da memória RAM do PIC16F877A – Registradores Especiais e de Propósito Geral
Reg. End. Reg Reg. End. Reg Reg. End. Reg Reg. End. Reg
INDF
(*)
00h INDF
(*)
80h INDF
(*)
100h INDF
(*)
180h
TMR0 01h OPTION_REG 81h TMR0 101h OPTION_REG 181h
PCL 02h PCL 82h PCL 102h PCL 182h
STATUS 03h STATUS 83h STATUS 103h STATUS 183h
FSR 04h FSR 84h FSR 104h FSR 184h
PORTA
(1)
05h TRISA
(1)
85h 105h 185h
PORTB
(1)
06h TRISB
(1)
86h PORTB 106h TRISB 186h
PORTC 07h TRISC 87h 107h 187h
PORTD 08h TRISD 88h 108h 188h
PORTE 09h TRISE 89h 109h 189h
PCLATH 0Ah PCLATH 8Ah PCLATH 10Ah PCLATH 18Ah
INTCON 0Bh INTCON 8Bh INTCON 10Bh INTCON 18Bh
PIR1 0Ch PIE1 8Ch EEDATA 10Ch EECON1 18Ch
PIR2 0Dh PIE2 8Dh EEADR 10Dh EECON2 18Dh
TMR1L 0Eh PCON 8Eh EEDATH 10Eh
Reservado
(2)
18Eh
TMR1H 0Fh 8Fh EEADRH 10Fh
Reservado
(2)
18Fh
T1CON 10h 90h 110h 190h
TMR2 11h SSPCON2 91h 111h 191h
T2CON 12h PR2 92h 112h 192h
SSPBUF 13h SSPADD 93h 113h 193h
SSPCON 14h SSPSTAT 94h 114h 194h
CCPR1L 15h 95h 115h 195h
CCPR1H 16h 96h 116h 196h
CCP1CON 17h 97h 117h 197h
RCSTA 18h TXSTA 98h 118h 198h
TXREG 19h SPBRG 99h 119h 199h
RCREG 1Ah 9Ah 11Ah 19Ah
CCPR2L 1Bh 9Bh 11Bh 19Bh
CCPR2H 1Ch CMCON 9Ch 11Ch 19Ch
CCP2CON 1Dh CVRCON 9Dh 11Dh 19Dh
ADRESH 1Eh ADRESL 9Eh 11Eh 19Eh
ADCON0 1Fh ADCON1 9Fh
Registrador
de Propósito
Geral – 16
Bytes
11Fh
Registrador de
Propósito Geral
– 16 Bytes
19Fh
20h A0h 120h 1A0h
Registrador de
Propósito Geral
– 80 Bytes
EFh
Registrador
de Propósito
Geral – 80
Bytes
16Fh
Registrador de
Propósito Geral
– 80 Bytes
1Efh
F0h 170h 1F0h
Registrador
es de
Propósito
Geral – 96
Bytes
7Fh
Acesso
70h – 7Fh
FFh
Acesso
70h – 7Fh
17Fh
Acesso
70h – 7Fh
1FFh
Banco 0 Banco 1 Banco 2 Banco 3
Local na memória de dados não implementado, contém nível lógico ´0´.
(*) De fato, não é um registrador implementado fisicamente
Notas: (1) Estes registradores não foram implementados no PIC16F876A.
(2) Estes registradores são reservados, mantenha-os em nível lógico baixo.
29
1.1.6 Alguns Registradores Especiais
O microcontrolador PIC16F877A trabalha com registradores orientados a bit, ou
seja, um determinado registrador além de ter um nome para “comunicação” com ele (ler ou
escrever neste registrador como um todo) cada um de seus bits, também, recebe um nome e
pode ser manipulado individualmente (set e/ou reset de um determinado bit).
Os registradores especiais podem ser agrupados em:
a) De uso geral; [tratar-se-á do STATUS, OPTION_REG e do INTCON]
b) Portas; [tratar-se-á das portas e registradores de configuração das portas,
ou sejam, dos TRISx]
c) Temporizadores (ou timers); [não serão tratados neste trabalho]
d) Interrupções; [não serão tratadas neste trabalho]
e) Conversão A/D; [não será tratada neste trabalho]
f) Compare / Capture / PWM, ou CCP; [não serão tratados neste trabalho]
g) EEPROM; [não será tratada neste trabalho]
h) SSP, (Synchronous Serial Port), registradores para comunicação serial
através dos protocolos SPI e I
2
C. O I
2
C é utilizado para comunicação
com a memória EEPROM 24LC256, e será aplicado na seqüência
acadêmica deste curso.
i) USART (Universal Synchronous Asynchronous Receiver Transmitter);
[não será tratado neste momento]
j) Comparadores, [não serão tratados neste trabalho]
30
1.1.6.1 Registradores Especiais de uso geral
a) Registrador STATUS
Esse registrador serve para mostrar o estado da ULA, a forma do último reset e
também para configurar a página de programação atual, quando necessário.
Tabela 1.2 – Registrador STATUS (Microchip, 2006, p.22)
Registrador: STATUS Endereços: 03h, 83h, 103h e 183h
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R R R/W R/W R/W
IRP RP1 RP0 /TO /PD Z DC C
Condição após reset por Power-On Reset (POR)
0 0011XXX
X = irrelevante.
IRP: Bit seletor de banco de memória (é usado para endereçamento indireto)
0 = Banco 0 e 1 ( 00h – FFH ).
1 = Banco 2 e 3 ( 100h – 1FFH ).
RP1 e RP0: Bits para selecionar o banco de memória ativo (para endereçamento direto)
00 = Banco 0 ( 00h – 7Fh).
01 = Banco 1 ( 80h – FFh).
10 = Banco 2 (100h – 17Fh).
11 = Banco 3 (180h – 1FFh). Obs.: Cada banco possui 128 bytes
/TO: Bit que indica a ocorrência de time-out (ou NOT_TO)
0 = indica que ocorreu o estouro de WatchDog Timer (WDT).
1 = Após um power-up, ou após a execução de uma instrução CLRWDT ou SLEEP.
/PD: Bit que indica a ocorrência de power-down (ou NOT_PD)
0 = Indica que a instrução SLEEP foi executada.
1 = Após um power-up, ou após a execução de uma instrução CLRWDT.
31
Z : Bit que indica uma operação cujo resultado foi igual a Zero
0 = Indica que o resultado da última operação (lógica ou aritmética) não foi zero.
1 = Indica que o resultado da última operação (lógica ou aritmética) resultou em zero.
DC: Bit de Digit Carry / borrow
7
0 = A última operação da ULA não ocasionou um estouro de dígito.
1 = A última operação da ULA ocasionou um transporte (carry) entre o bit 3 e 4, isto
é, o resultado ultrapassou os 4 bits menos significativos.
C: Bit de Carry / borrow:
0 = A última operação da ULA não ocasionou um estouro (carry).
1 = A última operação da ULA ocasionou um estouro (carry) no bit mais
significativo, isto é, o resultado ultrapassou os 8 bits disponíveis.
b) Registrador OPTION_REG
Esse registrador é utilizado para configurar alguns periféricos internos do MCU.
Tabela 1.3 – Registrador OPTION_REG (Microchip, 2006, p.23)
Registrador: OPTION_REG Endereços: 81h e 181h
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R/W R/W R/W R/W R/W
/RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
Condição após reset por Power-On Reset (POR)
1 1 111111
/RBPU: Bit de habilitação dos pull-ups internos da PORTB:
7
Para /borrow (empréstimo, ou vem-um) a sinalização é contrária. Uma subtração é executada por uma adição
do minuendo ao complemento a dois do subtraendo. Ao deslocar bit-a-bit o conteúdo de um registrador
(instruções RRF e RLF). Os bit C assume diversos valores, seja zero ou um advindo de uma fonte. Os bits C e
DC operam como um /borrow e /digit borrow, respectivamente nas subtrações.
32
0 = Pull-ups internos da PORTB habilitados em todos os seus pinos.
1 = Pull-ups internos da PORTB desabilitados.
INTEDG: Bit de seleção da transição (edge) ou borda que gerará uma interrupção externa
pelo pino RB0/INT.
0 = A interrupção ocorrerá na borda de descida.
1 = A interrupção ocorrerá na borda de subida.
T0CS: Bit de seleção da fonte de clock que incrementará o temporizador TMR0.
0 = TMR0 será incrementado internamente pelo clock da máquina.
1 = TMR0 será incrementado externamente pela mudança no pino RA4/T0CKl.
T0SE: Bit de seleção da borda (edge) que incrementará o TMR0, quando T0CS =1.
0 = O incremento ocorrerá na borda de subida no pino RA4/T0CKl.
1 = O incremento ocorrerá na borda de descida no pino RA4/T0CKl..
PSA: Bit que configura a qual dispositivo será aplicação o prescaler.
0 = O prescaler será aplicado ao módulo TMR0.
1 = O prescaler será aplicado ao WDT.
PS2: PS0 Bits para a seleção da taxa do prescaler.
Tabela 1.4 – Bits PS2, PS1 e PS0
Bits 2, 1, 0 TMR0 WDT
0 0 0 1:2 1:1
0 0 1 1:4 1:2
0 1 0 1:8 1:4
0 1 1 1:16 1:8
1 0 0 1:32 1:16
1 0 1 1:64 1:32
1 1 0 1:128 1:64
1 1 1 1:256 1:128
33
1.1.6.2 Registrador INTCON
Esse registrador serve para configurar e identificar as interrupções.
Tabela 1.5 – Registrador INTCON (Microchip, 2006, p.24)
Registrador: INTCON Endereços: 0BH e 8BH
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R/W R/W R/W R/W R/W
GIE EEIE T01E INTE RBIE T0IF INTF RBIF
Condição após reset por Power-On Reset (POR)
0000000X
X = irrelevante.
GIE: Habilitação geral das interrupções (chave geral):
0 = Nenhuma interrupção será tratada.
1 = As interrupções habilitadas individualmente serão tratadas.
EEIE: Habilitação da interrupção de final de escrita na EEPROM (chave individual)
0 = A interrupção não será tratada.
1 = A interrupção será tratada.
T0IE: Habilitação da interrupção de estouro de TMR0 (chave individual):
0 = A interrupção não será tratada.
1 = A interrupção será tratada
INTE: Habilitação da interrupção externa no pino RB0 (chave individual)
0 = A interrupção não será tratada.
1 = A interrupção será tratada
RBIE: Habilitação da interrupção por mudança de estado nos pinos RB4 a RB7 (chave
individual)
0 = A interrupção não será tratada.
1 = A interrupção será tratada.
T0IF: Identificação da interrupção de estouro de TMR0:
0 = Esta interrupção não ocorreu.
34
1 = Esta interrupção ocorreu.
INTF: Identificação da interrupção externa no pino RB0:
0 = Esta interrupção não ocorreu.
1 = Esta interrupção ocorreu.
RBIF: Identificação da interrupção por mudança de estado nos pinos RB4 a RB7:
0 = Esta interrupção não ocorreu.
1 = Esta interrupção ocorreu.
1.1.6.3 Registradores Especiais, PORTx e TRISx
8
Estes registradores são muito importantes para comunicação externa da MCU. Os
registradores TRISx configuram os registradores das portas PORTx (sendo que x pode ser de
A até E). Configurar uma porta é o mesmo que carregar em TRISx o perfil de trabalho desta
porta, ou seja, como cada um de seus bits (ou pinos) trabalharão, se como entrada ou como
saída. Os registradores PORTx enviam dados para fora do MCU (pinos configurados como
saída) ou recebem dados do exterior para serem processados (pinos configurados como
entrada).
Para que um registrador TRISx configure os pinos da porta PORTx como entrada
ou saída, deve-se colocar “1” em um bit do TRISx e o pino referente à posição deste “1” na
PORTx ficará configurado como entrada. Igualmente se faz para configurá-lo para saída, mas,
agora, em vez de “1” é “0”. Esta configuração das portas não se faz em um bit somente, e sim
em todo o byte referente a uma determinada porta. Para configurar a PORTA, deve ser
utilizado o TRISA, e para configurar o PORTB, deve ser utilizado o TRISB, e assim
sucessivamente.
8
Microchip, 2006, p.41-50
35
Tabela 1.6 – Registrador TRISx
Registrador: TRISx Endereços: Ref. a cada TRISx
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R/W R/W R/W R/W R/W
Ref.
Rx7
Ref.
Rx6
Ref.
Rx5
Ref.
Rx4
Ref.
Rx3
Ref.
Rx2
Ref.
Rx1
Ref.
Rx0
Tabela 1.7 – Registrador PORTx
Registrador: PORTx Endereços: Ref. A cada PORTx.
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
R/W R/W R/W R/W R/W R/W R/W R/W
Rx7 Rx6 Rx5 Rx4 Rx3 Rx2 Rx1 Rx0
As portas PORTA, e PORTE não têm todos os bits: a primeira comporta RA5 a
RA0; a segunda comporta apenas RE2 a RE0. Deve-se observar que a PORTE utiliza os bits 4
a 7 para outras sinalizações, as quais não serão tratadas aqui. As demais portas, isto é, as
portas PORTB, PORTC e PORTD encerram, cada uma delas, todos os seus 8 bits.
Os registradores especiais mostrados acima suportam quase a totalidade do
projeto, exceto que os registradores envolvidos na realização do protocolo de comunicação
I
2
C, utilizados na sub-rotina de leitura/escrita de dados na memória serial 24LC256
(fabricante, Microchip), serão apresentados no momento da construção da referida sub-rotina,
enfocadas na seqüência acadêmica deste curso.
1.1.7 A Memória de Programa e a Pilha (Stack)
A Figura 1.4 mostra a estrutura da memória de programa e da pilha. A pilha é um
lugar em memória RAM onde se carrega temporariamente o endereço de retorno ao programa
principal após o MCU ter executado uma instrução como, por exemplo, o CALL, ou atendeu
a um pedido de interrupção, ambos quebrando a seqüência normal do processamento. A pilha
36
trabalha sob o procedimento operacional designado por LIFO, ou o último dado a entrar na
pilha é o primeiro a sair dela. Deve-se observar que a pilha somente tem oito níveis, o que é
um agravante e deve-se atentar para que isso não cause um problema real ao projeto.
Figura 1.4 – Memória de Programa e Pilha. (Microchip, 2003, p.15)
O MCU, quando é resetado, inicia a contagem do PC em 0000h. Este contador
endereça a memória de programa e a cada 1µs (quando o cristal é de 4MHz) ele é
incrementado, apontando para a próxima instrução ou para o próximo endereço da memória
de programa. Em cada endereço reside um OPCODE (ou código objeto) e o seu operando. O
endereço 0004h é onde se inicia a construção da rotina para o atendimento de uma
interrupção, como pode ser verificado na Figura 1.4.
37
A memória de programa do PIC16F877A é de 8k x 14 bits (ou 8k palavras de 14
bits), o que é suficiente para a confecção deste projeto.
1.1.8 Conjunto das instruções
As instruções assembly, da família PIC da Microchip, foram construídas apoiadas
em mnemônicos que facilitam ao programador nessa linguagem a se lembrar do que cada
instrução de fato realiza. Para este fim, deve-se reconhecer o significado de algumas letras
incorporadas aos mnemônicos, como: W, diz respeito ao registrador Work; F, de File, diz
respeito, genericamente, a algum dos registradores, sendo que quando for minúsculo (f)
refere-se ao conteúdo do registrador F; L, de Literal, refere-se a um valor numérico que fará
parte da operação realizada pela instrução; d (minúsculo) é o lugar onde o resultado da
operação será armazenado - se d=0 implica que o resultado da operação será armazenado em
W e se for 1 será armazenado no registrador F indicado na própria instrução; B, de Bit -
quando maiúsculo, o B compõe o nome da instrução, ou o seu mnemônico, e quando
minúsculo o b refere-se a um bit específico dentro do byte e, portanto, é o argumento da
instrução; T, de Test, é usado no mnemônico de algumas instruções para indicar que a
instrução realiza um teste de bit em um determinado registrador e em um bit específico deste
registrador; S, de Skip (salto) ou Set (forçar valor para 1) - aqui o fabricante usou a mesma
letra para dois sentidos diferentes, resta ao programador somente se acostumar com as
instruções que assim tratam; C, de Clear - refere-se ao reset de um bit (ou fazê-lo passar ao
nível lógico baixo, ou zero); e, por fim, Z, de Zero - caso o resultado de uma operação seja
zero, então Z=1 no registrador STATUS (lembrando que algumas instruções promovem
desvios sob esta condição ter sido verdadeira).
Os outros termos utilizados referem-se às ações realizadas pelas instruções, como
mostrados abaixo.
38
ADD: Soma aritmética;
AND: Lógica E;
CLR: Zera o conteúdo, ou reseta;
COM: Complementa um registrador;
DEC: Decrementa um registrador, ou subtrai 1 desse registrador;
INC: Incrementa um registrador, ou soma 1 a este registrador;
IOR: Lógica OU;
MOV: Mover, ou melhor, copia um valor para algum lugar;
RL: rodar 1 bit à esquerda (Rotation Left);
RR: rodar 1 bit à direita (Rotation Right);
SUB: Subtração aritmética;
SWAP: Inversão de nibbles, da parte alta para a parte baixa e vice-versa, de um
registrador;
XOR: Lógica OU EXCLUSIVO.
O PIC16F877A é uma arquitetura RISC, como já foi dito, e apenas 35 instruções
assembly são reconhecidas por ele, as quais são mostradas na seqüência (Microchip, 2006,
p.159-164)
Tabela 1.8 – Instruções do PIC – Operações orientadas a bit.
Operações orientadas a bit.
14 bits de códigoInstrução Argumentos,
operandos
Operação Simbólica Ciclos de
máquina
MSB LSB
Flags
afetados
BCF f,b Reseta o bit b do reg. f 1 01 00bb bfff ffff
-
BSF f,b Seta o bit b do reg. f 1 01 01bb bfff ffff
-
BTFSC f,b Testa o bit b do reg. f e
salta a próxima instrução
se ele for zero.
1 01 10bb bfff ffff
-
BTFSS f,b Testa o bit b do reg. f e
salta a próxima instrução
se ele for um.
1 01 11bb bfff ffff
-
39
Tabela 1.9 – Instruções do PIC – Operações para diversos controles.
Operações para diversos controles
14 bits de códigoInstrução Argumentos,
operandos
Operação Simbólica Ciclos de
máquina
MSB LSB
Flags
afetados
CLRW W Å reseta W 1 00 0001 0000 0011 Z
NOP
No Operation, perde 1µs
qdo. cristal for de 4MHz.
1 00 0000 0xx0 0000
CALL K Chama sub-rotina pelo
rótulo K.
2 10 0kkk kkkk kkkk
CLRWDT WDT Å reseta contador
WDT.
1 00 0000 0110 0100 /TO, /PD
GOTO K Vá para endereço K ou
rótulo K.
2 10 1kkk kkkk kkkk
RETFIE Retorna após atendimento
a uma interrupção.
2 00 0000 0000 1001
RETLW K Retorna de uma sub-rotina
fazendo W Å K
2 11 01kk kkkk kkkk
RETURN Retorna de uma sub-rotina 2 00 0000 0000 1000
SLEEP Põe o PIC na condição de
economia de energia,
mode standby.
2 00 0000 0110 0011 /TO, /PD
x = don´t care, ou irrelevante.
Tabela 1.10 – Instruções do PIC – Operações orientadas a byte.
Operações para controles diversos – operações orientadas a byte
14 bits de códigoInstrução Argumentos,
operandos
Operação Simbólica Ciclos de
máquina
MSB LSB
Flags
afetados
ADDWF f,d d Å W + f 1 00 0111 dfff ffff C, DC, Z
ANDWF f,d d Å W AND f 1 00 0101 dfff ffff Z
CLRF f F Å reseta f 1 00 0001 1fff ffff Z
COMF f,d d Å complementa f 1 00 1001 dfff ffff Z
DECF f,d d Å f – 1 1 00 0011 dfff ffff Z
DECFSZ f,d d Å f – 1 e salta próxima
instrução se esta subtração
resultou em zero.
1 qdo não
pula;
2 qdo pula.
00 1011 dfff ffff
-
INCF f,d d Å f + 1 1 00 1010 dfff ffff Z
INCFSZ f,d d Å f + 1 e salta próxima
instrução se esta soma
resultou em zero.
1 qdo não
pula;
2 qdo pula.
00 1111 dfff ffff
-
IORWF f,d d Å W OR f 1 00 0100 dfff ffff Z
MOVF f,d d Å f 1 00 1000 dfff ffff Z
MOVWF f f Å W 1 00 0000 1fff ffff
-
RLF f,d Rotaciona o reg. f um bit
à esquerda, com o carry.
1 00 1101 dfff ffff C
RRF f,d Rotaciona o reg. f um bit
à direita, com o carry.
1 00 1100 dfff ffff C
SUBWF f,d d Å f – W 1 00 0010 dfff ffff C, DC, Z
SWAPF f,d Troca de nibbles em f. 1 00 1110 dfff ffff
-
XORWF f,d d Å W XOR f 1 00 0110 dfff ffff Z
40
Tabela 1.11 – Instruções do PIC – Operações com valores numéricos.
Operações com valores numéricos.
14 bits de códigoInstrução Argumentos,
operandos
Operação Simbólica Ciclos de
máquina
MSB LSB
Flags
afetados
ADDLW k W Å W + k 1 11 111x kkkk kkkk C, DC, Z
ANDLW k W Å W AND k 1 11 1001 kkkk kkkk Z
IORLW k W Å W OR k 1 11 1000 kkkk kkkk Z
MOVLW k W Å k 1 11 00xx kkkk kkkk
-
SUBLW k W Å k – W 1 11 110x kkkk kkkk C, DC, Z
XORLW k W Å W XOR k 1 11 1010 kkkk kkkk Z
x = don´t care, ou irrelevante.
1.2 Comunicação externa através do LCD
A comunicação externa por meio de um display de cristal líquido (LCD) pode ser
realizada através de um barramento de dados de 8 ou mesmo de 4 bits (Zanco, 2006, p.79).
Além deste barramento é necessário utilizar mais dois terminais, os quais são designados por:
RS(Register Select), E(Enable). Portando, esta comunicação demandará, no melhor dos casos
tratados na literatura, de 6 portas de I/O do PIC, isto é, 4 para dados, RS e E. Mas, como ainda
se tem dúvidas quanto as necessidades de recursos do PIC nos próximos desenvolvimentos
deste trabalho, preferiu-se fazer uso da comunicação serial entre o PIC e o LCD, através do
registrador de deslocamento (shift register) 74164, o que permitiu a redução de outras duas
portas de I/O do PIC. Portanto, resultou num consumo mínimo dessas portas, ou sejam,
utilizou-se apenas 4 portas de I/O do MCU, conforme mostrado na Tabela 1.12.
Tabela 1.12 – Pinos do PIC para comunicação com o LCD.
Pino (designação
terminal) do PIC.
Nome da variável
usada no assembly.
Pino (designação
terminal) do CI 74164.
Pino (designação
terminal) do LCD.
7 ( RA5) Dserie 1 (Serial input A)
24 (RC5) Ck 8 (clock)
( * )
15 (RC0) ENABLE - 6 (E)
16 ( RC1) RS - 4 (RS)
(*) Após 8 pulsos de clock o dado terá sido totalmente transmitido e se encontrará na forma paralela, ou seja,
cada bit já se encontrará devidamente posicionado ao respectivo terminal de dado do LCD (pinos 7 a 14).
41
1.2.1 O Display de Cristal Líquido (LCD)
O display (ou visor) de cristal líquido (LCD) é um dispositivo usado para a
comunicação máquina-homem, ou seja, ele é um dispositivo de saída de informação
alfanumérica. Ele é composto por alguns terminais de entrada de dados (designados por DB
7
a
DB
0
; estes dados devem estar codificados em ASCII
9
), de comandos [designados por
RS(Register Select), R/W(Read/Write), E(Enable)], de alimentação [V
DD
(+5Vcc) e
V
SS
(GND)], de terminal para ajuste de contraste (designado por V
0
), e terminais para ligação
da iluminação de fundo (LED para Backlight) designados por A(Anode) e K(Katode) (Zanco,
2006, p.78). Estes terminais estão ligados a seu drive de controle interno, o qual aceita
comandos externos para a realização de todas suas funções. A Figura 1.5 ilustra o visual
externo do LCD e a Tabela 1.13 caracteriza melhor os referidos terminais.
Fixou o pino 5 (R/W) no nível lógico baixo (GND) e com isto fez-se todos os
terminais do LCD serem de entrada, o que é o mesmo que serem terminais para escrita neste
dispositivo. O sinal no pino RS varia segundo o que se deseja executar. Assim, quando RS = 0
implicará que o dado presente no barramento de dados (DB
7
a DB
0
) é um comando que o PIC
enviou ao LCD, e que será reconhecido pelo LCD tão logo o PIC habilite o pino E (Enable) o
que se faz gerando um pulso neste pino, ou fazendo-o variar de 0 1 0. E, quando o RS =
1 implicará que o dado presente no barramento de dados (DB
7
a DB
0
) é um caracter que o PIC
deseja que o LCD externe pelo seu visor, o que acontecerá, obviamente, quando o PIC, tal
como já mencionado, habilite o pino E (Enable).
42
Figura 1.5 – Lay-out externo do LCD 2 linhas x 16 colunas
Tabela 1.13 – Caracterização dos pinos do LCD (Agena, 1995, p.7)
Número
do Pino
Designação
Nome do pino
Função do Pino
1V
SS
Ground ou Terra, ligado ao terra da fonte de alimentação
2V
DD
( 3 a 5 Vcc) – ligado ao +5Vcc da fonte de alimentação.
3V
0
Ligado ao terminal central de um resistor variável de 10k
cujos extremos devem ser ligados a V
DD
e V
SS
. Para contraste.
4 RS 1 = entrada, ou escrita, de dados; 0 = entrada de comandos
5 R/W 1 = leitura de dados; 0 escrita de dados
6 E 1 = habilitado; 0 = desabilitado.
7DB
0
8DB
1
9DB
2
10 DB
3
11 DB
4
12 DB
5
13 DB
6
14 DB
7
Barramento de dados.
15 A ( + ) Anodo do LED luz de fundo
16 K ( - ) Catodo do LED luz de fundo.
Sabe-se que o dispositivo LCD é, também, um dispositivo microcontrolado. Este
microcontrole é realizado pelo seu drive, citado anteriormente. E por ser microcontrolado é
preciso iniciá-lo, ou seja, deve-se enviar alguns comandos que o dizem como o programador
9
Encontra-se uma tabela ASCII em Ciarcia (1984, p.220-222).
43
deseja utilizá-lo. Neste projeto utilizou-se o display configurado para trabalhar recebendo 8
bits de dados, resultando na inicialização mostrada na Figura 1.6.
Figura 1.6 – Fluxograma - Inicialização do LCD (Agena, 1995, p.11)
44
Deve-se observar que, quando for enviar algum comando ao LCD, o terminal RS
deve estar em nível lógico baixo (RS=0), como mostrado no fluxograma da Figura 1.6. Além
disso, quando for enviar algum dado (ASCII) para ser externado via visor, o terminal RS deve
estar em nível lógico alto (RS=1).
1.2.2 O Registrador de deslocamento, circuito integrado 74164
10
Neste item tratar-se-á do registrador de deslocamento, com entrada de dados serial
e saídas paralelas (shift register SIPO – Serial Input, Parallel Output), tipo 74164, construído
com tecnologia TTL. É um componente composto por: duas entradas seriais e oito saídas
paralelas; um clock gatilhável na transição positiva (edge positivo), ou seja, as mudanças de
estado das saídas de dados (saídas dos flip flops) ocorrerão quando o clock variar do nível
lógico baixo para o alto (ou de 0 para 1); uma entrada para clear e duas para alimentação do
componente (+5Vcc e GND), como está ilustrado na Figura 1.7.
Figura 1.7 – Lay-out do CI 74164, shift register.
10
Fairchild, 2000, p.1-5 e Melo, 1993, p. 292-293.
45
Os dados nas entradas seriais A e B da Figura 1.7 devem ser mudados no
momento em que o sinal de clock se encontrar no nível lógico alto (clock = 1). É importante
observar que todas as saídas dos flip flops serão resetadas quando o nível lógico da entrada
clear for baixo (ou 0), ou ainda, quando clear = 0 implicar que Q
A
a Q
H
vão para zero (Tabela
1.14 e Figura 1.8). A propósito, a saída Q
A
é a menos significativa, enquanto a Q
H
é a mais
significativa.
Tabela 1.14 – Tabela de funcionamento do CI 74164
Entradas Saídas
Clear Clock ABQ
H
... Q
B
Q
A
0 XXX0
...
00
1LXXQ
H0
... Q
B0
Q
A0
1
11Q
Gn
Q
An
1
1
0XQ
Gn
Q
An
0
1
X0Q
Gn
Q
An
0
Obs.: Trabalhou-se com o terminal B e Clear ligados, via resistores de 1k, ao
+5Vcc, portanto B = 1.
X = don´t care, ou irrelevante.
Q
H0
. . . Q
B0
Q
A0
é o nível das saídas Q
H
a Q
A
, respectivamente, antes de estar
estabilizado o estado lógico das entradas.
Q
Gn
. . . Q
An
é o nível das saídas Q
G
a Q
A
antes da mais recente transição do
clock ( ) indicando que um bit foi deslocado..
Clear
Serial A
Serial B
Clock
QA
QB
QC
QD
QE
QF
QG
QH
Clear Clear
Figura 1.8 – Formas de onda do CI 74164 – domínio do tempo.
46
Pode-se observar na Figura 1.8 que, após o nível lógico da entrada serial B ser
alto, o dado presente na entrada serial A será deslocado bit-a-bit, a cada variação de subida do
sinal clock, nas saídas Q
A
a Q
H
,. Então, é de fácil conclusão que se um byte for apresentado,
bit-a-bit, à entrada serial A, e se em cada um dos bits apresentados o sinal de clock tiver uma
subida de zero para um, segue-se que após o oitavo pulso de clock o referido byte estará
presente nas saídas Q
A
a Q
H
, ou seja, realizou-se uma transferência série-paralelo da entrada
serial A para as saídas Q
A
a Q
H
.
Uma vez entendida a transferência de dados acima, fica fácil, em termos de
hardware, a ligação CI 74164 com o LCD, como está ilustrado na Tabela 1.15.
Tabela 1.15 – Ligação do CI 74164 com o LCD (dados).
Dispositivo PINOS interconectados
Q
H
Q
G
Q
F
Q
E
Q
D
Q
C
Q
B
Q
A
CI 74164
Pinos
131211106543
7 8 9 10 11 12 13 14
Pinos
LCD
DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7
Pode-se observar, na Tabela 1.15, que não respeitou a ligação bit menos
significativo do 74164 (Q
A
) com o menos significativo do LCD (DB0). Esta inversão foi
percebida somente quando a placa PCI (Placa de Circuito Impresso) já havia sido
confeccionada. Mas, isto de fato, como poder-se-á verificar (Capítulo 2). Uma simples
adaptação do software, ou seja, em vez de começar enviando o bit mais significativo do byte
enviou-se o menos significativo, e assim sanou-se o problema de hardware.
47
1.3 Motor de Passo
Os motores de passo são dispositivos eletromecânicos rotativos cuja rotação,
diferentemente dos motores de contínua rotação quando devidamente alimentados, se faz por
passos. Entende-se por passo um deslocamento circular parcial (incrementos discretos) ou que
perfaz um determinado ângulo mecânico, menor que uma volta completa do seu eixo
(revolução).
1.3.1 Aplicação
Os motores de passo são aplicados em projetos que necessitam de controlar o
movimento ou a posição física de um mecanismo. Este controle é realizado pela eletrônica
digital através de certa seqüência de código padronizada. Este código é gerado, neste projeto,
por um circuito específico de driver (controle/potência) e o microcontrolador PIC16F877A, o
qual fornece o clock e o sentido da rotação do motor. Os motores de passo são encontrados
em vários periféricos de computadores como impressoras, unidades de disco flexíveis e
rígidos (drive), registradores gráficos (plotters), e, também, na automação industrial são
encontrados nos robôs.
1.3.2 Caracterização, tipos e funcionamento básico
Os motores de passo têm como características básicas: (a) girarem em ambos os
sentidos; (b) promoverem passos incrementais bastante precisos (probabilidade de erro de
passo, não cumulativo, é menor que 5%) (Minebea, 2002); (c) serem controlados pela
eletrônica digital por implementação bem simples (estes motores têm comportamento
previsível, o que dispensa o uso de elemento de realimentação, ou o seu controle pode ser
realizado em malha aberta); (d) não usam escovas; (e) possíveis estados para o motor de
48
passo: ou o motor está parado, ou alimentado com o rotor travado (torque de sustentação), ou
se encontra girando a passos discretos em um dos sentidos, horário ou anti-horário; (f)
conseguem girar a velocidades síncronas muito baixas; e por fim, (g) têm excelente resposta,
ou seja, giram em um sentido, param, e giram no outro sentido sem nenhuma dificuldade.
Geralmente, os motores de passo são fabricados de forma a perfazerem 12, 24, 72,
144, 200 e 500 passos/volta (ou revolução), os quais, respectivamente, em termos de graus
mecânicos, referem-se a: 30; 15; 5; 2,5; 2; 1,8 e 0,72
o
graus (Jones, 1995).
Os motores de passo podem ser de três tipos: o de imã permanente, o de relutância
variável e o híbrido. Os de imã permanente têm o rotor magnetizado, enquanto os de
relutância variável o rotor é constituído em ferro doce (soft-iron), e os motores híbridos são
uma combinação dos dois primeiros. A parte estática do motor, chamada de estator, é o lugar
onde se aloja suas bobinas. Dependendo de como estas bobinas são arranjadas no estator, elas
promoverão campos eletromagnéticos inerentes que distinguirão os tipos de motores de passo
(Microchip, 2004). Os motores de ímã permanente e híbrido podem ser construídos com
bobinas unipolar ou bipolar, de forma que cada tipo produza específicos campos magnéticos
girantes no estator.
Neste trabalho tratar-se-á do motor de passo unipolar e híbrido, cujas
características elétricas são: (12Vcc; 0,6A; 20 )/fase, o qual necessita de 200 passos/volta
(ou avança 1,8
o
a cada passo), sendo um dos motores mais comuns do mercado.
O motor de passo unipolar e híbrido é constituído por (a) duas bobinas em seu
estator, sendo ambas com uma derivação central, ou center tap, e (b) um rotor composto por
material de relutância variável e permanentemente magnetizado, combinação que melhora os
torques do motor (seja o residual, o de sustentação, ou os dinâmicos), comparativamente se o
motor fosse só de relutância variável ou só de imã permanente. Assim sendo, pode-se
encontrar este motor no mercado com 5 ou 6 terminais externos. Quando as derivações
49
centrais forem conectadas internamente, externando apenas uma delas, ter-se-á um motor com
5 terminais. Essas derivações centrais são, geralmente, ligadas ao pólo positivo da fonte de
alimentação (a exemplo do +12Vcc), enquanto que os demais terminais são chaveados por
transistores de potência com emissores aterrados. Este chaveamento segue um código binário
preestabelecido (Tabela 1.16), o qual condiciona o funcionamento do motor de passo, uma
vez que seguindo esse código as bobinas produzirão um campo magnético girante (no sentido
horário ou anti-horário) que arrasta consigo – acoplamento magnético – o rotor magnetizado
(imã permanente) no mesmo sentido do referido campo girante.
Tabela 1.16 – Código binário que aciona o motor de passo unipolar
11
.
BobinasB3B2B1B0HexaSentido
horário
Sentido Anti-
horário
1
o
passo001103
2
o
passo100109
3
o
passo11000C
4
o
passo011006
1.3.3 Escolhendo um motor de passo.
Os motores de passo, como já foi dito, são dos tipos: (a) de Relutância Variável;
(b) de Imã Permanente; (c) Híbrido. Em todos eles somente o estator é bobinado, portanto,
não têm escovas. Os seus rotores são de ferro-doce, de imã permanente, ou um combinado
dos dois, respectivamente. Eles podem ser unipolar ou bipolar. O bipolar pode ter até 30% a
mais de torque que o unipolar, pois as bobinas do motor bipolar são totalmente energizadas,
enquanto o unipolar só a metade é energizada de cada vez. Mas, deve-se relevar que o driver
de controle do motor unipolar é mais simples que o bipolar.
11
Nicolosi, (2005, p.95).
50
Para a escolha de um motor de passo para uma específica aplicação deve-se
considerar os seguinte fatores (Microchip, 2004): (1) o tipo do motor; (2) o torque que a
aplicação requererá; (3) a complexidade do circuito e programa de controle; (4) as
características físicas do motor.
1. Relutância Variável,
2. Imã Permanente,
(a) Tipo do motor:
3. Híbrido.
4. Unipolar ou Bipolar.
Uma vez determinado o tipo de motor a ser utilizado, tem-se, ainda que decidir
sobre as características funcionais que condizem com a aplicação.
1. A resolução;
2. O torque;
(b) Características 3. O ambiente de operação;
Funcionais 4. A vida útil;
5. As dimensões físicas;
6. Máxima velocidade de operação (em rpm ou em pps).
As referências inerentes aos itens 3 a 6 não serão tratados; relevar-se-á os itens 1 e
2 apenas.
A resolução de um motor de passo diz respeito ao tamanho do passo (ângulo
descrito) ou à quantidade de passos que o referido motor deve dar para promover uma volta
completa do seu eixo. É um dos fatores cruciais na escolha do motor associado a um projeto,
pois o projeto deve se ater a estes incrementos de movimento. A cada passo executado, o eixo
51
do motor desloca de um determinado ângulo. Este deslocamento é conhecido como ângulo do
passo, sendo repetido precisamente a cada novo passo dado. A Tabela 1.17 reporta
esquematicamente os valores de ângulo do passo com a quantidade de passos necessários para
cada revolução (Jones, 1995).
Tabela 1.17 – Ângulo do Passo e respectivos Passos por Volta.
Ângulo do passo 0,72
o
1,8
o
2,0
o
2,5
o
5,0
o
7,5
o
15,0
o
Passos por volta
500 200 180 144 72 48 24
O torque é um outro fator crítico na escolha de um motor de passo para uma
determinada aplicação. Os motores de passo têm diferentes tipos de torque (Microchip, 2004):
(a) Holding torque – ou torque de bloqueio ou de sustentação ou torque estático máximo:
é o máximo torque externo aplicado ao eixo do motor, mantendo suas bobinas energizadas
à velocidade de 0 pps, mas sem a promoção de nenhuma rotação deste eixo. Pela Figura
1.9 pode-se verificar o exposto acima.
(b) Pull-in torque – ou torque de partida ou arranque: é o torque que refere à partida do
motor, ou seja, que o tira do repouso juntamente com a carga mecânica acoplada ao seu
eixo. Ou, ainda, é o torque contra o qual um motor pode acelerar a partir de uma posição
de repouso sem perder nenhum passo e controlado por uma velocidade constante (pps).
Este torque é dinâmico, ou seja, ele é função da velocidade do motor o que delimita a
região chamada por parada-partida, mostrada na Figura 1.9.
(c) Pull-out torque – ou torque de operação ou andamento: é o torque, a uma determinada
velocidade de operação, que põe em movimento uma carga mecânica acoplada ao eixo do
motor. Este torque é dinâmico, ou seja, ele é função da velocidade do motor. Isto delimita
a região de máxima operação do motor sem perda de passo, que é dado pela curva de
torque pull-out, mostrada na Figura 1.9.
52
(d) Detent torque – ou torque residual: é o torque requerido para rodar o eixo de um motor
de passo enquanto suas bobinas não estão energizadas. Este torque ocorre somente nos
motores de imã permanente ou híbridos.
Figura 1.9 – Identificação dos torques dos motores de passo (curvas genéricas)
12
.
Os projetos devem respeitar os torques pull-in e pull-out para evitar perdas de
passos, o que, caso ocorra, implica na perda do controle da posição em que o sistema se
encontra. O torque de arranque (pull-in) tem forte relação com o momento de inércia da carga
mecânica acoplada ao eixo do motor de passo.
13
Para dimensionar um motor de passo é recomendado que o mesmo trabalhe entre
40 e 60% de seu torque, o que influi diretamente na sua vida útil (Microchip, 2004, p.7).
12
Minebea, 2002 – Glossário.
13
I = ρ
2
m, onde: I = momento de inércia em relação ao eixo de rotação; ρ = raio do centro de rotação à massa m.
“No limite do contínuo I=ρ
2
dm, que é o momento de inércia do corpo rígido em relação ao eixo de rotação. Para
calcular I, temos de multiplicar cada elemento de massa dm do corpo por ρ
2
, onde ρ é a distância de dm ao eixo
de rotação, e integrar sobre todo o corpo.” Por analogia, a massa está para um movimento unidimensional, assim
como o momento de inércia está para a rotação em torno de um eixo fixo. Nussenzveig (2002, p.248-250).
53
Os fabricantes de motor de passo fornecem as curvas de torque e alguns dados
relevantes, como pode-se verificar, por exemplo, na Tabela 1.18 e na Figura 1.10, os dados
fornecidos pelo fabricante Minebea Co., Ltd.
Tabela 1.18 – Dados relevantes de alguns motores de passo.
Model Step
Angle
Drive
Sequence
Rated
Current
Resista
nce
Holding
Torque
Inducta
nce
Rotor
Inertia
Detent
Torque
Mass
(deg) (A) (Ohms) (mNm) (mH) (g . cm
2
)(mNm) (g)
23KM-K044U 1.8 UNI-POLAR 3 0.85 760 1.8 200 25 680
23KM-K055U 1.8 UNI-POLAR 1.5 3.3 760 6.7 200 25 680
23KM-K144U 1.8 UNI-POLAR 3 1.0 1050 2.2 290 49 900
23KM-K155U 1.8 UNI-POLAR 1.5 3.9 1050 8.0 290 49 900
23KM-K249U 1.8 UNI-POLAR 2 1.2 420 1.9 120 20 470
23KM-K255U 1.8 UNI-POLAR 1.5 2.3 420 3.6 120 20 470
23KM-K349U 1.8 UNI-POLAR 2 1.5 650 2.9 180 29 590
23KM-K355U 1.8 UNI-POLAR 1.5 2.9 650 5.5 180 29 590
23KM-K744U 1.8 UNI-POLAR 3 1.15 1200 2.7 360 51 1050
23KM-K755U 1.8 UNI-POLAR 1.5 4.6 1200 10.2 360 51 1050
Figura 1.10 – Exemplos de curvas de torque de alguns motores de passo.
54
Capítulo 2. MATERIAIS E MÉTODOS
Este trabalho focou na construção de uma infra-estrutura mecânico-eletrônica
pautada em três distintos momentos: (1) a construção de uma estrutura mecânica que
comporte uma mesa, a qual se move devido ao acoplamento haste com rosca sem fim e porca,
esta fixada ao corpo da mesa e aquela, ao eixo do motor de passo, sendo que, a cada revolução
completa do eixo do motor (200 passos) a mesa move-se de um passo da rosca sem fim; (2)
desenvolvimento de três lay-outs de circuitos eletrônicos e suas respectivas placas de circuitos
impressos (PCI): (a) placa do circuito da fonte de alimentação, (b) placa do driver para
controle do motor de passo e (c) placa principal. Esta, por sua vez, abriga: (a) o
microcontrolador PIC16F877A, (b) o LCD (display de cristal líquido), (c) um pequeno
teclado, (d) um banco de memória EEPROM serial (24LC256), (e) um conector contendo o
sinal de clock e direção (controlados pelo microcontrolador) injetados na placa do driver do
motor de passo (cada variação do sinal de clock gera um passo do motor) e (f) terminal para
conexão do relé reed (acionado por um imã permanente fixado no corpo da mesa móvel) cuja
sinalização indicará a posição inicial da mesa; (3) diversos softwares básicos em linguagem
de programação assembly.
2.1 Hardware – circuitos eletro-eletrônicos
2.1.1 Fonte de alimentação
Desenvolveu-se uma fonte de alimentação comum. Foi utilizado um trafo
[(110/220)V / (9+9)V e 2 A], retificação em ponte a base de diodos, um filtro capacitivo e
reguladores 7805 (saída +5Vcc, alimentação dos circuitos TTL e microcontrolador) e 7812
(saída +12Vcc para alimentação do motor de passo). A Figura 2.1 ilustra o acima
mencionado.
55
Figura 2.1 – Circuito da fonte de alimentação.
2.1.2 Motor de passo
Utilizou-se um motor de passo fabricado pela MINEBEA CO., LTD tipo 23LM-
K005-25. Este motor de passo foi largamente utilizado nas antigas impressoras matriciais e,
hoje em dia, tem-se relativa facilidade de encontrá-los no comércio. A Tabela 2.1 e Figura
2.2, mostram as características do motor utilizado
14
.
Tabela 2.1 – Dados relevantes do motor de passo usado no projeto.
MINIANGLE STEPPER - Modelo n
o
.: 23LM-K005
Descrição Dado Descrição Dado
Diâmetro do motor 2,3 polegadas Resistência por fase
20
Peso 560 g Torque residual
(Detent Torque)
360 g.cm ou
35 mNm (*)
Ângulo do passo 1,8
o
/ passo Torque de sustentação
(Holding Torque)
4.700 g.cm
ou
460 mNm(*)
Tensão por fase 12 V Indutância 40 mH
Corrente por fase 0,6A Inércia do rotor 160 g.cm
2
(*) 1g.cm = 9,80665.10
-5
N.m
56
Figura 2.2 – Curvas dos torques dinâmicos do motor de passo 23LM-K005.
Na Figura 2.3 tentou-se reconstruir o significado do código numérico dado pelo
fabricante ao motor de passo. Percebe-se, com facilidade, a ausência de alguns dados.
Figura 2.3 – Identificação do motor pelo sistema numérico do fabricante
15
.
14
Estes dados técnicos foram coletados (diretamente do site)/fornecidos (por e-mail), em 15/07/2008, do site:
http://impexla.vilabol.uol.com.br/motores_de_passo.htm.
15
(Minebea, 2002).
Modelo: 23LM-K005-25
23 L M K 0 05 25
Tipo de motor
quanto ao
núcleo de ferro.
Tipo lâminado do
estator:
K = 2 fases,
Híbrido (baixo
ruído e vibra
ç
ão
)
Variação
elétrica
Diâmetro do motor
em décimos de
polegada.
Ângulo do passo:
M = 1,8
o
/ U = 3,75
o
Y = 0,9
o
Comprimento do
motor em mm.
Variação de 0 a 8.
Características
customizadas.
57
As Figuras 2.4 e 2.5 mostram o motor de passo aberto, as quais ilustram o estator
(bobinado), o rotor, os mancais a rolamentos e as tampas traseira e dianteira com seus
parafusos para fechamento.
Figura 2.4 – Detalhes do estator (à esquerda) e rotor (à direita) do motor de passo.
Figura 2.5 – Motor de passo aberto – todos os seus componentes.
O motor de passo utilizado é do tipo híbrido, o qual, construtivamente, é um
combinado entre o tipo relutância variável e o de imã permanente. Este hibridismo construtivo
dos dois tipos de motores desemboca num motor com maiores torques (todos os tipos de
torques – tratados no Capítulo 1) comparativamente com o motor só de imã permanente ou só
58
de relutância variável. Uma figura bastante ilustrativa de um motor híbrido com rotor
chamado de “multidentado” e extraída da AN907/Microchip está mostrado na Figura 2.6.
Figura 2.6 – Lay-out do rotor e rotor-estator do motor de passo híbrido.
2.1.2.1 Driver e ligação das bobinas do motor de passo
Os motores de passo unipolar são constituídos de (a) duas bobinas no estator, cada
uma delas possuindo uma derivação central e (b) um rotor em imã permanente, ou híbrido.
Essas derivações centrais são, normalmente, ligadas ao pólo positivo da fonte de alimentação
(+12Vcc) (Figuras 2.7 e 2.8), enquanto que os demais terminais são chaveados por
transistores de potência com emissores aterrados (Figura 2.8). Este chaveamento segue um
código binário preestabelecido (conforme indicado na Figura 2.8, tabelas), o qual condiciona
o funcionamento do motor de passo, uma vez que seguindo esse código as bobinas produzem
um campo magnético girante (no sentido horário ou anti-horário) que arrasta consigo –
acoplamento magnético – o seu rotor magnetizado (imã permanente) no mesmo sentido do
referido campo girante.
59
Figura 2.7 – Identificação das bobinas do motor de passo unipolar.
Figura 2.8 – Driver para o motor de passo unipolar.
Jones (1995, p.2) e Nicolosi (2005, p.94)
60
Deve-se observar que o conector CN1 (do driver) deverá ser ligado ao motor de
passo (conector CN3 do circuito do motor) e o conector CN2 (do driver) deverá ser ligado à
placa do microcontrolador (conector CN3 do circuito do microcontrolador). Deve-se observar
ainda que, para promover a rotação do motor no sentido horário, o sinal designado por
“direção” deve estar em nível lógico alto, e, em sentido anti-horário, obviamente, em nível
lógico baixo. A cada variação do clock, as saídas dos flip flops D mudam segundo as tabelas à
direita da Figura 2.8. Os transistores utilizados foram TIP122, os quais suportam uma corrente
máxima de coletor de 5A, portanto, atendem bem aos propósitos deste projeto.
61
Capítulo 3. RESULTADOS E CONCLUSÃO.
3.1 A placa principal - contém o MCU
Em termos dos circuitos eletrônicos – hardware –, a Figura 3.1 ilustra como ficou
o projeto do circuito principal, que contém o microcontrolador PIC16F877A. É importante
perceber que este circuito é mais denso em recursos que o necessário no presente projeto, uma
vez que se pretende buscar a automação plena em futuros desenvolvimentos. Nessa figura,
conectar-se-á o display LCD no conector CN2, sendo que o byte chegará ao LCD após
transmissão serial e “paralelização” baseada no registrador de deslocamento 74164, como
pode ser visto abaixo. Em relação as ligações 74164-LCD pode-se vê-las com mais facilidade
na Figura 3.2.
Figura 3.1 – Circuito principal – contém o PIC16F877A.
62
1k
10k
1k
1k
(1) (2) (3) (4)
Sendo: (1) ligado ao pino 24 do PIC (RC5) ÅÆ Ck do 74164;
(2) ligado ao pino 7 do PIC (RA5) ÅÆ Dserie do 74164;
(3) ligado ao pino 15 do PIC (RC0) ÅÆ ENABLE do LCD;
(4) ligado ao pino 16 do PIC (RC1) ÅÆ RS do LCD.
Figura 3.2 – Ligação CI74164(Shift Register) e LCD ao MCU.
63
3.2 Mecânica – o lay-out final
A Figura 3.3 mostra o lay-out final, com suas medidas, do projeto mecânico. No
topo pode-se observar o lugar (caixa) onde se alojou o motor de passo, o trafo, a placa da
fonte de alimentação e, ainda, a placa do driver do motor. Sobre essa caixa parafusou-se um
tampa de acrílico transparente em cuja superfície apoiou-se a placa principal do
microcontrolador, para facilidade de manuseio. Observa-se que o motor de passo está
conectado à haste rosqueada, a qual, na parte de baixo do desenho, está acoplada, via uma
porca de mesmo passo, à mesa móvel. Além disso, é importante lembrar que um imã
permanente foi embutido na parede inferior da mesa. Na parte fixa da estrutura e alinhado
com o referido ímã da mesa, embutiu-se um relé reed, o qual, quando acionado, indicará que a
mesa encontra-se na posição zero (inicial).
Figura 3.3 – Lay-out da estrutura mecânica.
64
3.3 Softwares
3.3.1 Softwares de apoio
Para a produção deste projeto, no que diz respeito aos circuitos eletrônicos,
trabalhou-se com dois softwares
16
: (a) Livewire (trial version), para a produção dos desenhos
dos circuitos eletrônicos; (b) PCB Wizard 3 (trial version), para a produção das placas de
circuito impresso. Talvez seja devido ao fato de os softwares serem trial que os mesmos não
realizaram 100% do roteamento das trilhas, e isto gerou grande dispêndio de tempo no
desenvolvimento, dado que as trilhas não roteadas tiverem de ser implementadas à mão, ou
seja, trilha a trilha. Mas, uma vez que os lay-outs das placas foram produzidos, solicitou-se a
confecção das placas de circuito impressos (PCI), cujos lay-outs finais são mostrados nas
Figuras 3.4 a 3.9.
Figura 3.4 – PCI fonte alimentação - Lado da Solda (esquerda)
Figura 3.5 – PCI fonte alimentação - Lado dos componentes (direita)
65
Figura 3.6 – PCI Driver do motor de passo – lado da solda.
Figura 3.7 – PCI Driver do motor de passo – lado dos componentes.
16
Site: www.new-wave-concepts.com
66
Figura 3.8 – PCI Placa principal com o PIC16F877A – lado da solda.
67
Figura 3.9 – PCI Placa principal com o PIC16F877A – lado dos componentes.
Ainda em termos dos softwares de apoio, utilizou-se os softwares (a) compilador MPLAB
(fornecido gratuitamente pelo fabricante do PIC, www.microchip.com) e (b) ICPROG (também
fornecido gratuitamente), software que controla o envio do programa executável (binário) para ser
gravado na memória do PIC, cujo download fora feito de: www.ic-prog.com, local onde se encontra,
também, vários modelos de circuitos gravadores do MCU, a exemplo do JDM PROGRAMMER.
68
3.4 Visualização final do projeto
O que foi mostrado anteriormente deu suporte à construção da infra-estrutura a
que se buscou através deste projeto. Mostra-se, a seguir, como ficou o projeto final. A Figura
3.10 dá uma visão construtiva da mesa móvel e aproveitou-se para nela indicar as posições
físicas onde se fixou o imã permanente, o relé reed e o acoplamento porca-haste rosqueada.
Figura 3.10 – Detalhe construtivo da mesa móvel
69
Na seqüência, as Figura 3.11 a 3.17 dão algumas visões do formato final do
projeto.
Figura 3.11 – Visão geral do projeto, sem acabamento, primeiro ângulo.
Figura 3.12 – Visão geral do projeto, sem acabamento, segundo ângulo.
70
Figura 3.13 – Visão geral do projeto, sem acabamento, terceiro ângulo.
Figura 3.14 – Fonte de alimentação, placas driver motor de passo e do microcontrolador.
71
Figura 3.15 – A Placa principal – contém o MCU.
Figura 3.16 – Visão geral do projeto, com acabamento.
72
Figura 3.17 – Display LCD indicando o Afastamento rápido da Posição_0.
3.5 CONCLUSÃO
Este trabalho teve cunho estritamente eletrônico. Ele foi baseado no
microcontrolador PIC16F877A e na linguagem de programação assembly. Como esclareceu-
se noutros momentos, tratou-se de um trabalho intermediário cujo maior fito residirá na plena
automação da aquisição de dados providos de um eletrômetro, o qual medirá a carga elétrica
(que tem relação com a dose absorvida) detectada em uma câmara de ionização após a
interação da radiação (fonte radioativa emissora beta ) com o gás no interior desse detector.
Desenvolveu-se neste trabalho um sistema de posicionamento de uma fonte em
relação a um detector de radiação. O circuito eletrônico construído (hardware) é bastante
denso de recursos, e as rotinas em assembly apresentadas visam atender este primeiro
momento do trabalho (vide Anexos).
Um ponto para melhoria do projeto diz respeito à haste rosqueada. Como para
aproximar o deslocamento linear da mesa de 1mm necessitou dar 160 passos do motor, então,
o passo da rosca sem fim da haste utilizada foi de aproximadamente 1,25mm. Mas, de fato,
73
quando o LCD indicava um deslocamento de 900mm, um ponteiro, indicador da posição
física em uma escala de aço fixa, apontava para 901mm, portanto, avançara em 1mm (erro de
0,11%). Acredita-se que o projeto pode ser melhorado caso solicite a produção de uma haste
“especializada”, ou projetada e construída só, e somente só, para este projeto. Se assim
acontecer, o melhor é optar pelo passo da rosca da haste de 1mm, fato que demandaria do
motor de passo uma volta completa para que a haste desloque a mesa por exatos 1mm.
Mesmo com o fato relevante supracitado, provou-se ser possível a aplicação deste
projeto nas medidas de dose absorvida por um eletrômetro. Desta maneira, acredita-se estar
no caminho certo para se conseguir a automação plena das referidas medidas.
74
REFERÊNCIAS BIBLIOGRÁFICAS
AGENA, Fabricante, SPECIFICATION OF AA16202/AA16212 (LCDs), 1995, 13p.,
Disponível em: <http//www.agena.com.hk> . Acesso em 19 abr. 2008.
Ciarcia, Steve, Construa seu próprio Microcomputador Z80, 1
a
ed. Ed. McGraw-Hill do
Brasil Ltda, 1984, 331p.
FAIRCHILD, Fabricante, Datasheet 7474 (dual FFD) Disponível em:
<http//www.alldatasheet.com>. Acesso em 07 dez. 2007.
FAIRCHILD, Fabricante, Datasheet 7486 (4-EXOR) Disponível em:
<http//www.alldatasheet.com>. Acesso em 07 dez. 2007.
FAIRCHILD, Fabricante, Datasheet 74164 (Shift Register), 2000, 5p. Disponível em:
<http//www.alldatasheet.com>. Acesso em 07 dez. 2007.
GOMES, Eng. Alcides Tadeu, Telecomunicações, Transmissão Recepção – AM-FM
Sistemas Pulsados. 3
a
ed. Ed. Érica Ltda, 1985, 457p.
JONES, Douglas W. – Tutorial sobre: Stepping Motors, 1995, Disponível em:
<http//www.cs.uiowa.edu/~jones/step/> . Acesso em 16 jul. 2008.
KNOLL, G. F., Radiation Detection and Measurement. 2th ed. New York, John Wiley &
Sons. p. 754, 1989.
Maldonado, Paulo César, Z80 – Aplicações, 1
a
ed. Ed. Érica Ltda, 1990, 187p.
Malvino, Albert Paul, Microcomputadores e Microprocessadores, 2
a
ed. Ed. McGraw-Hill
do Brasil, 1985, 578p.
75
MELO, Mairtom, Eletrônica Digital, 1
a
ed. Ed. McGraw-Hill do Brasil, 1993, 414p.
MICROCHIP, Fabricante, AN907 – Stepping Motors Fundamentals, 2004, 22p., Disponível
em: <http//www.microchip.com> . Acesso em 19 abr. 2008.
MICROCHIP, Fabricante, Datasheet PIC16F877A, 2003, 232p., Disponível em:
<http//www.microchip.com> . Acesso em 19 abr. 2008.
MICROCHIP, Fabricante, Datasheet PIC16F84A, 1998, 68p., Disponível em:
<http//www.microchip.com> . Acesso em 19 abr. 2008.
MINEBEA CO., LTD, Fabricante motor de passo, Glossary, e Catalog, 2002, Disponível em:
<http://www.eminebea.com>. Acesso em 15 jul. 2008.
NICOLOSI, Denys E. C., Laboratório de Microcontroladores Família 8051 – Treino de
Instruções, Hardware e Software, 4
a
ed, Ed. Érica Ltda, 2005, 206p.
Nussenzveig, H. Moysés, Curso de Física Básica 1 – Mecânica, 4
a
ed. Revisada, Ed. Edgard
Blucher LTDA, 2002, 328p.
Oliveira, Ney Acyr R. e outro, Microprocessador Z-80, Hardware, 1
a
ed. Editado pela A e
N – Consultoria Projetos e Publicações Ltda, 1983, 199p.
Oliveira, Ney Acyr R. e outro, Programando Z-80, Linguagem Assembly, 1
a
ed. Editado
por Ciência Moderna Computação Ltda, 1986, 262p.
Pereira, Fábio, Microcontroladores PIC: Programação em C, 4
a
ed, Ed. Érica Ltda, 2003,
358p.
76
Souza, David José de, e outro, PIC16F877A – Conectando o PIC, Recursos Avançados, 3
a
ed, Ed. Érica Ltda, 2006, 379p.
Souza, David José de, Desbravando o PIC – Ampliado e Atualizado para PIC16F628A, 9
a
ed, Ed. Érica Ltda, 2005, 267p.
Tanenbaun, Andrew S., Organização Estruturada de Computadores, 4
a
ed. Ed. LTC, 2001,
398p.
Taub, Herbert, Circuitos Digitais e Microprocessadores, 1
a
ed. Ed. McGraw-Hill do Brasil
Ltda, 1984, 510p.
Tocci, Ronald J. e outro, Sistemas Digitais Princípios e Aplicações, 8
a
ed. Ed. Prentice Hall,
2003, 755p.
Zanco, Wagner da Silva, Microcontroladores PIC16F628A e 648A – Uma abordagem
prática e objetiva – Recursos básicos e avançados, 1
a
ed., Ed. Érica Ltda, 2005, 364p.
Zanco, Wagner da Silva, Microcontroladores PIC – Técnicas de software e Hardware
para projetos de Circuitos Eletrônicos – com base no PIC16F877A, 1
a
ed., Ed. Érica Ltda,
2006, 390p.
77
ANEXOS
A1 – Softwares – programas em assembly
a) Programa Principal
A Figura A1 mostra o início do fluxograma do programa principal. Basicamente
inicia-se um programa configurando e definindo as variáveis e constantes a serem utilizadas.
Figura A1 – Programa Principal – Início.
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * Programa Assembly para o PIC16F877A *
; * A CAMINHO da Automação das medidas realizadas em um *
; * eletrômetro *
; * *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * VERSÃO : 1.0 *
; * DATA : 10/01/2008 *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * DESCRIÇÃO GERAL *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; Objetiva-se com este programa em assembly a direcioná-lo para a automação das medidas das cargas
; elétricas detectadas por uma câmara de ionização e medidas por um eletrômetro em cuja interface
; digital será lido este valor medido e armazenado em uma memória serial (24LC256 de 32kBytes).
; Como unidade de saída de informação será usado um
display de cristal líquido (LCD de 2 linhas e 16
78
; colunas).
;
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * CONFIGURAÇÕES PARA GRAVAÇÃO ( 1 ) *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
__CONFIG _CP_OFF & _CPD_OFF & _DEBUG_OFF & _LVP_OFF & _WRT_OFF & _BODEN_OFF &
_PWRTE_ON & _WDT_ON & _XT_OSC
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * DEFINIÇÃO DAS VARIÁVEIS ( 2 ) *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
CBLOCK 0X20 ; POSIÇÃO INICIAL DA RAM
UNIDADE ; unidade, em milímetros, do movimento da mesa.
DEZENA ; dezena, em milímetros, do movimento da mesa.
CENTENA ; centena, em milímetros, do movimento da mesa.
FILTRO_BOTOES ; Filtro para ruídos
TEMPO_TURBO ; Temporizador p/ turbo das teclas
TEMPO1
TEMPO0 ; Contadores p/ delay
FLAG ; FLAG de uso geral
AUX ; Registrador auxiliar de uso geral
ENDERECO_TEMP ; Lugar p/ guardar temporariamente um nibble endereço
VOLTA ; Variável p/ a quantidade de pulsos de uma volta do Motor passo.
VALOR ; Para ser TX serie-paralelo
Desloca ; registra quantos bits foram deslocados.
WTEMP ; GUARDAR W TEMPORARIAMENTE
WTEMP1 ; Guarda temporariamente W
L1_C0 ;Byte ASCII a ser plotado na Linha1_Coluna0 do LCD
L1_C1 ;Byte ASCII a ser plotado na Linha1_Coluna1 do LCD
L1_C2 ;Byte ASCII a ser plotado na Linha1_Coluna2 do LCD
L1_C3 ;Byte ASCII a ser plotado na Linha1_Coluna3 do LCD
L1_C4 ;Byte ASCII a ser plotado na Linha1_Coluna4 do LCD
L1_C5 ;Byte ASCII a ser plotado na Linha1_Coluna5 do LCD
L1_C6 ;Byte ASCII a ser plotado na Linha1_Coluna6 do LCD
L1_C7 ;Byte ASCII a ser plotado na Linha1_Coluna7 do LCD
L1_C8 ;Byte ASCII a ser plotado na Linha1_Coluna8 do LCD
L1_C9 ;Byte ASCII a ser plotado na Linha1_Coluna9 do LCD
L1_C10 ;Byte ASCII a ser plotado na Linha1_Coluna10 do LCD
L1_C11 ;Byte ASCII a ser plotado na Linha1_Coluna11 do LCD
L1_C12 ;Byte ASCII a ser plotado na Linha1_Coluna12 do LCD
L1_C13 ;Byte ASCII a ser plotado na Linha1_Coluna13 do LCD
L1_C14 ;Byte ASCII a ser plotado na Linha1_Coluna14 do LCD
L1_C15 ;Byte ASCII a ser plotado na Linha1_Coluna15 do LCD
L2_C0 ;Byte ASCII a ser plotado na Linha2_Coluna0 do LCD
L2_C1 ;Byte ASCII a ser plotado na Linha2_Coluna1 do LCD
L2_C2 ;Byte ASCII a ser plotado na Linha2_Coluna2 do LCD
L2_C3 ;Byte ASCII a ser plotado na Linha2_Coluna3 do LCD
L2_C4 ;Byte ASCII a ser plotado na Linha2_Coluna4 do LCD
L2_C5 ;Byte ASCII a ser plotado na Linha2_Coluna5 do LCD
L2_C6 ;Byte ASCII a ser plotado na Linha2_Coluna6 do LCD
79
L2_C7 ;Byte ASCII a ser plotado na Linha2_Coluna7 do LCD
L2_C8 ;Byte ASCII a ser plotado na Linha2_Coluna8 do LCD
L2_C9 ;Byte ASCII a ser plotado na Linha2_Coluna9 do LCD
L2_C10 ;Byte ASCII a ser plotado na Linha2_Coluna10 do LCD
L2_C11 ;Byte ASCII a ser plotado na Linha2_Coluna11 do LCD
L2_C12 ;Byte ASCII a ser plotado na Linha2_Coluna12 do LCD
L2_C13 ;Byte ASCII a ser plotado na Linha2_Coluna13 do LCD
L2_C14 ;Byte ASCII a ser plotado na Linha2_Coluna14 do LCD
L2_C15 ;Byte ASCII a ser plotado na Linha2_Coluna15 do LCD
ENDC
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * DEFINIÇÃO DAS VARIÁVEIS INTERNAS DO PIC ( 3 ) *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
#INCLUDE <P16F877A.INC> ; MICROCONTROLADOR UTILIZADO
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * DEFINIÇÃO DOS BANCOS DE RAM ( 4 ) *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
#DEFINE BANK1 BSF STATUS,RP0 ; SELECIONA BANK1 DA MEMORIA RAM
#DEFINE BANK0 BCF STATUS,RP0 ; SELECIONA BANK0 DA MEMORIA RAM
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * CONSTANTES INTERNAS ( 4 ) *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
FILTRO_TECLA EQU .200 ; FILTRO P/ EVITAR RUIDOS DOS BOTÕES
TURBO_TECLA EQU .60 ; TEMPORIZADOR P/ TURBO DAS TECLAS
; (Souza, 2006)
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * ENTRADAS ( 4 ) *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; Definição das chaves
#DEFINE INC_Memo PORTA,0 ; ESTADO das chaves (PUSH Botton)
#DEFINE Dec_Memo PORTA,1 ; 1 Æ LIBERADO
#DEFINE Inic_Grav PORTA,2 ; 0 Æ PRESSIONADO
#DEFINE Fim_Grav PORTA,3
#DEFINE Exp_Futura PORTA,4
; Definição da posicao_0 da mesa móvel.
#DEFINE Posicao_0 PORTE,0 ; Quando em nível alto (1) está na posição 0.
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * SAÍDAS ( 4 ) *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; Definições para controle do LCD
#DEFINE ENABLE PORTC,0 ; SINAL DE ENABLE P/ DISPLAY
; ATIVO NA BORDA DE DESCIDA
#DEFINE RS PORTC,1 ; INDICA P/ O DISPLAY UM DADO OU COMANDO
; 1 Æ DADO
80
; 0 Æ COMANDO
#DEFINE Ck PORTC,5 ; Clock do CI 74LS164, transfere na subida.
#DEFINE Dserie PORTA,5 ; Dados para ser enviado ao display (74LS164).
; Definições para controle do motor de passo
#DEFINE Clock_passo PORTE,1 ; A cada variação 0Æ1Æ0 dá um passo
#DEFINE Direcao PORTE,2 ; Dependendo do nível lógico o motor de passo
; girará no sentido horário ou anti-horário.
; 1 Æ Horário
; 0 Æ Anti-horário.
Na seqüência, o programa principal é desviado para a rotina CONFIG, onde são
configurados os registradores internos e segue para verificação de alguma chave apertada, e,
caso tenha sido, promove o desvio para seu tratamento, como mostra a Figura A2.
Figura A2 – Programa Principal – Configurações e definições e detecção chave
apertada. (Souza, 2006)
81
Esta parte do programa é retratada na seqüência.
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * Configurações, definição do perfil de trabalho ( 5 ) *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;
; Esta rotina configura, ou atribui valores, os diversos registradores do MCU conforme a necessidade do
; projeto em voga.
CONFIG
CLRF PORTA ; Fazem as saídas assumir nível lógico baixo
CLRF PORTB ; isto é, ZERO (0).
CLRF PORTC
CLRF PORTD
CLRF PORTE
BANK1 ; Seleciona BANCO 1 da RAM.
MOVLW B'11011111' ; Configuração da PORTA (I/O)
MOVWF TRISA ; Bits Æ nd nd RA5 RA4 RA3 RA2 RA1 RA0
; bits 7 e 6 Æ irrelevantes
; RA5=0=Dserie Æ Output, dado serial para o 74164 do LCD
; RA4=1=Exp_Futura Å Input, chave para Expansão Futura
; RA3=1=Fim_Grav Å Input, chave para Fim da gravação
; RA2=1=Inic_GravÅInput, chave para Iniciar a gravação
;RA1=1=Dec_MemoÅInput, chave p/ decrementar end. memória
;RA0=1=INC_MemoÅInput, chave p/ incrementar end. memória
MOVLW B'11111111' ; Configuração da PORTB (I/O)
MOVWF TRISB ; Bits -> RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
; Todos os bits configurados para entrada de dados Æ uso futuro
MOVLW B'10010000' ; Configuração da PORTC (I/O)
MOVWF TRISC ; Bits -> RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0
; RC7=1Æ uso futuro
; RC6=0 Æ uso futuro
; RC5=0=Ck, Output do clock para o CI 74LS164.
; RC4=1 Æ uso futuro.
; RC3=0 Æ uso futuro.
; RC2=1 Æ uso futuro.
; RC1=0=RS, Output para dados ou comando para o LCD
; RC0=0=ENABLE, Output para habilitar o LCD
MOVLW B'00000001' ; Configuração da PORTE (I/O)
MOVWF TRISE ; Bits -> nd nd nd nd nd RE2 RE1 RE0
; bits de 7 a 3 são irrelevantes
; RE2=0=Direcao, Output, define o sentido rotação motor passo.
; RE1=0=Clock_passo, Output, dá a cadência p/ cada passo
; RE0=1=Posicao_0, Input, quando em nível alto(1) = posicão_0
MOVLW B'11011111'
MOVWF OPTION_REG ; Definindo o registrador OPTION_REG
; do Bit7 (/RBPU) ao Bit0 (PS0)
;(7) /RBPU =1 Æ Pull ups internos da PORTB desabilitados.
;(6)INTEDG=1ÆInterrupção externa RB0 ocorrerá borda subida.
;(5)T0CS=0 Æ TMR0 incrementado pelo ciclo máquina interno.
;(4)T0SE =0 Æ irrelevante, pois T0CS=0.
;(3)PSA =1 Æ o prescaler será aplicado ao WDT
; PS2 PS1 PS0 Qdo TMR0(PSA=0) Qdo WDT(PSA=1)
82
; 0 0 0 1:2 1:1
; 0 0 1 1:4 1:2
; 0 1 0 1:8 1:4
; 0 1 1 1:16 1:8
; 1 0 0 1:32 1:16
; 1 0 1 1:64 1:32
; 1 1 0 1:128 1:64
; 1 1 1 1:256 1:128
;
; portanto, WDT - 1:128
MOVLW B'00000000' ; INTCON = Configuração das Interrupções
MOVWF INTCON ; Bits -> GIE PEIE T0IE INTE RBIE T0IF INTF RBIF
; _/ __/_ --------------------
; |______/ _ Identificam int
; |___________/ _ TMR0 RB0 Mudança
; |______________/ _ RB4 a RB7
;
; INTCON = 00h -> Desabilitada todas as interrupções.
MOVLW B'00000111' ; ADCOM1 = Configura pinos como analógicos ou digitais
MOVWF ADCON1 ; Bits Æ ADFM nd nd nd PCFG3 PCFG2 PCFG1 PCFG0
; (7) ADFM=0 Æ o resultado da conversão A/D de 10 bits será
; justificado à esquerda. Os 6 bits menos sig.
; de ADRESL são lidos como nível lógico baixo(0).
; [Irrelevante, pois PCFG(3:0) configura portas para DIGITAL]
; (6, 5, 4) os três próximos zeros (000) não têm significado.
;
; PCFG3: AN7 AN6 AN5 AN4 AN3 AN2 AN1 AN0 V V Canais Ref.
; PCFG0 RE2 RE1 RE0 RA5 RA3 RA2 RA1 RA0 ref+ ref- Analog. Ext.
; --------------------------------------------------------------------------------------------
; 0111 D D D D D D D D Vdd Vss 0 0
; --------------------------------------------------------------------------------------------
; onde: A= Analógico e D=Digital o respectivo pino do PIC.
;
; Configurou a PORTA E PORTE como I/O DIGITAL.
BANK0
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * Inicialização da memória RAM ( 6 ) *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; Zera o conteúdo da RAM do endereço 0X20 A 0X7F.
MOVLW 0X20
MOVWF FSR ; O registrador FSR deve conter o endereço no qual será gravado
; o valor que estiver presente no registrador INDF. Então, objeti-
; vamente: inicia FSR com 20h, o qual é o primeiro endereço da
; RAM onde definiu-se, neste programa, o registrador de nome:
; UNIDADE, e, como último endereço, 7Fh destinado à imple-.
; mentação de todas as variáveis do usuário.
LIMPA_RAM
CLRF INDF ; Zera o conteúdo de INDF, ou: INDF Å 00h, que é o conteúdo
; (dado) a que é carregado no registrador endereçado (apontado)
; residente, neste momento, no registrador FSR, iniciado com o
; valor 20h.
INCF FSR,F ; Incrementa o apontador FSR para o próximo endereço (regis-
; trador), ou FSR Å FSR + 1, isto é: a 1
a
vez ficará:
; FSR Å 20h+01h = 21h
83
MOVF FSR,W ; W Å FSR
XORLW 0X80 ; W Å W XOR 80h na 1a vez fica: W = 21h = 0010 0001
; 80h = 1000 0000
; W Å XOR = 1010 0001
; XOR afeta o flag Z que neste caso não resultou em zero
; portanto o flag z=0.
; Quando o último endereço (7Fh) for somado 1 ficará: 80h
; então: W = 80h = 1000 000
; 80h = 1000 0000
; W Å XOR = 0000 0000
; XOR afeta o flag Z que neste caso resultou em zero,
; portanto o flag z=1.
BTFSS STATUS,Z ; Testa o bit Z do STATUS e salta a próxima instrução caso
; o bit Z seja 1 (ou o resultado da operação anterior tenha
; dado zero. Caso contrário, execute a próxima instrução, ou
; seja, execute a instrução GOTO LIMPA_RAM - ou feche o loop
; ou reinicie o processo de clear os registradores da RAM.
; Já limpou todos os endereços da RAM?
GOTO LIMPA_RAM ; NÃO - retorne ao início para zerar a próxima posição da RAM
; SIM - dê seqüência à execução do programa.
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * Inicialização do LCD ( 7 ) *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; Esta rotina inicializa o LCD p/ comunicação por 8 trilhas. Em um LCD de 2 linhas e 16 colunas, o cursor
; deverá estar apagado e o deslocamento do cursor se fará para a direita.
MOVLW 0X08
MOVWF Desloca ; Quanto deslocará à direita o byte a ser enviado ao LCD.
INICIAR_DISP
BCF RS ; Seleciona o display p/ comandos
MOVLW .33
CALL DELAY_MS ; Delay de 33ms
MOVLW 0x38 ; Escreve comando 0X38 para inicialização?
CALL ESCREVE ; Æ eqüivale ao function set, ou modo de trabalho.
MOVLW 0x0C ; Escreve comando 0X0C para inicialização?
CALL ESCREVE ; Æ eqüivale ao código de Display on/off control
MOVLW 0x01 ; Escreve o comando para limpar todo o display.
CALL ESCREVE
MOVLW .2
CALL DELAY_MS ; Delay de 2ms
MOVLW 0x06 ; Escreve comando para incremento, com shift display
CALL ESCREVE ; desligado.
BSF RS ; Seleciona o display para dados.
; fim da inicialização.
Mens_inicial
CALL Mens_1 ; Escreve no LCD:
; Gravar=Inic_Grav
; Ler=INC_Memo e Dec_Memo (Motor de passo rápido)
84
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * Varredura dos botões (chaves) ( 8 ) *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; Verificação de chaves apertadas com devido encaminhamento para execução da função desejada.
; *********************** Verifica se alguma chave foi apertada *******************************
VARRE ; (Souza, 2006)
VARRE_CHAVES
BTFSS INC_Memo ; PORTA,0Æ A chave está pressionada?
GOTO TRATA_CHAVE_0 ; SIM (nível 0) - executa GOTO
; NÃO (nível 1) - não executa GOTO
BTFSS Dec_Memo ; PORTA,1 Æ A chave está pressionada?
GOTO TRATA_CHAVE_1 ; SIM (nível 0) - executa GOTO
; NÃO (nível 1) - não executa GOTO
BTFSS Inic_Grav ; PORTA,2 Æ A chave está pressionada?
GOTO TRATA_CHAVE_2 ; SIM (nível 0) - executa GOTO
; NÃO (nível 1) - não executa GOTO
BTFSS Fim_Grav ; PORTA,3 Æ A chave está pressionada?
GOTO TRATA_CHAVE_3 ; SIM (nível 0) - executa GOTO
; NÃO (nível 1) - não executa GOTO
;BTFSS Exp_Futura ; PORTA,4 Æ A chave está pressionada?
;GOTO TRATA_CHAVE_4 ; SIM (nível 0) - executa GOTO
; NÃO (nível 1) - não executa GOTO
; ** Carrega valores para DEBOUNCE (instabilidade) que evita ruídos ao ligar uma chave **
MOVLW FILTRO_TECLA ; CARREGA O VALOR DE FILTRO_TECLA
MOVWF FILTRO_BOTOES ; SALVA EM FILTRO_BOTOES
; RECARREGA FILTRO P/ EVITAR RUIDOS
; NOS BOTÕES, (Souza, 2006).
MOVLW .1
MOVWF TEMPO_TURBO ; CARREGA TEMPO DO TURBO DAS TECLAS
; COM 1 - IGNORA O TURBO A PRIMEIRA
; VEZ QUE A TECLA É PRESSIONADA
GOTO VARRE ; VOLTA PARA VARRER TECLADO
Uma vez que tenha sido apertada uma das teclas, o processamento será deslocado
para o tratamento da que foi apertada, como ilustra a Figura A3. E, na seqüência, chama a
rotina principal: MM_900.
85
Figura A3 – Programa Principal – Final. Tratamento de uma tecla pressionada e
chamada da rotina principal.
; ******************************* Tratamento da chave_1 ***********************************
TRATA_CHAVE_1 ; Apertou a chave Dec_Memo
DECFSZ FILTRO_BOTOES,F ; Fim do ruído da chave?
GOTO VARRE ; NÃO - VOLTA P/ VARRE
; SIM - BOTÃO PRESSIONADO
DECFSZ TEMPO_TURBO,F ; FIM DO TEMPO DE TURBO ?
GOTO VARRE ; NÃO - VOLTA P/ VARRE
; SIM
CALL Mens_4
CALL MM_900
GOTO Mens_inicial ; VOLTA P/ VARREDURA DOS BOTÕES
86
b) Sub-rotinas de apoio ao programa principal
b1) Rotina principal
O propósito desta rotina é promover o deslocamento milímetro-a-milímetro (ou o
mais próximo do milímetro, mas a passos constantes) da mesa móvel da posição zero até
900mm. Esta rotina foi a forma encontrada para mostrar as diversas sub-rotinas produzidas e
que, a posteriori, suportarão a automação final do equipamento ora perseguido. O nome dado
a esta rotina foi MM_900. O seu fluxograma está mostrado na Figura A4.
Figura A4 – Rotina Principal – Exemplo para uso das demais rotinas produzidas.
87
Esta rotina ficou da seguinte forma:
; ************************************************************************************
; Rotina de controle mm a mm da posição da mesa indicando-a no LCD *
; ************************************************************************************
MM_900 ; promove 990 mm de deslocamento da mesa
MOVLW 0x00
MOVWF UNIDADE ; inicializa UNIDADE com 00h.
MOVLW 0x00
MOVWF DEZENA ; inicializa DEZENA com 00h.
MOVLW 0x00
MOVWF CENTENA ; inicializa CENTENA com 00h.
OUTRO_MM
MOVF UNIDADE,W ; W ÅUNIDADE
CALL HEXA_ASCII
MOVWF L2_C3
MOVF DEZENA,W ; W Å DEZENA
CALL HEXA_ASCII
MOVWF L2_C2
MOVF CENTENA,W ; W Å CENTENA
CALL HEXA_ASCII
MOVWF L2_C1
CALL Mens_5
CALL DELAY_MS
CALL UM_MM
INCF UNIDADE,F ; UNIDADE Å UNIDADE + 1
MOVF UNIDADE,W ; W Å UNIDADE
SUBLW 0x0A ; W Å 0A - W
BTFSS STATUS,Z
GOTO OUTRO_MM
MOVLW 0x00
MOVWF UNIDADE
INCF DEZENA,F ; DEZENA Å DEZENA + 1
MOVF DEZENA,W ; W Å DEZENA
SUBLW 0x0A ; W Å 0A - W
BTFSS STATUS,Z
GOTO OUTRO_MM
MOVLW 0x00
MOVWF DEZENA
INCF CENTENA,F ; CENTENA Å CENTENA + 1
MOVF CENTENA,W ; W Å CENTENA
SUBLW 0x09 ; W Å 0A - W
BTFSS STATUS,Z
GOTO OUTRO_MM
RETURN
88
b2) Rotinas de apoio
1) Rotina para controle da escrita no LCD
Figura A5 – Rotina para escrever no LCD.
89
Em linguagem assembly esta rotina ficou:
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * Rotina de escrita de um caracter no display LCD *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; Esta rotina envia um caracter para o módulo LCD. O caracter a ser escrito deve ser colocado em
; WORK (W) antes de chamar esta rotina.
ESCREVE
MOVWF WTEMP ; WTEMP Å W
Write
BTFSC WTEMP,0 ; Testa o bit 0 do w e salta próxima instrução se zero
GOTO UM
BCf Dserie
GOTO CONTINUA
UM
BSf Dserie
CONTINUA
BSF Ck ; clock para deslocar um bit
BCF Ck
RRF WTEMP,F ; Deslocar um bit à direita.
CLRWDT ; ZERA o registrador WATCHDOG TIMER
DECFSZ Desloca,F ; Desloca Å Desloca –1 ( inicialmente era 08H )
GOTO Write
BCF Dserie
MOVLW 0X08
MOVWF Desloca ; É o quanto se deslocará à direita o byte.
BSF ENABLE ; Envia um pulso de Enable ao display
GOTO $+1
BCF ENABLE ; o aceite da informação é na descida ENABLE
RETURN ; Retorna
2) Rotinas de mensagens para o LCD
Mostrou-se, na seqüência, as mensagens mais significativas usadas até agora.
Portanto, quando houver numeração de mensagem saltada é porque a mesma não está contida
nas rotinas tratadas e tiveram originalmente esta numeração. Então, tratou-se das mensagens:
MENS_1; MENS_4 e MENS_5, concluindo que as MENS_2 e 3 estão contidas somente no
projeto original e não são importantes para o corpo desta dissertação.
90
Figura A6 – Mensagens no LCD.
91
Estas rotinas ficaram da seguinte forma:
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * Rotina para a Mensagem 1 no LCD *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Mens_1
; Gravar=Inic_Grav
MOVLW 'G'
MOVWF L1_C0
MOVLW 'r'
MOVWF L1_C1
MOVLW 'a'
MOVWF L1_C2
MOVLW 'v'
MOVWF L1_C3
MOVLW 'a'
MOVWF L1_C4
MOVLW 'r'
MOVWF L1_C5
MOVLW '='
MOVWF L1_C6
MOVLW 'I'
MOVWF L1_C7
MOVLW 'n'
MOVWF L1_C8
MOVLW 'i'
MOVWF L1_C9
MOVLW 'c'
MOVWF L1_C10
MOVLW '_'
MOVWF L1_C11
MOVLW 'G'
MOVWF L1_C12
MOVLW 'r'
MOVWF L1_C13
MOVLW 'a'
MOVWF L1_C14
MOVLW 'v'
MOVWF L1_C15
; Ler=INC_Memo
MOVLW 'L'
MOVWF L2_C0
MOVLW 'e'
MOVWF L2_C1
MOVLW 'r'
MOVWF L2_C2
MOVLW '='
MOVWF L2_C3
MOVLW 'I'
MOVWF L2_C4
MOVLW 'N'
MOVWF L2_C5
MOVLW 'C'
MOVWF L2_C6
MOVLW '_'
MOVWF L2_C7
MOVLW 'M'
92
MOVWF L2_C8
MOVLW 'e'
MOVWF L2_C9
MOVLW 'm'
MOVWF L2_C10
MOVLW '0'
MOVWF L2_C11
MOVLW ' '
MOVWF L2_C12
MOVLW ' '
MOVWF L2_C13
MOVLW ' '
MOVWF L2_C14
MOVLW ' '
MOVWF L2_C15
CALL LCD_LINHA_1
CALL LCD_LINHA_2
RETURN
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * Rotina para a Mensagem 4 no LCD *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Mens_4 ; Afastando rápido
; da Posicao_0.
MOVLW 'A'
MOVWF L1_C0
MOVLW 'f'
MOVWF L1_C1
MOVLW 'a'
MOVWF L1_C2
MOVLW 's'
MOVWF L1_C3
MOVLW 't'
MOVWF L1_C4
MOVLW 'a'
MOVWF L1_C5
MOVLW 'n'
MOVWF L1_C6
MOVLW 'd'
MOVWF L1_C7
MOVLW 'o'
MOVWF L1_C8
MOVLW ' '
MOVWF L1_C9
MOVLW 'r'
MOVWF L1_C10
MOVLW 'a'
MOVWF L1_C11
MOVLW 'p'
MOVWF L1_C12
MOVLW 'i'
MOVWF L1_C13
MOVLW 'd'
93
MOVWF L1_C14
MOVLW 'o'
MOVWF L1_C15
; Afastando rápido
; da Posicao_0.
MOVLW 'd'
MOVWF L2_C0
MOVLW 'a'
MOVWF L2_C1
MOVLW ' '
MOVWF L2_C2
MOVLW 'P'
MOVWF L2_C3
MOVLW 'o'
MOVWF L2_C4
MOVLW 's'
MOVWF L2_C5
MOVLW 'i'
MOVWF L2_C6
MOVLW 'c'
MOVWF L2_C7
MOVLW 'a'
MOVWF L2_C8
MOVLW 'o'
MOVWF L2_C9
MOVLW '_'
MOVWF L2_C10
MOVLW '0'
MOVWF L2_C11
MOVLW '.'
MOVWF L2_C12
MOVLW ' '
MOVWF L2_C13
MOVLW ' '
MOVWF L2_C14
MOVLW ' '
MOVWF L2_C15
CALL LCD_LINHA_1
CALL LCD_LINHA_2
RETURN
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * Rotina para a Mensagem 5 no LCD *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
Mens_5 ; d(mm) Med(E-13)C
; ____ 0,xxyy
MOVLW 'd'
MOVWF L1_C0
MOVLW '('
MOVWF L1_C1
MOVLW 'm'
MOVWF L1_C2
MOVLW 'm'
MOVWF L1_C3
MOVLW ')'
94
MOVWF L1_C4
MOVLW ' '
MOVWF L1_C5
MOVLW 'M'
MOVWF L1_C6
MOVLW 'e'
MOVWF L1_C7
MOVLW 'd'
MOVWF L1_C8
MOVLW '('
MOVWF L1_C9
MOVLW 'E'
MOVWF L1_C10
MOVLW '-'
MOVWF L1_C11
MOVLW '1'
MOVWF L1_C12
MOVLW '3'
MOVWF L1_C13
MOVLW ')'
MOVWF L1_C14
MOVLW 'C'
MOVWF L1_C15
; d(mm) Med(E-13)C
; ____ 0,xxyy
MOVLW ' '
MOVWF L2_C0
MOVLW ' '
MOVWF L2_C4
MOVLW ' '
MOVWF L2_C5
MOVLW ' '
MOVWF L2_C6
MOVLW ' '
MOVWF L2_C7
MOVLW '0'
MOVWF L2_C8
MOVLW ','
MOVWF L2_C9
MOVLW 'x'
MOVWF L2_C10
MOVLW 'x'
MOVWF L2_C11
MOVLW 'y'
MOVWF L2_C12
MOVLW 'y'
MOVWF L2_C13
MOVLW ' '
MOVWF L2_C14
MOVLW ' '
MOVWF L2_C15
CALL LCD_LINHA_1
CALL LCD_LINHA_2
RETURN
95
3) Rotinas auxiliares às rotinas de mensagens.
Figura A7 – Rotinas de apoio às de Mensagens.
Estas rotinas, em linguagem assembly, ficaram da seguinte forma:
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * Rotina para se escrever na linha 1 do LCD *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; Esta rotina escreve na linha 1 do LCD o seguinte: "END.(HEXA) DADO"
LCD_LINHA_1
BCF RS ; Seleciona o display LCD p/ comandos.
MOVLW 0X80 ; Comando para posicionar o cursor
CALL ESCREVE ; Linha 1 / Coluna 0
BSF RS ; Seleciona o display p/ dados
; Comandos para escrever o texto desejado
; na linha 1 do display LCD.
MOVF L1_C0,W ; W Å L1_C0
96
CALL ESCREVE
MOVF L1_C1,W ; W ÅL1_C1
CALL ESCREVE
MOVF L1_C2,W ; W Å L1_C2
CALL ESCREVE
MOVF L1_C3,W ; W Å L1_C3
CALL ESCREVE
MOVF L1_C4,W ; W Å L1_C4
CALL L1_C6,W ; W Å L1_C6
CALL ESCREVE
MOVF L1_C7,W ; W Å L1_C7
CALL ESCREVE
MOVF L1_C8,W ; W ÅL1_C8
CALL ESCREVE
MOVF L1_C9,W ; W Å L1_C9
CALL ESCREVE
MOVF L1_C10,W ; W Å L1_C10
CALL ESCREVE
MOVF L1_C11,W ; W Å L1_C11
CALL ESCREVE
MOVF L1_C12,W ; W Å L1_C12
CALL ESCREVE
MOVF L1_C13,W ; W Å L1_C13
CALL ESCREVE
MOVF L1_C14,W ; W Å L1_C14
CALL ESCREVE
MOVF L1_C15,W ; W Å L1_C15
CALL ESCREVE
RETURN ; RETORNA
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * Rotina para se escrever na linha 2 do LCD *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; Esta rotina escreve na linha 2 do LCD o seguinte: "END.(HEXA) DADO"
LCD_LINHA_2
BCF RS ; Seleciona o display p/ comando
MOVLW 0XC0 ; Comando para posicionar o cursor
CALL ESCREVE ; LINHA 2 / COLUNA 0.
BSF RS ; Seleciona o display p/ dados
; Comandos para escrever o texto desejado
; na linha 2 do display LCD.
MOVF L2_C0,W ; W Å L2_C0
CALL ESCREVE
MOVF L2_C1,W ; W ÅL2_C1
CALL ESCREVE
MOVF L2_C2,W ; W Å L2_C2
CALL ESCREVE
MOVF L2_C3,W ; W Å L2_C3
CALL ESCREVE
MOVF L2_C4,W ; W Å L2_C4
CALL ESCREVE
MOVF L2_C5,W ; W Å L2_C5
CALL ESCREVE
97
MOVF L2_C6,W ; W Å L2_C6
CALL ESCREVE
MOVF L2_C7,W ; W ÅL2_C7
CALL ESCREVE
MOVF L2_C8,W ; W Å L2_C8
CALL ESCREVE
MOVF L2_C9,W ; W Å L2_C9
CALL ESCREVE
MOVF L2_C10,W ; W Å L2_C10
CALL ESCREVE
MOVF L2_C11,W ; W Å L2_C11
CALL ESCREVE
MOVF L2_C12,W ; W Å L2_C12
CALL ESCREVE
MOVF L2_C13,W ; W Å L2_C13
CALL ESCREVE
MOVF L2_C14,W ; W Å L2_C14
CALL ESCREVE
MOVF L2_C15,W ; W Å L2_C15
CALL ESCREVE
RETURN ; RETORNA
4) Rotina de controle da rotação do motor de passo
Quando em processamento, esta rotina realiza o controle do motor de passo para
que ele desloque a mesa móvel em 1mm aproximadamente, como mostrado pelo programa
assembly abaixo e seu fluxograma na Figura A8 logo na seqüência.
; **************************************************************************************
; * Rotina para o motor de passo mover a mesa 1 mm no sentido anti-horário, distanciando da posicão_0 *
; **************************************************************************************
UM_MM
BCF Direcao ; Reseta Direção para girar sentido anti-horário o MP.
MOVLW .160 ; carrega número de passos necessários mover mesa 1 mm.
MOVWF VOLTA
NOVO_PASSO
BSF Clock_passo ;(1 Tcy) seta bit 1 PORTE, inicia um pulso de clock para um passo.
MOVLW .3 ; (1 Tcy)
CALL DELAY_MOTOR ; (2 Tcy) DELAY Motor para clock setado
BCF Clock_passo ; (1 Tcy)
MOVLW .2 ; (1 Tcy)
CALL DELAY_MOTOR ; (2 Tcy0 DELAY Motor para clock resetado
DECFSZ VOLTA,F ;(1ou2 TCy)VOLTAÅVOLTA-1, qdo zero salta próxima instrução.
GOTO NOVO_PASSO
RETURN
98
Figura A8 – Rotina controle 1mm deslocamento da mesa móvel.
5) As demais rotinas
Estas rotinas, apesar de serem retratadas por último, são também importantes.
Trata-se das rotinas:
HEXA_ASCII: converte hexadecimal para o código ASCII;
99
TROCA_NIBBLE: inverte a posição do nibble menos significativo com o
mais significativo;
DELAY_MOTOR: rotina de atraso para o motor de passo;
DELAY_MS: rotina de atraso de 1ms;
Figura A9 – Rotina para conversão hexadecimal em ASCII.
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * Rotina que converte o nibble menos significativo ou byte no seu hexa *
; * codificado em ASCII *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; O byte tem de estar em W antes de rodar esta rotina. Só o nibble menos significativo será convertido.
HEXA_ASCII ; o dado a ser convertido deverá estar presente no nibble
; menos significativo de W, assim: 0000 MNPQ.
ANDLW B'00001111' ; W <- W AND 0Fh. Mascarando o byte em W, optando
; pelo byte menos significativo.
MOVWF WTEMP ; WTEMP Å W
SUBLW 0x00 ; W Å 00h - W
BTFSC STATUS,Z ; Resultou em zero a operação anterior? (ou Z=1?)
RETLW 0x30 ; W Å 30h, que é o byte do caracter 0 (ZERO) em ASCII.
MOVF WTEMP,W ; W Å WTEMP
SUBLW 0x01 ; W Å 01h - W
100
BTFSC STATUS,Z ; Resultou em zero a operação anterior? (ou Z=1?)
RETLW 0x31 ; W Å 31h, que é o byte do caracter 1 (UM) em ASCII.
MOVF WTEMP,W ; W ÅWTEMP
SUBLW 0x02 ; W Å 02h - W
BTFSC STATUS,Z ; Resultou em zero a operação anterior? (ou Z=1?)
RETLW 0x32 ; W Å 32h, que é o byte do caracter 2 (DOIS) em ASCII.
MOVF WTEMP,W ; W Å WTEMP
SUBLW 0x03 ; W Å 03h - W
BTFSC STATUS,Z ; Resultou em zero a operação anterior? (ou Z=1?)
RETLW 0x33 ; W Å 33h, que é o byte do caracter 2 (TRES) em ASCII.
MOVF WTEMP,W ; W Å WTEMP
SUBLW 0x04 ; W Å 04h - W
BTFSC STATUS,Z ; Resultou em zero a operação anterior? (ou Z=1?)
RETLW 0x34 ; W Å34h, que é o byte do caracter 4 (QUATRO) em ASCII.
MOVF WTEMP,W ; W Å WTEMP
SUBLW 0x05 ; W Å 05h - W
BTFSC STATUS,Z ; Resultou em zero a operação anterior? (ou Z=1?)
RETLW 0x35 ; W Å 35h, que é o byte do caracter 5 (CINCO) em ASCII.
MOVF WTEMP,W ; W Å WTEMP
SUBLW 0x06 ; W Å 06h - W
BTFSC STATUS,Z ; Resultou em zero a operação anterior? (ou Z=1?)
RETLW 0x36 ; W Å 36h, que é o byte do caracter 6 (SEIS) em ASCII.
MOVF WTEMP,W ; W Å WTEMP
SUBLW 0x07 ; W Å 07h - W
BTFSC STATUS,Z ; Resultou em zero a operação anterior? (ou Z=1?)
RETLW 0x37 ; W Å 37h, que é o byte do caracter 7 (SETE) em ASCII.
MOVF WTEMP,W ; W Å WTEMP
SUBLW 0x08 ; W Å 08h - W
BTFSC STATUS,Z ; Resultou em zero a operação anterior? (ou Z=1?)
RETLW 0x38 ; W Å 38h, que é o byte do caracter 8 (OITO) em ASCII.
MOVF WTEMP,W ; W Å WTEMP
SUBLW 0x09 ; W Å 09h - W
BTFSC STATUS,Z ; Resultou em zero a operação anterior? (ou Z=1?)
RETLW 0x39 ; W Å 39h, que é o byte do caracter 9 (NOVE) em ASCII.
MOVF WTEMP,W ; W Å WTEMP
SUBLW 0x0A ; W Å 0Ah - W
BTFSC STATUS,Z ; Resultou em zero a operação anterior? (ou Z=1?)
RETLW 0x41 ; W Å 41h, que é o byte do caracter (A) em ASCII.
MOVF WTEMP,W ; W Å WTEMP
SUBLW 0x0B ; W Å 0Bh - W
BTFSC STATUS,Z ; Resultou em zero a operação anterior? (ou Z=1?)
RETLW 0x42 ; W Å 42h, que é o byte do caracter (B) em ASCII.
MOVF WTEMP,W ; W Å WTEMP
SUBLW 0x0C ; W Å 0Ch - W
BTFSC STATUS,Z ; Resultou em zero a operação anterior? (ou Z=1?)
RETLW0x43 ; W Å 43h, que é o byte do caracter (C) em ASCII.
MOVF WTEMP,W ; W Å WTEMP
SUBLW 0x0D ; W Å 0Dh - W
101
BTFSC STATUS,Z ; Resultou em zero a operação anterior? (ou Z=1?)
RETLW 0x44 ; W Å 44h, que é o byte do caracter (D) em ASCII.
MOVF WTEMP,W ; W ÅWTEMP
SUBLW 0x0E ; W Å 0Eh - W
BTFSC STATUS,Z ; Resultou em zero a operação anterior? (ou Z=1?)
RETLW 0x45 ; W Å 45h, que é o byte do caracter (E) em ASCII.
MOVF WTEMP,W ; W Å WTEMP
SUBLW 0x0F ; W Å0Fh - W
BTFSC STATUS,Z ; Resultou em zero a operação anterior? (ou Z=1?)
RETLW 0x46 ; W Å 46h, que é o byte do caracter (F) em ASCII.
RETURN ; Se nenhuma opção, então retornar qualquer W.
Figura A10 – Rotina inversão das posições dos nibbles.
102
:* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
;* Sub-rotina: Troca nibble menos significativo com o mais significativo de um Byte. *
:* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; Esta sub-rotina troca o nibble mais significativo com o menos significativo que chega a ela através
; do registrador W. Então: de:X3 X2 X1 X0 Y3 Y2 Y1 Y0
; para:Y3 Y2 Y1 Y0 X3 X2 X1 X0
TROCA_NIBBLE
CLRF STATUS
MOVWF WTEMP ; WTEMP Å W = X3 X2 X1 X0 Y3 Y2 Y1 Y0
MOVWF WTEMP1 ; WTEMP1 ÅW = X3 X2 X1 X0 Y3 Y2 Y1 Y0
RRF WTEMP,F ;Afeta C. WTEMP=inicial Æ C ÆX3 X2 X1 X0 Y3 Y2 Y1 Y0
; final Æ Y0 Æ C X3 X2 X1 X0 Y3 Y2 Y1
RRF WTEMP,F ;Afeta C.WTEMP=inicial Æ Y0 Æ C X3 X2 X1 X0 Y3 Y2 Y1
; final Æ Y1 ÆY0 C X3 X2 X1 X0 Y3 Y2
RRF WTEMP,F ;Afeta C.WTEMP=inicial Æ Y1 ÆY0 C X3 X2 X1 X0 Y3 Y2
; final Æ Y2 ÆY1 Y0 C X3 X2 X1 X0 Y3
RRF WTEMP,F ;Afeta C.WTEMP=inicial Æ Y2 ÆY1 Y0 C X3 X2 X1 X0 Y3
; final Æ Y3 ÆY2 Y1 Y0 C X3 X2 X1 X0
MOVLW B'00001111' ; Byte para mascarar WTEMP.
ANDWF WTEMP,F ; com o mascaramento de WTEMP, faz WTEMP =
; inicial Æ Y3 Æ Y2 Y1 Y0 C X3 X2 X1 X0
; operando Æ 0 0 0 0 1 1 1 1
; em WTEMP: operador AND Æ 0 0 0 0 X3 X2 X1 X0
RLF WTEMP1,F ; Afeta C.WTEMP=inicialÅ C Å X3 X2 X1 X0 Y3 Y2 Y1Y0Å
; final ÅX3Å X2 X1 X0 Y3 Y2 Y1Y0 C Å
RLF WTEMP1,F ;Afeta C.WTEMP=inicialÅX3Å X2 X1 X0 Y3 Y2 Y1Y0 C Å
; final ÅX2 Å X1 X0 Y3 Y2 Y1 Y0 C X3 Å
RLF WTEMP1,F ;Afeta C.WTEMP=inicialÅX2Å X1 X0 Y3 Y2 Y1 Y0 C X3 Å
; final ÅX1Å X0 Y3 Y2 Y1 Y0 C X3 X2 Å
RLF WTEMP1,F ;Afeta C.WTEMP=inicialÅX1Å X0 Y3 Y2 Y1 Y0 C X3 X2 Å
; final ÅX0Å Y3 Y2 Y1 Y0 C X3 X2 X1 Å
MOVLW B'11110000' ; Byte para mascarar WTEMP1.
ANDWF WTEMP1,F ; com o mascaramento de WTEMP1, faz WTEMP1 =
; inicial Æ X0 Å Y3 Y2 Y1 Y0 C X3 X2 X1
; operando Æ 1 1 1 1 0 0 0 0
; em WTEMP1: operador AND Æ Y3 Y2 Y1 Y0 0 0 0 0
MOVF WTEMP1,W
IORWF WTEMP,W ; faz ficar W Å Y3 Y2 Y1 Y0 X3 X2 X1 X0
MOVF WTEMP,W
RETURN
103
Figura A11 – Rotinas de atraso do motor e de 1ms.
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * Rotina de delay para acionamento do motor de passo *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
DELAY_MOTOR
MOVWF TEMPO1 ; ( 1 T
CY
) Carrega tempo1 (unidades de ms)
; ___________________________Inicio do Loop2_____________________________________________
MOVLW .120 ; ( 1 T
CY
)
MOVWF TEMPO0 ; ( 1 T
CY
) Carrega tempo0 (p/ contar 1ms)
; incluído estes dois T
CY
no Tempo Loop1.
; ___________________________Inicio do Loop1_______________________________________
CLRWDT ; ( 1 T
CY
) Limpa WDT (perde tempo)
DECFSZ TEMPO0,F ; ( 1ou 2 T
CY
) Fim de TEMPO0 ?
GOTO $-2 ; ( 2 T
CY
) Não – volta 2 instruções.
; Sim – salta GOTO
;
; ***************************************************
; * Tempo Loop1: T
CYS_1
= 1+1+1+1+2+118*(1+1+2)+1+2 =481
; ***************************************************
; ____________________________Fim do Loop1_______________________________________
104
DECFSZ TEMPO1,F ; ( 1ou 2 T
CY
) Fim do TEMPO1?
GOTO $-6 ; ( 2 T
CY
) Não – volta 6 instruções.
; Sim.
;
; ****************Para cada TEMP01 = 3****************
; Tempo1= 3 Æ 2 Æ 1 Æ 0
; * Tempo Loop2: T
CYS 2
= 481+1+2+481+1+2 + 481 + 2 =1451
; ***************************************************
; ____________________________Fim do Loop2______________________________________________
; *******************TEMP0 TOTAL******************
; Para TEMPO0=3
; * Tempo Total: T
TOTAL
= 1 + 1451 + 1 = 1453 * 1µs = 1,453ms
; ***************************************************
RETURN ; ( 1 T
CY
) Retorna.
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; * Rotina de delay (de 1ms até 256ms) *
; * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
DELAY_MS
MOVWF TEMPO1 ; ( 1 T
CY
) Carrega tempo1 (unidades de ms)
; ___________________________Inicio do Loop2_____________________________________________
MOVLW .250 ; ( 1 T
CY
)
MOVWF TEMPO0 ; ( 1 T
CY
) Carrega tempo0 (p/ contar 1ms)
; incluído estes dois T
CY
no Tempo Loop1.
; ___________________________Inicio do Loop1_______________________________________
CLRWDT ; ( 1 T
CY
) Limpa WDT (perde tempo)
DECFSZ TEMPO0,F ; ( 1ou 2 T
CY
) Fim de TEMPO0 ?
GOTO $-2 ; ( 2 T
CY
) Não – volta 2 instruções.
; Sim – salta GOTO
;
; ***************************************************
; Tempo Loop1: T
CYS_1
= 1+1+1+1+2+248*(1+1+2)+1+2 =1001
; ***************************************************
; ____________________________Fim do Loop1_______________________________________
DECFSZ TEMPO1,F ; ( 1ou 2 T
CY
) Fim do TEMPO1?
GOTO $-6 ; ( 2 T
CY
) Não – volta 6 instruções.
; Sim.
;
; ****************Para cada TEMP01 = 1****************
; Tempo1= 1 Æ 0
; * Tempo Loop2: T
CYS 2
= 1001+2 =1003
; ***************************************************
; ____________________________Fim do Loop2______________________________________________
; *******************TEMP0 TOTAL******************
; Para TEMPO0=1
; * Tempo Total: T
TOTAL
= 1 + 1003 + 1 = 1005 * 1µs = 1,005ms
; ***************************************************
RETURN ; ( 1 T
CY
) Retorna.
105
A2 – Estimando o torque do sistema motor-haste-mesa
Reimprimindo a Figura 2.2 (agora como Figura A13, para comodidade de
visualização e indicação do ponto de partida e operação do projeto) vê-se que o torque do
motor de passo é função da sua velocidade, esta é dada em pps (passos por segundo). Como
para cada passo é necessário que um pulso de clock acione o drive do motor, então basta
determinar quantos pulsos de clock estão sendo dados por segundo para se ter a velocidade do
motor. Para isto, deve-se verificar atentamente as rotinas UM_MM e DELAY_MOTOR,
como tentou-se fazer na seqüência.
A rotina UM_MM promove 160 passos do motor de passo, que foi a quantidade
que proporcionou a maior aproximação de um deslocamento de 1mm da mesa móvel. Mas,
quantos pulsos de clock está sendo dado por segundo? É importante observar que em cada
passo é chamada a sub-rotina DELAY_MOTOR por duas vezes, a primeira vez com a
variável TEMPO1 igual a 3 e na segunda vez com esta variável valendo 2. Antes de chamá-la
pela primeira vez fez-se o sinal clock ir para o nível lógico alto, o qual permanece neste nível
por aproximadamente 1,453ms, como pode-se verificar no próprio corpo desta rotina (mas,
considerando, também, o tempo das instruções BSF, MOVLW .3 e CALL), agrega-se mais
quatro ciclos de máquina, ou 4µs – resultando, então, em um tempo de nível alto total de
1,457ms. Terminado o referido tempo de atraso que manteve o clock em 1, fez-se o mesmo ir
para o nível lógico baixo e, novamente, foi chamada a rotina DELAY_MOTOR, com a
diferença que, agora, a variável TEMPO_1 é igual a 2. Assim, se for feito as contas como no
primeiro caso, chega-se a um valor de tempo aproximadamente igual a 0,974ms. Desse modo,
a forma de onda do sinal de clock deve ser, provavelmente:
106
Figura A12 – Forma de onda do sinal de clock do motor de passo.
Levando a velocidade de partida/operação de 411pps nas curvas de torque do
motor de passo, Figura A13, encontramos, aproximadamente, que o torque de partida de todo
o sistema é de 2.500 g.cm e que o torque de operação é de 4.300 g.cm. Portanto, está-se
trabalhando numa região de mais alto torque.
Figura A13 – Indicação do torque e velocidade de trabalho do sistema projetado.
Livros Grátis
( http://www.livrosgratis.com.br )
Milhares de Livros para Download:
Baixar livros de Administração
Baixar livros de Agronomia
Baixar livros de Arquitetura
Baixar livros de Artes
Baixar livros de Astronomia
Baixar livros de Biologia Geral
Baixar livros de Ciência da Computação
Baixar livros de Ciência da Informação
Baixar livros de Ciência Política
Baixar livros de Ciências da Saúde
Baixar livros de Comunicação
Baixar livros do Conselho Nacional de Educação - CNE
Baixar livros de Defesa civil
Baixar livros de Direito
Baixar livros de Direitos humanos
Baixar livros de Economia
Baixar livros de Economia Doméstica
Baixar livros de Educação
Baixar livros de Educação - Trânsito
Baixar livros de Educação Física
Baixar livros de Engenharia Aeroespacial
Baixar livros de Farmácia
Baixar livros de Filosofia
Baixar livros de Física
Baixar livros de Geociências
Baixar livros de Geografia
Baixar livros de História
Baixar livros de Línguas
Baixar livros de Literatura
Baixar livros de Literatura de Cordel
Baixar livros de Literatura Infantil
Baixar livros de Matemática
Baixar livros de Medicina
Baixar livros de Medicina Veterinária
Baixar livros de Meio Ambiente
Baixar livros de Meteorologia
Baixar Monografias e TCC
Baixar livros Multidisciplinar
Baixar livros de Música
Baixar livros de Psicologia
Baixar livros de Química
Baixar livros de Saúde Coletiva
Baixar livros de Serviço Social
Baixar livros de Sociologia
Baixar livros de Teologia
Baixar livros de Trabalho
Baixar livros de Turismo