Вы находитесь на странице: 1из 93

PMR2415 Microprocessadores em Automao e Robtica

Jun Okamoto Jr.

23 de fevereiro de 2015
Sumrio

I Teoria para Laboratrio 3

1 Introduo 4
1.1 Integrao com o PI-7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Sistema de Desenvolvimento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3 Estrutura dos Programas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

2 Microcontrolador PIC 9
2.1 Organizao da memria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2 Interrupes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3 Programao serial no circuito . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4 Programao dos bits de configurao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.5 Portas de entrada e sada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.6 Timer 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

3 Converso A/D 17
3.1 Converso A/D com o PIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

4 Display LCD 22
4.1 Interface com microcontrolador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.2 Instrues e dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.3 Caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.4 Biblioteca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

5 Comunicao serial 29
5.1 Comunicao serial no PIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

6 PWM 36
6.1 PWM com o PIC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37

7 Encoder 40

II Atividades de Laboratrio 43

8 Orientaes gerais 44
8.1 Critrios de avaliao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
8.2 Material para as atividades . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

1
SUMRIO SUMRIO

9 Atividade 1: Trabalhando com DipTrace 50


9.1 DipTrace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
9.2 Procedimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
9.3 Relatrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

10 Atividade 2: Layout e Fabricao 58


10.1 Procedimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
10.2 Relatrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

11 Atividade 3: Montagem e testes 62


11.1 Procedimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
11.2 Relatrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65

12 Atividade 4: Converso A/D com display LCD 66


12.1 Programa a ser desenvolvido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
12.2 Procedimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
12.3 Relatrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

13 Atividade 5: Comunicao serial 68


13.1 Anlise dos sinais de comunicao serial . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
13.2 Procedimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
13.3 Relatrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

14 Atividade 6: Acionamento de motor com PWM 71


14.1 Procedimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
14.2 Relatrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

15 Atividade 7: Leitura de encoder 73


15.1 Procedimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
15.2 Relatrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

16 Atividade 8: Estimativa de velocidade 75


16.1 Procedimentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
16.2 Relatrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76

III Apndices 78

2
Parte I

Teoria para Laboratrio

3
Captulo 1

Introduo

A disciplina de PMR2415 Microprocessadores em Automao e Robtica tem como objetivo passar


para o aluno conhecimentos sobre o projeto de hardware com microprocessadores e microcontroladores e
desenvolvimento de software com aplicaes voltadas automao e robtica. Assim, so abordados tpicos
presentes nessas reas tais como acionamento, sensoriamento, comunicao e interface com o usurio. O
curso est dividido em aulas expositivas, com 2 crditos e aulas de laboratrio com 2 crditos quinzenais.
Nas atividades de laboratrio o aluno construir sua prpria placa processadora com um microcontro-
lador, com a qual executar atividades desenvolvendo o software especfico para as reas de automao e
robtica. Com essa placa processadora possvel executar as seguintes tarefas:

Comunicao atravs de canal serial RS232C com outro computador ou terminal

Controle PWM de motor CC com driver externo

Efetuar leitura de encoder para determinar posio e velocidade do eixo de motor CC

Mostrar mensagens em display de LCD externo

Produzir sada digital em LED

Efetuar leitura digital de chave

Efetuar leitura analgica de potencimetro

Executar programao serial no circuito (ICSP) do microcontrolador

Com essa disciplina o aluno consolidar os conceitos de microprocessadores necessrios para a implemen-
tao de sistemas de controle para sistemas mecatrnicos. O aluno ter a oportunidade de montar seu
prprio hardware e programar com linguagem C os diversos elementos presentes num sistema microcon-
trolado.
As atividades do semestre envolvem aulas expositivas com a carga horria de 2 crditos semanais e
atividades de laboratrio quinzenais com mais 2 crditos.

1.1 Integrao com o PI-7


Essa disciplina faz parte da srie de disciplinas integrativas do programa de Mecatrnica, o Projeto
Integrativo do 7 semestre (PI-7), que visa o projeto e implementao de um sistema mecatrnico completo.
Esse projeto envolve conceitos apresentados em 5 disciplinas do 7 semestre:

4
1.1. INTEGRAO COM O PI-7 CAPTULO 1. INTRODUO

PMR2400 Controle e Automao II

PMR2405 Acionamentos para Automao

PMR2415 Microprocessadores em Automao e Robtica

PMR2430 Mecanismos para Automao

PMR2440 Programao para Automao

alm, claro, dos conceitos adquiridos nas disciplinas que compe a grade curricular, cursadas anterior-
mente.
Procura-se com esta atividade:

Aplicar os conhecimentos essenciais para a construo de um dispositivo mecatrnico, envolvendo


hardware mecnico e eletrnico, software e controles;

Criar um ambiente propcio para o exerccio da atividade de projeto em Engenharia, por exigir que
os alunos organizem-se em equipes, coordenem suas atividades e respeitem seus cronogramas;

Unificar, num nico trabalho, parte da avaliao de diversas disciplinas, fazendo com que o aluno
possa aproveitar melhor o tempo.

Preparar o aluno para as atividades de projeto mais complexas que seguem-se em seu curso, par-
ticularmente PMR2450 Projeto de Mquinas e PMR2500/PMR2550 Projeto de Concluso de
Curso.

Estes objetivos, no PI-7, so atingidos com a implementao de uma mquina com controle numrico
computadorizado, envolvendo mltiplos processadores. As caractersticas da mquina a ser implementada
variam a cada ano.
Mais especificamente, os conhecimentos que sero aplicados so:

system design ou projeto de sistemas

comando numrico computadorizado

controle de trajetria para robs e mquinas NC

controle em malha fechada

acionamento de motores

projeto de hardware com microcontroladores

projeto e construo de mecanismos

modelagem e implementao de software para controle

5
1.2. SISTEMA DE DESENVOLVIMENTO CAPTULO 1. INTRODUO

1.2 Sistema de Desenvolvimento


Todo o desenvolvimento de software ser feito utilizando-se o MPLAB X [3] e o compilador MPLAB
XC8 [4], ambos disponveis sem custo no site da Microchip (http://www.microchip.com). Nesse curso
utilizado o PICkit 3 para gravar o microcontrolador PIC16F886 que estar disponvel para cada bancada
no laboratrio.
Os computadores do laboratrio contm o MPLAB X e o compilador C MPLAB XC8 instalados para
uso nas aulas de laboratrio. Os alunos devem instalar esses dois pacotes de software em seus prprios
computadores para fazerem o desenvolvimento dos programas antes das aulas de maneira a atender a
entrega do cdigo no incio da aula.
Para a preparao da atividade antes da aula de laboratrio, os alunos podero utilizar um simulador
do PIC, o Real PIC Simulator , disponvel em verso demo no site da Digital Electro Soft (http://
digitalelctrosoft.com). Um projeto configurado especificamente para o laboratrio de PMR2415 est
disponvel no site da disciplina (http://sites.poli.usp.br/pmr/lpa/pmr2415).

1.3 Estrutura dos Programas


Os programas de controle seguem uma estrutura semelhante apresentada a seguir. Inicialmente, so
necessrias algumas linhas particulares da implementao com o PIC. A seguir, so definidas variveis
globais incluindo variveis que so atualizadas na rotina de interrupo. Depois vem as subrotinas, rotina
de interrupo e por ltimo o programa principal.
O programa principal possui uma fase inicial de declaraes de variveis e inicializaes. Depois vem
um loop infinito de controle. O que deve ser colocado dentro desse loop e o que deve ser colocado na rotina
de interrupo ser definido em cada atividade onde ficaro claros os motivos de tal implementao.
Um detalhe importante sobre o loop de controle, que o mesmo nunca deve parar o processa-
mento aguardando um evento, como por exemplo, esperar um caracter chegar pelo canal serial utilizando
getch()1 que no retorna da funo enquanto no for recebido um caracter no buer de recepo. Dentro
do loop de controle um evento deve ser testado se ocorreu ou no, no caso de ter ocorrido deve ser tratado
e de no ter ocorrido, o processamento deve prosseguir. Ainda no exemplo anterior, dentro do loop de
controle, o recebimento de um caracter pelo canal serial deve ser feito com a funo chkchr() que retorna
o caracter recebido ou o nmero inteiro sem sinal 255 caso nenhum caracter esteja disponvel no buer de
recepo. Caso o loop de controle esteja muito rpido pode-se utilizar um atraso por software disponvel
atravs das funes DelayMs() e DelayUs() da biblioteca delay.h.
/*
* File : main . c
* Author : Jun Okamoto Jr .
*
* Created on January 6 , 2015 , 2:37 PM
*/

# include < xc .h > // definies dos m i c r o c o n t r o l a d o r e s


# include < stdio .h > // I / O bsico ( printf , sprintf , ...)
# include < stdlib .h > // rotinas adicionais ( itoa , ltoa , ultoa , ...)
...

// Defines

1O comportamento padro dessa rotina no retornar enquanto no chegar um caracter pelo canal serial.

6
1.3. ESTRUTURA DOS PROGRAMAS CAPTULO 1. INTRODUO

# define ... // todas as definies usadas no programa

// Enums

// Liga / desliga LED e cursor LCD


enum {
off , on
};

// PIC16F886 Configuration Bit Settings


// CONFIG1
# pragma config FOSC = EC // Oscillator Selection bits ( EC : I / O function on RA6 / OSC2 ...
# pragma config WDTE = OFF // Watchdog Timer Enable bit ( WDT disabled and can be enab ...
# pragma config PWRTE = ON // Power - up Timer Enable bit ( PWRT enabled )
# pragma config MCLRE = ON // RE3 / MCLR pin function select bit ( RE3 / MCLR pin function ...
# pragma config CP = OFF // Code Protection bit ( Program memory code protection is ...
# pragma config CPD = OFF // Data Code Protection bit ( Data memory code protection i ...
# pragma config BOREN = ON // Brown Out Reset Selection bits ( BOR enabled )
# pragma config IESO = OFF // Internal External Switchover bit ( Internal / External Swi ...
# pragma config FCMEN = OFF // Fail - Safe Clock Monitor Enabled bit ( Fail - Safe Clock Mo ...
# pragma config LVP = OFF // Low Voltage Programming Enable bit ( RB3 pin has digital ...
// CONFIG2
# pragma config BOR4V = BOR40V // Brown - out Reset Selection bit ( Brown - out Reset set ...
# pragma config WRT = OFF // Flash Program Memory Self Write Enable bits ( Write ...

// Project includes

# include " always . h "


# include " delay . h "
# include " lcd . h "
# include " serial . h "
# include " adc . h "

// Variveis Globais

// Subrotinas

// Rotina de tratamento de interrupes


void interrupt isr ( void ) {

// Programa Principal
void main ( void ) {
// -> Declarao de variveis
// -> Inicializao de variveis
// -> Configuraes do processador
// -> inicializao dos dispositivos

while (1) { // Loop Principal


...
// Nunca deve se parar esse loop esperando um evento ( como a chegada de um caracter
// pelo canal serial , por exemplo ). Os dispositivos devem ser lidos e no caso de
// no conterem informaes novas o loop deve continuar . No caso de

7
1.3. ESTRUTURA DOS PROGRAMAS CAPTULO 1. INTRODUO

// informaes novas feito o processamento


.
.
...
} // fim do Loop Principal
} // fim do Programa Principal

8
Captulo 2

Microcontrolador PIC

A famlia 16 dos microcontroladores PIC da Microchip composta por uma srie de microcontroladores
de 8-bits de dados com instrues de 14-bits e recursos bsicos de I/O, timers, conversores A/D e canais
de comunicao serial.
O PIC16F886 foi adotado nesse curso pois uma verso recente do antigo PIC16F76, cujo custo menor
do que o de verses anteriores e encontra-se em produo. Nessa verso atual muitas funes avanadas
foram adicionadas em relao s anteriores, mas nesse curso so explorados recursos somente presentes
em todas as verses da famlia, no sendo utilizadas funes avanadas. O que se pretende com isso
a exposio de conceitos que esto presentes nessa famlia de microcontroladores e que so semelhantes
em diversas outras famlias de microcontroladores e no executar funes com alto desempenho como as
que as funes avanadas do PIC16F886 permitem. Assim, apesar desse documento conter explicaes
especficas para o PIC16F886 os conceitos apresentados so encontrados de forma semelhante em muitos
microcontroladores alm dos da Microchip.
O microcontrolador PIC16F886 disponvel em encapsulamento SPDIP (Skinny Plastic Dual-In-Line
package) de 28 pinos e possui as seguintes caractersticas principais:

Frequncia de operao at 20MHz

8 kwords de memria flash para programas

368 bytes de memria RAM de dados

256 bytes de memria EEPROM

3 portas de I/O com 8-bits cada

3 Timers: 2 de 8-bits e 1 de 16-bits, at 4 PWM de 10-bits

2 canais de comunicao serial:1 sncrono e 1 assncrono

11 canais de converso A/D de 10-bits

13 interrupes

Programao no circuito (ICSP In-Circuit Serial Programming) atravs de 2 pinos

9
2.1. ORGANIZAO DA MEMRIA CAPTULO 2. MICROCONTROLADOR PIC

Assim como a maioria dos microcontroladores as configuraes do PIC16F886 so feitas por meio de
SFRs (Special Function Registers). Esses registradores esto presentes em endereos especficos no mi-
crocontrolador e cada um, ou conjunto de alguns, configuram o funcionamento dos diversos mdulos do
microcontrolador.
As informaes apresentadas a seguir foram retiradas do data sheet PIC16F882/883/884/886/887 [2] da
Microchip e foram resumidas especificamente para as atividades de laboratrio a serem desenvolvidas nesse
curso. Assim, para um conhecimento mais aprofundado e utilizao geral do hardware e software da famlia
de microcontroladores PIC16F88X deve ser consultado o data sheet. Foi includa nessa seo tambm
uma descrio das rotinas de bibliotecas em XC8 que esto disponveis para utilizao no curso. Essas
bibliotecas foram retiradas da Internet e adaptadas para as caractersticas do hardware utilizado no curso
e acrescidas com algumas funcionalidades adicionais. As rotinas presentes nas bibliotecas implementam
em Linguagem C as diversas configuraes necessrias para cada mdulo do PIC16F886 e funes de
acesso alguns dos mdulos.

2.1 Organizao da memria


A famlia de microcontroladores PIC16F88x segue a arquitetura Harvard onde os espaos das memrias
de programa de de dados so separados. A memria de programa do PIC16F886 composta por 8192
palavras de 14-bits e do tipo Flash que pode ser apagada e gravada no circuito. O vetor de Reset
implementado no endereo 0000h enquanto quer o vetor de interrupo implementado no endereo 0004h.
A memria de dados particionada em 4 bancos de 128 bytes onde os endereos baixos de cada banco so
reservados para os Special Function Registers e nos endereos acima dos Special Function Registers esto
localizados os registradores de uso geral (para os dados dos programas do usurio) que no PIC16F886
totalizam 368 bytes. O PIC16F886 possui tambm um espao de memria EEPROM (no voltil) de 256
bytes que pode ser gravado e lido por instrues especficas pelo programa do usurio. Normalmente essa
memria utilizada para armazenar parmetros de configurao que se deseja preservar de maneira mais
permanente.

2.2 Interrupes
A famlia de microcontroladores PIC16F88x possui 24 interrupes1 agrupadas num nico pedido geral
de interrupo para o microcontrolador. Cada interrupo pode ser mascarada individualmente, atra-
vs de um bit especfico. Alm disso, todas podem ser habilitadas e desabilitadas atravs do bit GIE
(INTCON<7>). Se GIE = 1 todas a interrupes que no estiverem mascaradas podero gerar um pe-
dido de interrupo para o microcontrolador. Caso contrrio, se GIE = 0, todas as interrupes estaro
desabilitadas e no sero tratadas pelo microcontrolador, independentemente da mscara.
Na ocorrncia de um pedido de interrupo atendido o GIE automaticamente limpo (GIE = 0),
desabilitando assim qualquer pedido de interrupo subsequente. No retorno da rotina de interrupo,
o GIE automaticamente re-habilitado (GIE = 1) permitindo que novas interrupes no mascaradas
sejam tratadas.
importante observar que cada interrupo que ocorre levanta2 um flag especfico e que esse flag
levantado independente das interrupes estarem habilitadas ou no. Por exemplo, no caso da interrupo
1 Alguns microcontroladores da famlia PIC16F87X possuem 14 interrupes
2 no encontrei uma traduo direta para o portugus, em ingls o verbo "to set": to set a flag

10
2.3. PROGRAMAO SERIAL NO CIRCUITO CAPTULO 2. MICROCONTROLADOR PIC

do Timer 0, seu estouro causar o flag T0IF a se tornar "1", mesmo que GIE = 0. Por outro lado, mesmo
que GIE = 1, no caso da interrupo do Timer 0, essa s ser atendida se T0IE = 1, isto , se a interrupo
estiver desmascarada.
Assim, dever existir uma nica rotina geral para tratamento de interrupes que dever testar se cada
interrupo a ser tratada possui seu flag de pedido igual a "1" e se est desmascarada. Essa rotina no
aceita parmetros e no retorna nenhum valor. Por exemplo, no caso de interrupo do Timer 0, deve-se
testar se T0IF = 1 e se T0IE = 1 ao mesmo tempo. Somente nessa condio que essa interrupo dever
ser tratada. O mesmo dever ser feito para as outras interrupes. O trecho de programa abaixo ilustra
esse exemplo.
void interrupt isr ( void ) { // nica rotina geral de
// tratamento de interrupes ,
// o nome pode ser qualquer
if ( T0IE && T0IF ) { // se a interupo do Timer 0 ocorreu
// tratamento da interrupo do Timer 0
}
if ( TXIE && TXIF ) { // se a interrupo de transmisso
// serial ocorreu
// tratamento da interrupo de transmisso serial
}
...
}

2.3 Programao serial no circuito


A famlia de microcontroladores PIC16F88x pode ser programada serialmente enquanto o microcontrola-
dor est conectado ao circuito (ICSP In-Circuit Serial Programming). Isso feito atravs de duas linhas,
uma para clock (PGC) e outra para dados (PGD) e mais trs linhas para alimentao (VDD), terra (VSS)
e tenso de programao (MCLR/VPP). A ICSP dispensa a retirada do chip do circuito para que seja
apagado e reprogramado, essa caracterstica muito conveniente pois pode-se colocar o microcontrolador
no circuito e jamais remov-lo mesmo durante o ciclo de desenvolvimento de software. O gravador PICKit
3 usado no curso capaz de usar esse mtodo para programar diversas famlias de microcontroladores
PIC incluindo a PIC16F88X.

2.4 Programao dos bits de configurao


Os bits de configurao podem ser programados (com valor "0") ou deixados sem programar (com valor
"1") que o valor default de fbrica. O valor inicial da palavra de configurao FFFFh. Esses bits
esto organizados em duas palavras de 14-bits e esto mapeados nos endereos 2007h (CONFI1) e 2008h
(CONFIG2). Esses endereos esto alm do espao de memria de programa do usurio e pode ser
acessado somente durante a programao do microcontrolador.
No compilador XC8 esses bits de configurao podem ser programados atravs da diretiva e funo
macro #pragma config. Os bits devem ser especificados pelo seu nome constante na documentao e
atribudo seu estado (ON ou OFF) com um sinal de igual ( = ) ou o seu valor especificado na documentao.
Os diversos bits poder ser separados por vrgula ( , ) ou colocados em diretivas independentes.
Os bits de configurao para o PIC16F886 so apresentados abaixo com os respectivos valores que
podem ser programados em cada um deles, os valores em negrito so os que devem ser alterados da

11
2.4. PROGRAMAO DOS BITS DE CONFIGURAO
CAPTULO 2. MICROCONTROLADOR PIC

configurao default para uso nesse curso, os demais podem ser deixados no valor default:

FOSC configurao do oscilador ( RC, RCIO, INTOSC, INTOSCIO, EC, HS, XT, LP )

WDTE habilita Watchdog Timer(ON ou OFF)

PWRTE habilita Power-up Timer (ON ou OFF)

MCLRE seleciona funo do pino RE3/MCLR (ON ou OFF)

CP habilita proteo de cdigo da memria de programa (ON ou OFF)

CPD habilita proteo dos dados (ON ou OFF)

BOREN habilita Brown Out Reset: BOREN (ON ou OFF)

IESO habilita chaveamento entre oscilador interno e externo durante inicializao (ON ou OFF)

FCMEN habilita monitor de clock seguro contra falhas (ON ou OFF)

LVP habilita programao ICSP com baixa tenso (ON ou OFF)

BOR4V seleciona nvel de tenso de Brown Out (ON ou OFF)

WRT habilita proteo de escrita na memria flash de programa (256, 1FOURTH, HALF, OFF)

Para utilizar a diretiva com a funo macro #pragma config e as definies de nomes dos bits deve
ser includo o header xc.h que carregara as definies para o microcontrolador correto de acordo com o
definido no projeto do MPLAB X. Os detalhes sobre essas definies e configuraes esto data sheet da
famlia PIC16F88x.
O MPLAB X possui uma tela que auxilia na gerao de cdigo em Linguagem C para a programao
dos bits de configurao. Essa tela pode ser acessada atravs do menu Windows > PIC Memory Views
> Configuration Bits. A Figura 1 mostra essa tela e as configuraes utilizadas nesse curso. Os valores
configurados aparecem em vermelho.

Figura 1: Tela para bits de configurao do MPLAB X

Depois de fazer as alteraes necessras nos bits, clica-se no boto "Generate Source Code to Output"
e o cdigo ser gerado numa nova janela de sada. A partir da, pode-se selecionar o texto e copiar &
colar na janela do programa main.c. A listagem com a estrutura geral do programa apresentada no item
1.3 contm o resultado do cdigo fonte da configurao de bits j colado no programa.

12
2.5. PORTAS DE ENTRADA E SADA CAPTULO 2. MICROCONTROLADOR PIC

2.5 Portas de entrada e sada


As portas de entrada e sada utilizam pinos do microcontrolador que so multi-funcionais. Qualquer
funo programada num desses pinos desabilita a funo de entrada e sada. Assim, se nenhuma funo
for programada num desses pinos sua funo padro ser de entrada ou sada. Se um determinado pino
ser usado para entrada ou para sada, isso deve ser configurado num SFR: TRISA, TRISB e TRISC para
as portas A, B e C, respectivamente, para o PIC16F886. As Portas A, B e C possuem 8-bits cada. A
programao de um bit igual a 0 num SFR TRISx configura o bit da porta para sada, enquanto que a
programao de um bit igual a 1 configura o bit da porta para entrada. O default para todos os bits dos
SFRs TRISx "1", ou seja todos os bits de todas as portas esto inicialmente configurados para entrada.
Essa uma condio segura para se evitar curto-circuitos com sadas que esteja conectadas nesses pinos.
Na fase de inicializao do programa principal, as sadas devem ser configuradas.
Por exemplo, as linhas de programa abaixo configuram os bits 2, 3 e 4 da Porta C para sada:
TRISC = 0 xf3 ; // bits 2 e 3 da Porta C so sada e os demais entrada
// (0 xf3 = 0 b11110011 ) , todos os bits so alterados
TRISC4 = 0; // bit 4 da Porta C sada e os outros bits no so alterados

Outro exemplo o caso em que se deseja alterar a configurao de alguns bits e manter a configurao
de outros inalterada. Para isso pode-se ler o valor do registrador de configurao e colocar os bits em zero
com uma operao AND bit a bit:
TRISC &= 0 b11110001 ; // faz os bits 2 , 3 e 4 da Porta C como sada
// e no altera a configurao dos demais

Para se alterar o valor de um bit de uma porta, ou seja, fazer com que o valor de um pino mude
pode-se atribuir o valor ao pino diretamente como se fosse a atribuio de valor uma varivel:
RC2 = 1; // bit 2 da Porta C vai para nivel lgico HIGH

Da mesma maneira pode-se ler o valor de um bit de uma porta que corresponde ao valor lgico de um
pino:
bit var ; // varivel do tipo bit
...
var = RC5 ; // o valor do bit 5 , Porta C atribuido varivel var

Os pinos das Portas A e B so compartilhadas com as entradas de sinal analgico para os canais de
converso A/D e no caso de uso como pinos de I/O alm da configurao dos SFRs TRISA e TRISB devem
ser configurados os SFRs ANSEL e ANSELH para as Portas A e B, respectivamente. Se o bit da porta
A for usado como I/O digital deve-se escrever um "0" no bit correspondente do SFR ANSEL, lembrando
que no PIC16F886 s existem os canais de converso AN0 at AN4 nessa porta, ou seja, qualquer escrita
nos bits 5, 6 e 7 desse registrador ignorada. Na Porta B, os pinos correspondentes aos bits 0 a 5 so
compartilhados com os canais de converso A/D de 8 a 13 (6 canais de converso A/D, AN8 a AN13) e
deve-se escrever um "0" no bit correspondente do SFR ANSELH se esses bits da porta B forem usados
como I/O digital. Da mesma maneira que no caso de ANSEL, a escrita de qualquer valor nos bits 6 e 7
de ANSELH ignorada.

2.6 Timer 0
O mdulo do Timer 0 possui as seguintes caractersticas:

13
2.6. TIMER 0 CAPTULO 2. MICROCONTROLADOR PIC

contador/timer de 8-bits (sempre incrementando)

pode ser escrito e lido

prescaler de 8-bits programvel por software

seleo de clock interno ou externo

seleo de borda para o clock externo

interrupo no transbordo de FFh para 00h

O Timer 0 possui dois modos de operao: contador e timer. No modo contador, o Timer 0 conta pulsos
que entram no pino RA4/T0CKI. J no modo timer, utilizado o clock interno do microcontrolador
(CLKOUT) que corresponde a frequncia do oscilador dividido por 4 (FOSC/4). O modo timer ser
utilizado nesse curso e descrito com mais detalhes a seguir.
O modo timer selecionado fazendo-se o bit T0CS igual a 0 (OPTION_REG<5>). Nesse modo o
CLKOUT passa opcionalmente por um prescaler de 8-bits que pode dividir a frequncia desse clock por
valores entre 2 e 256 em incrementos de potncias de 2 (2, 4, 8, 16, 32, 64, 128, 256). O valor de diviso
da frequncia selecionado atravs de 3 bits, PS2, PS1 e PS0 (OPTION_REG<3:0>).
Esse prescaler compartilhado com o Watchdog Timer3 e deve-se selecionar se o prescaler ser usado
com o Timer 0 ou com o Watchdog Timer. Para tanto programa-se 0 no bit PSA (OPTION_REG<3>), o
que configura o prescaler para uso com o Timer 0, que a configurao usada nas atividades de laboratrio.
Os demais bits do OPTION_REG no afetam o funcionamento do Timer 0 nesse curso e no precisam
ser definidos. Todas as configuraes que podem ser definidas pelo OPTION_REG podem ser vistas na
pgina 79 do data sheet do PIC16F88x.
O Timer 0 incrementado a cada pulso de clock, seja interno ou recebido no pino T0CKI. Sempre
que ocorre a mudana de valor da contagem de FFh para 00H (transbordo ou estouro) gerada uma
interrupo sinalizada pelo bit T0IF (INTCOM<2>) que vai de 0 para 1. Essa interrupo pode ser
mascarada se o bit T0IE (INTCON<5>) for limpo (T0IE = 0). Se for esse o caso o pedido de interrupo
no ser gerado, mas mesmo assim o bit T0IF ir para 1. No caso de ocorrer a interrupo, o bit T0IF
deve ser limpo por software pela rotina de tratamento de interrupo do Timer 0 antes de se re-habilitar
essa interrupo. Alm disso, deve-se lembrar que para que qualquer interrupo seja atendida, o bit GIE
(INTCON<7>) deve ter sido feito = 1.
Num exemplo prtico, deseja-se gerar uma interrupo peridica a cada 5 ms aproximadamente usando-
se o Timer 0, considerando que a frequncia do oscilador do microcontrolador 20 MHz.
Assim, a frequncia de clock interno CLKOUT 5 MHz (= 20 MHz / 4). Configurando-se o prescaler
para diviso por 256, tem-se que:

Perodo do clock interno = 200 ns

Sada do prescaler = 51,20 ms (= 200 ns 256)

Valor a ser programado como contagem inicial no Timer 0 = 157 (= 255 98) pois 51,20 ms 98
= 5,0176 ms

O trecho de programa abaixo mostra como configurar o Timer 0 e como habilitar a sua interrupo:
3 no utilizado nesse curso

14
2.6. TIMER 0 CAPTULO 2. MICROCONTROLADOR PIC

# define POL LING_P ERIOD 98 // 5 ,0176 ms


# define TMR 0_PRES CALER 7 // divide por 256
# define TMR0_SETTING (0 xff - POLLIN G_PERI OD ) // valor inicial da contagem do Timer 0...
...
void main ( void ) {
...
// Timer 0
// esse exemplo executa a configurao do Timer 0 acessando o SFR OPTION_REG inteiro
// possivel efetuar a mesma configurao acessando cada bit i nd i vi d ua lm e nt e
OPTION_REG &= 0 b11000000 ; // T0CS =0 , T0SE =0 , PSA =0 , PS2 =0 , PS1 =0 , PS0 =0 ,
// no altera os bits 6 e 7 de OPTION_REG
OPTION_REG |= TM R0_PRE SCALER ; // configura o prescaler nos bits 0 , 1 e 2
// no altera os outros bits
TMR0 = TMR0_SETTING ; // valor inicial do Timer 0

// Interrues
T0IE = 1; // habilita a interrupo do Timer 0
GIE = 1; // habilita interrupes
...
}

No trecho de programa acima, deve-se lembrar que a operao


AND bit a bit (&) programa "0"s e que a operao OR bit a
bit (|) programa "1"s.

A rotina de tratamento de interrupo deve verificar se os bits T0IE e T0IF so ambos iguais a 1 para,
somente nesse caso, executar o tratamento necessrio para a interrupo do Timer 0. Nessa rotina de
tratamento do Timer 0 um novo valor de contagem inicial deve ser carregado no Timer 0 para se ajustar
o tempo que dever decorrer at a prxima interrupo.
O trecho de programa abaixo corresponde a rotina de tratamento de interrupo para esse exemplo:
void interrupt isr ( void ) { // rotina geral de tratamento de interrupes

// Timer 0
if ( T0IE && T0IF ) { // se estiver habilitada e ocorreu a interrupo

// executa aqui o que for necessrio

TMR0 = TMR0_SETTING ; // recarrega a contagem incial


T0IF = 0; // limpa o flag de interrupo
} // fim do tratamento do Timer 0

// tratamento de outras interrues aqui

Timer 1
O mdulo do Timer 1 possui as seguintes caractersticas:

contador/timer de 16-bits (par de registradores TMR1H:TMR1L)

15
2.6. TIMER 0 CAPTULO 2. MICROCONTROLADOR PIC

prescaler de 3-bits programvel por software

oscilador LP opcional

operao sincrona e assincrona

habilita contagem por Gate via comparador ou pino T1G

seleo de borda para o clock externo

interrupo no transbordo de FFFFh para 0000h

desperta em transfordo

base de tempo para funo de captura / comparao

disparo por evento especial (com ECCP)

sincronizao da sada do comparador com o clock do Timer 1

16
Captulo 3

Converso A/D

atravs do uso de um conversor A/D que se pode fazer a leitura de sinais contnuos por sistemas digitais.
Desta maneira, um valor de tenso analgico poder ser convertido para um valor numrico digital numa
varivel inteira sem sinal dentro de um programa num microcontrolador. Existem diversos mtodos para
converso analgica / digital (A/D). Seja qual for o mtodo, o sinal analgico amostrado em intervalos
discretos e convertido num nmero digital que representa a amplitude do sinal. O processo de converso
sempre demora um certo tempo para ser completado e sempre ocorrer um erro de aproximao. Quanto
maior o nmero de bits do conversor, menor ser o erro de aproximao.
Um dos mais utilizados atualmente em microcontroladores o mtodo de aproximaes sucessivas
[5] que utilizado pelo PIC 16F886. A Figura 2 mostra a estrutura bsica de um conversor A/D por
aproximaes sucessivas. Neste tipo de conversor utilizado um conversor D/A para gerar nveis de
tenso que so comparados com a tenso analgica de entrada que se deseja converter. Um cdigo binrio
gerado para o conversor D/A sempre dividindo no meio a faixa de tenso que se aproxima da tenso
de entrada. Esse processo de inicia pelo bit mais significativo e prossegue at o bit menos significativo,
quando o processo termina. A Figura 3 mostra a operao desse tipo de conversor com um exemplo de 4
bits.

Figura 2: Estrutura bsica de um conversor A/D por aproximaes sucessivas (adaptado de [5])

3.1 Converso A/D com o PIC


O mdulo de converso analgica para digital (A/D) do PIC16F886 possui 11 canais compartilhando os
pinos das Portas A e B, sendo 5 canais nos pinos da Porta A e 6 canais nos da Porta B. Os canais AN0 a
AN4 compartilham os pinos RA0 a RA4 enquanto que os canais AN8 a AN13 compartilham os pinos RB0

17
3.1. CONVERSO A/D COM O PIC CAPTULO 3. CONVERSO A/D

Figura 3: Operao de um conversor A/D por aproximaes sucessivas com um exemplo de 4 bits
(extrado de [5])

a RB5. Os Canais AN5 a AN7 no existem no PIC16F886. O conversor A/D gera um resultado binrio
de 10-bits pelo mtodo de aproximaes sucessivas descrito anteriormente. O resultado da converso
armazenado num par de registradores de 8-bits cada. Os 10-bits do resultado podem ser alinhados
direita ou esquerda nos 16-bits formados por ADRESH e ADRESL. O conversor A/D controlado pelos
registradores ADCON0 e ADCON1.
Em resumo, o mdulo de converso A/D opera com 6 registradores:

ADCON0 Registrador de controle e operao

ADCON1 Registrador de configurao

ANSEL Registrador de configurao dos canais AN0 a AN4 como analgicos ou digitais

ANSELH Registrador de configurao dos canais AN8 a AN13 como analgicos ou digitais

ADRESH Registrador da parte mais significativa do resultado

ADRESL Registrador da parte menos significativa do resultado

Alm desses registradores especficos devem ser configurados os registradores TRISA, TRISB. A confi-
gurao default desses registradores para operao como entrada analgica para o conversor A/D para
todos os canais.

3.1.1 Seleo do clock de converso A/D


O tempo de converso A/D para cada bit definido como TAD . O processo de converso A/D requer
o tempo mnimo de 11 TAD para a converso de 10-bits. Para que as converses possam ser realizadas
corretamente a frequncia do clock de converso A/D deve ser definida de maneira a garantir no mnimo
um TAD de 1,6 ms.
A frequncia do clock de converso definida atravs dos bits ADCS1 e ADCS0 (ADCON0<7:6>).
Pode-se definir as frequncias de FOSC/2, FOSC/8, FOSC/32 ou FRC (frequncia determinada pelo
oscilador RC interno do mdulo A/D). A Tabela 1 resume as configuraes possveis para a definio da
frequncia do clock do conversor.
Por exemplo, se o clock do oscilador for FOSC = 20MHz o perodo ser 50 ns, assim o clock de converso
com frequncia FOSC /32 resultar em TAD = 1,6 ms, que o valor mnimo possvel para TAD . Nesse

18
3.1. CONVERSO A/D COM O PIC CAPTULO 3. CONVERSO A/D

Tabela 1: Bits de configurao da frequncia do clock de converso A/D (adaptado da pgina 105 do
data sheet do PIC16F88x [2]).

Perodo do clock do ADC (TAD ) Frequncia do dispositivo (FOSC )


ADCON0
Frequncia do clock de converso A/D 20 MHz 8 MHz 4 MHz 1 MHz
ADCS<1:0>
FOSC/2 00 100 ns 250 ns 500 ns 2,0 ms
FOSC/8 01 400 ns 1,0 ms 2,0 ms 8,0 ms
FOSC/32 10 1,6 ms 4,0 ms 8,0 ms 32,0 ms
FRC (frequncia determinada pelo oscilador
11 2-6 ms 2-6 ms 2-6 ms 2-6 ms
RC interno do mdulo A/D)

Legenda: clulas com fundo cinza esto fora do valor recomendado.

caso os bits ACDS1:ADCS0 devem ser programados com o valor 10. Valores de TAD maiores do que 6 ms
tambm no so considerados adequados pois deixam o processo de converso muito lento e recomenda-se
a escolha de outro fator de diviso para FOSC .

3.1.2 Outras configuraes


Justificao do resultado. O resultado de converso A/D possui de 10-bits de informao que podem
ser alinhados direita ou esquerda com restante dos bits preenchidos com zero nos registradores
ADRESH e ADRESL que possuem juntos 16-bits. Essa configurao feita no bit ADFM (AD-
CON1<7>). Se ADFM = 0 o resultado da converso justificado esquerda e se for = 1 justificado
direita. A Figura 4 mostra como fica a justificao do resultado de acordo com a configurao
desse bit.

Figura 4: Justificao do resultado da converso A/D de acordo com ADFM (extrado de [2])

Tenses de referncia. As tenses de referncia utilizadas para a converso A/D pode ser configuradas
independentemente atravs dos bits VCFG0 e VCFG1 (ADCON1<5:4>). Para se utilizar como
referncias as tenses de alimentao (VDD e VSS) do PIC deve-se configurar ambos os bits para
"0". Para se configurar a tenso de referncia inferior VREF, escreve-se o valor "1" no bit VCFG1.
Nesse caso, o pino RA2/AN2 utilizado como entrada para esse nvel de tenso de referncia. Para
se configurar a tenso de referncia superior VREF+, escreve-se o valor "1" no bit VCFG0. Nesse
caso, o pino RA3/AN3 utilizado como entrada para esse nvel de tenso de referncia.

19
3.1. CONVERSO A/D COM O PIC CAPTULO 3. CONVERSO A/D

3.1.3 Procedimento para realizar uma converso A/D


Os seguintes passos devem ser seguidos para se fazer uma converso A/D:

1. Configurar a porta:

Desabilitar o driver de sada do canal atravs da programao de um "1" no bit correspondente


do registrador TRISx
Configurar o pino como analgico atravs da programao de um "1"no bit correspondente do
registrador ANSEL ou ANSELH

2. Configurar o mdulo A/D:

Selecionar a frequncia do clock de converso A/D programando-se ADCS1 e ADCS0 no regis-


trador ADCON0
Configurar a referncia de tenso programando-se VCFG1 e VCFG0 no registrador ADCON1
Selecionar o canal de entrada A/D programando-se CHS<3:0> no registrador ADCON0
Selecionar o formato do resultado programando-se ADFM no registrador ADCON1
Ligar o mdulo de converso A/D atravs da programao de um "1" no bit ADON do regis-
trador ADCON0

3. Configurar a interrupo A/D (caso desejado):

Limpar o bit ADIF


Fazer o bit ADIE = 1
Fazer o bit PEIE = 1
Fazer o bit GIE = 1

4. Esperar o tempo de aquisio necessrio.

5. Iniciar o processo de converso:

Fazer o bit GO/DONE = 1 no registrador ADCON0

6. Esperar o processo de converso ser completado por um de dois mtodos:

Esperar o bit GO/DONE ser limpo (sem interrupes habilitadas)


OU
Esperar pela interrupo de A/D atravs do bit ADIF

7. Ler o resultado da converso A/D no par de registradores ADRESH e ADRESL, limpar o bit ADIF
caso necessrio.

8. Para a prxima converso, prosseguir com o passo 2 ou 3 conforme necessrio. O tempo de converso
A/D por bit definido como TAD . Um tempo mnimo de 2TAD necessrio antes que uma nova
converso seja iniciada.

20
3.1. CONVERSO A/D COM O PIC CAPTULO 3. CONVERSO A/D

3.1.4 Rotinas de biblioteca


Para configurao e utilizao do mdulo de converso analgica para digital (A/D) foi criada uma
biblioteca com as seguintes funes:

void adc_init(unsigned char ADC_Channel) Essa funo configura os canais A/D de 0 a 3,


onde o nmero do canal o parmetro de entrada ADC_Channel. Ela est configurada previamente
para o caso do laboratrio onde se utiliza somente o canal analgico 0, com tenso de referncia dada
por VDD e VSS. Qualquer alterao deve ser feita no arquivo adc.c. Essa rotina deve ser chamada
uma nica vez para cada canal na seo de inicializao dos dispositivos do programa principal.

unsigned int adc_read(unsigned char ADC_Channel) Recebe o valor do canal A/D passado
como parmetro com 10-bits alinhados direita. Essa funo aguarda o trmino da converso antes
de retornar. Alm disso, essa funo configura a frequncia de converso para FOSC/32 para a
frequncia do oscilador de 20MHz e pode ser chamada dentro da rotina de interrupo.

Para a utilizao dessas funes deve ser includo o header adc.h.

21
Captulo 4

Display LCD

A maioria dos displays de LCD utiliza chips controladores que seguem o mesmo padro de conexo com
um microcontrolador e com comandos muito similares. O display utilizado no laboratrio usa um chip
HD44780U da Hitachi cuja documentao est disponvel no site da disciplina (http://www.poli.usp.
br/pmr/lpa/pmr2415). Neste documento apresentado um resumo dos pontos mais importantes para
se utilizar o display de LCD, caso se deseje modificar o funcionamento do display deve-se consultar a
documentao completa do controlador HD44780U. A conexo fsica do display de LCD com o microcon-
trolador vista nas aulas de teoria em detalhes.

4.1 Interface com microcontrolador


A interface do controlador do display LCD com o microcontrolador utiliza 3 sinais de controle e 8 ou 4
bits de dados descritos na Tabela 2.

Tabela 2: Sinais de interface do controlador do display LCD com microcontrolador.

Sinal C/D I/O Descrio


RS C I Seleciona registradores.
0: Registrador de comandos (escrita) ou Flag de
ocupado e contador de endereos (leitura)
1: Registrador de dados (escrita e leitura)
R/W C I Seleciona leitura ou escrita.
0: escrita
1: leitura
E C I Inicia escrita ou leitura de dados (age como strobe)
DB4 a DB7 D I/O 4 bits mais significativos do barramento de dados
tri-state bidirecional. Usado para transferncia e
recepo de dados entre o microcontrolador e o
HD44780U. DB7 pode ser usado como flag de ocupado.
DB0 a DB3 D I/O 4 bits menos significativos do barramento de dados
tri-state bidirecional. Usado para transferncia e
recepo de dados entre o microcontrolador e o
HD44780U. Esses sinais no so usados durante a
operao em 4-bits.

No circuito montado nesse curso utilizada uma interface com 4-bits e somente para escrita, isto
, so utilizados os sinais RS, E e DB4 a DB7, o sinal R/W mantido em nvel lgico LOW o tempo

22
4.2. INSTRUES E DADOS CAPTULO 4. DISPLAY LCD

todo e os sinais DB0 a DB3 no so utilizados. Essa abordagem utiliza a menor quantidade de sinais,
economizando desta maneira pinos de I/O do microcontrolador, em contrapartida, o acesso ao display
LCD mais lento. A Figura 5 mostra um exemplo de transferncia de dados entre o microcontrolador e o
display LCD atravs de uma interface de 4-bits. Esse exemplo mostra 3 ciclos de transferncia de dados:

Escrita no registrador de instrues

Leitura do flag de ocupado e contador de endereos

Leitura do registrador de dados

No primeiro e segundo o sinal RS est em nvel lgico LOW, o que significa que escrita ou leitura de
um comando. O sinal R/W define se leitura ou escrita, ou seja, escrita no primeiro ciclo e leitura no
segundo. No terceiro o sinal RS est em nvel lgico HIGH e o sinal R/W est em nvel lgico HIGH, o que
significa que leitura de dados. Observe que o sinal E pulsa de LOW para HIGH cada vez que um dado
est estvel no barramento de dados DB4 a DB7. Este o sinal de strobe que comanda a transferncia.

Figura 5: Exemplo de transferncia de dados atravs de interface de 4-bits entre microcontrolador e


display LCD [1].

Como na implementao desse laboratrio o sinal R/West sempre em nvel lgico LOW so realizadas
somente operaes de escrita no display LCD e nunca operaes de leitura. A limitao dessa abordagem
que no possvel ler o flag de ocupado e os endereos do registrador de dados (se RS = 0) nem o
contedo do registrador de dados (se RS = 1). Como consequncia, entre duas escritas consecutivas
necessrio esperar um tempo fixo, cerca de 40 ms, para o controlador do display voltar para um estado
desocupado. O no respeito a esse intervalo de tempo causa a perda de dados.

4.2 Instrues e dados


Somente um registrador de instrues (IR) e um registrador de dados (DR) do HD44780U podem ser
controlados pelo microcontrolador. Antes de iniciar qualquer operao interna do HD44780U, a informao
de controle temporariamente armazenada nesses registradores o que permite seu interfaceamento com
diversos tipos de microcontroladores e me diferentes velocidades.

23
4.2. INSTRUES E DADOS CAPTULO 4. DISPLAY LCD

4.2.1 Instrues
O registrador de instrues (IR) pode conter instrues em 4 categorias:
Especificao de funes do HD44780U, tais como formato do display, comprimento de dados, etc.

Definio de endereos da RAM interna

Realizao transferncia de dados com a RAM interna

Realizao de funes diversas

A Tabela 3 apresenta todas as instrues disponveis com o seu tempo de execuo.

Tabela 3: Instrues do HD44780U [1].

24
4.2. INSTRUES E DADOS CAPTULO 4. DISPLAY LCD

Procedimento de inicializao do display LCD

Ao ser aplicada energia no HD44780U, um circuito de RESET interno inicializa o chip que passa por um
procedimento de inicializao automtico. Durante a inicializao, o flag de ocupado est preso no nvel
lgico HIGH por cerca de 10 ms aps a tenso Vcc atingir 4,5V e passa para o nvel lgico LOW aps a
inicializao ser completada.
Apesar a inicializao automtica do HD44780U definir uma srie de configuraes sem a interveno
do usurio, essas configuraes no so adequadas para as conexes de hardware feitas na implementao
utilizada no laboratrio. Assim, aps a inicializao automtica deve-se realizar um procedimento de
inicializao apropriado que deve seguir os seguintes passos:

1. Limpar display

2. Definir as seguintes funes:

3. DL = 0; interface de 4-bits

4. N = 1; display de 2 linhas

5. F = 0; tamanho do caractere em matriz de 5 x 8 pontos

6. Controle de liga/ desliga do display:

7. D = 0; desliga display

8. C = 0; desliga cursor

9. B = 0; sem piscar (blink)

10. Definir modo de entrada:

11. I/D = 1; incrementa de 1

12. S = 0; sem deslocamento

O significado das siglas utilizadas no procedimento acima esto no final da Tabela 3.

4.2.2 Dados
A RAM de dados do display (DDRAM) armazena os dados que so visveis no display num cdigo de
8-bits por caractere. A quantidade total de caracteres que podem ser armazenados nessa memria de 80
caracteres. Existe uma relao entre o endereo da DDRAM e a apresentao dos caracteres no display.
Num display de 2 linhas a relao dos endereos apresentada na Figura 6. Observa-se que os 40 primeiros
endereos a partir do endereo 00h correspondem primeira linha do display e os 40 endereos a partir
do endereo 40h correspondem segunda linha. No display LCD utilizado no laboratrio uma janela de
8 caracteres por 2 linhas sobre essa organizao de endereos da DDRAM sempre estar visvel. Ou seja,
se a janela estiver sobre os 8 primeiros endereos sero mostrados no display os caracteres armazenados
nos endereos 00h a 07h para a primeira linha e nos endereos 40h a 47h para a segunda linha. Essa
janela pode ser deslocada atravs das instrues adequadas. A Figura 7 mostra a posio da janela de 8
caracteres por 2 linhas sobre o incio da DDRAM, depois no caso de deslocamento para a esquerda e por
ltimo no caso de deslocamento para a direita.

25
4.3. CARACTERES CAPTULO 4. DISPLAY LCD

Figura 6: Endereos da DDRAM para apresentao de caracteres no display [1].

Figura 7: Exemplo de deslocamento da janela de um display de 8 caracteres por 2 linhas [1].

Para se escrever caracteres que podem se mostrados no display deve-se primeiramente definir no
registrador IR o endereo da DDRAM a partir do qual se deseja armazenar o cdigo do caractere e
depois escrever o cdigo no registrador DR. Aps essas operaes um procedimento interno do HD44780U
passa o cdigo para a posio da DDRAM definida. Existe um mecanismo de incremento e decremento
automtico do endereo da DDRAM de modo que no necessrio definir um novo endereo cada vez que
desejar mostrar um caractere no display, suficiente escrever o primeiro endereo. importante observar
que os endereos da DDRAM possuem somente 7-bits podendo assumir valores entre 0 e 127 (ou 7Fh).

4.3 Caracteres
Os caracteres que podem ser mostrados no display LCD so representados com um cdigo de 8-bits e so
armazenados internamente numa memria ROM no HD44780U. Os caracteres com o bit mais significativo
igual a 0 e entre os cdigos 20h e 7Fh so representados com o cdigo ASCII, o que mantm compatibilidade
do display com a maioria dos sistemas. Por outro lado, os cdigos que possuem bit mais significativo igual
a 1 so particulares de cada fabricante e mostraro caracteres por ele definidos. Os primeiros 16 cdigos
podem ser usados para mostrar caracteres definidos pelo usurio e armazenados numa memria apropriada
(CGRAM) dentro do HD44780U. A Tabela 4 mostra os caracteres que podem ser mostrados no display por
cdigo. As linhas contm os 4-bits menos significativos de cada cdigo enquanto que as colunas contm
os 4-bits mais significativos.

4.4 Biblioteca
Est disponvel uma biblioteca para o HI-TECH C para acesso ao display LCD no laboratrio. Essa bi-
blioteca foi configurada para a implementao de hardware utilizada nesse laboratrio. Caso seja alterado

26
4.4. BIBLIOTECA CAPTULO 4. DISPLAY LCD

Tabela 4: Caracteres que podem ser mostrados no display LCD [1].

algum bit utilizado da Porta B ou C, a biblioteca dever ser modificada. Para utiliz-la deve incluir o
header lcd.h no programa. As funes dessa biblioteca so as seguintes:

void lcd_init(void) Essa funo inicializa o controlador do display LCD para utilizar uma
interface de 4-bits, somente para escrita, com 2 linhas, com cursor piscando, com deslocamento de
caracteres da esquerda para a direita a cada novo caractere e formato de caractere com matriz de 5
x 8 pontos. Essa funo pode ser alterada caso se deseje iniciar o display de outra maneira, como
por exemplo, com cursor apagado.

void lcd_clear(void) Essa funo limpa o display e coloca o cursor na primeira posio da
primeira linha. ATENO: essa funo demora cerca de 2 ms para ser executada e no seve ser
utilizada dentro de loops pois causa atrasos na execuo do programa e atrapalha a execuo de
interrupes. Deve-se utilizar essa funo somente aps a inicializao do display LCD ou em trechos
de programa onde no seja repetida periodicamente. Para se retornar o cursor para a primeira
posio da primeira linha deve-se utilizar a funo lcd_goto(0)(vide descrio abaixo) e para se
apagar carateres pode-se escrever espaos (ASCII = 20h) no display.

void lcd_write(unsigned char c) Essa funo escreve um valor de 8-bits no display. Ela quebra
a escrita em duas etapas de 4-bits cada de modo que o usurio no precisa se preocupar com isso.

27
4.4. BIBLIOTECA CAPTULO 4. DISPLAY LCD

Ela no distingue entre comandos ou dados e chamada pelas outras funes dessa biblioteca que
definem se so comandos ou dados apropriadamente. Deve-se evitar chamar essa funo diretamente.
Caso seja chamada, o valor do sinal RS deve ser configurado antes de se chamar essa funo. Se RS
= 0, o parmetro de entrada um comando e de RS=1 o parmetro de entrada um caracter a ser
mostrado no display.

void lcd_puts(const char *s) Essa funo escreve um string na memria DDRAM.

void lcd_goto(unsigned char pos) Essa funo muda o cursor para o endereo especificado no
parmetro. O valor do parmetro pode estar entre 0 e 39 para a primeira linha e entre 64 e 103
para a segunda linha.

void lcd_cursor(int on) Liga ou desliga o cursor de acordo com o parmetro de entrada. Se
on = 1 liga o cursor piscando e se on = 0 desliga o cursor.

void lcd_putchr(char c) Escreve um caracter na posio atual do cursor no LCD. No feita


nenhuma consistncia se o caracter visvel ou no, caso no seja um caracter visvel, simplesmente
ele no ser mostrado no display.

28
Captulo 5

Comunicao serial

A comunicao serial entre dois dispositivos pode ser feita de modo sncrono ou assncrono. No modo
sncrono a transmisso e recepo dados controlada por um sinal de clock, gerado pelo dispositivo
mestre. Geralmente, esse modo utilizado entre dispositivos internos de um computador onde o mestre
o microcontrolador e os dispositivos escravos so perifricos que podem ser conversores A/D e D/A,
memrias, sensores, dentre outros. J no modo assncrono, a transmisso e recepo de dados feita
atravs de uma nica linha de dados, sem a transmisso do sinal de clock entre os dispositivos. Nesse
caso, cada dispositivo gera seu prprio clock internamente. Esse modo utilizado para comunicao entre
computadores independentes ou entre um computador e um perifrico do tipo terminal ou console de
dados.
No modo assncrono, o incio de transmisso de dados marcado por um start-bit. Depois enviada
a sequncia dos bits de dados, a partir do bit menos significativo. A transmisso terminada por um
stop-bit. Quando nenhum dado est sendo transmitido, a linha de comunicao permanece no mesmo
valor do stop-bit cujo nvel o oposto do start-bit. A durao de cada bit e a quantidade de bits de dados
devem ser configuradas com os mesmos valores tanto no dispositivo que transmite como no que recebe.
A Figura 8 mostra o sinal numa linha de comunicao assncrona.

Figura 8: Sinal numa linha de comunicao assncrona

Num microcontrolador um mdulo de comunicao serial com capacidade de transmitir e receber dados
nos modos sncrono e assncrono, configurvel por software, denominado USART (Universal Synchronous
Asynchronous Receiver Transmitter ).
Se um mdulo de comunicao serial tem a capacidade de receber e transmitir ao mesmo tempo, esse
mdulo denominado full-duplex . Por outro lado, se s transmite ou recebe dados exclusivamente,
denominado half-duplex . Para o modo full-duplex so necessrias duas linhas de sinal, uma de entrada e

29
5.1. COMUNICAO SERIAL NO PIC CAPTULO 5. COMUNICAO SERIAL

outra de sada para que possam operar simultaneamente. No modo half-duplex , a transmisso e recepo
pode se dar numa nica linha bidirecional. Pode-se ter sistemas de comunicao serial assncrono e
sncrono tanto full-duplex como half-duplex conceitualmente, mas as implementaes so mais restritivas.
Por exemplo, no PIC 16F886, a USART se configurado em modo assncrono pode operar em full-duplex ,
mas se configurado em modo sncrono s pode operar em half-duplex .

5.1 Comunicao serial no PIC


No PIC16F886 a USART denominada EUSART (Enhanced Universal Synchronous Asynchronous Re-
ceiver Transmitter ) pois possui funes adicionais para poder operar em sistemas com barramento LIN
(Local Interconnect Network ). O mdulo EUSART contm gerador de clock, registradores de desloca-
mento, buers e sistema de interrupo para realizar a transferencia serial de dados para (transmisso) e
de (recepo) outro dispositivo, independentemente da execuo de um programa. A configurao assn-
crona full-duplex utilizada nesse curso para comunicao com outro computador e descrita em detalhes
a seguir.
A transmisso e recepo de dados pelo mdulo EUSART utiliza o formato padro NRZ (non-return-
to-zero). O NRZ implementado por dois nveis, um nvel MARK que representa um bit de dado igual a
"1" e um nvel SPACE que representa um bit de dado igual a "0". O termo NRZ se refere ao fato de que
dois bits transmitidos consecutivamente com o mesmo valor permanecem no valor sem retornar para um
valor neutro entre a transmisso de cada bit. Numa transmisso NRZ o valor de repouso, isto , quando
no estiver sendo transmitido nenhum dado, o nvel MARK. O start-bit sempre tem um nvel SPACE
e o stop-bit sempre tem um nvel MARK. Assim, a transmisso de um caracter consiste de um start-bit,
seguido por 8 ou 9 bits de dados e terminado por um ou mais stop-bits. Cada bit transmitido permanece
no seu nvel pelo tempo de 1/(frequncia de transmisso). O formato de dados mais comum de 8 bits.
Os 8 ou 9 bits de dados so transmitidos a partir do bit menos significativo. O transmissor e o receptor do
mdulo EUSART operam de maneira independente o que permite o seu funcionamento em full-duplex . A
paridade no suportada pelo hardware, mas pode ser gerada por software e armazenada e transmitida
como o nono bit de dado.

5.1.1 Configurao da taxa de baud


O PIC 16F886 possui um gerador de Taxa de Baud dedicado para suportar tanto a operao em modo sn-
crono como assncrono do mdulo EUSART. Esse gerador possui um timer de 8 ou 16-bits que pode ser con-
figurado por software. Por default esse timer opera em 8-bits, mas fazendo BRG16 = 1 (BAUDCTL<3>)
pode-se alterar o timer para operao em 16-bits. Os registradores SPBRGH e SPBRG determinam a
Taxa de Baud. No modo assncrono o multiplicador do perodo da Taxa de Baud determinado tanto
pelo bit BRGH (TXSTA<2>) como pelo BRG16 (BAUDCTL<3>). No modo sncrono o bit BRGH
ignorado. As frmulas para clculo da Taxa de Baud so apresentadas na Tabela 5 para todos os valores
possveis dos bits de configurao.
Por exemplo, o valor que deve ser programado no par de registradores SPBRGH e SPBRG para Taxa
de Baud de 9600, em modo assncrono, com timer de 8-bits para um dispositivo com frequncia de oscilador
de 16 MHz, pode ser calculado pela seguinte frmula:

FOSC
T axa de Baud Desejada =
64([SP BRGH : SP BRG] + 1)

30
5.1. COMUNICAO SERIAL NO PIC CAPTULO 5. COMUNICAO SERIAL

Tabela 5: Frmulas para clculo da Taxa de Baud de acordo com os bits de configurao (adaptada da
Tabela 12-3, p. 167 do data sheet do PIC 16F886)

Bits de configurao
Modo Frmula
Timer
SYNC BRG16 BRGH
0 0 0 assncrono 8-bits FOSC /[64(n + 1)]
0 0 1 assncrono 8-bits
FOSC /[16(n + 1)]
0 1 0 assncrono 16-bits
0 1 1 assncrono 16-bits
1 0 x sncrono 8-bits FOSC /[4(n + 1)]
1 1 x sncrono 16-bits

utilizando-se BRGH = 0.
Resolvendo para SP BRGH : SP BRG:

FOSC 16000000
T axa de Baud Desejada
x= 1= 9600
1 = [25.042]
= 25
64 64

16000000
9600
= 1
64

= [25.042]
= 25

Para o valor de SP BRGH : SP BRG calculado e arredondado, pois o valor deve ser inteiro, tem-se:

16000000
T axa de Baud Calculada = = 9615
64(25 + 1)
A adoo desse valor produz o seguinte erro no valor da Taxa de Baud:

T axa de Baud Calculada T axa de Baud Desejada (9615 9600)


Erro = = = 0.16%
T axa de Baud Desejada 9600
Os valores tpicos para as Taxas de Baud obtidos com as frmulas da Tabela 5 para o modo assncrono
e diferentes valores dos bits de configurao e frequncias do oscilador esto na Tabela 12-5, p. 168-169,
do data sheet do PIC 16F886. Analisando-se a Tabela 12-5 percebe-se que o uso de BRGH = 1 ou de
BRG16 = 1 pode reduzir o erro da Taxa de Baud. O timer de 16-bits deve ser usado para obter Taxas de
Baud mais baixas com frequncias de oscilador mais altas.
A escrita de um novo valor no par de registradores SPBRGH e SPBRG causa um RESET imediato no
timer do gerador de Taxa de Baud. Isso assegura que o timer no demore at seu prximo estouro para
produzir a nova Taxa de Baud.

5.1.2 Configurao e operao do transmissor assncrono


O transmissor do mdulo EUSART trabalha com dois registradores, um buer de entrada (TXREG) e
um registrador de deslocamento (TSR). Somente o TXREG pode ser acessado pelo usurio, o TSR no
possui endereo para acesso. Dois flags podem ser usados para se determinar o estado do transmissor:

TXIF o flag de interrupo e vai para "1" quando TXREG estiver vazio

TRMT indica se TSR est vazio e fica em "0" enquanto TSR estiver com algum dado

31
5.1. COMUNICAO SERIAL NO PIC CAPTULO 5. COMUNICAO SERIAL

O diagrama em blocos da Figura 12-1, p. 155, do data sheet do PIC 16F886 mostra a estrutura completa
do transmissor do mdulo EUSART.
A transmisso de dados iniciada escrevendo-se um caracter no registrador TXREG. Se for o primeiro
caracter, ou se o caracter anterior j foi totalmente transmitido, ou seja, se o TSR estiver limpo, o dado
do TXREG transferido imediatamente para o TSR. Por outro lado, se o TSR ainda contiver alguma
parte do caracter anterior, o caracter escrito no TXREG permanecer l at que o stop-bit do caracter
anterior tenha sido transmitido e o TSR esteja limpo. S ento o caracter do TXREG ser transferido
para o TSR e um novo processo de transmisso iniciado imediatamente.
O flag de interrupo TXIF setado quando o transmissor do mdulo EUSART estiver habilitado
e nenhum caracter estiver armazenado em TXREG, ou seja, o TXIF vai de "0" para "1" quanto o
transmissor est pronto para enviar outro caracter. Esse flag pode ser lido a qualquer momento, mas a
sua mudana para "0" aps a escrita em TXREG demora um pouco e deve retornar um valor invlido
se lido imediatamente aps a escrita de um caracter em TXREG. O flag TXIF ser setado toda vez que
TXREG estiver vazio, independente de TXIE. O flag TXIF s pode ser lido e no pode ser limpo por
software. Para que o flag TXIF gere uma interrupo os seguintes bits devem estar habilitados: TXIE,
GIE e PEIE (TXIE = 1, GIE = 1 e PEIE = 1).
Para usar interrupes para transmitir dados, TXIE deve ser setado somente quanto existirem mais
dados para serem transmitidos. O bit TXIE para habilitao da interrupo de transmisso deve ser
limpo quando o ltimo caracter a ser transmitido tiver sido escrito em TXREG.
O bit TRMT indica o estado do registrador TSR. Esse bit somente pode ser lido. Quando o registrador
TSR est vazio, o bit TRMT setado. Esse bit limpo quando um caracter transferido do registrador
TXREG para o registrador TSR. O bit TRMT fica em "0" at que todos os bits do TSR tenham sido
deslocados para serem transmitidos. Esse bit no causa uma interrupo e o usurio deve ler o seu valor
para determinar o estado de TSR.
O transmissor pode ser habilitado para operaes assncronas atravs da configurao dos seguintes
bits de controle:

TXEN = 1 habilita o circuito de transmisso do mdulo EUSART

SYNC = 0 configura o mdulo EUSART para operao em modo assncrono

SPEN = 1 habilita o mdulo EUSART e configura automaticamente o pino de I/O TX/CK


como sada. Se o pino TX/CK tiver sido previamente utilizado como entrada analgica, o bit
correspondente no registrador ANSEL deve ser limpo.

Nota quando o bit SPEN programado como "1", o pino de I/O TX/CK automa-
ticamente configurado como sada, independente do valor programado no TRIS
correspondente e independente do receptor do mdulo EUSART estar habili-
tado. O registrador do PORT desconectado do driver de sada de maneira
que no possvel usar o pino TX/CK como sada de uso geral.

Assume-se que todos os outros bits de controle do mdulo EUSART esto no seu estado default.

A sequncia a seguir resume o procedimento para utilizar o transmissor assncrono:

1. Inicializar o par de registradores SPBRGH e SPBRG e os bits BRGH e BRG16 de acordo com a
Taxa de Baud desejada.

32
5.1. COMUNICAO SERIAL NO PIC CAPTULO 5. COMUNICAO SERIAL

2. Habilitar a comunicao assncrona fazendo SYNC = 0 e SPEN = 1.

3. Se for desejada transmisso de 9-bits, fazer o bit de controle TX9 = 1.

4. Habilitar a transmisso fazendo TXEN = 1. Isso causar o bit de interrupo TXIF ir para "1".

5. Se for desejado utilizar interrupes, fazer o bit TXIE = 1. Uma interrupo ocorrer imediatamente
se GIE = 1 e PEIE = 1.

6. Se for transmisso de 9-bits, escrever o valor do nono bit em TX9D.

7. Carregar o caracter de 8-bits no registrador TXREG. Isso inicia a transmisso.

5.1.3 Configurao e operao do receptor assncrono


O receptor do mdulo EUSART trabalha com um registrador de deslocamento para receber os dados
(RSR) e um buer FIFO (First-in First-out) de dois caracteres. O registrador RSR e o buer FIFO no
so acessados diretamente. Os dados recebidos so acessados atravs do registrador RCREG. Trs flags
podem ser usados para se determinar o estado do receptor:

RCIF o flag de interrupo e vai para "1" quando um caracter entrar no buer FIFO

FERR um flag de erro e indica que no foi detectado o stop-bit no final do caracter recebido

OERR um flag de erro e indica que o buer FIFO est cheio e no ser recebido outro caracter
at que o buer tenha espao

O diagrama em blocos da Figura 12-2, p. 156, do data sheet do PIC 16F886 mostra a estrutura completa
do receptor do mdulo EUSART.
Assim que um caracter recebido no registrador de deslocamento RSR, ele transferido imediatamente
para o buer FIFO e o flag RCIF setado. Se no lugar de um stop-bit, cujo valor "1", for recebido um
"0", gerado um erro de FRAMING, ou seja, o flag FERR setado. O caracter do topo do buer FIFO
transferido para fora do buer na leitura do registrador RCREG. Se o buer FIFO de dois caracteres
estiver cheio gerado um erro de OVERRUN, ou seja o flag OERR setado, e nenhum caracter adicional
ser recebido.
O flag de interrupo RCIF setado quando o receptor do mdulo EUSART estiver habilitado e
quando o buer FIFO contiver um caracter no lido. Ou seja, o RCIF vai de "0"para "1" quando o
receptor tiver um caracter pronto para ser lido. O flag RCIF ser setado toda vez que um caracter chegar
ao buer FIFO, independente de RCIE. O flag RCIF s pode ser lido e no pode ser limpo por software.
Para que o flag RCIF gere uma interrupo gerada os seguintes bits devem estar habilitados: RCIE ,
GIE e PEIE (RCIE = 1, GIE = 1 e PEIE = 1).
Cada caracter no buer FIFO de recepo possui um bit de erro de FRAMING correspondente. O
erro de FRAMING indica que o stop-bit no foi detectado no momento em que era esperado. O estado
do erro de FRAMING poder ser acessado atravs do bit FERR (RCSTA<2>) e representa o estado erro
do caracter no topo do buer FIFO. Portanto, o bit FERR deve ser lido antes de se ler o registrador
RCREG seno ser sobre-escrito pelo estado de erro de FRAMING do caracter seguinte do buer FIFO.
O bit FERR somente pode ser lido e se aplica somente ao caracter no topo do buer FIFO. Um erro de
FRAMING no impede que caracteres adicionais sejam recebidos. No necessrio limpar o bit FERR. A
leitura do prximo caracter do buer FIFO faz avanar a fila para o prximo caracter e consequentemente

33
5.1. COMUNICAO SERIAL NO PIC CAPTULO 5. COMUNICAO SERIAL

para o prximo erro de FRAMING correspondente. Pode-se fora que o bit FERR seja limpo, limpando-se
o bit SPEN. Fazendo-se CREN = 0 no afeta o bit FERR. Um erro de FRAMING no gera interrupo.
Se todos os caracteres do buer FIFO de recepo contiverem erros de FRAMING, a leitura de RCREG
no limpar o bit FERR.
O buer FIFO de recepo pode conter at dois caracteres. gerado um erro de OVERRUN se for
recebido um terceiro caracter antes que a FIFO tenha sido acessada. Se ocorrer essa situao o bit OERR
setado. Os caracteres que j estiverem no buer FIFO podero ser lidos, mas nenhum caracter adicional
ser recebido at que a condio de erro seja cancelada. Isso pode ser feito limpando-se o bit CREN
(RCSTA<4>) ou atravs da reinicializao do mdulo EUSART limpando-se o bit SPEN (RCSTA<5>).
O mdulo EUSART suporta a recepo de caracteres com 9-bits. Quando o bit RX9 (RCSTA<6>)
estiver setado, 9-bits sero deslocados para dentro do registrador RSR para cada caracter recebido. O
nono bit, o mais significativo do caracter, poder ser lido no bit RX9D (RCSTA<0>). Esse bit corresponde
ao nono bit do caracter do topo do buer FIFO. Assim, ele deve ser lido antes da leitura dos 8-bits menos
significativos que esto no buer.
O receptor pode ser habilitado para operaes assncronas atravs da configurao dos seguintes bits
de controle:

CREN = 1 habilita o circuito de recepo do mdulo EUSART

SYNC = 0 configura o mdulo EUSART para operao em modo assncrono

SPEN = 1 habilita o mdulo EUSART e configura automaticamente o pino de I/O RX/DT


como entrada. Se o pino RX/DT tiver sido previamente utilizado como entrada analgica, o bit
correspondente no registrador ANSEL deve ser limpo.

Nota quando o bit SPEN programado como "1", o pino de I/O RX/DT auto-
maticamente configurado como entrada, independente do valor programado no
TRIS correspondente e independente do receptor do mdulo EUSART estar
habilitado. O pino RX/DT pode ser lido normalmente, mas a escrita nesse
pino no produzir nenhum efeito.

Assume-se que todos os outros bits de controle do mdulo EUSART esto no seu estado default.

A configurao e utilizao da recepo assncrona deve seguir os seguintes passos:

1. Inicializar o par de registradores SPBRGH e SPBRG e os bits BRGH e BRG16 de acordo com a
Taxa de Baud desejada.

2. Habilitar a comunicao assncrona fazendo SYNC = 0 e SPEN = 1.

3. Se for desejado utilizar interrupes, fazer o bit RCIE = 1, GIE = 1 e PEIE = 1.

4. Se for desejada recepo de 9-bits, fazer o bit RX9 = 1.

5. Habilitar a recepo fazendo o bit CREN = 1.

6. O flag RCIF ser setado quando um caracter for transferido do RSR para o buer de recepo e
um pedido de interrupo ser gerado se RCIE = 1.

7. Ler o registrador RCSTA para determinar se algum erro ocorreu durante a recepo e pegar o nono
bit (se estiver habilitado).

34
5.1. COMUNICAO SERIAL NO PIC CAPTULO 5. COMUNICAO SERIAL

8. Ler os 8-bits menos significativos de dados recebidos no buer de recepo atravs da leitura do
registrador RCREG.

9. Se ocorreu um erro de OVERRUN, limpar o flag OERR limpando o bit CREN.

5.1.4 Rotinas de biblioteca


Para configurao e utilizao da Interface de Comunicao Serial no XC8 foi criada uma biblioteca com
as seguintes funes:

void serial_init(void) Essa funo configura todos os parmetros necessrios para a operao
do canal serial a 19.200 bps, com palavra de dados de 8-bits, considerando a frequncia do oscilador
do microcontrolador como sendo 20 MHz. Deve ser chamada uma nica vez na seo de inicializao
dos dispositivos.

unsigned char getch(void) Recebe um caractere ASCII pelo canal serial. Essa funo no
retorna enquanto no for recebido um caractere.

unsigned char chkchr(void) Essa funo verifica se existe um caractere no buer de recepo.
Se existir, retorna o caractere, seno retorna o valor 255.

void putch(unsigned char c) Envia um caractere ASCII pelo canal serial.

void putst(register const char * str) Envia um string pelo canal serial

Para a utilizao dessas funes deve ser includo o header serial.h e antes dele o always.h que contm
definies utilizadas pelo serial.h.

35
Captulo 6

PWM

PWM significa Pulse Width Modulation ou modulao por largura de pulso. Um sinal de PWM possui
um perodo constante e um tempo em nvel lgico HIGH (o pulso) varivel. A cada ciclo o tempo que o
sinal permanece no nvel lgico HIGH em relao ao perodo total pode ser descrito por uma porcentagem.
Essa porcentagem chamada de Duty Cycle.

T empo em nvel l
ogico HIGH
Duty Cycle =
P erodo do P W M

Por exemplo, um sinal de PWM com Duty Cycle de 50% tem a forma de uma onda quadrada, na
metade do perodo o sinal est em nvel lgico HIGH e na outra metade do perodo o sinal est em nvel
lgico LOW. A Figura 9 mostra algumas situaes para os valores do Duty Cycle.

Figura 9: Forma de onda de um sinal PWM com vrios valores de Duty Cycle.

Um sinal de PWM pode ser utilizado para variar a energia entregue a um determinado dispositivo. Um
valor de 0% de Duty Cycle significa que nenhuma energia entregue ao dispositivo. Por outro lado, 50%
de Duty Cycle significa que 50% de energia entregue ao dispositivo. Uma das aplicaes de um sinal de
PWM o controle a corrente que passa pelo enrolamento de um motor CC e consequentemente variao
de sua velocidade. A Figura 10 mostra um arranjo para controle de velocidade em malha fechada de um
motor CC com um microcontrolador gerando um sinal de PWM e lendo sinais digitais de um encoder. A
leitura de encoder ser explicada prximo captulo.

36
6.1. PWM COM O PIC CAPTULO 6. PWM

Figura 10: Controle de velocidade de um motor CC com um microcontrolador gerando sinal de PWM.

6.1 PWM com o PIC


O PIC 16F886 possui um mdulo Enhanced Capture/Compare/PWM (CCP1) e um mdulo Capture/-
Compare/PWM (CCP2). Esses mdulos so idnticos na operao com exceo das caratersticas avan-
adas de PWM disponveis somente no CCP1. Com isso possvel gerar dois sinais de PWM com esse
dispositivo, um atravs do pino CCP1 e outro atravs do pino CCP2.
O Timer 2 utilizado para dar a base de tempo para o PWM. O prescaler do Timer 2 usado para
dar o perodo do PWM, enquanto que os registradores CCPRxL e CCPRxH e os bits CCPxCON<5:4>
so usados para definir a largura do pulso do PWM. O postscaler do Timer 2 no utilizado no modo
PWM. O mdulo CCP consegue produzir um sinal PWM com resoluo de at 10-bits1 num dos pinos de
sada CCPx. O valor do Duty Cycle com a resoluo de 10-bits armazenado no registrador CCPRxL (8-
bits mais significativos) e nos bits CCPxCON<5:4> (2-bits menos significativos). O registrador CCPRxH
(mais dois bits internos do dispositivo) usado como escravo do conjunto CCPRxL:CCPxCON<5:4> para
que esse possa ser alterado a qualquer momento mantendo estvel a largura do pulso sendo produzido at
que se complete o ciclo. A Figura 11-3, p. 132, do data sheet do PIC 16F886 mostra um diagrama de
blocos simplificado do PWM.
A Figura 11 mostra a sada de um pino CCPx e a sua relao com os valores de PR2 e Duty Cycle
dado por CCPRxL e CCPxCON<5:4>. O Timer 2 opera numa contagem contnua com uma frequncia
derivada do oscilador dividida pelo seu prescaler. No incio do perodo do PWM o Timer 2 zerado, a sada
CCPx colocada em nvel lgico HIGH e o valor do conjunto CCPRxL:CCPxCON<5:4> armazenado no
registrador CCPRxH e em dois bits internos. Quando a contagem do Timer 2 atinge o valor composto por
CCPRxH e pelos dois bits internos, o valor da sada CCPx colocado em nvel lgico LOW. A contagem
do Timer 2 prossegue at que o seu valor atinja o valor de PR2. Nesse momento o Timer 2 zerado, a sada
CCPx colocada em nvel lgico HIGH e o valor do conjunto CCPRxL:CCPxCON<5:4> novamente
carregado no registrador CCPRxH e nos dois bits internos. Esse ciclo se repete indefinidamente enquanto
o modo PWM estiver habilitado.
O perodo do PWM especificado pelo valor armazenado no registrador PR2 e calculado pela seguinte
frmula:

P erodo do P W M = [(P R2) + 1] 4 TOSC (P rescale do T imer 2)

O Prescaler do Timer 2 pode ser definido como 1:1, 1:4 ou 1:16 definindo-se os bits T2CKPS<1:0>
(T2CON<1:0>) e TOSC o perodo do oscilador.
1 Os 8-bits do Timer 2 so concatenados com 2-bits internos do clock do sistema (F
OSC ), ou 2-bits do prescaler, para
criar uma base de tempo de 10-bits.

37
6.1. PWM COM O PIC CAPTULO 6. PWM

Figura 11: Sinal de sada de PWM num pino CCPx.

O Duty Cycle do PWM especificado escrevendo-se um valor de 10-bits, sendo os 8-bits mais significa-
tivos escritos no registrador CCPRxL e os 2-bits menos significativos escritos nos bits 5 e 4 do registrador
CCPxCON. A seguinte frmula utilizada para calcular o a largura do pulso do PWM:

Largura do P ulso de P W M = (CCP RxL : CCP xCON < 5 : 4 >) TOSC (P rescale do T imer 2)

O valor do Duty Cycle pode ser dado em porcentagem pela seguinte frmula:

(CCP RxL : CCP xCON < 5 : 4 >)


Duty Cycle =
4(P R2 + 1)

O registrador CCPRxL e os bits 5 e 4 de CCPxCON podem ser escritos a qualquer momento, mas o
valor do Duty Cycle somente ser alterado quando o valor de CCPRxL for armazenado em CCPRxH o
que ocorre somente aps o valor do Timer 2 atingir o mesmo valor que PR2, ou seja, somente quando o
perodo do PWM estiver completo. No modo PWM o registrador CCPRxH somente pode ser lido.
No PIC 16F886 os bits 5 e 4 do registrador CCPxCOM tambm podem ser acessados por nomes
especficos: DCxB1 e DCxB0, respectivamente.

6.1.1 Procedimento para configurao do PWM


Os seguintes passos devem ser feitos para configurar o mdulo CCP para operao em PWM:

1. Desabilitar o pino de PWM (CCPx) setando o bit correspondente do registrador TRIS. Isto ,
configurando-o para entrada

2. Definir o perodo do PWM escrevendo no registrador PR2.

3. Configurar o mdulo CCP para modo PWM carregando o registrador CCPxCON com os valores
apropriados.

4. Definir o Duty Cycle do PWM escrevendo no registrador CCPRxL e nos bits DCxB<1:0> (CCPx-
CON<5:4>).

5. Configurar e disparar o Timer 2:

(a) Limpar o bit do flag de interrupo TMR2IF (PIR1<1>);


(b) Definir o valor de prescaler do Timer 2 carregando os bits T2CKPS<1:0> (T2CON<1:0>);
(c) Habilitar o Timer 2, fazendo o bit TMR2ON =1 (T2CON<2>).

38
6.1. PWM COM O PIC CAPTULO 6. PWM

6. Habilitar a sada PWM depois que um novo ciclo de PWM tiver sido iniciado:

(a) Esperar pelo transbordo do Timer 2 (bit TMR2IF = 1 (PIR1<1>));


(b) Habilitar a sada do pino de PWM (CCPx) limpando o bit correspondente do registrador TRIS.
Isto , configurando-o para sada.

39
Captulo 7

Encoder

O encoder incremental serve para converter a posio de um eixo em uma quantidade de pulsos. Esses
pulsos so gerados por sensores pticos que detectam alteraes de intensidade luminosa e convertem
essas alteraes para sinais digitais que podem ser processados por um microcontrolador. Tipicamente as
alteraes de intensidade so obtidas por um disco ligado ao eixo do motor que alternam padres claros
e escuros, conforme mostrado na Figura 12. Para se determinar a direo de rotao desse disco, um par
de sensores colocado num arranjo em quadratura, ou seja defasados em 90, o que produz as formas de
onda mostradas na Figura 12 como sadas dos canais A e B.

Figura 12: Disco codificado com regies claras e escuras, sensores pticos em quadratura, sinais dos
canais A e B para rotao no sentido horrio e anti-horrio [6].

Interpretando-se os canais A e B como um cdigo binrio de 2 bits, tem-se o seguinte, segundo a


Figura 13:

Se a rotao do disco for no sentido horrio, a sequncia de cdigos produzida ser 0, 1, 3, 2, 0, e


assim por diante

Se a rotao do disco for no sentido anti-horrio, a sequncia de cdigos produzida ser 0, 2, 3, 1,


0, e assim por diante.

Se os cdigos gerados pelos canais A e B forem considerados como estados, pode-se visualizar a mquina
de estados mostrada na Figura 14. Se o encoder estiver parado numa posio correspondente ao estado

40
CAPTULO 7. ENCODER

Figura 13: Sinais dos canais A e B mostrados como um par de bits para o sentido horrio e anti-horrio[6].

0, o movimento do eixo do motor e consequentemente do disco do encoder causar uma mudana de


estado. A mudana do estado 0 para o estado 1 pode causar o incremento de um contador, enquanto que
a mudana para o estado 2 pode causar o decremento deste mesmo contador. Assim contabilizando as
mudanas de estado num sentido e no outro pode-se determinar efetivamente o deslocamento angular do
eixo do motor, levando-se em considerao inclusive a direo de rotao.

Figura 14: Mquina de estados para algoritmo de leitura de encoder.

Como consequncia deste mtodo, tem-se:

O nmero de regies claras ou escuras corresponde a quantidade de pulsos do canal A ou B por


volta. Assim, se o disco do encoder tiver 12 regies claras e 12 regies escuras possvel produzir 12
pulsos no sinal do canal A e 12 pulsos no sinal do canal B. Ainda, com 12 regies pode-se produzir
um pulso a cada 30 de rotao do eixo do motor.

Considerando-se que cada pulso do sinal do canal A combinado com o sinal do canal B produz
4 estados da mquina de estados. Assim, para cada pulso pode-se incrementar ou decrementar a
contagem 4 vezes. Dessa maneira numa volta completa do eixo do motor pode-se ter um incremento,
ou decremento, de 48. Isso significa que cada incremento ou decremento corresponde a 7,5 de rotao
do eixo.

Deve-se observar que a quantidade de pulsos determina o deslocamento angular do eixo do motor, enquanto
que a sua frequncia determina a velocidade angular do eixo do motor.

41
CAPTULO 7. ENCODER

Utilizando-se um microcontrolador pode-se conectar os sinais dos canais A e B em um par de bits


de uma porta de entrada digital. Um algoritmo que monitora o estado desses 2 bits pode incrementar e
decrementar um contador possibilitando, assim, o clculo do descolamento angular do eixo do motor. A
contabilizao de mudanas de estados num intervalo de tempo possibilita o clculo da velocidade angular
do eixo do motor.

42
Parte II

Atividades de Laboratrio

43
Captulo 8

Orientaes gerais

Nesse laboratrio os alunos montaro seu prprio hardware de uma placa processadora e desenvolvero o
software que lhes permitir explorar os diversos aspectos do uso de microcontroladores em automao e
robtica. Dentre as atividades esto a aquisio de dados digitais e analgicos, apresentao de dados em
LED e display de cristal lquido (LCD), comunicao serial, acionamento de motor por PWM e leitura de
posio por encoder. As atividades de laboratrio seguem em sincronismo com as aulas de teoria onde,
dentre outros temas, ser abordado um tema que serve como base para a atividade prtica antes do incio
do perodo da atividade em laboratrio. As atividades dessa disciplina e sua distribuio no semestre
esto relacionadas na Tabela 6.
Tabela 6: Atividades da disciplina durante o semestre

Semana Teoria (semanal) Laboratrio (quinzenal)


1 Apresentao do curso: objetivos, Preparao para elaborao de layout de
organizao, avaliao PCB e incio de layout
2 Reviso de Linguagem C e exerccios
3 Reviso de circuitos TTL
Layout e fabricao de PCB
4 Microcontrolador PIC e desenvolvimento
de software
5 Interrupes e Timer 0
Montagem do circuito e testes
6 Interfaceamento com display LCD
7 Comunicao serial, RS232 e RS485 Converso A/D, apresentao de dados
8 P1 em LCD e interrupo
9 Interfaces com o mundo real
Comunicao serial
10 Motores e seu acionamento com
microcontrolador PIC (PWM e Passo)
11 Leitura de encoder amostrada por
Acionamento de motor por PWM
interrupo e estimativa de velocidade
12 Projeto de software: Comunicao por
interrupo
13 Projeto de hardware e software: a definir
Leitura de encoder
14 Projeto de hardware e software: a definir
15 Exerccios
Estimao de velocidade
16 P2
17 PS (semana varivel devido a feriados)

As atividades prticas tem incio antes da primeira aula presencial no laboratrio. Durante as 2
primeiras semanas do curso os alunos devero se preparar para a fabricao de sua prpria placa de

44
CAPTULO 8. ORIENTAES GERAIS

circuito impresso (PCB) e trazer uma verso do layout da placa a ser fabricada para o dia da primeira
aula em laboratrio que corresponde a Atividade 2. Foi adotado nesse curso o software DipTrace para a
elaborao do layout do PCB. Nesse perodo os alunos devero estudar o software atravs de um tutorial
que acompanha o software e fazer uma verso do seu layout.
A atividade 2 consiste na avaliao pelo professor do layout feito, ajustes pelos alunos e gerao de
arquivos para a fabricao do PCB. A placa projetada ser fabricada numa mquina de prototipagem
rpida e cada grupo realizar a montagem e testes da sua placa na atividade 3. A placa resultante dessas
atividades iniciais dever ser utilizada em todas as outras atividades ao longo do semestre e ainda nas
atividades do PI-7. No trmino do semestre a placa montada dever ser devolvida para o professor.

ATENO: A no devoluo da placa montada para o pro-


fessor no final do semestre acarretar na reteno da nota final
do grupo de alunos.

A partir da atividade 3 os programas devero ser desenvolvidos antes da aula de laboratrio correspon-
dente. No dia da aula, antes do incio da atividade de laboratrio o grupo de alunos dever entregar uma
listagem do programa desenvolvido para o professor. Durante a aula os alunos devero executar o pro-
grama desenvolvido na prpria placa processadora, fazer as correes e ajustes necessrios e demonstrar
para o professor o funcionamento. Na maioria das atividades devero ser feitas medidas com o osciloscpio
que devero ser apresentadas e analisadas no relatrio. O relatrio de cada atividade dever ser entregue
no incio da atividade seguinte. Aps o trmino da atividade de laboratrio os alunos devero fazer um
backup do software na sua verso final que dever ser entregue no relatrio. Os alunos so responsveis
por apagar do computador do laboratrio todos os seus arquivos, deixando o computador limpo para
utilizao por outros grupos de alunos. No sero toleradas cpias dos programas entre os grupos de
alunos.
Os computadores do laboratrio possuem os pacotes de software necessrios para o desenvolvimento
do software durante o semestre. Mesmo assim, permitido aos alunos usarem os prprios notebooks no
laboratrio. Para tanto devero ser instalados os seguintes pacotes de software:

DipTrace pacote de software EDA para esquemticos e layout de placas de circuito impresso

MPLAB X ambiente de desenvolvimento de software para microcontroladores PIC da Microchip


baseado no NetBeans

MAPLAB XC8 compilador em Linguagem C para microcontroladores PIC de 8-bits da Microchip

TeraTerm emulador de terminal VT100 para comunicao serial com as placa processadora mon-
tada

Real PIC Simulator simulador de microcontroladores PIC (opcional)

Todos esses pacotes de software so disponveis na Internet em verses sem custo que podem ser usados
durante o semestre e atendem completamente as necessidades do curso e do PI-7. Em relao ao custo, a
nica excesso o Real PIC Simulator que uma ferramenta opcional para auxlio no desenvolvimento
do software antes do dia da atividade. Ele est disponvel em verso shareware por 30 dias. Aps esse
perodo, caso se deseje continuar utilizando o software, cada aluno dever adquirir sua prpria licena. O
seu custo na data de autoria desse documento era de US$29, podendo ser adquirido com carto de crdito
internacional.

45
8.1. CRITRIOS DE AVALIAO CAPTULO 8. ORIENTAES GERAIS

8.1 Critrios de avaliao


O software desenvolvido em cada atividade desse curso ser avaliado quanto a funcionalidade, eficincia e
forma. Os alunos devem procurar escrever cdigos conceitualmente corretos, no suficiente apresentar
o programa funcionando. Deve se ter muito cuidado ao desenvolver software para microcontroladores
pequenos pois a quantidade de memria disponvel tanto para programa como para dados muito pequena.
Assim, no deve ser desperdiado espao com variveis superdimensionadas e mesmo no utilizadas. Esses
pontos so levados em considerao na avaliao do cdigo entregue no relatrio.
Quanto a forma, no cdigo entregue devem constar obrigatoriamente os seguintes itens:

Cabealho de todas as rotinas descrevendo o que fazem e os sues parmetros de entrada e sada

Comentrios explicando a utilizao de cada uma das variveis globais e locais

Comentrios nos trechos de programa que expliquem o seu funcionamento.

ATENO: No sero tolerados cdigos iguais entre grupos


de alunos, resultando em nota zero no relatrio para todos os
envolvidos.

A entrega do cdigo no incio da atividade de laboratrio rigidamente controlada e caso o grupo de


alunos no entregue a listagem, ser aplicado um fator multiplicador de 0,7 nota do relatrio.
Um dos objetivos desse curso que os alunos aprendam a utilizar bem o osciloscpio como instrumento
de medida. Assim, durante o semestre sero coletadas formas de onda com o osciloscpio que deve ser
ajustado de maneira a permitir uma boa anlise dos tempos e tenses observados. Esse ponto levado
em considerao na avaliao.
Ao trmino da atividade de laboratrio, o professor deve ser chamado para verificar se a implementao
atende a especificao da atividade. Caso o professor no seja chamado ou se a implementao no atender
o especificado, haver perda de 1 ponto na nota do relatrio no primeiro caso e 0,5 ponto no segundo caso.
Os relatrios devem ser entregues no incio da atividade seguinte. O ltimo relatrio deve ser entregue
em at 5 dias aps o trmino da atividade no escaninho do professor na secretaria do PMR. A no entrega
do relatrio na data prevista resulta na perda de 1 ponto por semana de atraso.
Inicialmente todos os relatrios valem 10,0 pontos, o no atendimento aos critrios de avaliao vai
descontando pontos do total. A Tabela 7 apresenta a pontuao a ser descontada para cada critrio.

8.2 Material para as atividades


A partir da atividade 3 de laboratrio a placa fabricada, montada e testada utilizada para que o aluno
possa desenvolver programas em Linguagem C que permitam o acesso direto a recursos de hardware que
interfaceiam com o mundo real. Assim, so desenvolvidos programas para apresentao de informaes
em display de cristal lquido, comunicao serial, converso de sinais analgicos em digitais, controle de
velocidade de motor de corrente contnua e leitura de posio do eixo do motor. Para tanto utilizado
um mdulo especfico que conectado placa desenvolvida atravs de um cabo e que possui interface
para as diversas funes. A Figura 15 mostra esse mdulo com a indicao de suas diversas interfaces.
Esse mdulo tambm responsvel por fornecer alimentao de +5V para a placa desenvolvida. Assim,

46
8.2. MATERIAL PARA AS ATIVIDADES CAPTULO 8. ORIENTAES GERAIS

Tabela 7: Critrios de avaliao das atividades

Critrios Pontuao
Sobre datas de entrega
Atraso na entrega do conjunto de arquivos GERBER e NC 50%
DRILL da atividade 2
Falta de entrega de cdigo no incio da aula da atividade 3 em 30%
diante
Atraso na entrega do relatrio -1 por semana
Sobre avaliao no dia do laboratrio
No verificao do resultado do experimento pelo professor -1
Resultado fora das especificaes -0,5
Sobre o relatrio
Respostas erradas sobre as perguntas -1 por erro
Resposta fora de contexto -1 por resposta
Formas de onda sem indicao de tenses e tempos na figura sem -1
posicionamento claro dos cursores do osciloscpio e sem texto
explicativo e anlise
Formas de onda coletadas com Auto Set. Essa uma indicao -1
de que o aluno no sabe ajustar os parmetros de medida
corretamente.
Grficos sem unidades e sem texto explicativo e anlise -1
Sobre o cdigo fonte
Trechos de cdigo fora de contexto da atividade -1
Trechos sem comentrios ou comentrios fora de contexto -1
Cdigo sem a estrutura correta conforme apresentado no item -1
1.3 e sem as particularidades descritas no enunciado da atividade
Cdigo sem devida indentao, sempre devem ser usados 2 -1
espaos como unidade de indentao
Cdigo ineficiente no uso da memria ou no desempenho -1

esse mdulo recebe uma alimentao de +9V atravs de um uma fonte e regula essa tenso para os +5V
requeridos pelo placa processadora desenvolvida.
A comunicao serial entre a placa processadora e um terminal feita atravs de um conversor USB/-
serial, disponvel em cada bancada do laboratrio. A Figura 16 mostra o conversor utilizado. O lado
do USB conectado no computador, tambm disponvel em cada bancada do laboratrio, atravs de
um cabo USB / mini USB. Esse conversor utiliza um chip FT232RL da Future Technologies Devi-
ces International Ltd. (FTDI), que disponibiliza os drivers para Windows, Mac e Linux no seu site
(http://www.ftdichip.com/Drivers/D2XX.htm). Qualquer um desses drivers cria uma porta serial vir-
tual (p. ex: COM3) no computador o que permite seu acesso por qualquer programa de comunicao
serial. O outro lado possui um conector de 6 pinos com 0,1 pol. de espaamento entre pinos para ser conec-
tado diretamente na placa processadora. Os sinais presentes nesse conector so padro serial assncrono
0V a 5V, onde 0v corresponde ao nvel lgico LOW e 5V corresponde ao nvel lgico HIGH.
A programao da placa processadora feita sem que seja necessrio retirar o microcontrolador da
placa atravs do gravador PICkit 3 da Microchip, disponvel em cada bancada do laboratrio. A Figura
17 mostra o PICkit 3 utilizado. Esse gravador conecta-se ao computador atravs de um cabo USB / mini
USB vermelho e reconhecido pelo software MPLAB automaticamente, sem necessitar de driver adicional.
O outro lado conecta-se placa processadora diretamente atravs de um conector de 6 pinos com 0,1 pol.
de espaamento entre pinos. Esse conector igual ao do conversor USB/serial e no deve ser confundido

47
8.2. MATERIAL PARA AS ATIVIDADES CAPTULO 8. ORIENTAES GERAIS

Figura 15: Mdulo de LCD, motor, encoder e potencimetro

Figura 16: Interface de converso USB para serial

na placa processadora. Os sinais nesse conector so ligados a pinos especficos do microcontrolador de


acordo do o diagrama esquemtico dado.

Figura 17: PICkit 3 da Microchip

48
8.2. MATERIAL PARA AS ATIVIDADES CAPTULO 8. ORIENTAES GERAIS

ATENO: Nenhum dos itens relacionados abaixo pode ser


retirado do laboratrio:

Mdulo de LCD, motor, encoder e potencimetro

Cabo de conexo do mdulo

Conversor USB/serial e cabo USB / mini USB

Gravador de microcontrolador PICkit 3 e cabo USB / mini


USB

49
Captulo 9

Atividade 1: Trabalhando com


DipTrace

O objetivo desta atividade aprender a fazer um layout de uma placa de circuito impresso (PCB Printed
Circuit Board) utilizando o software de EDA (Electronic Design Automation) DipTrace atravs de estudo
de um tutorial do software e fazer o layout da prpria placa processadora que ser fabricada, montada,
testada e utilizada durante o semestre. Para tanto fornecido esquemtico no formato do DipTrace e
bibliotecas de componentes especficas para a disciplina PMR2415 que podem ser baixados do site da
disciplina.
Essa atividade deve ser feita em casa e no inclui horas no laboratrio. Para realiz-la sero necessrias
mais horas do que as disponveis para aula de laboratrio. Ser necessrio utilizar o prprio computado
e instalar o software para criao de layout de placas de circuitos impresso. O mesmo software est
disponvel nos computadores do laboratrio. Est disponvel um Tutorial em video no site do DipTrace
(http://www.diptrace.com/diptrace-software/guided-tour/) que pode auxiliar no aprendizado.
Para fazer o layout de acordo com as necessidades do curso devem ser configurados alguns ajustes
especficos no DipTrace que vo alm do que est no tutorial. Assim, o aluno deve fazer as configuraes
da seo 9.1.2, caso contrrio no ser possvel fabricar a PCB corretamente.
Essa atividade deve ser feita individualmente e no em grupo. O relatrio dever ser entregue por
grupo e dever conter os resultados de cada um dos alunos do grupo.

9.1 DipTrace
O software utilizado no curso o DipTrace que pode ser obtido numa verso sem custo com a capacidade
de gerar esquemticos e layouts com at 300 pinos, o que suficiente para as atividades do curso. Esse
software possui 4 mdulos:

Schematic Capture para desenho de esquemticos de circuitos eletrnicos

PCB Layout para desenho de placas de circuito impresso e gerao de arquivos CAM usados para
fabricao

Component Editor para definir componentes que sero usados no esquemtico e manter as bibli-
otecas .ELI do DipTrace

50
9.1. DIPTRACE CAPTULO 9. ATIVIDADE 1: TRABALHANDO COM DIPTRACE

Pattern Editor para definir footprints de componentes que sero utilizados no PCB Layout e
manter as bibliotecas .LIB do DipTrace. Esse padres de footprint contm informaes sobre as
furaes que devem ser realizadas na fabricao dos PCBs.

Destes 4 mdulos, somente o PCB Layout ser utilizado neste curso. As atividades do PI-7 podem requerer
o uso dos outros mdulos.

9.1.1 Terminologia no DipTrace


Os elementos utilizados no Layout de placas de circuito impresso recebem nomes especficos no DipTrace
e em outros EDAs. A Tabela 8 apresenta alguns termos comuns que so usados nesse documento e devem
ficar claros para os alunos trabalharem confortavelmente com o DipTrace.

Tabela 8: Alguns termos comuns usados no DipTrace e nesse documento

DipTrace Em Portugus Explicao


Lado da placa onde so colocados os
top face de componentes
componentes, face de cima.
Lado da placa onde so soldados os
bottom face de solda
componentes, face de baixo.
Conexo entre ilhas em cobre na face
trace trilha de solda se for em face simples e nas
duas faces se for em face dupla.
Ilha onde so soldados os terminais
pad ilha
dos componentes.
Ilha especial para conexo entre trilhas
de uma face outra no caso de face
via ilha
dupla ou para colocao de fios de
jumper no caso de face simples.
Preenchimento de uma rea com
copper pour cobre. Essa rea pode ser conectada a
algum sinal, como por exemplo o terra.
Mostra a conexo que deve ser feita
ratline entre componentes, mas ainda sem
trilha roteada
mounting hole furo de montagem Furo para fixao da placa
Furo por onde passa o terminal de um
componente que posicionado na face
through-hole furo
de componentes e soldado na face de
solda

9.1.2 Configurao para roteamento em face simples


Os PCBs a serem utilizados nesse laboratrio possuem cobre somente numa das faces e o roteamento
feito somente nessa face. A face que contm o cobre chamada de face de solda, ou Bottom no DipTrace,
e a outra face chamada de face de componentes, ou Top no DipTrace. O DipTrace fornece a opo
para dois algoritmos de auto-roteamento, o "Shape Router" e o "Grid Router". Para roteamento em face
simples o indicado o "Grid Router" que pode ser configurado atravs do menu do DipTrace. Para tanto,
realizar as seguintes configuraes:

1. Selecionar "Menu > Route > Current Autorouter > Grid Router".

51
9.1. DIPTRACE CAPTULO 9. ATIVIDADE 1: TRABALHANDO COM DIPTRACE

2. Entrar em "Route > Layer Setup..." e configurar o "Top Layer" para "Plane" e o "Bottom Layer"
para "Signal" comforme as Figuras 18a e 18b respectivamente.

(a) Configurao do Top Layer para Plane (b) Configurao do Bottom Layer para Signal

Figure 18: Configurao de Layer para roteamento

3. Entrar em "Route > Autorouter Setup..." e configurar "Number of Layers:" como 1 e marcar "Allow
Jumper Wires" com um "check mark", conforme Figura 19.

Muitas vezes no possvel se completar 100% do roteamento pela face da solda e nesse caso so usados
fios pela face de componentes que conectam segmentos de trilhas que no puderam ficar contidas numa
nica face. Chamamos esses fios de JUMPERs. Cada extremidade do fio de jumper soldado num tipo
de pad especfico para esse fim que recebe o nome de via no DipTrace. Os dimetros padro interno e
externo das vias no so adequados para que sejam soldados fios de jumper e devem ser alterados. Para
tanto deve ser seguindo o seguinte procedimento:

1. Entrar em "Menu > Route > Via Styles..." e clicar no boto "Add". Ser criado novo estilo de via
com nome "ViaStyle1".

2. Clicar sobre o novo estilo de via e alterar os seguintes parmetros:


Name: de "ViaStyle1" para "Jumper"
Outer Diameter: de 0.04 in para 0.065 in
Hole Diameter: de 0.019 in para 0.026 in
Terminar com OK. Veja o estado final da janela de dilogo na Figura 20.

3. Entrar em "Menu > Route> NetClasses" e em "Via Styles", deselecionar "Use All Styles"

52
9.1. DIPTRACE CAPTULO 9. ATIVIDADE 1: TRABALHANDO COM DIPTRACE

Figura 19: Configurao do Autorouter

Figura 20: Configurao de estilo de via

4. Ainda em "Via Styles", selecionar "Jumper" direita e passar para a esquerda com o boto "<<".
Depois terminar com OK. Veja os estado final da janela de dilogo na Figura 21.

5. Entrar em "Menu > Route > Autoroute setup..."

6. Escolher "Jumper Wire Direction" de acordo com a direo de posicionamento do PIC. Ou seja se
o PIC estiver na horizontal, escolher "Jumper Wire Direction: horizontal" e manter selecionados:
"Allow Jumper Wires" e "Forbid Jumpers under Patterns". Terminar com OK

53
9.1. DIPTRACE CAPTULO 9. ATIVIDADE 1: TRABALHANDO COM DIPTRACE

Figura 21: Definir uso do estilo de via para jumpers

9.1.3 Como passar um jumper manualmente


O algoritmo de roteamento "Grid Router" tenta passar os jumpers automaticamente, mas comum no
conseguir resolver todos os casos de maneira que sobram trilhas para serem roteadas manualmente e pode
ser que o roteamento manual requeira a colocao de fios de jumper. O procedimento a seguir explica
como colocar um jumper manualmente1 :

1. Inicie o roteamento manual na face de solda atravs do boto da barra de ferramentas ( ).

2. Clique no pad onde deseja iniciar o roteamento e coloque a trilha deslocando o mouse. Na posio
onde quiser iniciar o jumper clique com o mouse (Figura 22a).

3. Pressione a tecla "J" e ser colocada imediatamente uma via e a vista mudar para a face de
componentes (Figura 22b).

4. Estenda o jumper wire at a posio final desejada movendo o mouse (Figura 22c).

5. Clique com o mouse e ser colocada a outra via para o jumper wire e a vista mudar para a face de
solda novamente. Continue a trilha na face de solda at terminar a conexo desejada (Figura 22d).

9.1.4 Configuraes de Grid e DRC


O posicionamento dos elementos no PCB discretizado por uma grade, ou grid na terminologia do
DipTrace, que mantm as distncias entre os elementos dentro de limites adequados para que no ocorra
interferncia eltrica e para que a fabricao seja possvel. O menor valor permitido nesse curso de 0.012
polegadas (0,3048 mm) para X e Y. Deve-se notar que a mquina de prototipagem rpida trabalha com
uma fresa de 0,2 mm e que o uso de um grid menor, com 0.006 polegadas (0,1524 mm) permitiria uma
distncia mnima menor do que o dimetro da ferramenta o que causaria problemas na fabricao.
1 As trilhas passam pela face da solda, assim como os pads e vias. Os jumpers so soldados nas vias e so colocados na

face de componentes.

54
9.1. DIPTRACE CAPTULO 9. ATIVIDADE 1: TRABALHANDO COM DIPTRACE

(a) (b)

(c) (d)

Figura 22: Como passar jumper wires manualmente

Para ajustar o grid nesse valor, entrar no menu "View > Grid Size" e escolher "0.012 in". Deve-se
verificar tambm que o mesmo valor usado para Y atravs do menu "View > Y Grid Size" onde deve
existir um "check mark" em "Identical with X".
Para auxiliar na verificao de que os elementos no PCB seguem as distncias mnimas para que no
ocorra interferncia eltrica e para que seja possvel a fabricao com a mquina de prototipagem rpida,
o programa verifica as regras de projeto atravs do menu "Verification > Check Design Rules", ou atravs
do boto na barra de ferramentas. Os parmetros para a verificao podem ser definidos atravs da janela
que aberta pelo menu "Verification > Design Rules...", ou atravs do boto na barra de ferramentas.
Os valores para os parmetros devem ser configurados de acordo com a Figura 23. Deve-se observar que o
menor valor utilizado como parmetro 0.008 polegadas (0,2032 mm) que superior ao dimetro mnimo
da ferramenta. A utilizao de qualquer valor menor do que esse pode acarretar problemas na fabricao
mesmo que o projeto passe pela verificao.

Figura 23: Janela para definio dos valores dos parmetros para as regras de projeto

55
9.2. PROCEDIMENTOS CAPTULO 9. ATIVIDADE 1: TRABALHANDO COM DIPTRACE

9.2 Procedimentos
Atividades em casa:

Baixar e instalar o software DipTrace no seu prprio computador

Fazer o tutorial do DipTrace

Iniciar a criao do layout de sua placa impressa utilizando o posicionamento inicial mostrado na
Figura 24

Distribuir os componentes restantes dentro da rea da placa manualmente

Fazer o roteamento automtico em face simples com jumper wires

Completar o roteamento manual

Utilizar o copper pour conectado ao terra para completar os espaos do lado da solda

Na Figura 24 as dimenses da placa so aproximadamente 50 mm por 63,5 mm que correspondem a


2,0 pol. por 2,5 pol. Os 4 furos para fixao da placa possuem dimetro interno de 0,125 pol. para
parafusos M3 e dimetro externo de 0,25 pol. para manter a isolao entre porcas e arruelas at as
trilhas. O posicionamento dos headers, furos e dimenses da placa devem ser rigorosamente obedecidos
para poderem ser fabricados. A placa deve ser identificada com as iniciais dos nomes dos componentes do
grupo, turma e data de elaborao colocados dentro de um retngulo na camada TOP SILK. A posio do
quadro de identificao no rigorosa, este pode ser colocado num local onde no existam componentes
nem jumpers.
Trazer para a atividade 2 o layout mais completo possvel. aceitvel para o incio da Atividade 2 que
o layout contenha alguns "Ratlines" e no possua "Copper Pours", mas deve conter todos os componentes
posicionados, pelo menos numa primeira proposta, e deve ter sido roteada automaticamente com os
parmetros definidos conforme a seo 9.1.2. Recomenda-se que o aluno tenha iniciado o roteamento
manual e leve suas dvidas para a Atividade 2 de modo que o professor possa orient-lo em como terminar
seu layout.

9.3 Relatrio
O relatrio desta atividade consiste na impresso das faces de componentes e de solda da placa no estado
que estiver na vspera da Atividade 2. O relatrio dever ser identificado com o nome de cada aluno
associado s imagens impressas.
A impresso pode ser realizada no prprio software de PCB Layout atravs do menu "File > Preview..."
que abrir uma janela para visualizao e controle do que ser impresso. Nessa janela, deve-se imprimir
os dois lados da placa, seguindo-se o seguinte procedimento:

Escolher "Layers > Current: Top" e clicar no boto "Save...".

Na janela "Save Picture" escolher "Save As: Jpeg Image (*.jpg)", "Area: Sheet", "Resolution: 300
dpi" e clicar em Ok. Escolher o nome do arquivo a ser salvo.

Repetir o processo para "Layers > Current: Bottom".

56
9.3. RELATRIO CAPTULO 9. ATIVIDADE 1: TRABALHANDO COM DIPTRACE

Figura 24: Posicionamento inicial a ser seguido, medidas em polegadas

57
Captulo 10

Atividade 2: Layout e Fabricao

Nesta atividade os alunos concluiro o layout da placa de circuito impresso que ser fabricada, montada
pelos prprios alunos e utilizada durante o curso e no PI-7. Como resultado desta atividade cada grupo de
alunos gerar um conjunto de arquivos que devero ser enviados por e-mail para um tcnico do laboratrio
at uma data limite.
O tcnico do laboratrio receber o conjunto de arquivos de todos os alunos de uma turma e fabricar
as placas de circuito impresso que sero entregues para os alunos na prxima atividade para montagem.
Essa atividade tem por objetivos:

Completar o layout do PCB iniciado na Atividade 1 e que ser utilizada durante esse curso e no
PI-7

Gerar os arquivos Gerber e N/C Drill necessrios para a fabricao da placa de circuito impresso

Gerar imagens do layout realizado e viso 3-D da placa com componentes

10.1 Procedimentos
No dia do laboratrio:

Levar o arquivo de layout criado na Atividade 1 para verificao e avaliao pelo professor e para
ser completado durante a aula de laboratrio

Depois do dia do laboratrio:

Terminar o layout, caso no tenha sido possvel durante a aula de laboratrio

Ter certeza de que o layout elaborado passa no teste de regras de projeto (DRC Design Rules
Check)

Gerar o conjunto de arquivos Gerber e N/C Drill

Enviar conjunto de arquivos compactados em .ZIP por email para macdp@usp.br at 5 dias teis
antes da aula do prximo laboratrio1

Os alunos devero escolher somente um layout a ser fabricado por grupo.


1 O no cumprimento dessa data implica em perda de nota e atraso na fabricao do PCB o que prejudicar as atividades

futuras do grupo.

58
10.1. PROCEDIMENTOS CAPTULO 10. ATIVIDADE 2: LAYOUT E FABRICAO

ATENO: Enviar os arquivos Gerber e N/C Drill em ar-


quivo compactado (.ZIP) para macdp@usp.br at 5 dias teis
antes da aula do prximo laboratrio.

10.1.1 Teste de Regras de Projeto


muito importante para que a placa projetada possa ser fabricada que o layout passe pelo teste de regras
de projeto (DRC Design Rules Check) com os valores padro definidos pelo programa "PCB Layout".
Passar pelo teste significa tambm que distncias mnimas entre redes diferentes esto sendo obedecidas
e no apresentam riscos de curto circuito.
Os teste pode ser feito pelo comando "Verification > Check Design Rules", pela tecla F9, ou pelo
boto da barra de menu correspondente. Esse teste mostrar uma lista dos pontos que no obedecem as
regras e indicar no desenho o ponto com um circulo vermelho. A posio das trilhas e vias dever ser
modificada at que o projeto passe pelo teste sem erros. Os parmtros para o teste de verificao devem
ter sido definidos conforme indicado na Figura 23, conforme descrito anteriormente.

10.1.2 Arquivos Gerber e N/C Drill


Os arquivos Gerber possuem comandos para o controle numrico da mquina de prototipagem rpida
de circuitos impressos. Cada arquivo corresponde a uma camada da placa ou contm informaes sobre
a placa. No programa "PCB Layout" do DipTrace, o comando "File > Export > Gerber..." abre uma
janela para controle de exportao dos arquivos Gerber. Clicando-se no boto "Export All" so gerados
os seguintes arquivos num diretrio a escolher:

Top Assy mscara de posicionamento de componentes do lado dos componentes2 , usado no caso
de montagem de superfcie, esse arquivo no conter informaes no nosso caso

Top Silk mscara de silk screen do lado dos componentes que contm a identificao e contorno
de todos os componentes a serem montados

Top Mask mscara de solda do lado dos componentes

Top Paste mscara para pasta de solda do lado dos componentes

Top trilhas, pads e vias do lado dos componentes

Bottom trilhas, pads e vias do lado da solda

Bottom Paste mscara para pasta de solda do lado da solda

Bottom Mask mscara de solda do lado da solda

Bottom Silk mscara de silk screen do lado da solda

Bottom Assy mscara de posicionamento dos componentes do lado da solda, usado no caso de
montagem de superfcie, esse arquivo no conter informaes no nosso caso
2 Lado dos componentes e lado da solda uma terminologia usada em placas com componentes do tipo through hole

(furo passante) pois nesse caso os componentes ficam de um lado e so soldados pelo outro. No caso de montagem do tipo
surface mount (montagem na superfcie) utiliza-se a terminologia lado de cima de lado de baixo pois os componentes pode
ser soldados em ambos os lados e a conexo entre os lados feita somente por vias com furos metalizados.

59
10.1. PROCEDIMENTOS CAPTULO 10. ATIVIDADE 2: LAYOUT E FABRICAO

Board Outline contorno da placa

Board rea da placa

Top Dimension marcao das dimenses e distncias marcadas pelo lado dos componentes

Bottom Dimension marcao das dimenses e distncias marcadas pelo lado da solda

Deve ser exportado tambm o arquivo que contm as posies de dimetros dos furos da PCB. No programa
PCB Layout do DipTrace isso pode ser feito no comando "File > Export > N/C Drill...". Esse comando
abre uma janela que permite exportar os arquivos de furao. Antes disso, deve ser clicado o boto
"Auto" que atribuir nomes s ferramentas para dimetros especficos automaticamente. Depois disso
pode-se clicar no boto "Export All" que exportar, no caso, um arquivo com o nome Through.drl para
um diretrio a ser escolhido. Escolha o mesmo diretrio para o qual exportou os arquivos Gerber.
Nem todos os arquivos exportados precisam ser enviados para o tcnico responsvel pela fabricao.
No mnimo os seguintes arquivos devem ser colocados num .ZIP e enviados por email para o tcnico:

TopSilk.gbr

Bottom.gbr

Board.gbr

BoardOutline.gbr

Through.drl

Caso sejam enviados todos os arquivos, o tcnico far a separao dos que ir utilizar. Assim, pode-se
simplesmente colocar no arquivo .ZIP todos os arquivos exportados.
O email a ser enviado deve conter a identificao dos alunos atravs do nome e nmero USP e a Turma
da qual fazem parte.

ATENO: A identificao dos nomes dos alunos e turma


muito importante pois as placas sero fabricadas em lotes divi-
didos por turma para estarem prontas na data da Atividade da
turma correspondente. A falta dessa identificao pode resultar
na no fabricao da placa a tempo.

10.1.3 Conferncia no recebimento


O tcnico conferir os arquivos recebidos e verificar os pontos constantes da Tabela 9. Caso algum ponto
esteja em desacordo, ser retornado um e-mail para que o grupo de alunos resolva os pontos anotados
e re-submeta os arquivos Gerber e N/C Drill. Esse procedimento deve ser feito muito rapidamente pois
so pontos que impedem a produo e a sua soldagem de maneira segura pelos alunos. Caso o tcnico
no receba um retorno dos alunos em tempo para a fabricao, a placa ser excluda do lote e no ser
fabricada sendo que os alunos sero prejudicados nas atividades de laboratrio seguintes.

Nota O atendimento de todos os pontos no garante o funcionamento correto da


placa, garante somente que a placa pode ser fabricada e soldada pelos alunos.

60
10.2. RELATRIO CAPTULO 10. ATIVIDADE 2: LAYOUT E FABRICAO

Tabela 9: Check List antes do envio dos arquivos Gerber e NC Drill para o tcnico

Item Ponto a ser verificado pelo tcnico Atendido


1 A placa est roteada somente numa face (face de solda)
2 Os jumpers no se cruzam
3 Os jumpers no passam por baixo dos componentes
4 As vias dos jumpers possuem os dimetros interno e externo
conforme a especificao
5 Existe copper pour do lado da solda
6 Os Furos de montagem possuem os dimetros interno e externo
conforme a especificao
7 Existe identificao dos alunos e turma na mscara de silk screen
(Top Silk)

10.2 Relatrio
O relatrio, para cada aluno, dever conter 3 figuras geradas a partir da impresso do layout executado,
uma para a face dos componentes, uma para a face da solda e uma do modelo 3-D da placa. A figura do lado
dos componentes dever conter as dimenses da placa e indicaes do posicionamento dos componentes
de acordo com a Figura 24.
A Figura 25 mostra um exemplo de layout e modelo 3-D que corresponde s imagens que devem
ser entregues no relatrio. Esse exemplo s no mostra as dimenses e medidas de posicionamento dos
componentes que devem ir no relatrio.
Sero avaliados nesse relatrio os seguintes pontos:

dimenses placa de acordo com o especificado

posicionamento dos componentes de acordo com a Figura 24

existncia de identificao dos alunos e turma

quantidade de jumpers que deve ser menor do que 10

roteamento completo, isto , sem "Ratlines"

atende ao DRC

(a) Lado dos componentes, sem indica- (b) Lado da solda (c) Modelo 3-D
o de dimenses e medidas de posicio-
namento

Figura 25: Exemplo de layout e modelo 3-D

61
Captulo 11

Atividade 3: Montagem e testes

Nessa atividade os alunos recebero a placa fabricada na mquina de prototipagem rpida para ser mon-
tada e testada. Foi distribudo no incio do curso um envelope contendo todos os componentes necessrios
e o esquemtico do circuito. Todos os componentes a serem montados possuem uma identificao no lado
dos componentes na placa que corresponde a mesma identificao presente no diagrama esquemtico do
circuito. Com isso os alunos pode identificar os componentes corretos para a montagem.
Os alunos que no estiverem familiarizados com o processo de soldagem devero pedir ajuda para o
professor ou para o seu assistente para as devidas orientaes.
Aps a montagem dos componentes na placa o circuito dever ser testada. Para tanto fornecido um
projeto de MPLAB cuja execuo permite o teste funcional dos diversos elementos do circuito. No caso
de falha em algum dos testes dever ser revisada a montagem dos componentes com ateno aos seus
valores e as conexes entre a placa processadora, o computador e o mdulo de LCD, motor, encoder e
potencimetro.
Como resultado dessa atividade os alunos tero a placa processadora completa, funcionando correta-
mente para ser utilizada nas prximas atividades e no PI-7. A Figura 26 mostra a placa fabricada, (a)
com as marcaes no lado dos componentes, (b) as trilhas de cobre no lado da solda e (c) um exemplo de
placa montada.

(a) Lado dos componentes (b) Lado da solda (c) Placa montada

Figura 26: Exemplo de placa fabricada e montada

62
11.1. PROCEDIMENTOS CAPTULO 11. ATIVIDADE 3: MONTAGEM E TESTES

11.1 Procedimentos
Os alunos recebero a placa fabricada no incio do laboratrio e devero ter o envelope com todos os
componentes a serem montados na placa. O contedo do envelope dever ser conferido com a lista de
componentes no final desta apostila e no caso de falta de algum componente o professor deve ser avisado
para que seja providenciado o componente.
A seo "Montagem do circuito " apresenta uma sequncia de montagem que deve ser seguida para
que a montagem seja feita de maneira mais fcil. Os alunos devero soldar os componentes na placa de
circuito impresso. Caso no possuam experincia anterior em soldagem, o professor prestar um auxlio
inicial. Recomenda-se que os dois alunos de um grupo soldem alguns componentes para ganhar experincia
prtica.
Aps a montagem a placa dever ser testada segundo os detalhes apresentados na seo "Testes do
circuito".

11.1.1 Montagem do circuito


A sequncia de soldagem dos componentes visa facilitar a montagem da placa. A soldagem dos compo-
nentes de menor altura impede que eles se soltem da placa quando esta estiver com a face da solda para
cima e apoiada sobre a bancada.
Assim, deve-se soldar os componentes na seguinte sequncia:

1. jumpers

2. resistores (R1, R2, R3)

3. chave (S1)

4. soquetes (U1, U2, X1)

5. headers horizontais de 6 pinos e de 14 pinos (J1, J2 e J31 )

6. LED (D1)

7. capacitor (C1)

8. headers verticais (J4, J5, J6 e J7)

Os capacitores C2 e C3 no devem ser montados agora. Eles sero montados caso necessrio durante as
atividades que os utilizem.
Depois disso os componentes U1, U2 e X1 devem ser inseridos nos soquetes correspondentes.
Ao trmino a placa estar pronta para os testes.

11.1.2 Testes do circuito


fornecido um projeto de MPLAB X para testes do circuito montado. Esse projeto est disponvel no
site da disciplina e deve ser baixado e levado no dia da Atividade 3. Cada grupo dever criar um diretrio
dentro da pasta de Usurios do computador do laboratrio e colocar o projeto baixado nesse diretrio.
Esse projeto testa os seguintes itens:
1 Para a soldagem do header J3 recomenda-se que o flat cable do mdulo de motor, LCD e potencimetro seja encaixado

no header antes da soldagem. Isso deve auxiliar no seu posicionamento. Deve-se observar a conexo correta pelo alinhamento
da marca do condutor vermelho com o pino 1 do header.

63
11.1. PROCEDIMENTOS CAPTULO 11. ATIVIDADE 3: MONTAGEM E TESTES

display LCD

chave

LED

interrupo

comunicao serial

No so testados converso A/D, acionamento por PWM e leitura de encoder.


Antes do incio dos testes os diversos mdulos devem ser conectados segundo o diagrama da Figura
27. Depois disso, o projeto fornecido deve ser aberto no MPLAB X para poder ser compilado e carregado
na memria do microcontrolador da placa montada. Dever ser aberto tambm o programa TeraTerm
para comunicao serial com a placa processadora montada.

Figura 27: Conexes entre os mdulos

O TeraTerm dever ser configurado para usar a porta serial virtual que deve estar disponvel para
seleo na inicializao do programa. Antes da sua utilizao, deve ser configurada a taxa de comunicao
em 19.200 bps no menu "Setup > Serial Port ".
O projeto do MPLAB X deve ser compilado e carregado no microcontrolador PIC 16F886 da placa
montada. Ao ser liberado o RESET o programa de teste ser executado no microcontrolador o que
resultar no seguinte:

O LED piscar, ficando 1 segundo aceso e 1 segundo apagado

A quantidade de vezes que o LED acende aparece no display LCD

Ao ser pressionada a chave, a quantidade de vezes que a chave foi pressionada aparece no LCD

O terminal (TeraTerm) mostra as mesmas informaes que o LCD

Ao ser pressionada a tecla R do terminal (TeraTerm) as contagens so zeradas tanto no LCD como
no terminal

64
11.2. RELATRIO CAPTULO 11. ATIVIDADE 3: MONTAGEM E TESTES

Caso a execuo do programa no apresente os resultados descritos acima, a montagem da placa deve ser
verificada procurando-se inverso na posio dos cabos, curto-circuitos na solda, componentes trocados.
Aps a verificao, se os problemas persistirem, deve ser usado o osciloscpio para verificar alguns
sinais importantes. O professor deve ser chamado para orientar sobre como fazer os testes.
No final da aula o professor deve ser chamado para verificar o estado final da montagem e testes.

11.2 Relatrio
No relatrio devem ser entregues duas figuras contendo uma foto colorida da placa montada do lado
dos componentes e outra do lado da solda, na melhor resoluo possvel. A qualidade da solda efetuada
ser avaliada para efeitos da nota do relatrio pelas imagens apresentadas. Assim, caso as imagens no
permitam a avaliao da montagem, haver um desconto na nota devido a qualidade da imagem entregue.

65
Captulo 12

Atividade 4: Converso A/D com


display LCD

Nesta atividade dever ser desenvolvido um programa para realizar periodicamente a converso A/D de um
sinal e mostrar o valor dessa converso num display LCD a cada 0,5 segundo. O valor convertido deve ser
apresentado em miliVolts no display LCD. O intervalo de tempo deve ser controlado com uma interrupo
peridica. O valor do sinal analgico deve ser alterado pelo potencimetro presente no mdulo de motor e
LCD. O valor obtido pelo mdulo de converso A/D do PIC no dado diretamente em miliVolts e deve
ser corrigido para se mostrado no display LCD corretamente.
O PIC 16F886 possui 11 canais de converso A/D, cada canal converte um sinal analgico para um
valor digital de 10-bits. Os valores limites do sinal analgico podem ser configurados por software e/ou
hardware. Nesse laboratrio ser utilizado somente um canal analgico, o canal 0, na faixa de 0V a 5V
configurada por software.
A placa montada na atividade anterior conecta o potencimetro do mdulo de motor e LCD ao canal
0 (zero) de converso A/D do PIC que corresponde ao pino RA0/AN0. O uso desse pino como entrada
analgica precisa ser configurado atravs dos registradores ADCON0, ADCON1, ANSEL e ANSELH e
o resultado da converso apresentado nos registradores ADRESH e ADRESL do PIC. Os detalhes da
configurao e utilizao dos canais de converso A/D foram apresentados no Captulo 3. Nesta atividade
devero ser usadas as rotinas em C disponveis na biblioteca fornecida para realizar a configurao e
converso A/D.

12.1 Programa a ser desenvolvido


O programa deve seguir a seguinte estrutura:

1. Criar uma interrupo peridica a cada 0,5 segundo usando o Timer 0

2. Na interrupo efetuar a converso do sinal analgico e armazenar o resultado numa varivel global

3. No programa principal, ficar num loop infinito que fica realizando as seguintes operaes:

Converter o valor da varivel global que armazena o resultado da converso A/D para a unidade
de miliVolts
Converter o valor em milivolts para um string ASCII que possa ver mostrado no display LCD

66
12.2. PROCEDIMENTOSCAPTULO 12. ATIVIDADE 4: CONVERSO A/D COM DISPLAY LCD

Escrever o string resultante no display LCD

Para que seja possvel mostrar o valor correto em miliVolts no display LCD deve ser levantada uma curva
de calibrao entre o valor resultante da converso A/D e o nvel de tenso real do sinal. Pode-se aplicar
um mtodo de regresso linear com a medida de 5 pontos entre o mnimo e o mximo. Para o levantamento
dos pontos deve-se mostrar o valor do resultado da converso A/D diretamente no display LCD e medir
a tenso correspondente no pino 2 do PIC (RA0/AN0) com um multmetro.

12.2 Procedimentos
1. Antes do dia da atividade de laboratrio, criar um programa de acordo com a descrio dada,
utilizando as bibliotecas lcd.c e serial.c. Pode ser utilizado o simulador para auxlio ao desen-
volvimento. O programa dever mostrar diretamente o valor do conversor A/D no display LCD.

2. Entregar a listagem do programa no incio da atividade do laboratrio.

3. Depurar o programa no dia do laboratrio utilizando a placa processadora do grupo e os dispositivos


do laboratrio.

4. Fazer as medidas do sinal analgico no pino 3 do conector J4 com o osciloscpio ou com o multmetro.
Levantar pelo menos 5 pontos para que seja possvel determinar a curva de converso entre valor do
A/D e miliVolts.

5. Determinar a equao que converte o valor do A/D para miliVolts e corrigir o programa para mostrar
o valor em miliVolts no display LCD.

6. Mostrar para o professor o funcionamento do programa no final da atividade.

12.3 Relatrio
No relatrio devero estar identificados os membros do grupo, turma, disciplina e atividade e devero
constar os seguintes itens:

1. O PIC 16F886 possui 3 timers que podem ser utilizados nesta atividade. Estude as caractersticas
do Timer 1, de 16-bits, e faa um resumo no relatrio. Mostre os clculos e a programao necessria
para gerar uma interrupo com o perodo de 0,5 s com o Timer 1.

2. Estude o cdigo fonte da biblioteca de converso A/D (adc.h e adc.c) e a descrio apresentada na
seo 3.1 desta apostila. Mostre como configurar e efetuar a aquisio de um sinal no canal 2 do
conversor A/D se o clock do oscilador do PIC tiver a frequncia de 8 MHz.

3. Levantamento da curva de calibrao do valor da converso A/D para a unidade de miliVolts,


apresente a tabela com os dados coletados durante o experimento e um grfico mostrando a curva
de calibrao. Mostre tambm a equao obtida.

4. Cdigo fonte com comentrios explicando o funcionamento do programa

67
Captulo 13

Atividade 5: Comunicao serial

Nessa atividade ser implementado um programa para jogar ping pong entre dois grupos conectados
atravs de um canal serial.
O boto de cada placa processadora utilizado como raquete e a bola e o placar so mostrados nas
linhas 1 e 2 do display de LCD, respectivamente. O display de LCD de ambas as placas processadoras de
cada jogador deve mostrar as mesmas informaes simultaneamente.
Ao ser pressionado o boto de uma das placas a bola entra em jogo e deve ser mostrada uma animao
da bola se movimentando na linha 1 do display de LCD. So 8 posies possveis para a bola, cada uma
correspondendo a um caracter da linha 1 do display de LCD. A bola pode ser representada pela letra o
(minscula).
O jogador na outra placa processadora deve rebater a bola quando ela estiver exatamente na ltima
posio da linha do display de LCD, no antes e nem depois. Ao ser rebatida a bola a animao muda de
direo e a bola voltando dever ser rebatida pelo primeiro jogador.
Se o jogador no rebater no momento exato a bola sai fora e o outro jogador pontua. Nesse momento o
placar atualizado na segunda linha do LCD e o LED da placa do jogador que acertou acende e permanece
aceso at outra bola entrar em jogo. Qualquer um dos jogadores pode iniciar ou re-iniciar o jogo
Deve ser implementada uma mquina de estados segundo conceitos vistos na disciplina PMR2440
Programao para Automao. Uma das maneiras de causar mudanas de estados da mquina atravs
de uma interrupo peridica no estouro do Timer 1 que controla a posio da bola. Esse timer deve ser
progamado inicialmente para 100 ms e a cada acerto pelo outro jogador o seu tempo diminudo de 5
ms, ou seja, o jogo vai ficando mais rpido. A interrupo para esse timer dever multiplicar esse tempo
por 2. Assim, a mudana de estado da mquina ocorre a cada 200 ms inicialmente e acelera 10 ms a cada
acerto de um dos jogadores. Outra maneira de causar mudanas de estados da mquina por movimentos
da raquete de cada jogador (boto de cada placa processadora), ou seja por recepo do movimento da
raquete do jogador local e por recepo do movimento da raquete do jogador remoto.
O estado da mquina deve ser enviado de uma placa processadora para outra pelo canal serial. Ao
rebater a bola deve ser enviado algum cdigo pelo canal serial que indique que a bola foi rebatida. A
ausncia desse cdigo no momento correto significa que a bola saiu para fora ou que o outro jogador
rebateu cedo de mais.
O valor do potencimetro deve ser lido pelo conversor A/D e deve ser utilizado para determinar se o
jogador est esquerda ou direita. Se o potencimetro estiver da metade baixo, considerado que o
jogador est esquerda, do contrrio o jogador est direita. Essa verificao deve ser feita somente uma

68
13.1. ANLISE DOS SINAIS DE COMUNICAO
CAPTULOSERIAL
13. ATIVIDADE 5: COMUNICAO SERIAL

vez, logo no incio do programa.


O canal de comunicao serial deve ser configurado com a taxa de Baud de 19.200 bps, com 8-bits
de dados, e sem paridade. Essa configurao no PIC feita atravs dos registradores TXSTA, RCSTA e
SPBRG de acordo com o que visto no Captulo 5. Os clculos e configuraes para os valores de operao
do canal serial devero ser apresentados no relatrio.
Dever ser utilizada a biblioteca de software para acesso ao canal serial fornecida. Para tanto incluir
o header serial.h. As rotinas disponveis esto descritas na seo 5.1.4.

13.1 Anlise dos sinais de comunicao serial


Durante o jogo de ping pong, cada grupo deve conectar o osciloscpio na sua placa e observar 2 pontos
do circuito:

Pino 18 do PIC16F886 (Rx do PIC)

Pino 17 do PIC16F886 (Tx do PIC)

Com os dois canais verticais do osciloscpio deve-se observar os sinais de Tx e Rx do PIC. As imagens das
formas de onda devem ser salvas em pen drive e devem ser medidos tempos e tenses dos sinais. Os tempos
e tenses medidos devem ser anotados nas figuras de modo a demonstrar como foram feitas as medidas e
que os alunos observaram e compreenderam os nveis de tenso e os tempos envolvidos nas medidas. Os
alunos devero ajustar o osciloscpio de maneira a permitir as medidas com a melhor preciso possvel.

ATENO: no deve ser usado o AUTO SET do oscilosc-


pio. Chame o professor para auxili-lo caso tenha dificuldade
no ajuste adequado do osciloscpio.

Com base no tempo de um bit medido com o osciloscpio o sinal dever ser analisado mostrando a
que caracter ASCII a sequncia de bits observada corresponde. Deve ser verificado que o tempo de um
bit medido corresponde taxa de Baud programada no PIC.

13.2 Procedimentos
1. Projetar o software a ser implementado com os conceitos de mquina de estados vistos em PMR2440
Programao Para Automao e incluir no relatrio os diagramas da mquina de estados, casos
de uso e diagramas de componentes.

2. Calcular os parmetros do Timer 1 para gerar interrupes a cada 100 ms e reduzir esse tempo de
5 ms.

3. Calcular os parmetros para operao da USART em 19.200 bps

4. Antes do dia da atividade de laboratrio, criar um programa de acordo com a descrio dada,
utilizando as bibliotecas lcd.c, adc.c e serial.c. Deve ser utilizado o simulador para auxlio ao
desenvolvimento.

69
13.3. RELATRIO CAPTULO 13. ATIVIDADE 5: COMUNICAO SERIAL

ATENO: esse programa requer um bom tempo para ser implementado, por isso,
no deixe para a ltima hora. Se o programa no estiver com a lgica correta no
incio da atividade de laboratrio, no haver tempo hbil dentro do perodo da aula
para que o programa funcione corretamente e haver penalidade de nota.

5. Entregar a listagem do programa no incio da atividade do laboratrio.

6. Depurar o programa no dia do laboratrio utilizando a placa processadora do grupo e os dispositivos


do laboratrio

7. Fazer as medidas dos sinais de Tx e Rx serial do PIC com o osciloscpio. Analisar as amplitudes
e tempos. As imagens da tela do osciloscpio devem ser capturadas para um Pen Drive USB e
anexadas ao relatrio com a devida analise.

8. Mostrar para o professor o funcionamento do programa no final da atividade.

13.3 Relatrio
No relatrio devero estar identificados os membros do grupo, turma, disciplina e atividade e devero
constar os seguintes itens:

1. Apresentar os diagramas da mquina de estados, casos de uso e diagramas de componentes.

2. Clculos e programao dos bits dos registradores para configurar o Timer 1 para gerar uma inter-
rupo peridica a cada 100 ms e alterao desse tempo em 5 ms.

3. Clculo e programao dos bits dos registradores do PIC para configurar a USART com taxa de
Baud de 19.200 bps com palavra de 8-bits e sem paridade.

4. Desenhos das formas de ondas dos 2 pontos do circuito indicados, explicando que caracter que
aparece nas formas de onda, tempos e tenses dos sinais. Incluir verificao de que os tempos de um
bit nas formas de onda acima correspondem aos valores programados para taxa de Baud. Incluir as
imagens da tela do osciloscpio capturadas com o Pen Drive USB.

5. Cdigo fonte com comentrios explicando o funcionamento do programa.

Alm da avaliao dos pontos acima, sero levados tambm em considerao para a nota:

Estrutura do programa que deve seguir a proposta

Lgica utilizada na soluo do problema

Atendimento aos conceitos vistos em PMR2440

Relevncia e adequao dos comentrios inseridos no cdigo do programa

Trechos de cdigo sem relao com a atividade prejudicaro a nota

70
Captulo 14

Atividade 6: Acionamento de motor


com PWM

Nesta atividade ser desenvolvido um programa para controle da velocidade de um motor CC atravs da
aplicao de um sinal PWM produzido pelo PIC para o driver do motor. Os conceitos de PWM e como
gerar um sinal de PWM com o PIC foram vistos no Captulo 6.
Nesta atividade, ao contrrio das anteriores, no fornecida uma biblioteca de rotinas em C. Os alunos
devero desenvolver sua prpria biblioteca para gerao do sinal PWM criando dois arquivos, pwm.h e
pwm.c que devero conter a interface e a implementao das as seguintes funes:

void pwm_init(void) inicializa o canal de PWM para operao numa frequncia de aproximada-
mente 20 kHz usando o Timer 2 para gerar a base de tempo e define um duty cycle de zero. Define
tambm um valor inicial para os sinais DIR1 e DIR2 como sendo uma das direes1 . Os sinais DIR1
e DIR2 correspondem aos bits 0 e 1 da Porta C do PIC, vide o esquemtico do Apndice III.

void pwm_set(int setpoint) o parmetro de entrada corresponde ao valor do duty cycle em


porcentagem, podendo variar entre 0 e 1000, onde o valor 1000 corresponde a 100% de duty cycle.
Valores fora dessa faixa devero ser ignorados da seguinte maneira: se menor que zero, ajusta o valor
do duty cycle para zero; se maior que 1000, ajusta o valor do duty cycle para 100%. No intervalo
desse parmetro ser possvel o ajuste de 1000 valores de PWM.

void pwm_direction(int direction) muda a direo de rotao do motor de acordo com o


sinal do parmetro de entrada. Se o parmetro for positivo o motor gira no sentido horrio, se
for negativo, gira no sentido anti-horrio. O valor do parmetro de entrada no importa, assim,
sugere-se que sejam utilizados os valores + 1 e - 1. O sentido horrio de rotao obtido com os
sinais DIR1 e DIR2 iguais a 01 e o sentido anti-horrio, com os sinais iguais a 10.

O programa principal dever receber um nmero inteiro, entre 0 e 1000 (terminado por ENTER) pelo
canal serial que corresponde ao valor percentual do duty cycle do PWM vezes 10. Para tanto devero ser
usadas as funes de PWM desenvolvidas e as de canal serial utilizadas anteriormente. Sero recebidos
caracteres ASCII pelo canal serial que devero ser convertidos para um nmero inteiro. Para tanto, pode
ser utilizada a rotina atoi() da biblioteca padro de C, a stdlih.h que converte um string em um
nmero inteiro. Por exemplo, o string "123" convertido para o inteiro 123.
1O valor de IN1 e IN2 igual a 00 no movimenta o motor mesmo com um set point de PWM diferente de zero

71
14.1. PROCEDIMENTOS
CAPTULO 14. ATIVIDADE 6: ACIONAMENTO DE MOTOR COM PWM

O sinal do PWM gerado dever ser visto com o osciloscpio e as formas de onda para 25%, 50% e 75%
devero ser anotadas para o relatrio, seus tempos medidos e o duty cycle calculado para verificao de
que o software est operando corretamente.
Adicionalmente, as tecla - faz girar no sentido anti-horrio e a tecla = no sentido horrio.

14.1 Procedimentos
1. Antes do dia da atividade de laboratrio, criar um programa de acordo com a descrio dada,
utilizando a biblioteca serial.c e criar a biblioteca pwm.c. Pode ser utilizado o simulador para
auxlio ao desenvolvimento

2. Entregar a listagem do programa no incio da atividade do laboratrio.

3. Depurar o programa no dia do laboratrio utilizando a placa processadora do grupo e os dispositivos


do laboratrio

4. Fazer as medidas do sinal de PWM no pino 7 do conector J3 com o osciloscpio. Analisar as


amplitudes e tempos. As imagens da tela do osciloscpio devem ser capturadas para um Pen Drive
USB e anexadas ao relatrio com a devida analise.

5. Mostrar para o professor o funcionamento do programa no final da atividade.

14.2 Relatrio
No relatrio devero estar identificados os membros do grupo, turma, disciplina e atividade e devero
constar os seguintes itens:

1. Clculo do perodo do PWM baseado no clock do microcontrolador e determinao do valor a ser


programado no registrador PR2.

2. Clculo da converso do valor do parmetro de entrada da rotina pwm_set() para o valor a ser
programado no registrador CCPR1L e CCP1CON

3. Desenhos das formas de onda para 25%, 50% e 75% de duty cycle mostrando os tempos que o sinal
fica em nvel lgico HIGH, e o perodo do PWM. Calcular a percentagem do PWM para verificar
que o software est correto. Incluir as imagens da tela do osciloscpio capturadas com o Pen Drive
USB.

4. Cdigo fonte com comentrios explicando o funcionamento do programa.

72
Captulo 15

Atividade 7: Leitura de encoder

Nessa atividade dever ser desenvolvido um algoritmo para contabilizao de mudanas de estados dos
sinais dos canais A e B do encoder, vide Captulo 7 sobre o funcionamento do encoder. Os sinais dos
canais A e B esto conectados aos bits 3 e 4 da porta C do PIC, respectivamente. Para tanto dever
ser estabelecida uma interrupo peridica a cada 1 ms que ler os 2 bits, executar um algoritmo
para transformar o estado contido nesses 2-bits para uma contagem e incrementar ou decrementar uma
varivel global que corresponde ao contador de estados do encoder. Essa varivel dever ser de 16-bits sem
sinal e o seu valor dever ser constantemente atualizado numa das linhas do display LCD pelo programa
principal. Uma tecla do Terminal (atravs do canal de comunicao serial) dever ser usada para zerar
essa varivel. A atualizao do valor no LCD deve ser feita aproximadamente a cada 0,5 segundo num loop
no programa principal. O valor a ser mostrado no display LCD corresponde simplesmente contagem
dos estados acumulada na varivel global utilizada como contador.

ATENO: A atualizao do display LCD no deve ser feita


na rotina de interrupo.

A velocidade do motor deve ser controlada em incrementos e decrementos discretos atravs do teclado
do Terminal que altera os valores do PWM do motor. Devem ser utilizadas as seguintes teclas do Terminal:

r zera a contagem do contador do encoder imediatamente

z incrementa o PWM em 10%

x incrementa o PWM em 1%

c decrementa o PWM em 1%

v decrementa o PWM em 10%

Espao zera o valor do PWM

- motor gira no sentido anti-horrio

= motor gira no sentido horrio

73
15.1. PROCEDIMENTOS CAPTULO 15. ATIVIDADE 7: LEITURA DE ENCODER

A porcentagem do PWM deve ser mostrada numa das linhas do display LCD. Um sinal de menos deve
preceder o valor se a rotao for no sentido anti-horrio e um sinal de mais se for no sentido horrio.
Durante a atividade, montar os dois canais verticais do osciloscpio nos canais A e B do encoder e
para a velocidade de 50% de PWM anotar as formas de ondas dos canais A e B. Medir os tempos das
larguras dos pulsos (tempo em nvel lgico HIGH e em nvel lgico LOW) e da defasagem entre os canais.
Sabendo que o dimetro da roda 42 mm e que para cada volta so produzidos 12 pulsos para cada
canal A e B, calcule a velocidade em mm/s para 5 valores de PWM entre 0 e 100%. Utilize a frequncia
dos sinais medidos com o osciloscpio para o clculo.

ATENO: Nessa implementao o disco do encoder est po-


sicionado na roda e no no eixo do motor.

15.1 Procedimentos
1. Antes do dia da atividade de laboratrio, criar um programa de acordo com a descrio dada,
utilizando as bibliotecas serial.c e pwm.c. Pode ser utilizado o simulador para auxlio ao desen-
volvimento

2. Entregar a listagem do programa no incio da atividade do laboratrio.

3. Depurar o programa no dia do laboratrio utilizando a placa processadora do grupo e os dispositivos


do laboratrio

4. Fazer as medidas dos sinais ENC_A e ENC_B nos pinos 3 do conector J3 e 2 do conector J4,
respectivamente, com o osciloscpio. Analisar as amplitudes e tempos. As imagens da tela do
osciloscpio devem ser capturadas para um Pen Drive USB e anexadas ao relatrio com a devida
analise.

5. Mostrar para o professor o funcionamento do programa no final da atividade.

15.2 Relatrio
No relatrio devero estar identificados os membros do grupo, turma, disciplina e atividade e devero
constar os seguintes itens:

1. Mostar os clculos para o timer escolhido gerar interrupo a cada 1 ms

2. Desenhar as formas de ondas dos canais A e B do encoder e mostrar os tempos anotados da largura
dos pulsos e da defasagem entre os canais para um valor de duty cycle de PWM de 50%. Incluir as
imagens da tela do osciloscpio capturadas com o Pen Drive USB.

3. Mostrar os clculos para determinar a velocidade da roda em mm/s a partir da % do PWM. Traar
um grfico de velocidade (mm/s) em funo da % de PWM e achar uma funo que converta %
PWM em velocidade em mm/s.

4. Cdigo fonte com comentrios explicando o funcionamento do programa.

74
Captulo 16

Atividade 8: Estimativa de velocidade

Nesta atividade a velocidade do motor deve ser alterada detectando-se a variao de tenso atravs do
potencimetro. A velocidade da roda em mm/s e o valor do sinal do potencimetro convertido para % de
PWM devem ser mostrados no display LCD.
A variao de tenso do potencimetro detectada pelo PIC de maneira semelhante ao que foi imple-
mentado na Atividade 4, contudo ao invs de uma escala em miliVolts o valor do conversor A/D deve ser
convertido para % de PWM e ao invs de fazer a converso A/D na interrupo, esta deve ser feita dentro
do loop principal do main(). Isso libera o tempo da interrupo para o clculo da velocidade O ajuste da
% de PWM tambm deve ser feita no loop principal do main().
A velocidade da roda deve ser calculada com base na leitura do encoder em um intervalo de tempo
conhecido. Usando-se uma interrupo de 1ms para a leitura do encoder, pode-se utilizar 100ms para o
intervalo de tempo para o clculo da velocidade. O tempo de 100ms deve ser obtido contabilizando-se o
nmero de vezes que a rotina de interrupo executada. O dimetro da roda de 42 mm e cada canal A
e B produz 12 pulsos por volta. A diferena de contagem deve ser determinada obrigatoriamente dentro
da rotina de interrupo para que no se perca a referncia de tempo. J o valor da velocidade em mm/s
deve ser calculada dentro do loop principal do main() para que o tempo que esse clculo demora no
influencie no tempo da interrupo.
O display LCD deve ser atualizado pelo programa principal a cada 0,25 segundos.
Depois de terminado o programa, deve ser levantado um grfico com os valores apresentados no display
LCD da velocidade da roda em mm/s em funo da % de PWM. Pelo menos 5 valores devem ser anotados
para a apresentao dos resultados no relatrio. Esse grfico deve ser comparado com o levantado na
atividade anterior.

16.1 Procedimentos
1. Antes do dia da atividade de laboratrio, criar um programa de acordo com a descrio dada,
utilizando as bibliotecas lcd.c, adc.c e pwm.c. Pode ser utilizado o simulador para auxlio ao
desenvolvimento

2. Entregar a listagem do programa no incio da atividade do laboratrio.

3. Depurar o programa no dia do laboratrio utilizando a placa processadora do grupo e os dispositivos


do laboratrio

75
16.2. RELATRIO CAPTULO 16. ATIVIDADE 8: ESTIMATIVA DE VELOCIDADE

4. Achar uma constante de converso de valor do A/D para % de PWM e utilizar o potencimetro
para variar a % de PWM de 0 a 100%. Mostrar numa linha do LCD o valor da % de PWM.

5. Determinar a equao que converte o % de PWM e em velocidade da roda em mm/s e mostrar no


display LCD.

6. Mostrar para o professor o funcionamento do programa no final da atividade.

16.2 Relatrio
No relatrio devero estar identificados os membros do grupo, turma, disciplina e atividade e devero
constar os seguintes itens:

1. Apresentar um grfico levantado com pelo menos 5 pontos da velocidade da roda em mm/s em
funo da % de PWM e comparar com o grfico da atividade anterior.

2. Apresentar uma funo que descreva o grfico levantado e compar-la com a funo encontrada na
atividade anterior.

3. Cdigo fonte com comentrios explicando o funcionamento do programa.

76
Referncias Bibliogrficas

[1] Hitachi; HD44780U (LCD-II) (Dot Matrix Liquid Crystal Display Controller/Driver); Rev. 0.0; 1999

[2] Microchip Technology Inc.; PIC16F882/883/884/886/887 Data Sheet 28/40/44-Pin Flash-Based, 8-


Bot CMOS Microcontrollers; 2012

[3] Microchip Technology Inc.; MPLAB X Users Guide; disponvel em http://ww1.microchip.com/


downloads/en/DeviceDoc/52027B.pdf; acessado em 15/06/2013; 2012

[4] Microchip Technology Inc.; MPLAB XC8 C Compiler Users Guide; disponvel em http://ww1.
microchip.com/downloads/en/DeviceDoc/52053B.pdf; acessado em 15/06/2013; 2012

[5] Radartutorial.eu; Radar Basics - Analogue-to-Digital Converter; http://www.radartutorial.eu/17.


bauteile/bt45.en.html; acessado em 14/06/2013

[6] Storr, Wayne; Basic Electronics Tutorials: Position Sensors; http://www.electronics-tutorials.


ws/io/io_2.html; acessado em 31/01/2011

77
Parte III

Apndices

78
79
Apndice 1 Diagrama Lgico

80
Apndice 2 Posicionamento inicial de
componentes para Layout

81
Apndice 3 Lista de Componentes

Ref Descrio Foto Footprint

C1 Capacitor eletroltico de 100 mF

OBS: o terminal mais


comprido o positivo

C2, C3 Capacitor de poliester


metalizado de 0,1 mF OBS: o aspecto fsico desse

OBS: no vem includos no material, componente pode diferir da

sero montados caso necessrio figura

D1 LED vermelho ou verde de 3


mm OBS: a ilha quadrada
OBS: o terminal mais
o catodo
comprido o nodo, o lado
chanfrado o ctodo

J1, J2 Header macho de 6 pinos


horizontal OBS: a ilha quadrada
OBS: o lado mais curto o da o pino 1
solda

82
J3 Header macho de 14 pinos (2x7) OBS: semelhande ao da
OBS: a ilha quadrada
horizontal figura, mas com 2 fileiras de 7
o pino 1, visto por
pinos cada, o lado da dobra
cima
o da solda

J4 Header macho de 6 pinos


OBS: a ilha quadrada
vertical OBS: o lado mais curto o da o pino 1
solda

J5, J6 Header macho de 2 pinos


OBS: a ilha quadrada
vertical OBS: o lado mais curto o da o pino 1
solda
OBS: Caso no venha includo
no material, pode ser feito
J7 Header macho de 1 pino
com um fio comum ou sobra
de terminal de resistor

R1, R3 Resistor de 10 kW, 1/8W, 5%


OBS: as cores so marron,
preto, laranja e dourado

R2 Resistor de 330W, 1/8W, 5%


OBS: as cores so laranja,
laranja, marron e dourado

S1 Chave Tctil (SPST)


normalmente aberta (NO)

83
U1 Microcontrolador PIC16F886
OBS: esse componente no ser
soldado na placa. No seu lugar dever
ser soldado o soquete correspondente.

OBS: visto por cima

U2 Driver RS485 MAX485


OBS: esse componente no ser
soldado na placa. No seu lugar dever OBS: visto por cima
ser soldado o soquete correspondente.

X1 Oscilador cristal de 20 MHz


OBS: esse encapsulamento
OBS: esse componente no ser
corresponde a um DIP de 8
soldado na placa. No seu lugar dever OBS: visto por cima
pinos. Os pinos 2, 3, 6 e 7 no
ser soldado o soquete correspondente.
exsitem nesse encapsulamento

U1 Soquete para CI 28 pinos DIL


(300 mils)

U2, X1 Soquete para CI 8 pinos DIL

84
Apndice 4 Bibliotecas de Software

always.h
/

Common hea der file

Designed by Shane Tolmie o f www. microchipC . com c o r p o r a t i o n . Freely d i s t r i b u t a b l e .


Q u e s t i o n s and comments t o webmaster@microchipC . com
L o t s o f Hi Tech C FAQ and sample s o u r c e code a t www. microchipC . com .

For Microchip PIC16Fx .

Compiled w i t h Hitech C v7 . 8 5 [ j o : 1 3 0 8 1 6 ] t e s t e d ok w i t h XC8

Usage : #i n c l u d e i n a l l " . c " f i l e s i n p r o j e c t a l o n g w i t h " p i c . h"


[ j o : 1 3 0 8 1 6 ] do not use p i c . h anymore , now i s xc . h w i t h XC8

// warning a b o u t #i f s t a t e m e n t s : i f any o f t h e arguments a r e s p e l l e d wrong or


// u n r e c o g n i s e d by t h e c o m p i l e r , i t w i l l not g e n e r a t e a warning , b u t not i n c l u d e code

#i f n d e f ALWAYS_H
#d e f i n e ALWAYS_H

/
Turning b i t s on/ o f f a c c o r d i n g t o mask
use ~0 i n s t e a d o f 0xFF , e t c , b e c a u s e t h i s e n s u r e s machine i n d e p e n d e n c e
i f i n t ch an ge s from 16 b i t t o 32 b i t

Example C:
x=0b001 ;
b i t s _ o n ( x , 0 b100 ) //now x=0b101
/

#d e f i n e b i t s _ o n ( var , mask ) v a r |= mask


#d e f i n e b i t s _ o f f ( var , mask ) v a r &= ~0 ^ mask

// d e f i n e s
#d e f i n e INPUT 1 // p o r t d i r e c t i o n s , i e : TRISA0=INPUT;
#d e f i n e OUTPUT 0
#d e f i n e TRUE 1
#d e f i n e FALSE 0
#d e f i n e HIGH 1
#d e f i n e LOW 0
#d e f i n e h i 1
#d e f i n e l o 0

#d e f i n e b asm ( " nop " ) // c o n v e n i e n t p o i n t f o r b r e a k p o i n t ( d e b u g g i n g )


#d e f i n e l while ( 1 ) // l o o p f o r e v e r ( d e b u g g i n g )

85
// s e e AM576 . If i n t e r r u p t o c c u r s j u s t when g i e g e t s s e t t o z e r o , i t won t be c l e a r e d

#d e f i n e gie_on GIE=1
#d e f i n e g i e _ o f f while ( GIE==1) GIE=0

/
Reading an 8 b i t b y t e i n a 16 bit int

With Hi Tech C, t h i s method i s b e t t e r than u s i n g p o i n t e r s , as u s i n g p o i n t e r s i n


d i f f e r e n t banks needs d i f f e r e n t #d e f i n e s

It is j u s t as e f f i c i e n t the optimizer p i c k s out the c o r r e c t


byte . Of course , >>7 r e q u i r e s 7 s h i f t s .

This method cannot be used t o a l t e r a h i / l o b y t e , t h i s needs p o i n t e r s ( as b e l o w )

Example C:
unsigned i n t x ;
u n s i g n e d char y ;
x=0x1234 ;
y=h i b y t e ( x ) ; //now y=0x12 works f o r v a r i a b l e s i n any bank 0 t o 3
y=l o b y t e ( x ) ; //now y=0x34

l o b y t e ( x)=0xaa ; // w i l l not work : ( use p o i n t e r s


/

#d e f i n e h i b y t e ( x ) ( unsigned char ) ( x>>8)


#d e f i n e l o b y t e ( x ) ( unsigned char ) ( x & 0xFF )

/
g i v e n v a r i a b l e o f any t y p e ( char , uchar , i n t , u i n t , l o n g ) i t m o d i f i e s
t h e u n s i g n e d char r e s i d i n g a t t h a t memory l o c a t i o n
for ints b y t e 1 i s msb , b y t e 0 i s l s b ( l e a s t s i g n i f i c a n t b y t e )
f o r l o n g s b y t e 3 i s msb , b y t e 0 i s l s b

i e : sample C code

u n s i g n e d i n t myint=0x4321 ;
l o n g mylong=0x87654321 ;

// f o r myint b y t e 1 ( myint)=0x43 ; ( msb ) and b y t e 0 ( myint)=0x21 ; ( l s b )


// f o r mylong b y t e 3 ( mylong)=0x87 ; ( msb ) , b y t e 2 ( mylong)=0x65 ;
b y t e 2 ( mylong)=0x43 ; and b y t e 0 ( mylong)=0x21 ; ( l s b )

note : t o a v o i d f i x u p o v e r f l o w e r r o r s add bankX i f the target variable


r e s i d e s i n banks 1 , 2 or 3
/

#d e f i n e byte0 ( x ) ( unsigned char ) ( ( ( ( unsigned char )&x ) + 0 ) )


#d e f i n e byte1 ( x ) ( unsigned char ) ( ( ( ( unsigned char )&x ) + 1 ) )
#d e f i n e byte2 ( x ) ( unsigned char ) ( ( ( ( unsigned char )&x ) + 2 ) )
#d e f i n e byte3 ( x ) ( unsigned char ) ( ( ( ( unsigned char )&x ) + 3 ) )

#d e f i n e l o b y t e _ a t b a n k 0 byte0 // a n o t h e r way o f s a y i n g it
#d e f i n e h i b y t e _ a t b a n k 0 byte1

#d e f i n e byte0_atbank1 ( x ) ( unsigned char ) ( ( ( ( bank1 unsigned char )&x ) + 0 ) )


#d e f i n e byte1_atbank1 ( x ) ( unsigned char ) ( ( ( ( bank1 unsigned char )&x ) + 1 ) )
#d e f i n e byte2_atbank1 ( x ) ( unsigned char ) ( ( ( ( bank1 unsigned char )&x ) + 2 ) )
#d e f i n e byte3_atbank1 ( x ) ( unsigned char ) ( ( ( ( bank1 unsigned char )&x ) + 3 ) )

#d e f i n e l o b y t e _ a t b a n k 1 byte0_atbank1 // a n o t h e r way o f s a y i n g it
#d e f i n e h i b y t e _ a t b a n k 1 byte1_atbank1

#d e f i n e byte0_atbank2 ( x ) ( unsigned char ) ( ( ( ( bank2 unsigned char )&x ) + 0 ) )


#d e f i n e byte1_atbank2 ( x ) ( unsigned char ) ( ( ( ( bank2 unsigned char )&x ) + 1 ) )

86
#d e f i n e byte2_atbank2 ( x ) ( unsigned char ) ( ( ( ( bank2 unsigned char )&x ) + 2 ) )
#d e f i n e byte3_atbank2 ( x ) ( unsigned char ) ( ( ( ( bank2 unsigned char )&x ) + 3 ) )

#d e f i n e byte0_atbank3 ( x ) ( unsigned char ) ( ( ( ( bank3 unsigned char )&x ) + 0 ) )


#d e f i n e byte1_atbank3 ( x ) ( unsigned char ) ( ( ( ( bank3 unsigned char )&x ) + 1 ) )
#d e f i n e byte2_atbank3 ( x ) ( unsigned char ) ( ( ( ( bank3 unsigned char )&x ) + 2 ) )
#d e f i n e byte3_atbank3 ( x ) ( unsigned char ) ( ( ( ( bank3 unsigned char )&x ) + 3 ) )

/
g i v e n v a r i a b l e o f any t y p e ( char , uchar , i n t , u i n t , l o n g ) i t modifies
t h e i n t r e s i d i n g a t t h a t memory l o c a t i o n
i e : sample C code

u n s i g n e d char a r r a y [ 4 ] ;
unsigned i n t t e s t ;

u i n t _ a t b y t e a d d r (& a r r a y [ 0 ] ) = 0 x4321 ; //now a r r a y [0 >3]={0x21 , 0 x43 , 0 , 0 } ;


u i n t _ a t b y t e a d d r (& a r r a y [0+2])=0 x8765 ; //now a r r a y [0 >3]={0x21 , 0 x43 , 0 x65 , 0 x87 } ;
t e s t=u i n t _ a t b y t e a d d r (& a r r a y [ 0 + 2 ] ) //now t e s t =0x8765

n o t e : do NOT use &( a r r a y [ 0 ] + 1 ) t o r e f e r e n c e t h e i n t s t o r e d a t a r r a y [ 1 ] as i t will


r e f e r e n c e the i n t a f t e r array [ 0 ] in p o i nte r a r i t h m e t i c . This w i l l
r e s u l t with the i n t at array [ 2 ] .

I n s t e a d use &a r r a y [0+1] t o r e f e r e n c e t h e i n t a t uchar a r r a y [ 1 ]

note : t o a v o i d f i x u p o v e r f l o w e r r o r s add bankX i f the target variable


r e s i d e s i n banks 1 , 2 or 3
/

#d e f i n e uint_atbyteaddr ( x ) ( unsigned int ) ( ( ( ( unsigned i n t ) x ) ) )


#d e f i n e uint_atbank1byteaddr ( x ) ( unsigned int ) ( ( ( ( bank1 unsigned i n t ) x ) ) )
#d e f i n e uint_atbank2byteaddr ( x ) ( unsigned int ) ( ( ( ( bank2 unsigned i n t ) x ) ) )
#d e f i n e uint_atbank3byteaddr ( x ) ( unsigned int ) ( ( ( ( bank3 unsigned i n t ) x ) ) )

#d e f i n e THE_BEER_IS_PLENTIFUL_AND_THE_PARTY_SWINGING TRUE

NOTE: i t i s not recommended t h a t unions a r e used t o r e f e r e n c e h i / l o b y t e s or


b i t s of a variable . Use >>8 or &FF or p o i n t e r s i n s t e a d , as above . I t makes
p a s s i n g v a r i a b l e s t o a f u n c t i o n d i f f i c u l t , as t h e f u n c t i o n must be d e f i n e d t o
a c c e p t v a r i a b l e s o f t h e same union . Then , t h e f u n c t i o n w i l l no l o n g e r a c c e p t
normally d e fine d v a r i a b l e s .

t h e s e two s t r u c t u r e s a l l o w a c c e s s t o 2 b y t e word , h i g h and low b y t e s o f v a r i a b l e


d e c l a r a t i o n : union wordtype x ;
usage : x . word=0xABCD; x . b y t e . h i g h=0xAB ; x . b y t e . low=0xCD ;
x . p a r t . b i t 1 5 =1; ( msb ) , x . p a r t . b i t 0 =1; ( l s b )
d e c l a r a t i o n : union c h a r t y p e x ;
usage : x . b y t e=0xAB ;
x . p a r t . b i t 7 =1; ( msb ) , x . p a r t . b i t 0 =1; ( l s b )
/

struct s i x t e e n _ b i t s {
unsigned char bit0 :1;
unsigned char bit1 :1;
unsigned char bit2 :1;
unsigned char bit3 :1;
unsigned char bit4 :1;
unsigned char bit5 :1;
unsigned char bit6 :1;
unsigned char bit7 :1;
unsigned char bit8 :1;
unsigned char bit9 :1;
unsigned char bit10 :1;

87
unsigned char bit11 :1;
unsigned char bit12 :1;
unsigned char bit13 :1;
unsigned char bit14 :1;
unsigned char bit15 :1;
};

struct e i g h t _ b i t s {
unsigned char bit0 :1;
unsigned char bit1 :1;
unsigned char bit2 :1;
unsigned char bit3 :1;
unsigned char bit4 :1;
unsigned char bit5 :1;
unsigned char bit6 :1;
unsigned char bit7 :1;
};

s t r u c t two_bytes {
unsigned char low ;
unsigned char h i g h ;
};

union wordtype {
unsigned i n t word ;
s t r u c t two_bytes b y t e ;
struct s i x t e e n _ b i t s part ;
};

union c h a r t y p e {
unsigned char b y t e ;
struct e i g h t _ b i t s part ;
};

#e n d i f

delay.h
/

lowlev el delay routines

Designed by Shane Tolmie f o r www. microchipC . com . F r e e l y d i s t r i b u t a b l e .


Q u e s t i o n s and comments t o webmaster@microchipC . com .

For Microchip 12C67x , 16C7x , 16F87x and Hi Tech C


[ j o : 1 3 0 8 1 3 ] works f o r XC8 t o o !

Example C:

#d e f i n e PIC_CLK 4000000

#i n c l u d e " d e l a y . h"

u n s i g n e d i n t ti me ou t_i nt , timeout_char ;

DelayUs ( 4 0 ) ; // do NOT do DelayUs (N) o f N<5 @ 4Mhz or e l s e it e x e c u t e s DelayUs ( 2 5 5 ) !!!!


DelayUs ( 2 5 5 ) ; //max

dly250n ; // d e l a y 250 ns
dly1u ; // d e l a y 1 us

timeout_char=timeout_char_us ( 1 1 4 7 ) ;
w h i l e ( timeout_char && (RA1==0)); // w a i t up t o 1147 us f o r p o r t RA1 t o go h i g h
// t h i s i s t h e max t i m e o u t

88
t i m e o u t _ i n t=timeout_int_us ( 4 9 1 5 1 2 ) ;
w h i l e ( tim eo ut_in t && (RA1==0)); // w a i t up t o 491512 us f o r p o r t RA1 t o go h i g h
// t h i s i s t h e max t i m e o u t

/
#d e f i n e PIC_CLK 2 0 0 0 0 0 0 0 // 20Mhz O s c i l a t t o r f r e q u e n c y i n Hz

#i f n d e f __DELAY_H
#d e f i n e __DELAY_H

extern unsigned char d e l a y u s _ v a r i a b l e ;

#i f (PIC_CLK == 4 0 0 0 0 0 0 )
#d e f i n e d l y 1 2 5 n p l e a s e remove ; f o r 32Mhz+ o n l y
#d e f i n e d l y 2 5 0 n p l e a s e remove ; f o r 16Mhz+ o n l y
#d e f i n e d l y 5 0 0 n p l e a s e remove ; f o r 8Mhz+ o n l y
#d e f i n e d l y 1 u asm ( " nop " )
#d e f i n e d l y 2 u d l y 1 u ; d l y 1 u
#e l i f (PIC_CLK == 8 0 0 0 0 0 0 )
#d e f i n e d l y 1 2 5 n p l e a s e remove ; f o r 32Mhz+ o n l y
#d e f i n e d l y 2 5 0 n p l e a s e remove ; f o r 16Mhz+ o n l y
#d e f i n e d l y 5 0 0 n asm ( " nop " )
#d e f i n e d l y 1 u d l y 5 0 0 n ; d l y 5 0 0 n
#d e f i n e d l y 2 u d l y 1 u ; d l y 1 u
#e l i f ( (PIC_CLK == 1 6 0 0 0 0 0 0 ) | | (PIC_CLK == 1 6 2 5 7 0 0 0 ) )
#d e f i n e d l y 1 2 5 n p l e a s e remove ; f o r 32Mhz+ o n l y
#d e f i n e d l y 2 5 0 n asm ( " nop " )
#d e f i n e d l y 5 0 0 n d l y 2 5 0 n ; d l y 2 5 0 n
#d e f i n e d l y 1 u d l y 5 0 0 n ; d l y 5 0 0 n
#d e f i n e d l y 2 u d l y 1 u ; d l y 1 u
#e l i f (PIC_CLK == 2 0 0 0 0 0 0 0 )
#d e f i n e d l y 2 0 0 n asm ( " nop " )
#d e f i n e d l y 4 0 0 n d l y 2 5 0 n ; d l y 2 5 0 n
#d e f i n e d l y 2 u d l y 4 0 0 n ; d l y 4 0 0 n ; d l y 4 0 0 n ; d l y 4 0 0 n ; d l y 4 0 0 n
#e l i f (PIC_CLK == 3 2 0 0 0 0 0 0 )
#d e f i n e d l y 1 2 5 n asm ( " nop " )
#d e f i n e d l y 2 5 0 n d l y 1 2 5 n ; d l y 1 2 5 n
#d e f i n e d l y 5 0 0 n d l y 2 5 0 n ; d l y 2 5 0 n
#d e f i n e d l y 1 u d l y 5 0 0 n ; d l y 5 0 0 n
#d e f i n e d l y 2 u d l y 1 u ; d l y 1 u
#e l s e
#e r r o r d e l a y . h please d ef i n e pic_clk c o r r e c t l y
#e n d i f

//
// d e l a y r o u t i n e

#i f PIC_CLK == 4 00 0 00 0
#d e f i n e D e l a y D i v i s o r 4
#d e f i n e WaitFor1Us asm ( " nop " )
#d e f i n e Jumpback asm ( " g o t o $ 2 " )
#e l i f PIC_CLK == 8 00 0 00 0
#d e f i n e D e l a y D i v i s o r 2
#d e f i n e WaitFor1Us asm ( " nop " )
#d e f i n e Jumpback asm ( " g o t o $ 2 " )
#e l i f ( (PIC_CLK == 1 6 0 0 0 0 0 0 ) | | (PIC_CLK==16257000) )
#d e f i n e D e l a y D i v i s o r 1
#d e f i n e WaitFor1Us asm ( " nop " )
#d e f i n e Jumpback asm ( " g o t o $ 2 " )
#e l i f PIC_CLK == 2 0 0 0 0 0 0 0
#d e f i n e D e l a y D i v i s o r 1
#d e f i n e WaitFor1Us asm ( " nop " ) ; asm ( " nop " )
#d e f i n e Jumpback asm ( " g o t o $ 3 " )
#e l i f PIC_CLK == 3 2 0 0 0 0 0 0
#d e f i n e D e l a y D i v i s o r 1

89
#d e f i n e WaitFor1Us asm ( " nop " ) ; asm ( " nop " ) ; asm ( " nop " ) ; asm ( " nop " ) ; asm ( " nop " )
#d e f i n e Jumpback asm ( " g o t o $ 6 " )
#e l s e
#e r r o r d e l a y . h please d ef i n e pic_clk c o r r e c t l y
#e n d i f

#d e f i n e DelayUs ( x ) { \
d e l a y u s _ v a r i a b l e =(unsigned char ) ( x/ D e l a y D i v i s o r ) ; \
WaitFor1Us ; } \
asm ( " d e c f s z _ d e l a y u s _ v a r i a b l e , f " ) ; \
Jumpback ;

timeouts :

C code f o r t e s t i n g w i t h i n t s :

unsigned i n t timeout ;
t i m e o u t =4000;
PORT_DIRECTION=OUTPUT;
while (1) {
PORT=1;
t i m e o u t =8000;
w h i l e ( timeout >= 1 ) ; //60ms @ 8Mhz , o p t on , 72ms @ 8Mhz , o p t o f f
PORT=0;
}

Time t a k e n : o p t i m i s a t i o n s on : 16 cyc /number l o o p , 8 us @ 8Mhz


o p t i m i s a t i o n s o f f : 18 cyc /number l o o p , 9 us @ 8Mhz
w i t h e x t r a c h e c k i e : && (RB7==1), +3cyc /number l o o p , +1.5 us @ 8Mhz

C code f o r t e s t i n g w i t h c h a r s :

s i m i l a r t o above

Time t a k e n : o p t i m i s a t i o n s on : 9 cyc /number l o o p , 4 . 5 us @ 8Mhz


w i t h e x t r a c h e c k i e : && (RB7==1), +3cyc /number l o o p , +1.5 us @ 8Mhz

Formula : rough t i m e o u t v a l u e = (<us d e s i r e d >/<c y c l e s pe r l o o p >) (PIC_CLK/ 4 . 0 )

To use : // f o r max t i m e o u t o f 1147 us @ 8Mhz


#d e f i n e LOOP_CYCLES_CHAR 9 // how many c y c l e s p e r l o o p , o p t i m i z a t i o n s on
#d e f i n e timeout_char_us ( x ) ( u n s i g n e d char ) ( ( x /LOOP_CYCLES_CHAR) (PIC_CLK/ 4 . 0 ) )
u n s i g n e d char t i m e o u t ;
t i m e o u t=timeout_char_us ( 1 1 4 7 ) ; // max t i m e o u t a l l o w e d @ 8Mhz , 573 us @ 16Mhz
w h i l e ( ( timeout >= 1) && (< e x t r a c o n d i t i o n >)); // w a i t

To use : // f o r max 491512 us , h a l f s e c t i m e o u t @ 8Mhz


#d e f i n e LOOP_CYCLES_INT 16 // how many c y c l e s p e r l o o p , o p t i m i z a t i o n s on
#d e f i n e timeout_int_us ( x ) ( u n s i g n e d i n t ) ( ( x+/LOOP_CYCLES_INT) (PIC_CLK/ 4 . 0 ) )
unsigned i n t timeout ;
t i m e o u t=timeout_int_us ( 4 9 1 5 1 2 ) ; // max t i m e o u t a l l o w e d @ 8Mhz
w h i l e ( ( timeout >= 1) && (< e x t r a c o n d i t i o n >)); // w a i t
/
#d e f i n e LOOP_CYCLES_CHAR 9 // how many c y c l e s p e r l o o p , o p t i m i z a t i o n s on
#d e f i n e timeout_char_us ( x ) ( long ) ( ( ( x ) /LOOP_CYCLES_CHAR) (PIC_CLK/ 1 0 0 0 0 0 0 / 4 ) )

#d e f i n e LOOP_CYCLES_INT 16 // how many c y c l e s p e r l o o p , o p t i m i z a t i o n s on


#d e f i n e timeout_int_us ( x ) ( long ) ( ( ( x ) /LOOP_CYCLES_INT) (PIC_CLK/ 1 0 0 0 0 0 0 / 4 ) )

// i f l o b y t e i s z e r o , f a s t e r i n i t i a l i z a t i o n by 1 i n s t r u c i o n
#d e f i n e t i m e o u t _ i n t _ l o b y t e _ z e r o _ u s ( x ) ( long ) ( ( ( x ) /LOOP_CYCLES_INT) (PIC_CLK/ 4 . 0 ) & 0 xFF00 )

// f u n c t i o n p r o t o t y p e s
void DelayBigUs ( unsigned i n t c n t ) ;

90
void DelayMs ( unsigned char c n t ) ;
void D e l a y M s _ i n t e r r u p t ( unsigned char c n t ) ;
void DelayBigMs ( unsigned i n t c n t ) ;
void DelayS ( unsigned char c n t ) ;

#e n d i f

adc.h
///
/// ADC u n i t h e a d e r file
///

/// I n i t i a l i z e an ADC c h a n n e l s
///
/// @param ADC_Channel number o f t h e c h a n n e l [ 0 , 7 ] ,
/// must be 0 ( z e r o ) i n t h i s l a b
///
extern void a d c _ i n i t ( unsigned char ADC_Channel ) ;

/// Reads t h e ADC l e v e l i n p u t on a s p e c i f i e d ADC c h a n n e l .


/// Takes i n an 10 b i t ADC c h a n n e l number .
/// Returns an 10 b i t number t h a t s i g n i f i e s t h i s l e v e l .
/// Approximate s a m p l i n g time = 7 6 . 8 us
///
/// @param ADC_Channel number o f t h e c h a n n e l [ 0 , 7 ] ,
/// must be 0 ( z e r o ) i n t h i s l a b
///
extern unsigned i n t adc_read ( unsigned char ADC_Channel ) ;

lcd.h

///
/// LCD i n t e r f a c e h e a d e r file
///

/// I n t i a l i z e t h e LCD call before anything e l s e


extern void l c d _ i n i t ( void ) ;

/// C l e a r and home t h e LCD


/// Should no be c a l l e d i n s i d e o f a l o o p , it i s very slow
extern void l c d _ c l e a r ( void ) ;

/// Write a b y t e t o t h e LCD i n 4 b i t mode


extern void l c d _ w r i t e ( unsigned char ) ;

/// Write a s t r i n g o f c h a r a c t e r s t o t h e LCD


extern void l c d _ p u t s ( const char s ) ;

/// Go t o t h e s p e c i f i e d p o s i t i o n
extern void l c d _ g o t o ( unsigned char po s ) ;

/// Turn c u r s o r ON and OFF


/// @param on 1 = ON; 0 = OFF
extern void l c d _ c u r s o r ( i n t on ) ;

/// Write a c h a r a t e r t o t h e LCD


extern void l c d _ p u t c h r ( char c ) ;

91
serial.h

///
/// Asynchonous s e r i a l c h a n n e l h e a d e r file
///

/// I n i t i a l i z e an asynchronous s e r i a l c h a n n e l
void s e r i a l _ i n i t ( void ) ;

/// Get an 8 b i t c h a r a c t e r
/// IMPORTANT: i t do es not r e t u r n w h i l e a c h a r a c t e r i s not r e c e i v e d
unsigned char g e t c h ( void ) ;

/// Get an 8 b i t c h a r a c t e r
/// I t w a i t s a t i m e o u t f o r t h e c h a c a t e r t o a r r i v e .
/// I f no c h a c a r t e r a r r i v e s w i t h i n t h e timeout ,
/// t h i s f u n c t i o n r e t u r n s 2 5 5 .
///
unsigned char g e t c h _ t i m e o u t ( void ) ;

/// I f t h e r e has been a p r e v i o u s t i m e o u t e r r o r from g e t c h _ t i m e o u t ( ) ,


/// t h i s f u n c t i o n r e t u r n s TRUE
unsigned char u s a r t _ t i m e o u t ( void ) ;

/// Check and r e t u r n an 8 b i t c h a r a c t e r


/// I f no c h a r a c t e r i s ready i n t h e i n p u t b u f f e r
/// t h i s f u n c t i o n r e t u r n s 2 5 5 .
/// IMPORTANT: i t a l w a y s r e t u r n w i t h o u t w a i t i n g
///
unsigned char c h k c h r ( void ) ;

/// Send an 8 b i t c h a r a c t e r
void putch ( unsigned char c ) ;

/// Send a s t r i n g
void p u t s t ( r e g i s t e r const char s t r ) ;

/// Send a c h a r a c t e r i n d e c i m a l form


void p u t c h d e c ( unsigned char c ) ;

/// Send a c h a r a c t e r i n h e x a d e c i m a l form


void putchhex ( unsigned char c ) ;

/// Send a i n t e g e r number as h e x a d e c i m a l form


void p u t i n t h e x ( unsigned i n t c ) ;

/// Put a l i n e f e e d
#d e f i n e p u t l f p u t s t ( " \n" )

92

Вам также может понравиться