Академический Документы
Профессиональный Документы
Культура Документы
23 de fevereiro de 2015
Sumrio
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
III Apndices 78
2
Parte I
3
Captulo 1
Introduo
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.
4
1.1. INTEGRAO COM O PI-7 CAPTULO 1. INTRODUO
alm, claro, dos conceitos adquiridos nas disciplinas que compe a grade curricular, cursadas anterior-
mente.
Procura-se com esta atividade:
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:
acionamento de motores
5
1.2. SISTEMA DE DESENVOLVIMENTO CAPTULO 1. INTRODUO
// 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
// Enums
// Project includes
// Variveis Globais
// Subrotinas
// Programa Principal
void main ( void ) {
// -> Declarao de variveis
// -> Inicializao de variveis
// -> Configuraes do processador
// -> inicializao dos dispositivos
7
1.3. ESTRUTURA DOS PROGRAMAS CAPTULO 1. INTRODUO
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:
13 interrupes
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.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
}
...
}
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 )
IESO habilita chaveamento entre oscilador interno e externo durante inicializao (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.
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
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
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:
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
// Interrues
T0IE = 1; // habilita a interrupo do Timer 0
GIE = 1; // habilita interrupes
...
}
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
Timer 1
O mdulo do Timer 1 possui as seguintes caractersticas:
15
2.6. TIMER 0 CAPTULO 2. MICROCONTROLADOR PIC
oscilador LP opcional
desperta em transfordo
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])
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:
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
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.
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]).
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 .
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
1. Configurar a porta:
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
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.
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.
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:
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.
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.
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.
24
4.2. INSTRUES E DADOS CAPTULO 4. 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
3. DL = 0; interface de 4-bits
4. N = 1; display de 2 linhas
7. D = 0; desliga display
8. C = 0; desliga cursor
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
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
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.
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.
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 .
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:
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:
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.
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
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.
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:
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.
1. Inicializar o par de registradores SPBRGH e SPBRG e os bits BRGH e BRG16 de acordo com a
Taxa de Baud desejada.
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.
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 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.
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
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:
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.
1. Desabilitar o pino de PWM (CCPx) setando o bit correspondente do registrador TRIS. Isto ,
configurando-o para entrada
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>).
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:
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].
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].
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
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
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.
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
TeraTerm emulador de terminal VT100 para comunicao serial com as placa processadora mon-
tada
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
Cabealho de todas as rotinas descrevendo o que fazem e os sues parmetros de entrada e sada
46
8.2. MATERIAL PARA AS ATIVIDADES CAPTULO 8. ORIENTAES GERAIS
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
48
8.2. MATERIAL PARA AS ATIVIDADES CAPTULO 8. ORIENTAES GERAIS
49
Captulo 9
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:
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.
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
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".
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
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.
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
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).
face de componentes.
54
9.1. DIPTRACE CAPTULO 9. ATIVIDADE 1: TRABALHANDO COM DIPTRACE
(a) (b)
(c) (d)
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:
Iniciar a criao do layout de sua placa impressa utilizando o posicionamento inicial mostrado na
Figura 24
Utilizar o copper pour conectado ao terra para completar os espaos do lado da solda
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:
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.
56
9.3. RELATRIO CAPTULO 9. ATIVIDADE 1: TRABALHANDO COM DIPTRACE
57
Captulo 10
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
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
Ter certeza de que o layout elaborado passa no teste de regras de projeto (DRC Design Rules
Check)
Enviar conjunto de arquivos compactados em .ZIP por email para macdp@usp.br at 5 dias teis
antes da aula do prximo laboratrio1
futuras do grupo.
58
10.1. PROCEDIMENTOS CAPTULO 10. ATIVIDADE 2: LAYOUT E FABRICAO
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
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
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.
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
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:
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
61
Captulo 11
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
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".
1. jumpers
3. chave (S1)
6. LED (D1)
7. capacitor (C1)
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.
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
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:
Ao ser pressionada a chave, a quantidade de vezes que a chave foi pressionada aparece no 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
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.
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
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.
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.
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.
67
Captulo 13
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
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.
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.
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.
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.
13.3 Relatrio
No relatrio devero estar identificados os membros do grupo, turma, disciplina e atividade e devero
constar os seguintes itens:
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.
Alm da avaliao dos pontos acima, sero levados tambm em considerao para a nota:
70
Captulo 14
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.
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
14.2 Relatrio
No relatrio devero estar identificados os membros do grupo, turma, disciplina e atividade e devero
constar os seguintes itens:
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.
72
Captulo 15
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.
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:
x incrementa o PWM em 1%
c decrementa o PWM em 1%
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.
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
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.
15.2 Relatrio
No relatrio devero estar identificados os membros do grupo, turma, disciplina e atividade e devero
constar os seguintes itens:
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.
74
Captulo 16
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
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.
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.
76
Referncias Bibliogrficas
[1] Hitachi; HD44780U (LCD-II) (Dot Matrix Liquid Crystal Display Controller/Driver); Rev. 0.0; 1999
[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
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
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
83
U1 Microcontrolador PIC16F886
OBS: esse componente no ser
soldado na placa. No seu lugar dever
ser soldado o soquete correspondente.
84
Apndice 4 Bibliotecas de Software
always.h
/
#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 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
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
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
/
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 ;
#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 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
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 ) )
/
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 ;
#d e f i n e THE_BEER_IS_PLENTIFUL_AND_THE_PARTY_SWINGING TRUE
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
/
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 ;
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
#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;
}
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
// 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 ) ;
lcd.h
///
/// LCD i n t e r f a c e h e a d e r file
///
/// 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 ) ;
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 ) ;
/// 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 ) ;
/// 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