Monografia ECG Ampop
Monografia ECG Ampop
Monografia ECG Ampop
MARTIN NHR
MARTIN NHR
AGRADECIMENTO
RESUMO
Microchip Tecnologia Inc. uma empresa, sediada em Chandler, Arizona. Fbrica de semicondutores,
microcontroladores e dispositivos analgicos, para o desenvolvimento de produtos de baixo custo para diversas
aplicaes.
ABSTRACT
The acquisition of the signal is the capture of biopotetials from cardiac electrical
activity. The signal received, with the use of electrodes, is amplified and processed with the
use of the instrumentation amplifier and analog filters. The output of the circuit of acquisition,
the signal pre-treated with analog form is digitalized with a Digital Signal Processor (DSP)
DsPIC30F2010 Companys Microchip, which is programmed in C language through software
development MPLAB version 7.60. The digital signal is processed in the DSP and then sent
to a serial port for the computer.
LISTA DE FIGURAS
10
LISTA DE TABELAS
AMPOP
ADC
AMPOP
BD
BE
bps
CC
CISC
CMR
CPU
dB
DSP
ECG
EMG
fc
Hz
mm
mV
PE
RISC
s
sps
TAD
TI
UART
V
VB
Amplificador Operacional
Analog-to-Digital Converter
Amplificador Operacional
Brao Direito
Brao Esquerdo
Bits por segundo
Corrente Contnua
Complex Instruction Set Computer
Rejeio de Modo Comum
Central Processing Unit
Decibel
Digital Signal Processing
Eletrocardiograma
Eletromiografia
Freqncia de corte
Hertz
milmetro
milivolt
Perna Esquerda
Reduced Instruction Set Computer
segundos
samples per second
Perodo de Converso A/D
Texas Instruments
Universal Asynchronous Receiver Transmitter
Volt
Visual Basic
12
SUMRIO
LISTA DE FIGURAS............................................................................................................... 8
INTRODUO ...................................................................................................................... 14
1
FUNDAMENTOS TERICOS.....................................................................................16
Introduo............................................................................................................................. 16
1.1
Corao..................................................................................................................... 16
1.1.1
Excitao Rtmica do Corao ......................................................................... 18
1.1.2
Tenso Normal no Eletrocardiograma.............................................................. 19
1.1.3
Eletrocardiograma ............................................................................................ 20
1.1.4
Fluxo das correntes eltricas no corao .......................................................... 22
1.1.5
Derivaes eletrocardiogrficas ....................................................................... 23
1.2
Amplificador Operacional ........................................................................................ 25
1.2.1
Representao de um Amplificador Operacional............................................. 26
1.2.2
Configurao bsica inversora.......................................................................... 27
1.2.3
Configurao bsica no inversora................................................................... 28
1.2.4
Amplificador de diferenas .............................................................................. 29
1.2.5
Amplificador de Instrumentao ...................................................................... 29
1.3
Filtros Ativos ............................................................................................................ 30
1.3.1
Filtro Passa-Baixas de Primeira Ordem ........................................................... 31
1.3.2
Filtro Passa-Altas de Primeira Ordem .............................................................. 32
1.4
Processador Digital de Sinais ................................................................................... 33
1.4.1
Microcontrolador dsPIC30F2010 ..................................................................... 34
1.4.2
Arquitetura da CPU .......................................................................................... 36
1.4.3
Organizao da Memria.................................................................................. 37
1.4.4
Interrupes ...................................................................................................... 38
1.4.5
Entradas e Sadas Digitais ................................................................................ 39
1.4.6
Timers............................................................................................................... 40
1.4.7
Mdulo UART.................................................................................................. 42
1.4.8
Mdulo de Converso A/D............................................................................... 45
1.5
Ferramentas para Desenvolvimento e Depurao .................................................... 48
1.5.1
Gravador e Depurador in Circuit ICD2BR......................................................... 50
DESENVOLVIMENTO DO PROTTIPO.................................................................52
2.1
Eletrodos e cabos ...................................................................................................... 53
2.2
Etapa analgica......................................................................................................... 54
2.2.1
Amplificador de instrumentao ...................................................................... 55
2.2.2
Desenvolvimento do Filtro Passa-Altas ........................................................... 57
2.2.3
Desenvolvimento do Filtro Passa-Baixas ......................................................... 59
2.2.4
Ajuste de nvel de tenso DC ........................................................................... 60
2.3
Etapa digital.............................................................................................................. 61
2.3.1
Programao do dsPIC: .................................................................................... 62
2.3.1.1 Rotina principal do programa ....................................................................... 62
13
CONSIDERAES FINAIS.................................................................................................72
REFERNCIAS BIBLIOGRFICAS .................................................................................74
ANEXOS ................................................................................................................................. 77
ANEXO A - DIAGRAMA DE BLOCOS DO DSPIC30F2010...........................................78
ANEXO B MAPA DA ORGANIZAO DAS MEMRIAS NO DSPIC30F2010 ...... 80
ANEXO C TABELA DE INTERRUPES DO DSPIC30F2010.................................. 82
ANEXO D MAPA DE REGISTRO DAS PORTS............................................................84
ANEXO E AMPLIFICADOR OPERACIONAL INA128...............................................86
ANEXO F AMPLIFICADOR OPERACIONAL CA3140 ..............................................92
ANEXO G CDIGO FONTE DO PROGRAMA DO DSPIC ........................................97
ANEXO H CIRCUITO DO PROTTIPO ..................................................................... 104
ANEXO I LAYOUT DA PLACA DO PROTTIPO ....................................................106
14
INTRODUO
15
placa de captura. Em seguida, passa por etapas de amplificao e por filtros analgicos ativos.
Na etapa final, o sinal inserido no microcontrolador para ser tratado e enviado porta serial
onde a informao transmitida ao computador e visualizada por um software aplicativo, em
Linguagem Visual Basic (VB), desenvolvido somente para teste.
16
1 FUNDAMENTOS TERICOS
Introduo
1.1 Corao
O corao uma bomba pulstil de quatro cmaras composto de dois trios 2 e dois
ventrculos 3 . Os trios funcionam, principalmente, como vias de acesso aos ventrculos, mas
tambm bombeiam fracamente para ajudar na mobilizao do sangue para os ventrculos.
2
3
17
18
Esse sistema prprio do corao inicia a gerao de impulsos eltricos pelo nodo
sinusal (nodo S-A). O impulso eltrico conduzido pelas vias internodais at o nodo
atrioventricular, onde o impulso retardado para os ventrculos. O feixe atrioventricular que
conduz o impulso at os ventrculos e as fibras de Purkinje (ramos direito e esquerdo)
conduzem o impulso para todas as outras reas dos ventrculos. A Figura 1.2 demonstra o
nodo sinusal e o sistema de Purkinje do corao, mostrando ainda o nodo A-V, as vias atriais
internodais e os ramos ventriculares (GUYTON & HALL, 2006).
19
A tenso dos impulsos cardacos varivel e pode-se observar dois nveis mais
importantes de tenso cardaca: a tenso da fibra sinusal e a tenso do msculo cardaco, no
sentido de comparar com os sinais captados na superfcie corporal. Na fibra sinusal, o
potencial de repouso de -55 a -60 milivolts e na fibra muscular este potencial de -85 a -90
milivolts. A Figura 1.3 ilustra a descarga rtmica da fibra do nodo sinusal em relao de fibra
muscular ventricular. Essa diferena de tenso entre os tecidos cardacos ocorre porque as
fibras sinusais so mais permeveis aos canais de clcio, o que torna a carga dessas fibras
menos negativas do que no msculo cardaco.
20
1.1.3 Eletrocardiograma
Despolarizao - Ativao eltrica da clula ocasionada pelo influxo de sdio. Antecede a contrao do
msculo cardaco.
21
A onda P gerada pela despolarizao dos trios e o complexo QRS gerado pela
despolarizao dos ventrculos. A onda T a repolarizao 5 dos ventrculos, ou seja, o
estado que ocorre aps a despolarizao, quando os ventrculos se recuperam do estado de
despolarizao. A repolarizao e despolarizao podem ser visualizados na Figura 1.5. A
reposio atrial ocorre juntamente com a despolarizao ventricular, portanto, o complexo
QRS se sobrepe a esta onda (GUYTON & HALL, 2006).
Repolarizao - Retorno da clula ao estado de repouso, causado pela reentrada de potssio na clula. Equivale
ao relaxamento do msculo cardaco.
22
23
cardaca, enquanto que a positividade dirigida para o pice. Sendo assim, a corrente flui da
base para o pice (GUYTON & HALL, 2006).
24
25
A Figura 1.8 mostra a disposio convencional dos eletrodos que formam o tringulo
de Einthoven sobreposto ao trax como as derivaes eletrocardiogrficas padro I II e III,
identificados com: Brao Esquerdo (BE); Brao Direito (BD) e Perna Esquerda (PE).
26
Um Ampop pode ser entendido como um circuito amplificador de alto ganho, onde a
entrada representada por uma resistncia de alto valor e a sada por uma fonte de tenso
controlada e uma resistncia em srie. A representao grfica do amplificador ideal
mostrada na Figura 1.9, onde A representa o ganho em malha aberta; i1 e i2 representam as
correntes de entrada do Ampop.
27
Nos circuitos de malha fechada, uma amostra do sinal de sada retornada para o
circuito com inteno de controle. Quando ligado na entrada inversora, o sinal de retorno se
ope ao sinal da entrada, ocorrendo inverso de 180 graus. A Figura 1.10 mostra a ligao
bsica do amplificador inversor (GIACOMIN, 2000).
Vo
R2
R2
=
Vo =
Vi
Vi
R1
R1
(1.1)
28
Vo
R2
= 1+
Vi
R1
(1.2)
29
Vo =
R2
(VI 2 VI 1 )
R1
(1.3)
30
Vo =
R4 R2
1 +
(VI 2 VI 1 )
R3 R3
(1.4)
31
32
baixas de primeira ordem, o clculo do ganho e da Freqncia de corte (fc) esto identificados
na Equao 1.5 (MALVINO, 1995).
Ganho =
R2
R1
1
fc =
2 R2 C
(1.5)
33
Ganho =
R2
R1
1
fc =
2 R1 C
(1.6)
34
Na Figura 1.17 pode ser observada a disposio dos pinos do dsPIC30F2010 com as
nomenclaturas e o encapsulamento SDIP de 28 pinos utilizado no prottipo. Os pinos de VDD
e VSS so utilizados para fornecer a alimentao eltrica para o componente, sendo VSS o
pino de zero volt e VDD a alimentao positiva, neste prottipo foi utilizado 5V
(MICROCHIP, 2005, apud FHR, 2006).
35
O clock fornece a sensibilidade de tempo para o processador, um sinal de onda quadrada e a cada nvel alto
uma instruo no mnimo executada. Um ciclo de clock consiste na diferena de tempo entre dois nveis altos
dessa onda do oscilador.
36
A maioria dos pinos do componente possui mais de uma funo, que podem ser
configuradas conforme a necessidade atravs da programao do dsPIC30F2010. Estas
funes e configuraes dos demais pinos so abordadas conforme a necessidade durante o
desenvolvimento do prottipo (OLIVEIRA, 2006).
O Visual Basic uma linguagem de programao de autoria da empresa Microsoft, que parte integrante do
pacote Microsoft Visual Studio.
37
O dispositivo tem duas reas de memrias de dados. As reas de dados podem ser
consideradas independentes para a maioria das instrues do DSP, ou como uma rea linear
38
1.4.4 Interrupes
Uma interrupo tem como objetivo parar a execuo normal do programa do dsPIC
para executar um bloco de comandos especficos a fim de atender a uma solicitao do
sistema. Esta interrupo pode ser causada por um dispositivo interno ou externo. Os mdulos
internos do dsPIC30F2010 possuem uma ordem de prioridade de interrupes: caso no seja
orientada assumida uma tabela com as prioridades padro do dsPIC, como pode ser
visualizado no ANEXO C.
Sempre que ocorre uma interrupo devido ocorrncia de algum evento, o seu
endereo armazenado na pilha interna do processador, fazendo com que sejam executados
os comandos referentes rotina desta interrupo. Ao finalizar esta tarefa, o processador volta
execuo normal do programa na posio seguinte a qual havia parado. Para que as
interrupes ocorram, necessrio que sejam habilitadas e configuradas conforme a
necessidade. A configurao de cada uma delas determina o exato momento que a mesma
deve ocorrer, podendo ocorrer no incio ou final de um determinado processo, dependendo da
rotina programada (MICROCHIP, 2005, apud FHR, 2006).
39
Registrador
de
Configurao
TRISB
TRISC
TRISD
TRISE
TRISF
Nmero de pinos de
Entrada/Sada
6
3
2
7
2
10
40
1.4.6 Timers
41
sistema discreto, coletando e processando os dados a cada interrupo do Timer, gerando uma
seqncia de amostragem de um determinado sinal, por exemplo, a aquisio no A/D do sinal
de ECG (OLIVEIRA, 2006).
42
de ciclos de clock do timer em 8 (1:8), 64 (1:64) ou 256 (1:256) vezes, aumentando o range de
tempo configurvel para cada timer (MICROCHIP, 2005, apud FHR, 2006).
A taxa de transferncia dos dados denominada Baud Rate, cuja unidade de medida
bits por segundo (bps). O que determina o incio e o fim de um dado so os bits de incio
(start bit) e parada (stop bit) do byte transmitido, como podemos verificar na Figura 1.21
(OLIVEIRA, 2006).
43
ou 2 stop bits e controle de paridade par, mpar ou sem controle de paridade. O Baud Rate 11
ajustado no registrador U1BRG, que calculado para receber o valor correto. O clculo segue
a frmula da Equao 1.7, onde a freqncia do ciclo obedece frmula da Equao 1.8.
(MICROCHIP, 2005, apud FHR, 2006).
U 1BRG =
FCY (Hz )
1
16 Baud _ Rate(bps )
Freqncia _ do _ ciclo(FCY ) =
Freqncia _ do _ Cristal
4
(1.7)
(1.8)
No prottipo, usado o pino de comunicao U1TX (17) para o envio de dados via
porta serial RS232 e o pino (18) U1RX recebe os dados. Internamente o dsPIC30F2010
possui 4 buffers 12 de 16 bits para a recepo de dados via serial e outros 4 buffers para a
transmisso de dados. possvel configurar a interrupo de recepo para que ela ocorra
quando os 4 Buffers estiverem ocupados, quando 3 Buffers estiverem ocupados ou para cada
recepo de um dado novo. A interrupo de transmisso ocorre quando um dado
armazenado no registrador de transmisso, podendo ser selecionado se a interrupo ocorrer
somente quando os Buffers estiverem vazios ou quando eles ainda estiverem com dados
armazenados (MICROCHIP, 2005, apud FHR, 2006).
11
O termo Baud Rate utilizado como medida de velocidade de transmisso de informao entre computadores
atravs de linhas telefnicas. Baud Rate frequentemente utilizado como sinnimo de bits por segundo (bps),
apesar de no ser tecnicamente verdadeiro. O nome Baud vem de J. M. Baudot, inventor do cdigo telegrfico
Baudot.
12
Pequena quantidade de memria para armazenamento de dados temporrios, auxiliando a CPU e os mdulos
internos na execuo de suas tarefas e compensando diferentes taxas de transferncia de dados.
44
Figura 1.22 Circuito interno para transmisso dos dados pelo mdulo UART.
Fonte MICROCHIP, 2005.
O circuito interno de recepo de dados pelo mdulo UART visualizado na Figura
1.23. Os dados so coletados atravs do pino U1RX. Ao receber o start bit, o byte deslocado
45
Figura 1.23 Circuito interno para recepo dos dados pelo mdulo UART.
Fonte MIROCHIP, 2006.
Qualquer sinal encontrado no mundo real analgico, mas pode ser amostrado de
forma discreta e quantizado para torn-lo digital, conseqentemente, passvel de ser
46
47
Caso o resultado do primeiro bit de converso tenha ficado em nvel alto, o valor de
comparao utilizado para a converso do segundo bit mais significativo ser o valor de
comparao anterior somado a um quarto do valor de referncia (AVdd / 2 + AVdd / 4 =
3AVdd / 4). Se a converso do bit anterior ficou em nvel baixo, a tenso de comparao ser
subtrada de um quarto do valor de referncia (AVdd / 2 - AVdd / 4 = AVdd / 4). Novamente
o resultado desta comparao definir o nvel lgico do bit, sendo repetido o mesmo processo
para cada um dos demais bits (MITRA, 2001, apud FHR, 2006).
48
49
50
13
Labtools Mosaico Didactic Division uma empresa situada em So Paulo que comercializa produtos
eletrnicos e ministra cursos sobre microcontroladores fabricados pela Microchip.
51
52
2 DESENVOLVIMENTO DO PROTTIPO
Etapa Analgica
Etapa Digital
53
Para aquisio dos sinais de ECG foi escolhido o eletrodo para monitorizao
cardaca modelo 2223 da 3M 14 . Este consiste em eletrodo descartvel no invasivo composto
de: espuma de polietileno, polivinillcool coberto com adesivo acrlico, polietileno coberto
com silicone, polmero sinttico hidroflico, pino metlico e contra pino de Ag/AgCl
(prata/cloreto de prata).
14
54
ncleo do cabo deve ser ligado ao eletrodo atravs de garra do tipo jacar ou boto de contato
especfico. Existe no mercado cabos especficos desenvolvidos para conectar com eletrodos
de ECG, contudo foi utilizado no prottipo um cabo confeccionado com garra do tipo jacar.
A Figura 2.3 mostra o cabo montado para o prottipo com conector para ligao na placa de
circuito impresso.
Nesta etapa o projeto do circuito eletrnico para aquisio de sinais de ECG tem os
seguintes requisitos: adquirir o sinal analgico de baixa amplitude, amplificar, filtrar e
eliminar nveis de tenso negativa, permitindo assim a ligao ao conversor A/D interno do
dsPIC.
55
O sinal de ECG pode ser perturbado por diversos tipos de fontes de ruidos. Os
principais so:
causar interferncia com os fios ligados aos eletrodos atuando como antenas.
56
15
Texas Instruments - A Texas Instruments uma empresa americana atuante na rea de semicondutores,
especialmente no mercado de DSPs, microcontroladores e conversores (ADCs e DACs) e amplificadores
operacionais. A TI est sediada em Dallas, no estado do Texas. Link: http://www.ti.com/sc/brasil/index.htm
57
G = 1+
50k
50k
= 9,92
1+
RG
5.6k
(2.1)
58
fc =
1
1
0,5 =
C1 = 144nF
2 R1 C1
2 2.2M C1
G=
2.2M
R1
10 =
R 2 = 220k
R2
R2
(2.2)
(2.3)
59
O filtro foi calculado para a freqncia de corte de 50 Hz. Permite passar somente
sinais com freqncia inferior a fc e com isso remove parte do rudo de 60Hz proveniente da
rede eltrica.
60
fc =
1
1
50 =
C1 = 33nF
2 R1 C1
2 100k C1
G=
100k
R1
10 =
R 2 = 10k
R2
R2
(2.4)
(2.5)
61
62
63
Esta etapa do programa tem como funo setar variveis, habilitar portas e inicializar
as estruturas internas utilizadas, tais como UART, Timer1, Timer2 e A/D. Entrando em modo
de looping, o programa fica aguardando as interrupes dos mdulos. Havendo interrupo, o
looping interrompido e a instruo do mdulo executada, ao trmino da instruo o
16
64
programa volta para o looping e aguarda a prxima interrupo. Estas estruturas internas so
apresentadas nos prximos tpicos.
(2.6)
65
TAD
1
TCY
(2.7)
Com ADCS armazenando o valor 7, o perodo entre converses A/D (TAD) fica
determinado em 800ns, gerando uma freqncia do clock de 1,25MHz. Como cada converso
exige 12 perodos de clock do A/D (TAD), a freqncia de converso fica ajustada em 104KHz
(MICROCHIP, 2004).
66
Freq _ T2 =
FCY 5000000
=
= 1.6kHz
fa
512 6
(2.8)
17
67
68
Os testes realizados com o prottipo foram basicamente dois: o primeiro foi captura
de sinal ECG padro obtido no gerador de sinais e o segundo foi a captura de sinal real
utilizando eletrodos aderidos ao trax.
Utilizando o gerador de sinais da Agilent (modelo 33220A) para gerar uma onda
ECG padro foi possvel verificar o funcionamento do prottipo. O sinal padro foi
configurado na freqncia de 1,2Hz, que corresponde a um intervalo TR-R de 833ms,
resultando 72 bpm 18 . O clculo para determinar o nmero de batimentos por minuto
mostrado na Equao 3.1.
O sinal foi gerado com amplitude de 5Vpp, isto para verificar se toda a faixa de
captura de tenso entre 0 e 5V seria mostrada adequadamente no programa em VB.
bpm =
18
60(s )
TR R (s )
(3.1)
69
70
A transmisso dos bits pela porta serial mostrada na Figura 3.3. O perodo de
transmisso do start bit, 8 bits de dados e stop bit foi de 26s, resultando em uma transmisso
de 38462bps e um erro de 0,6% entre a transmisso setada de 38400bps.
71
72
CONSIDERAES FINAIS
Considera-se que o objetivo inicial bsico foi alcanado a contento, contudo observase, que muitos outros desenvolvimentos futuros so necessrios, de forma que o prottipo
possa a vir tornar-se um eletrocardigrafo de boa qualidade para uso em diagnsticos de
cardiopatias.
Pode ser destacada uma srie de desenvolvimentos futuros a curto e mdio prazo
para melhorar e dar seqncia ao trabalho aqui realizado. Entre estes, citam-se: utilizao de
73
cabos especficos para conexo aos eletrodos; melhorar a eficincia dos filtros, aumentando a
sua ordem; implementar filtro digital e/ou adaptativos para auxiliar o processo captura e
correes do sinal ECG, bem como a miniaturizao da placa utilizando componentes com
encapsulamento menor.
REFERNCIAS BIBLIOGRFICAS
BOGART Jr, Theodore F.. Dispositivos e Circuitos Eletrnicos. 3.ed. So Paulo: Makron
Books, 2001. 463p.
GUYTON & HALL, Arthur C.. Textbook of Medical Physiology. 11.ed. Philadelphia,
Pennsylvania - USA: Elsevier Inc., 2006. 1152p.
75
MALVINO, Albert Paul. Eletrnica: Volume II. 4.ed. So Paulo: Makron Books, 1995.
558p.
MITRA, Sanjit K.. Digital Signal Processing: a computer-based approach. 2.ed. New York:
McGraw-Hill, 2001. 866p.
SEDRA, Adel S.. Microeletrnica. 4.ed. So Paulo: Makron Books, 2000. 1270p.
SHIRLEY, A. Jones. ECG Notes: Interpretation and Management Guide. 1.ed. Philadelphia
USA: F. A. Davis Company, 2005. 207p.
76
TOMPKINS, Willis J.. Biomedical Digital Signal Processing: C-Language Examples and
Laboratory Experiments for the IBM PC. 1.ed. New Jersey: Prentice Hall, 2000. 361p.
77
ANEXOS
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/*
Autor: Martin Nhr
Data: 05/12/2007
Titulo: Ecg_DataLog
*/
//************************************************************************************************
//***** Bibliotecas Utilizadas *******************************************************************
#include<p30f2010.h> //Biblioteca do dsPIC30F2010
#include<uart.h>
//Biblioteca UART.h
#include<reset.h> //Biblioteca reset.h
#include<dsp.h>
//Biblioteca de DSP
//********************************************************************************************************************************************
//************************************************ Fuses ************************************************************************************
_FOSC(CSW_FSCM_OFF & HS);
_FWDT(WDT_OFF);
_FBORPOR(MCLR_EN & PBOR_OFF & PWRT_OFF);
_FGS(CODE_PROT_OFF);
//********************************************************************************************************************************************
//**************************************** Define Valores Padres para o Programa ****************************************************
#define Fcy 5000000
//********************************************************************************************************************************************
//************************************************ Declarando as variveis ***************************************************************
unsigned int Par1;
unsigned int Par2;
int Val_Ana1;
unsigned int a;
unsigned int count;
99
//********************************************************************************************************************************************
//****************************************************** Funes Utilizadas****************************************************************
void inicia_UART(void);
void inicia_timer2(void);
void inicia_timer1(void);
//********************************************************************************************************************************************
//******************************************** Rotina Principal do Programa *************************************************************
int main(void){
a=0;
TRISD = 0xfffc;
LATDbits.LATD0 = 1;
LATDbits.LATD1 = 0;
//varivel a=0
//Seta RD0 e RD1 p/ sadas - 1111 1111 1111 1100
//Led_Status Verde = Desligado
//Led_Status Vermelho = Desligado
inicia_timer1();
inicia_UART();
inicia_ADC();
inicia_timer2();
while(1){
}
return 0;
//********************************************************************************************************************************************
//******************************************* Inicializao do mdulo UART *************************************************************
void inicia_UART()
{
unsigned int ubrg;
unsigned int config1;
unsigned int config2;
CloseUART1();
ubrg = 7;
100
Rate=38400
// Freq.Cristal=20MHz
// fcy=5MHz, ubrg=7 7,15
calculado
ConfigIntUART1(UART_RX_INT_EN &
padres
config2 =
UART_1STOPBIT;
UART_INT_TX_BUF_EMPTY &
parmetros
buffer de
//********************************************************************************************************************************************
//**************************** Rotina de tratamento da Interrupo da transmisso de dados ****************************************
void _ISR _U1TXInterrupt(void){
IFS0bits.U1TXIF=0;
}
//********************************************************************************************************************************************
//********************* Rotina de tratamento da Interrupo da recebimento de dados **********************************************
//********************************************************************************************************************************************
void _ISR _U1RXInterrupt(void){
TMR1=0;
if (a==1){
LATDbits.LATD0 = 0;
a=0;
}
else{
LATDbits.LATD0 = 1;
101
a=1;
while(BusyUART1());
Par2=ReadUART1();
Par1=ReadUART1();
Par=Par2<<8;
Par=Par + Par1;
TransPac();
}
IFS0bits.U1RXIF=0;
//varivel a=1
//fim do else
//Protocolo de comunicao = byte1:Par2, byte2:Par1
//retorna o status da transmisso; espera enquanto a UART estiver ocupada
//l o segundo byte do buffer de recepo da UART = Parmetro 2
//l o terceiro byte do buffer de recepo da UART = Parmetro 1
//Byte mais significativo do Parmetro=Parmetro2 recebido via UART
//Byte menos significativo do Parmetro= Parmetro1 recebido via UART
//Parmtro 1 e 2 so unidos em uma s varivel Parmetro
//fim do if
//clear no bit de chamada da interrupo de recepo
//fim da interrupo de recepo da UART
//********************************************************************************************************************************************
//************************************* Rotina para a inicializao do conversor A/D ***************************************************
void inicia_ADC()
{
ADCON1bits.ADON = 0;
ADCON1bits.ADSIDL = 0;
idle(inativa)
ADCON1bits.FORM = 0;
ADCON1bits.SSRC = 7;
ADCON1bits.ASAM = 0;
ADCON2bits.VCFG = 0;
ADCON2bits.CSCNA = 0;
ADCON2bits.SMPI = 0;
ADCON2bits.BUFM = 0;
ADCON2bits.ALTS = 0;
ADCON3bits.ADCS = Tad;
ADCON3bits.SAMC = 1;
ADCON3bits.ADRC = 0;
ADCHS = 0;
ADCSSL = 0x0000;
ADPCFG = 0xFFFE;
IFS0bits.ADIF = 0;
IPC2bits.ADIP = 6;
IEC0bits.ADIE = 1;
ADCON1bits.ADON = 1;
//********************************************************************************************************************************************
//******************************* Rotina de Tratamento da Interrupo do Conversor A/D *********************************************
void __attribute__((__interrupt__)) _ADCInterrupt(void)
{
int i = 0;
ptr = &ADCBUF0;
while (i < 16)
{
102
ADResult[i++] = *ptr++;
}
Val_Ana1=ADResult[0];
TransBuf();
IFS0bits.ADIF = 0;
//************************************************************************************************
//****** Rotina de inicializao do timer 2 para converso A/D ***********************************
void inicia_timer2(void)
{
T2CON = 0;
TMR2 = 0;
IFS0bits.T2IF = 0;
PR2 = Freq_T2;
T2CONbits.TCKPS = 1;
IPC1bits.T2IP = 5;
IEC0bits.T2IE = 1;
T2CONbits.TON = 1;
}
//*******************************************************************************************************************************************
//********************** Rotina de tratamento da interrupo do Timer 2 para converso A/D **************************************
void _ISR _T2Interrupt(void)
{
IFS0bits.T2IF = 0;
ADCON1bits.SAMP = 1;
}
//********************************************************************************************************************************************
//************************* Rotina de inicializao do timer 1 para o LED indicador de estado ***************************************
void inicia_timer1(void)
{
T1CON = 0;
TMR1 = 0;
IFS0bits.T1IF = 0;
PR1 = Freq_T1;
T1CONbits.TCKPS = 3;
IPC0bits.T1IP = 7;
IEC0bits.T1IE = 1;
T1CONbits.TON = 1;
103
//********************************************************************************************************************************************
//************************* Rotina de tratamento da interrupo do Timer 1 para o LED de estado **********************************
void _ISR _T1Interrupt(void)
{
if (a==1){
LATDbits.LATD0 = 0;
a=0;
}
else{
LATDbits.LATD0 = 1;
a=1;
}
IFS0bits.T1IF = 0;
//********************************************************************************************************************************************
//************************************ Rotina para enviar o pacote de dados via UART ************************************************
void TransPac (void){
Par1=Par;
Par2=Par>>8;
while(BusyUART1());
putcUART1(Par2);
putcUART1(Par1);
while(BusyUART1());
}
//********************************************************************************************************************************************
//********************************************************************************************************************************************
//********************************** Rotina para enviar o Buffer de dados via UART ***************************************************
void TransBuf (void){
int c;
while(BusyUART1());
putcUART1((y[0]/4));
while(BusyUART1());
}
//********************************************************************************************************************************************
//**************************************************** Fim do Programa********************************************************************
//********************************************************************************************************************************************
104
105
106
107
Mscara de solda.
108
Mscara de identificao.