PIC16F877A send Readings thru SPI (Serial Peripheral Interface) to Arduino then Arduino translate raw binary data to ASCII Numeric Data then Arduino sends thru is Programming Port to PC USB Virtual COM Port then Applictaion in Visual Basic show the PIC16F877A Readings and has some Control over Arduino. Used MPLAB PIC Macro Assembler to write the code for PIC, Arduino was Coded in C.
Multisim 11 Pro and Protheus to develop and Design the Schematics and PCB
PIC16F877A send Readings thru SPI (Serial Peripheral Interface) to Arduino then Arduino translate raw binary data to ASCII Numeric Data then Arduino sends thru is Programming Port to PC USB Virtual COM Port then Applictaion in Visual Basic show the PIC16F877A Readings and has some Control over Arduino. Used MPLAB PIC Macro Assembler to write the code for PIC, Arduino was Coded in C.
Multisim 11 Pro and Protheus to develop and Design the Schematics and PCB
2.
MOD.AFTEBI.P-083.REV01
2 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
ÍNDICE:
ESTRUTURA .................................................................................................................................... 3
OBJECTIVO GERAL ....................................................................................................................................................................3
BREVE EXPOSIÇÃO DO ASSUNTO DESENVOLVIDO........................................................................................................3
TEMA 1............................................................................................................................................ 3
OBJECTIVOS ESPECÍFICOS .....................................................................................................................................................3
DESENVOLVIMENTO..................................................................................................................................................................4
CONCLUSÕES GERAIS .............................................................................................................................................................9
BIBLIOGRAFIA UTILIZADA...................................................................................................................................................75
ÍNDICE DE GRÁFICOS, FIGURAS E TABELAS ................................................................................................................75
3.
MOD.AFTEBI.P-083.REV01
3 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
ESTRUTURA
OBJECTIVO GERAL
Mostrar o valor da frequência dum frequencímetro PIC no PC pelo porto Serie emulado através do
Arduíno
BREVE EXPOSIÇÃO DO ASSUNTO DESENVOLVIDO
Baseado num Projecto anterior da minha autoria Frequencímetro PIC, que vai sofrer uma pequena
alteração para comunicar com o PC através do Arduíno, de Construção Modular com varias PCBs e
Acoplamento com o Módulo da fonte de Alimentação através, de dois parafusos 4mm diâmetro e
porcas de orelhas e Jack fêmea de alimentação de 5 Volts embutido no módulo da Alimentação.
TEMA 1
OBJECTIVOS ESPECÍFICOS
Pôr o frequencímetro do projecto semi-acabado do curso anterior baseado no microcontrolador da
Microchip o PIC16F877 a comunicar através do SPI (Serial Port Interface) com o Arduíno Duemilanove
baseado no microcontrolador da ATMEL AVR ATmega328 comunica com o PC através da porta
série emulada USB que emula o RS-232, com programação em linguagem Assembly no PIC,
Linguagem C no Arduíno e Linguagem Visual Basic 6 no PC.
4.
MOD.AFTEBI.P-083.REV01
4 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
- Alterar o programa já existente do PIC introduzindo comunicação Serie sincronizada SPI com o
Arduíno para transferência, Criando um Shield de Comunicação SPI.
- Criando um protocolo de comunicação entre o PIC e o Arduíno para transferência de dados e
controlos. Implementando em Assembly e C respectivamente.
- Criando novas PCBs e alterando PCBs a fim de Comunicar entre o PIC e o Arduíno.
- Alterando Ligações nos Portos do PIC para disponibilizar a comunicação SPI para o Arduíno.
- Criar uma Pequena Aplicação Em Visual Basic 6 que corre em ambiente Windows que permite
visualizar os valores da frequência no PC através da comunicação serie emulada RS-232 enviada
através do Arduíno.
- Fazer cabos de comunicação SPI entre o PIC e o Arduíno.
DESENVOLVIMENTO
CaraCterístiCas do frequenCímetro
- Gama de Frequências de medida 0,1 Hz a 50,000 MHz.
- Selector digital de Gama de frequências que vai desde:
- 0,1 Hz até aos 5000,0 Hz
- 0,001 KHz até aos 50,000 KHz
- 0,01 KHz até aos 500,00 KHz
- 0,1 KHz até aos 5000,0 KHz
- 0,001 MHz até aos 50,000 MHz
- 0,01 MHz até aos 50,00 MHz
- 0,1 MHz até aos 50,0 MHz.
- Selector de 3 posições da gama de Tensões de entrada.
Tensões de Entrada de 5V; 50V; 500V.
- Resolução de 5 Dígitos.
- Microchip PIC16F877 a 20MHz
5.
MOD.AFTEBI.P-083.REV01
5 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
- Comunicação SPI (Serial Port Interface) Comunicação serie síncrona com 4 fios opcional 5
fios com controlo de escravo,
- Comunicação SPI com o Arduíno contem um ATMEL AVR ATMEGA328 a 16MHz ou com
outro microcontrolador, velocidade de transmissão do SPI é frequência do Oscilador do PIC
a dividir por 4 = FOSC e a frequência do Clock do SPI = FOSC/16.
- Mostrador é um módulo LCD 16x2 dezasseis caracteres por duas linhas com iluminação a
leds de alto rendimento.
- Resolução do Contador de 24 Bits distribuídos por 16 Bits para a frequência e 8 Bits de
overflow.
- Malha resistiva em zig-zag do divisor de tensão no amplificador e condicionador.
Impedância de entrada da malha resistiva de 1MΩ. Com queda de tensão logaritmica de
base 10 para cada escala.
6.
MOD.AFTEBI.P-083.REV01
SCL
1
2
3
Contador frequencia
Binario 16Bits + 8 bits
gerador de Overflow
SS
Microcontrolador Latches
de dados e Comparador de
Overflow
PIC15F877
Modulo LCD
Módulo
Controlo de
Gate
- +
SPI Out
1
2 3
4
15
1
14
13
12
11
2
D
CLK
RST
QA
QB
QC
QD
LCD 16x2
Selector digital de gama &
Multiplexador da base de
tempo
PORTC do
PIC para
SPI e
PORTB
para SS
1x74HC4060
8x74HC4017
Freq_In
BNC
Base de tempo
Divisores por 10
Y2
20MHz
Comunicação
SPI com
Exterior
Q1
Y1
10MHz
fonte de
Alimentação
Selector de Gama de
Tensão de Entrada
5V, 50V, 500V
SDI
Esquema de Blocos do Frequencimetro
VCC
Amplificador &
Condicionador
SW2
Run/Stop
SW1
SDO
7.
MOD.AFTEBI.P-083.REV01
USB COM EmuladoSPI
PCArduino
ESQUEMA DE BLOCOS DAS COMUNICAÇÔES ENTRE DISPOSITIVOS
Frequencimetro
- PIC
8.
MOD.AFTEBI.P-083.REV01
Explicação dos EsquEmas parciais
9.
MOD.AFTEBI.P-083.REV01
9 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
10.
MOD.AFTEBI.P-083.REV01
10 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
11.
MOD.AFTEBI.P-083.REV01
11 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
12.
MOD.AFTEBI.P-083.REV01
12 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
13.
MOD.AFTEBI.P-083.REV01
13 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
14.
MOD.AFTEBI.P-083.REV01
14 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
15.
MOD.AFTEBI.P-083.REV01
15 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
VCC
5V
J2
MSB
J3
LSB
U4A
74HC74
1D2 1Q 5
~1Q 6
~1CLR
1
1CLK3
~1PR
4
U4B
74HC74
2D12 2Q 9
~2Q 8
~2CLR
13
2CLK11
~2PR
10
U3A
74HC08
1
2
3
U3B
74HC08
4
5
6
U3D
74HC08
12
13
11
U174HC/T4040
O1015
O17
O111
O09
MR11
~CP10
O43
O52
O64
O713
O812
O914
O26
O35
U2
74HC/T4040
O1015
O17
O111
O09
MR11
~CP10
O43
O52
O64
O713
O812
O914
O26
O35
VCC
5VJ1 R1
100kΩ
5%
C1
100nF
J4
Overflow Bits
1
2
8
3
7
4
5
6
R2
100kΩ
5%
C2
10nF
U3C
74HC08
9
10
8
R3
4.7kΩ
5%
R4
4.7kΩ
5%
D1
1N4148
R5
10kΩ
5%
VCC
5V
C3
4.7µF
U5A
4538
CAP11
RES12
T1B4
T1A5
Q1 6
~Q1 7
CLR13
U5B
4538
CAP215
RES214
T2B11
T2A12
Q2 10
~Q2 9
CLR2
13
10ms
1ms
Fig 28
Este Circuito é responsável pela abertura da porta de leitura da frequência formado pelas portas AND e pela
divisão por dois da base de tempo formado pelo flip-flop tipo D U4A para dar exactamente o tempo que de
abertura entre o nível “1” e o nível “0” por exemplo para uma temporização de 1ms da base de tempo esta em
nível “1” 0,5ms e a nível “0” 0,5ms para ter nível um a 1ms e nível zero a 1ms tem-se de duplicar o tempo que
esta a zero ou a nível um, ou seja dividindo por dois o que sai do contadores em anel Jonhson 1ms que é o ciclo
16.
MOD.AFTEBI.P-083.REV01
16 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
todo da divisão por 10 de cada estagio segundo o datasheet dos contadores da figura 7 o U4A e controlado pelo
PIC16F877 que ao por o pino faz reset ao Flip-Flop e interrompe a contagem que será usado para parar o
contador e o pino Preset posto a zero é usado par fazer um reset aos contadores U1 e U2 através do diodo D1
1N4148 muito usado em electrónica digital por ter tempos de comutação muito reduzidos seguido pela malha de
temporização formadas pelos monoestaveis U5A e U5B. U5A também tem a função de fornecer o impulso de
interrupção de fim de contagem e armazenagem nos latches multiplexados da placa principal do PIC quando
estando U4A estando correndo livremente ou seja os Pinos Preset e Clear a nível lógico “1” quando accionamos
a tecla de Run/Stop o U5B tem como função de ao fim de 10ms dado pelo U5A fazer reset aos contadores e o
impulso leva cerca de 1ms a fazer reset aos Contadores. Os Contadores U1 e U2 são dois contadores
assíncronos mas que como não têm saída Carry Out de clock usa-se o ultimo bit do primeiro para fornecer o
pulso clock ao segundo são dois contadores de 12 bits cada perfazendo 24 bits para evitar o overflow só foi
atribuído 16 bits para contagem da frequência ficaríamos a sem saber se estava a fazer uma contagem certa ou
já teria dado a volta e contador outra vez e assim foram atribuídos aos oito bits mais significativos do conjunto
dos dois contadores como overflow bits. Os primeiros 16 bits são passados para o PIC através dos latches de
armazenamento. O Pino 1 do J1 vem directamente do amplificador Condicionador que trás o sinal a ser medido
pelo frequencímetro. As Resistências R3 Pull-Down e R4 Pull-Up têm como função de manter o circuito parado
até que o PIC Inicializar todos os pinos I/Os que estão configurados como entradas por defeito quando o PIC
arranca o que deixaria todas as entradas dos circuitos flutuando, assim as resistências impõem ao circuito a
condição de Paragem até que o PIC assuma controlo dos seus barramentos através do seu programa Interno
que gere o frequencímetro.
17.
MOD.AFTEBI.P-083.REV01
17 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
18.
MOD.AFTEBI.P-083.REV01
18 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
19.
MOD.AFTEBI.P-083.REV01
19 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
20.
MOD.AFTEBI.P-083.REV01
20 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
Circuito da Placa Principal do PIC16F877
Este circuito é o latch do byte menos significativo LSB (Less Significative Byte) do contador que vai ser
multiplexado no tempo com o MSB no fim da contagem e multiplexado com o módulo LCD. O pino End Count
que vem da placa dos contadores que provoca uma interrupção no porto B do PIC no pino 37 RB4 que está
programado para aceitar uma interrupção por mudança de estado. O PIC recolhe os dados armazenados nos
latches LSB 74HCT173 através do Porto B pino 39 RB6 activa a saída dos latches para o Porto D através dos
pinos 1 e 2 do U4 e U5 que são Tri-State, o Porto D que está configurado como entradas para recolher o byte.
O Porto D está assignado como Data Bus para recolha de dados dos Lacthes LSB e MSB e envio de dados para
o Modulo LCD. O conector molex J10 é usado para fornecer conexão ao Data Bus do Modulo LCD. Os clocks
dos latches são fornecidos pela base de tempo a saída do primeiro divisor por 10
21.
MOD.AFTEBI.P-083.REV01
21 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
Este circuito armazena o byte mais
Significativo MSB (Most Significative Byte) do
contador tal como o circuito anterior é
multiplexado com o circuito anterior e com o
LCD. Os Circuitos Parciais LSB e MSB são
servidos por uma subrotina de interrupção
para aquisição de dados através do pino 40
RB7 do Porto B também controla os pinos 1
e 2 do U2 e U3 que abre ou fecha as saídas
Tri-State conforme esteja a ser lidos ou não
respectivamente.
22.
MOD.AFTEBI.P-083.REV01
22 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
23.
MOD.AFTEBI.P-083.REV01
23 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
24.
MOD.AFTEBI.P-083.REV01
24 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
25.
MOD.AFTEBI.P-083.REV01
25 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
Este circuito é o coração do frequencímetro controla quase todas as funções do aparelho. Controla directamente
o Modulo LCD através de dois portos Porto D saída de dados multiplexado para LCD, Porto E Sinais de Controlo
do LCD de RD0 a RD7 LCD 8 Data bits, RE0 Pino de Controlo RS, RE1 Pino de controlo R/W e RE2 pino de
controlo E. o Porto C foi alterado de LCD data bits
para se usar o Syncronous Serial Interface mais
conhecido como SPI (Serial Port Interface) é um
shift register síncrono que transfere dados em alta
velocidade através De duas linha Serie SDO
(Serial Data Out) na Saída RC5 e SDI (Serial
Data In) na Entrada RC4 sincronizando o inicio da
transferência entre o mestre e escravo através
opcionalmente um sinal de controlo SS e com
outra linha de clock out SCK (Serial Clock) na Saída RC3 do mestre liga ao clock in SCK (Serial Clock) pino 12
do Arduíno que é o escravo atinge de velocidades de transmissão de 2,5Mbits/s á máxima com o
microcontrolador PIC à frequência de 20 MHz. Que vai ligar ao Arduíno para este ordenar os dados e retransmitir
para ser visualizado no PC. O Port B tem três funções Recebe os interrupts do detector de Overflow e do Fim de
Contagem respectivamente estão configurados como inputs. Controla a multiplexagem dos Latches de
armazenamento dos valores da contagem LSB e MSB Pinos 39 e 40 são configurados como outputs. Também
26.
MOD.AFTEBI.P-083.REV01
26 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
controla a transferência do SPI fornecendo o Sinal SS no pino 34 RB1 ao Arduíno e é configurado como output
Esta figura mostra a saídas do analisador lógico uma ferramenta de diagnostico fornecida pela microchip no
programador de PICs PICKIT2 durante os testes da subrotina de SPI mostra envio de dados e comandos para o
Arduíno
* Nota: na figura acima referida mostra o conector mini-DIN de 4 pinos e massa feita com o revestimento
Metálico que serve para conectar o PIC e o Arduíno através do SPI em ambos os dispositivos tem a mesma
configuração.
restando 3 bits RB0, RB2 e RB3 disponíveis para futuras Utilizações. A interrupt do fim de contagem é activa no
flanco ascendente e a interrupt de fim de overflow é activa no flanco descendente. O PIC16F877 através do
Porto A controla o funcionamento dos contadores binários através das Saídas RA0 e RA1 RA0 é o Preset e o
RA1 é o Clear do U4A da Fig28 que é o controlador de porta e divisor por 2 do sinal que vem da base de tempo
e quando faz a sequência (Clear→Preset→Clear) faz reset aos contadores da figura 28. Para deixar correr
livremente a contagem o PIC tem de por a nível lógico “1” as Saídas RA0 e RA1. O Porto A também recebe 4
inputs 3 deles vindos da saída do codificador de prioridade de tecnologia CMOS 4532 da fig13 que codifica por
prioridade cada tecla pressionada se transforma em 3 bits que o PIC lê nos Pinos RA2, RA3 e RA4 que é
armazenado por um Latch 4046 que é pino a pino compatível com os latches do LSB e MSB 74HC173.
RA2 é o Bit 0 do codificador de Prioridade.
RA3 é o Bit 1 do codificador de Prioridade.
RA4 é o Bit 2 do codificador de Prioridade.
O pino RA5 está ligado directamente a tecla Run/Stop que faz que o frequencímetro pause a aquisição de dados
que permite ao utilizador tirar um determinado valor de frequência esta função é criada por uma báscula por no
programa que muda uma flag. O Conector J7 Recebe a frequência vinda do Amplificador e Condicionador de
sinal que transforma qualquer tipo de onda cíclica em onda quadrada ou aproximadamente quadrada e entrega
ao conector dos contadores J6 o pino 1 do J5 entrega o sinal da base de tempo ao J6 que é o conector da placa
dos Contadores 74HCT4040.
27.
MOD.AFTEBI.P-083.REV01
27 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
28.
MOD.AFTEBI.P-083.REV01
28 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
29.
MOD.AFTEBI.P-083.REV01
29 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
30.
MOD.AFTEBI.P-083.REV01
30 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
31.
MOD.AFTEBI.P-083.REV01
31 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
32.
MOD.AFTEBI.P-083.REV01
32 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
33.
MOD.AFTEBI.P-083.REV01
33 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
34.
MOD.AFTEBI.P-083.REV01
34 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
35.
MOD.AFTEBI.P-083.REV01
35 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
36.
MOD.AFTEBI.P-083.REV01
36 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
R1
2
3
4
5
1
7
14
11
9
12
10
6
13
8
5V
50V
500V
Vin
R2
1000Ω
5%
Vin1
D1
1N4148
D2
1N4148
R3
1000kΩ
5%
C1
100nF
C2
100nF
U1A
74HC14
21
U1B
74HC14
43
U1C
74HC14
65
U1D
74HC14
89
U1E
74HC14
1011
U1F
74HC14
1213
R5
8.2kΩ
5%
P1
VCC
5V
VCC
5V
L1
150µH
C3
10nF
RF_Out
Power
Vcc
GND
C4
100nF
VCC
5V
Q1
2N2222A
GND_IN
R4
5.1kΩ
5%
R6
2
3
4
5
1
7
14
11
9
12
10
6
13
8
R7
300kΩ
R8
300kΩ
R9
300kΩ
R10
30.0kΩ
R11
30kΩ
R12
30kΩ
R13
10.0kΩ
Configuração das Resistencias do Divisor de tensão
Divisor de Tensão
A Soma de todas as Resistência dá 1MΩ
R7+R8+R9+R10+R11+R12+R13=1MΩ
Amplificador Condicionador e Conversor para Onda Quadrada
C5
0.47µF
A entrada de sinal faz-se através dum conector BNC ou alvéolos do tipo dum multímetro para agilizar os tipo de
cabos que se pode usar. Que passa através dum condensador de acoplamento que isola electricamente das
correntes continuas do aparelho que vai ser testado com frequencímetro. Este Amplificador Permite testar
frequências com tensões na gama de 5VRMS e tensões máximas na gama 500VRMS usando o selector rotativo de
tensão para seleccionar o valor desejado com três posições Escolhe-se 5V, 50V e 500V. isto é conseguido com
uma formula: tensão máxima x 0.1. O divisor de tensão é conseguido com as resistências R7 a R13 somadas
dão uma impedância de entrada elevada cerca de 1MΩ. cada escala mais baixa, é 1/10 da anterior e é
conseguida com esta configuração de resistências. A resistência R2 limita a corrente nos diodos de comutação
rápida porque tem uma corrente baixa e estão montados em anti-pararelo para cortar ambos os ciclos duma
onda estão a limitar a tensão máxima de entrada no transístor e que por sua vez ajudam na conversão para
onda quadrada se a tensão for muito elevada. O condensador de acoplamento C1 serve para separar a
componente contínua da componente alternada da onda e entregar a base do transístor para amplificação. O
transístor Q1 está montado em emissor comum não estabilizado que lhe confere um elevado ganho em corrente
e também um elevado ganho em tensão polarizado com uma resistência elevada de 1MΩ o que confere ujma
37.
MOD.AFTEBI.P-083.REV01
37 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
elevada impedância de entrada aos sinais alternados este facto dá-lhe um grau elevado de amplificação por na
base estar uma corrente de polarização de base muito baixinha cerca de 5µA com um ganho mínimo de 35 e um
ganho máximo de 300 (HFE) e uma frequência de corte de 300MHz (Transistion Frequency) é mais que suficiente
para esta aplicação segundo o datasheet mostra-nos nas paginas abaixo. A segunda parte do conversor em
onda quadrada e feito pelo circuito integrado U1 conjunto de 6 portas inversoras com uma particularidade têm
histerese são Schmitt Trigger ou seja pode-se regular o nível de disparo se na entrada pusermos uma tensão
continua que acima e abaixo disparam a saída do inversor e é conseguido com um potenciómetro multi-volta
para ajuste fino do nível de disparo juntando mais portas inversoras Schmitt Trigger tem efeito de amplificação
do sinal no datasheet nas paginas abaixo mostra na waveform de entrada e saída quando entra uma onda não
quadrada ele converte em quadrada à saída e mostra também a que níveis de tensão ele dispara (Threshold
Level). A bobine L1 é uma bobine de choque em conjunto com os Condensadores C3 e C4 formam um filtro de
ruídos da alimentação provocados pelo funcionamento dos circuitos integrados digitais.
38.
MOD.AFTEBI.P-083.REV01
38 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
39.
MOD.AFTEBI.P-083.REV01
39 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
40.
MOD.AFTEBI.P-083.REV01
40 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
41.
MOD.AFTEBI.P-083.REV01
41 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
42.
MOD.AFTEBI.P-083.REV01
42 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
43.
MOD.AFTEBI.P-083.REV01
43 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
Modulo LCD
É um dispositivo que permite a visualização electrónico controlado por comandos e dados que permite visualizar
caracteres da tabela ASCII. Através da introdução do código ASCII correspondente depois de devidamente
inicializado pode escrever mensagens valores ou sinais podendo ser utilizado em um numero ilimitado de
aplicações desde controlo ate aparelhagem de medida. Tem um barramento de dados de 8 bits DB0 a DB7
barramento de controlo de 3 bits RS, R/W e E. mais 2 terminais de alimentação GND e VDD e um de controlo do
contraste através dum potenciómetro Vo e dois terminais A e K para a iluminação de fundo do LCD
providenciada por dois leds transparentes de alta capacidade de iluminação. Que pode ser configurado o
barramento de dados para receber 4 ou 8 bits de dados para 4 bit de dados basta ligar só o Nibble superior do
barramento de dados DB4 a DB7 os módulos LCD vem em vários tamanhos e com vários formatos de
barramentos e de capacidade de dar informação podem ter uma linha só duas linhas ou 4 linhas de caracteres.
Há os LCD 16x1, 16x2 e 16x4, também há os LCDs 20x1, 20x2 e 20x4 o primeiro numero é o numero de
caracteres por linha o segundo é o numero de linha máximas que o LCD pode fornecer. O LCDs também pode-
se criar caracteres do utilizador. Basta introduzir através de programação na CGRAM do LCD.
O Modulo LCD utilizado neste projecto é um modulo LCD 16x2 caracteres com terminais de luz de fundo
embutidos no barramento do LCD e tem 16 pinos de saída outros módulos LC só tem 14 pinos mais dois furos á
largura do LCD para se soldar fios ou terminais de encaixe para aceder à iluminação de fundo estes LEDs tem
uma tensão de trabalho de 4,2V e gastam no máximo cerca de 600mA mas nesta montagem estão limitados por
um diodo rectificador para baixar a tensão de alimentação de 5V para 4,3V e em serie com uma resistência de
33Ω
44.
MOD.AFTEBI.P-083.REV01
44 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
45.
MOD.AFTEBI.P-083.REV01
45 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
46.
MOD.AFTEBI.P-083.REV01
46 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
Fluxograma de Controlo do FrequenCímetro
Envia para o
Porto D os
Zeros e
para o SPI
envia para
o PORTO D
e Envia
para o SPI
Há Interrupção
?
N
Espera por
Interrupções
enviadas as
mensagens de
Escolha da
gama para
LCD
N
é Fim de
Contagem?
S
Determina o
Ponto
Decimal
Mostra o
valor da
Frequencia
no LCD
Sai das interrupções
e Retorna o
Programa Principal
restaura os
Registos
Principais
S
Converter BCD em
ASCII
enviadas as
mensagens de
overflow
para LCD
Converte Binario em
decimal
restaura os
Registos
Principais
N
enviadas as
mensagens de
Escolha da
gama para
LCD
envia os Sinais
de Overflow
Para o Porto D
S
Liga os
Contadores
no porto A
Desliga as
Interrupções salva
os Registos
Principais
Sai das interrupções
e Retorna o
Programa Principal
Utilizador Prime uma
tecla e Escolhe a
gamaPrime
Run/Stop
Menssagens da
escolha da
gama enviadas
para Porto D
o Micro Recebe
o valor das
teclas
Menssagens de
Inicialização do
Freq. enviadas
para Porto D
Inicio
enviadas as
mensagens de
inicialização no
LCD
Fim
é
Overflow
?
47.
MOD.AFTEBI.P-083.REV01
47 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
Envia o
Digito2
delay 10us
delay 10us
delay 10us
Envia o Digito1
Envia
Unidade3
delay 10us
delay 10us
delay 10us
Manda a Flag de
inicialização
B00011000
delay 10us
Envia
Unidade2
delay 10us
Inicio
Envia o
Digito6
Envia
oDigito5
Inicia a
Transferencia SPI
Subrotina de SPI do PIC
Envia
Unidade1
Envia o
digito3
delay 10us
delay 10us
Fim
Envia o
Digito4
48.
MOD.AFTEBI.P-083.REV01
Nota: devido á extensão do programa do PIC em linguagem
assembly não inclui-o no relatório e mando os ficheiros
externos com os nomes das subrotinas e do programa principal
incluídos num ficheiro comprimido ZIP.
49.
MOD.AFTEBI.P-083.REV01
49 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
Subrotina de SPI do Arduino
S
Limpa a Flag e a
TxFlag
N
PINO SS=Low
Acende e
Apaga o Led
de Enviado
Envia o
Conteudo do
array Valor
para USB
Copia o
Conteudo do SPI
para rxData
PINO SS=HIGH
E Flag =
0B00011000 E
TxFlag=1?
Envia um
espaço para
o USB
Armazena no
Array Das Unidade
(MHz ou KHz ou Hz)
e TxFlag=1
Inicio
S
Inicializa ao
Sistema
N
Envia o
Array da
Unidade
para o USB
Fim
Armazena
a Flag
Armazena os
Digitos num
Vector
(Array)
S
Acende e
apaga o Led
de Recebido
Acende e
apaga o Led
de Recebido
N
Acende e
Apaga o Led
de Enviado
N
rxData = é
Digitos ou "."
ou "-"
S
Contem o Valor
B00011000?
Copia o
Conteudo do SPI
para rxData
N
S
PINO SS=Low
E Flag =
0B00011000?
Copia o
Conteudo do SPI
para rxData
50.
MOD.AFTEBI.P-083.REV01
//***********************************************************************************************
// Projecto: Comunicação entre PIC do Frequencimetro Via SPI e Arduino com o PC via wireless
// Xbee ou via Arduino USB.
// Versao: 4.0
// Data de começo: 31/10/2009
// Data de final: 01/09/2012
// Autor:Paulo Duarte
// Turma:ARCI2 Nº;2444
// Obs:
//
//***********************************************************************************************
#include <SPI.h>
#include <HardwareSerial.h>
#include <avr/interrupt.h>
// Slave
#define SCK_PIN 13
#define MISO_PIN 12
#define MOSI_PIN 11
#define SS_PIN 10
#define LED_Dado_Recebido 9
#define LED_Dado_Enviado 8
void SlaveInit(void) {
// Set MISO output, all others input
pinMode(SCK_PIN, INPUT);
pinMode(MOSI_PIN, INPUT);
pinMode(MISO_PIN, OUTPUT);
pinMode(SS_PIN, INPUT);
51.
MOD.AFTEBI.P-083.REV01
51 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
// Enable SPI
SPCR = B00000000;
SPCR = (1<<SPE);
}
byte ReadByte(void) {
while(!(SPSR & (1<<SPIF))) ;
return SPDR;
}
void WriteByte(byte value) {
SPDR = value;
while (!(SPSR & (1<<SPIF))) ;
return;
}
unsigned long lastSent;
char Unidade[3]; //Unidades de Frerquencia MHZ, KHz, Hz
char Valor[6]; //Valor da frequencia incluindo ponto decimal e indicador de overflow
int cont; //contador para transferencia de carateres sequencialmente
void setup() {
Serial.begin(57600);
SPI.setDataMode(SPI_MODE0);
SlaveInit();
lastSent = millis();
pinMode(LED_Dado_Enviado, OUTPUT);
pinMode(LED_Dado_Recebido, OUTPUT);
digitalWrite(LED_Dado_Enviado, LOW);
digitalWrite(LED_Dado_Recebido, LOW);
}
void loop() {
byte rxData; //Variavel de recepção
byte txData; //Variavel de emissão
byte Flag; //Flag do Byte de Inicio de Recolha de Dados
byte TxFlag; //Flag de Transmisssão
byte UniFlag; //Flag da escolha da Unidade
unsigned int cont; //Contador de caracteres
52.
MOD.AFTEBI.P-083.REV01
52 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
Flag=B00000000;
TxFlag=B00000000;
UniFlag=B00000000;
cont=0;
txData=B00011000;
//------------------- Teste se uma transferencia esta em curso vinda do PIC 16F877 --------------------------
if (digitalRead(SS_PIN) == LOW) {
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Protocolo de Comunicação com o Pic
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
//------------------- Aquisição dos valores da Frequencia Mandados pelo PIC 16F877 em ASCI ------------------
//------------------- Teste da Flag pelo PIC 16F877 --------------------------------
rxData = SPI.transfer(txData);
//----------Flag de Inicio da aquisição----------------------
if (rxData == B00011000){
Flag = rxData;
}
/*»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»*/
if ((rxData >= B00110000 && rxData <= B00111001) || rxData == B00101101 || rxData == B00101110){//Caracteres '1' a '0', '.' e '-'
for(cont=0;cont <6;cont++){
Valor[cont]=rxData;
}
}
digitalWrite(LED_Dado_Recebido, HIGH); // Acende LED do pino 9 do Arduino quando recebe dados do PIC
delay(1);
digitalWrite(LED_Dado_Recebido, LOW); // Apaga LED do pino 9 do Arduino
delay(1);
}
/*»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»
»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»»*/
if (digitalRead(SS_PIN) == LOW && Flag == B00011000) {
53.
MOD.AFTEBI.P-083.REV01
53 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
//------------------ Teste dos Codigos Escolha da Gama de frequencias Mandados pelo PIC 16F877 --------------
rxData = SPI.transfer(txData);
if (rxData == 0x4D || rxData == 0x4B || rxData == 0x48 || rxData == 0x7A){//detecta os Caracteres 'M' a 'K', 'H' e 'z' para formar a unidade
for(cont=0;cont <3;cont++){
Unidade[cont]=rxData;
}
}
TxFlag = B00000001;
//-----------------------------------------------------------------------------------------------------------
digitalWrite(LED_Dado_Recebido, HIGH); // Acende LED do pino 9 do Arduino quando recebe dados do PIC
delay(1);
digitalWrite(LED_Dado_Recebido, LOW); // Apaga LED do pino 9 do Arduino
delay(1);
//-----------------------------------------------------------------------------------------------------------
}
//------------------ Envio dos dados e do caracter da gama de Frequencias para o PC--------------------------
if (digitalRead(SS_PIN) == HIGH && Flag == B00011000 && TxFlag == B00000001){ // Se o bit 0 for "1" então escreve no USB do Arduino
for (cont = 0 ; cont < 6 ; cont++){
Serial.write(Valor[cont]); // Escreve a String dos valores da frequencia armazenados em ASCI no PC via USB
}
Serial.write(0x20); // Envia o espaço para o porto serie do PC
for(cont = 0 ; cont < 3 ; cont++){
Serial.write(Unidade[cont]); // Envia as unidades da frequencia para o porto serie do PC
}
digitalWrite(LED_Dado_Enviado, HIGH); // Acende LED do pino 8 do Arduino indica que foi enviado os valores da frequencia para o PC
delay(1);
digitalWrite(LED_Dado_Enviado, LOW); // Apaga LED do pino 8 do Arduino
delay(1);
Serial.flush(); // Apaga o buffer de emissão do Porto serie
Flag = B00000000; // Poe as flags no seu estado inicial
TxFlag=B00000000;
}
//-----------------------------------------------------------------------------------------------------------
54.
MOD.AFTEBI.P-083.REV01
54 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
Subrotina Primir o Botão Start
Cont2= Cont1+1
se
Cont1<=Comp
Imptressão = ""
S
Flag Star = 0?
S
Inicio
Programa Processing em Visual Basic
Inicio
N
Transfer o Nº do
Arduino para
CommPort e o os
Settings do
CommPort
Subrotina Primir o Botão Exit
Imptressao$ =
Impressao$ +
Impresao2$ CommPort esta
Aberto?
Primir o Botão
Start
N
Cont2= Cont1+1
se Cont1<=Comp
S
Fim
Impressao2$
= "z"?
S
S
S
Primir o Botão
Exit
Introduzir na
Caixa de Texto o
Comm Port
Fecha o
COmmPort e sai
da Subrotina
CommPort está
Aberto ?
Abre o CommPort
Imptressao2$ = Mid$
(Receber$,Cont,1)
Transferir
="z" e comp >
10
Transferir
CommPort para
Receber$
CommPort está
Aberto e
Receber$="" ?
Abre o CommPort
N
Inicio
N
CommPort Esta
Fechado?
Sai da Subrotina
Fim
Subrotina Primir o Botão Stop
CommPort está
Aberto ?
Fim
Primir o Botão
Exit
S
N
Inicializar
as
Variaveis
Mostra A
frequencia na
Caixa de texto
TxtValor
S
Subrotina Principal Freq_Timer
N
N
Flag = 1
Inicio
Comp = Largura
de Receber$
N
55.
MOD.AFTEBI.P-083.REV01
Visual Basic
Private Sub Cmd_Start_Click()
'se a Flag_Start for zero então inicia o CommPort e valida os valores do Input
If flag_start = 0 Then MSComm1.Settings = "57600,n,8,1"
If flag_start = 0 Then MSComm1.CommPort = Txt_CommPort.Text
'Se CommPort estiver Fechado então abre-o
If (MSComm1.PortOpen = False) Then MSComm1.PortOpen = True
flag_start = 1 'Flag_Start Evita erro de por abrir o CommPort mais de uma vez
End Sub
~----------------------------------------------------------------------------------------------------------------------
Private Sub Cmd_Exit_Click()
'Se o CommPort estiver aberto então fecha e sai do Programa
If (MSComm1.PortOpen = True) Then MSComm1.PortOpen = False
End
End Sub
Private Sub Form_Load()
flag_start = 0
Dim Recebe As Byte
56.
MOD.AFTEBI.P-083.REV01
56 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
End Sub
Private Sub Freq_Timer()
Salta:
'twata se o porto COMXX esta aberto se estiver entao começa a receber
If (MSComm1.PortOpen = True) Then receber$ = MSComm1.Input
If (MSComm1.PortOpen = True And receber$ = "") Then GoTo Salta 'se não receber nada faz loop
'ler a string recebidae determina o seu comprimento
comp = Len(receber$)
'Lê o conteudo de receber ate encontrar a caracter "z"
For cont1 = 1 To comp
transferir$ = Mid$(receber$, cont1, 1)
If transferir$ = "z" And comp > 10 Then GoTo imprimir
Next cont1
imprimir:
'Inicializa a variavel Impressão
impressao$ = ""
'Imprime sequencialmente os caracteres comparados com a função Mid$
For Cont2 = cont1 + 1 To comp
impressao2$ = Mid$(receber$, Cont2, 1)
impressao$ = impressao$ + impressao2
57.
MOD.AFTEBI.P-083.REV01
57 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
'Quando detectar o "z" na string Impressão2 Pára a contagem e transfere para caixa de texto e sai
If impressao2$ = "z" Then TxtValor.Text = impressao$: Exit Sub
Next Cont2
TxtValor.Text = impressao$
End Sub
Private Sub Cmd_Stop_Click()
'Se o CommPort estiver aberto fecha-o e para a aquisição
If (MSComm1.PortOpen = True) Then MSComm1.PortOpen = False
End Sub
---------------------------------------------------------------------------------------------------------------------------
}
Esta imagem é o resultado da Programação em Visual Basic um Simples programa que lê o porto Serie do
PC em que o Arduíno envia uma String fixa para teste do Processing
64.
MOD.AFTEBI.P-083.REV01
64 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
65.
MOD.AFTEBI.P-083.REV01
65 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
66.
MOD.AFTEBI.P-083.REV01
66 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
67.
MOD.AFTEBI.P-083.REV01
67 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
68.
MOD.AFTEBI.P-083.REV01
68 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
69.
MOD.AFTEBI.P-083.REV01
69 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MontageM das Caixas
Caixa do Frequencímetro
1. Converter duas caixas de derivação em caixas de instrumentação cortando os pontos onde se
aparafusa numa superfície lisa cortando com uma serra flexível de metal depois alisando com
esmeris, criar espaço nas esquinas dos furos para caberem as placas de circuito impresso.
2. Furar, Serrar e limar os buracos rectangulares para LCD, interruptores da backlight. Da caixa
do frequencímetro.
3. Furar e alargar os furos para o BNC alvéolos do tipo usados em multímetros, conector Mini-
DIN para o SPI, abrir e alargar o furo para o conector Jack de painel de alimentação.
4. Fazer os furos de fixação das placas de circuito impresso, usando parafusos grandes e os
plásticos das canetas para elevar a placa de cima de modo a não haver nem curto circuitos
70.
MOD.AFTEBI.P-083.REV01
70 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
com a placa de baixo e nem haver dobragem do flat-cables que poderia causar avarias nas
conexões.
5. Conectar ou soldar fios, cabos, e flat-cables, criar conexões com os conectores molex para o
conector mini-DIN
6. Furar os buracos fixadores do LCD e da placa adaptadora do LCD à tampa.
7. Furar os buracos das teclas e de fixação das mesmas à tampa.
8. Furar o buraco da chave comutadora rotativa a tampa.
9. Fixar a placa do amplificador condicionador à tampa e soldando todos os cabos de sinal e
fios de alimentação e fixar ao conectores aparafusado. Do LCD os cabos de alimentação
vindos da placa principal (PIC16F877) e do amplificador
10. Furar e fixar com cola quente os parafusos de acoplamento ao módulo de alimentação.
Caixa da fonte de Alimentação
1. Furar, serrar e limar os buracos para o conector alimentação e interruptor.
2. Furar os furos para fixar o transformador e para fixar a placa da fonte de alimentação.
3. Furar os furos dos porta fusíveis, do led indicador de funcionamento e do conector fêmea
para acoplar ao módulo do frequencímetro.
4. Fazer as ranhuras e os furos para os conectores aparafusados para futuras expansões da fonte de
alimentação.
5. Soldar todos os fios e fixar o led e o conector de alimentação de 5VDC a caixa com cola quente
conectar as alimentações alternadas aos dados de parafusos.
6. Fazer os cabos e soldar os diversos conectores para ligar o Arduíno ao PIC via SPI.
7. Testar electricamente todas a ligações com o multímetro analógico em modo Ohmímetro em teste
de continuidade para ter a certeza que não vai haver nem condutores em aberto, nem curto-
circuitos.
71.
MOD.AFTEBI.P-083.REV01
71 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
Conclusões Gerais
Elaborei este projecto em módulos em vez duma placa única vantagem que tem é que se avaria-se ou
houver um engano, não terei de alterar uma placa única de circuito impresso perdendo assim imenso
tempo a refazer tudo. Cada módulo corresponde sensivelmente ao esquema de blocos. No seu
essencial um frequencímetro tem semelhanças ao Osciloscópio mas em vez de apresentar de forma
gráfica na tela do ecrã conta a frequência e apresenta-a numericamente. As semelhanças são que
também tem uma base de tempo que variamos segundo a frequência que queremos medir.
Este frequencímetro está limitado na frequência devido a frequência máxima dos contadores ser de
73MHz. Com a resolução máxima de 16 bits teria uma contagem máxima de 65,535 MHz mas para
fazer valor certo e dar uma folga para o overflow para fazer valor certo limito-o a 50MHz.
Vantagens deste frequencímetro
- Teclas Selectoras de banda por Hardware diminuem a quantidade de programação que se tem de
fazer, diminui os bits dos portos do microcontrolador usados.
- Tecla de Run/Stop para pausar ou continuar a amostragem do valor da frequência permite que o
utilizador tire um valor desejado sem haver alterações.
- O microcontrolador que controla a maioria das funções do frequencímetro.
- Montagem Modular das placas que torna fácil de Reparar ou alterar.
- Pode-se ligar ou desligar manualmente a iluminação de fundo do LCD (Backlight).
- Torna mais rápido certas funções serem feitas por hardware que torna o programa menos pesados
em termos de tempo gasto.
Possibilidade de comunicação serie SPI em alta velocidade com outros dispositivos micro controlados ou
micro processados.
- Fácil de expandir a novas maneiras de comunicar Exemplo: “RS-232” porque estão pinos disponíveis
para comunicação em conectores molex.
- Pode-se adicionar novas placas de comunicação em outras normas bastando criar os circuitos
adaptadores de RS-232 para outros.
72.
MOD.AFTEBI.P-083.REV01
72 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
Desvantagens deste frequencímetro
- É mais caro funções feitas por Hardware.
- Quanto mais cabos e fios mais provável haver curto-circuitos e maus contactos entre placas.
- Podem surgir problemas mecânicos e eléctrico devido aos pinos desgastados.
Informações adicionais sobre melhoramentos que podem ser implementados no equipamento
- Pode-se acrescentar um chip pré-scaler á entrada para se poder aumentar a frequência de medição
máxima existem hoje em dia chips pré-scalers que medem na ordem dos vários GigaHertz.
Dificuldades/ Soluções
1) Dificuldade em adaptação e alteração da programação e de ligações do Porto D e do Porto
C à nova exigência do circuito para alem de mostrar no LCD que estava no projecto original
também se adicionou envio dos caracteres do LCD para a saída do SPI para comunicar com o
Arduíno devido ao programa já ser um bocado extenso e algumas avarias que aconteceram
durante a programação e testes do Microcontrolador PIC.
2) A solução apresentada seria necessário mais tempo para correcção de erros de programação
e de compra de novos componentes para substituir os avariados.
3) AS PCIs fotocopiadas ficaram menores que o tamanho real dificultando a soldadura. Solução
fazer ampliação na fotocopiadora para compensar a diminuição do tamanho.
4) Dificuldade encontrar alguns componentes mais triviais na cidade devido a escaca existência
de casas da especialidade, como conectores e cabos. Solução improvisação nas montagens
utilização de cabos de dois condutores + malha em duplicado em vez de quatro condutores e
malha, uso de um conector mini-DIN de cabo em vez de um mini-DIN de painel fixando com
cola quente.
73.
MOD.AFTEBI.P-083.REV01
73 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
Os materiais e equipamento utilizados foram:
Materiais Diversos
8 - Parafusos 3mm x 42mm sextavados interior
2 - Caixas de derivação quadradas grandes brancas.
10 – Parafusos de 3mm x 25mm de fenda
2 – Parafusos 4mm x 23mm sextavados exterior
2 – Parafusos 3mm x 22mm sextavados interior
3 – Plásticos de assentar placa com auto adesivo
16 – Parafusos para plástico das caixas para as fecharem
- Cola a quente Q.B. para fixar: placas, parafusos, conectores e led
- Plásticos cortados das canetas para criar elevação às placas.
- Plásticos Serrados das caixas de derivação
- Manga retráctil a quente
- Braçadeiras plásticas de diversas cores para fixarem cabos e fios.
- PCB virgens.
- Percloreto de Ferro.
- Tina de rolo de tinta para por o Percloreto de ferro
- Fios, cabos blindados de R.F. e Flat Cables
- Terminais molex
74.
MOD.AFTEBI.P-083.REV01
74 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
Equipamento e Ferramentas
- Osciloscópio 20MHz com gerador de funções LG OS-5020G.
- Multímetro analógico Kaise SK-315
- Berbequim de velocidade variável reversível 12V bateria recarregável HANDY POWER HPK12C-2
0 - 550RPMs
- Mini-berbequim ParkSide 9,6V 5000 – 25000RPMs
- Chaves de fendas, chaves Phillips.
- Alicates: alicate de ponta curva, alicate de pontas compridas, alicate de corte, alicate universal
alicate de pressão.
- Mini Torno, grampos de fixação,
- Fonte de alimentação do mini-berbequim velocidade controlada com PWM.
- Fonte de Alimentação 5 e 12V fixos.
- Programador de PICs compatível com JDL.
- Software de programação da microchip: Pickit2 e MPLAB.
- Software de programação do Arduíno.
- Programação no PC: Visual Studio 6 - Visual Basic 6.
- Placa de Programação e Breadboards (ProtoBoards).
- Grampo extractor de Circuitos integrados.
75.
MOD.AFTEBI.P-083.REV01
75 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
BIBLIOGRAFIA UTILIZADA
Programação em Assembly da Microchip da serie Mid-Range PIC16Fxxx documentos do CINEL:
04_instruções.pdf
Documentação sobre Modulo LCD do CINEL
14_lcd.pdf
Datasheets dos Fabricantes de Microcontroladores:
ATMEL Datasheet
AVR ATMEGA 88/148/168/328
Microchip Datasheet
PIC16F87X
Documentação buscas da google e Vídeos do Youtube sobre programação em Visual Basic usando o
porto serie do PC
Buscas na Wikipedia sobre Arduíno Comunicação SPI
Buscas na google sobre Arduíno Comunicação SPI
ÍNDICE DE GRÁFICOS, FIGURAS E TABELAS
Parece que tem um bloqueador de anúncios ativo. Ao listar o SlideShare no seu bloqueador de anúncios, está a apoiar a nossa comunidade de criadores de conteúdo.
Odeia anúncios?
Atualizámos a nossa política de privacidade.
Atualizámos a nossa política de privacidade de modo a estarmos em conformidade com os regulamentos de privacidade em constante mutação a nível mundial e para lhe fornecer uma visão sobre as formas limitadas de utilização dos seus dados.
Pode ler os detalhes abaixo. Ao aceitar, está a concordar com a política de privacidade atualizada.