SlideShare ist ein Scribd-Unternehmen logo
1 von 75
Downloaden Sie, um offline zu lesen
MOD.AFTEBI.P-083.REV01
(FREQUENCIMETRO
PIC → ARDUINO → PC)
(PAULO DUARTE Nº:2444 TURMA: ARCI2)
(12/09/2012)
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
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.
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
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.
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
MOD.AFTEBI.P-083.REV01
USB COM EmuladoSPI
PCArduino
ESQUEMA DE BLOCOS DAS COMUNICAÇÔES ENTRE DISPOSITIVOS
Frequencimetro
- PIC
MOD.AFTEBI.P-083.REV01
Explicação dos EsquEmas parciais
MOD.AFTEBI.P-083.REV01
9 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
10 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
11 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
12 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
13 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
14 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
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
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.
MOD.AFTEBI.P-083.REV01
17 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
18 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
19 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
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
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.
MOD.AFTEBI.P-083.REV01
22 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
23 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
24 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
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
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.
MOD.AFTEBI.P-083.REV01
27 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
28 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
29 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
30 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
31 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
32 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
33 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
34 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
35 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
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
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.
MOD.AFTEBI.P-083.REV01
38 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
39 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
40 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
41 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
42 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
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Ω
MOD.AFTEBI.P-083.REV01
44 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
45 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
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
?
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
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.
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
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);
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
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) {
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;
}
//-----------------------------------------------------------------------------------------------------------
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
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
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
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
MOD.AFTEBI.P-083.REV01
PIC_SPI_IN
Arduino_SPI_OUT
R1
330Ω
R2
330Ω
LED1LED2
MISO
SCK
MOSI
SS
SCK
SDI
SDO
PB1_SS
P8
P9
Dado_RecebidoDado_Enviado
Arduino SPI Shield
MOD.AFTEBI.P-083.REV01
59 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
LCD_In1
LCD In1
LCD_Out3
LCD Out3
LCD_Out1
LCDOut1
LCD_Out2
LCDOut2
LCD_Back_Light
LCDBack Light
R2
10kΩ
5%
R3
10kΩ
5%
R4
10kΩ
5%
R5
10kΩ
5%
R6
10kΩ
5%
R7
10kΩ
5%
R8
10kΩ
5%
R9
10kΩ
5%
R10
10kΩ
5%
R11
10kΩ
5%
R13
10K
50%
VCC
5V
VCC
5V
VCC
5V
LCD_In2
LCD In2
R12
10kΩ
5%
D1
1N4001
R1
33Ω
5%
SW1
Key = Space
Placa ADaptadora e de Testes para LCD
MOD.AFTEBI.P-083.REV01
60 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
Controlo do PIC e Entrada do Sinal a Contar
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
Placa do Controlo de Gate e Contadores Binarios
MOD.AFTEBI.P-083.REV01
61 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
MOD.AFTEBI.P-083.REV01
62 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
63 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
VDD
5V
J1
Keys
VDD
5V
SW1
RUN/STOP
2
4
1
3
SW2
10us
2
4
1
3
SW3
100us
2
4
1
3
SW4
1ms
2
4
1
3
SW5
10us
2
4
1
3
SW6
100ms
2
4
1
3
SW7
1s
2
4
1
3
SW8
10s
2
4
1
3
Teclas de Escolha da Gama e Run/Stop
MOD.AFTEBI.P-083.REV01
64 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
65 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
66 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
67 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
MOD.AFTEBI.P-083.REV01
68 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
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
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.
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.
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.
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
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.
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

Weitere ähnliche Inhalte

Was ist angesagt?

Microcontroladores PIC - Introdução
Microcontroladores PIC - IntroduçãoMicrocontroladores PIC - Introdução
Microcontroladores PIC - Introdução
Fabio Souza
 

Was ist angesagt? (20)

Microcontroladores pic ling c unicamp
Microcontroladores pic ling c unicampMicrocontroladores pic ling c unicamp
Microcontroladores pic ling c unicamp
 
CONVERSOR ANALÓGICO/DIGITAL COM SAMPLE AND HOLDCONVERSOR ANALÓGICO/DIGITAL CO...
CONVERSOR ANALÓGICO/DIGITAL COM SAMPLE AND HOLDCONVERSOR ANALÓGICO/DIGITAL CO...CONVERSOR ANALÓGICO/DIGITAL COM SAMPLE AND HOLDCONVERSOR ANALÓGICO/DIGITAL CO...
CONVERSOR ANALÓGICO/DIGITAL COM SAMPLE AND HOLDCONVERSOR ANALÓGICO/DIGITAL CO...
 
Minicurso Arduino com Projetos Praticos - Jotacisio Oliveira
Minicurso Arduino com Projetos Praticos - Jotacisio OliveiraMinicurso Arduino com Projetos Praticos - Jotacisio Oliveira
Minicurso Arduino com Projetos Praticos - Jotacisio Oliveira
 
Contadores e Registradores
Contadores e RegistradoresContadores e Registradores
Contadores e Registradores
 
Seminario pic
Seminario picSeminario pic
Seminario pic
 
Apostila cpic
Apostila cpicApostila cpic
Apostila cpic
 
Manual logo ago_13
Manual logo ago_13 Manual logo ago_13
Manual logo ago_13
 
Circuitos Digitais
Circuitos DigitaisCircuitos Digitais
Circuitos Digitais
 
Gree linha gmv - manual de instalação
Gree   linha gmv - manual de instalaçãoGree   linha gmv - manual de instalação
Gree linha gmv - manual de instalação
 
Contadores
ContadoresContadores
Contadores
 
4 a 20 mili amperes 0 a 10 volts relatorio projeto circuito trabalho
4 a 20 mili amperes 0 a 10 volts relatorio projeto circuito trabalho4 a 20 mili amperes 0 a 10 volts relatorio projeto circuito trabalho
4 a 20 mili amperes 0 a 10 volts relatorio projeto circuito trabalho
 
Arduino - iniciação à linguagem C (entradas e saídas digitais)
Arduino - iniciação à linguagem C (entradas e saídas digitais)Arduino - iniciação à linguagem C (entradas e saídas digitais)
Arduino - iniciação à linguagem C (entradas e saídas digitais)
 
Oficina Arduino - Jornada de Tecnologia 2014 (E-poti) - Part II
Oficina Arduino - Jornada de Tecnologia 2014 (E-poti) - Part IIOficina Arduino - Jornada de Tecnologia 2014 (E-poti) - Part II
Oficina Arduino - Jornada de Tecnologia 2014 (E-poti) - Part II
 
Pic aula1
Pic   aula1Pic   aula1
Pic aula1
 
Curso de Manutenção de monitores
Curso de Manutenção de monitoresCurso de Manutenção de monitores
Curso de Manutenção de monitores
 
53377586 manual-unitrol-1000
53377586 manual-unitrol-100053377586 manual-unitrol-1000
53377586 manual-unitrol-1000
 
Microcontroladores PIC - Introdução
Microcontroladores PIC - IntroduçãoMicrocontroladores PIC - Introdução
Microcontroladores PIC - Introdução
 
1401 (manual do logo)
1401 (manual do logo)1401 (manual do logo)
1401 (manual do logo)
 
HC11
HC11HC11
HC11
 
[Chevrolet] inyeccion electronica_chevrolet_corsa
[Chevrolet] inyeccion electronica_chevrolet_corsa[Chevrolet] inyeccion electronica_chevrolet_corsa
[Chevrolet] inyeccion electronica_chevrolet_corsa
 

Ähnlich wie Frequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PC

2 encaminhamento
2 encaminhamento2 encaminhamento
2 encaminhamento
zeu1507
 

Ähnlich wie Frequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PC (20)

Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
Microcontroladores pic lingc unicamp-150206140414-conversion-gate02
 
Microcontroladores PIC.pptx
Microcontroladores PIC.pptxMicrocontroladores PIC.pptx
Microcontroladores PIC.pptx
 
Guia de utilização Apresentacao_ADC_PIC16F877A.pdf
Guia de utilização Apresentacao_ADC_PIC16F877A.pdfGuia de utilização Apresentacao_ADC_PIC16F877A.pdf
Guia de utilização Apresentacao_ADC_PIC16F877A.pdf
 
Apostila Apresentacao_PWM_PIC16F877A_2015.pdf
Apostila Apresentacao_PWM_PIC16F877A_2015.pdfApostila Apresentacao_PWM_PIC16F877A_2015.pdf
Apostila Apresentacao_PWM_PIC16F877A_2015.pdf
 
2 manual - clp pic40-v3
2 manual - clp pic40-v32 manual - clp pic40-v3
2 manual - clp pic40-v3
 
ARM
ARMARM
ARM
 
Microcontroladores: El microcontrolador 8051
Microcontroladores: El microcontrolador 8051 Microcontroladores: El microcontrolador 8051
Microcontroladores: El microcontrolador 8051
 
2 encaminhamento
2 encaminhamento2 encaminhamento
2 encaminhamento
 
Pic18xx
Pic18xxPic18xx
Pic18xx
 
Programação básica de microcontroladores
Programação básica de microcontroladoresProgramação básica de microcontroladores
Programação básica de microcontroladores
 
ATmega Prática
ATmega PráticaATmega Prática
ATmega Prática
 
Informativo tenico comunicacao t116 s com 3 inversores as1
Informativo tenico   comunicacao t116 s com 3 inversores as1Informativo tenico   comunicacao t116 s com 3 inversores as1
Informativo tenico comunicacao t116 s com 3 inversores as1
 
Projeto de um PLL ( Phase Locked Loop )
Projeto de um PLL ( Phase Locked Loop )Projeto de um PLL ( Phase Locked Loop )
Projeto de um PLL ( Phase Locked Loop )
 
Projeto – Transmissão de voz digital
Projeto – Transmissão de voz digitalProjeto – Transmissão de voz digital
Projeto – Transmissão de voz digital
 
Mini Curso Sistemas Embarcados
Mini Curso Sistemas EmbarcadosMini Curso Sistemas Embarcados
Mini Curso Sistemas Embarcados
 
Clp
ClpClp
Clp
 
Medição Usando Cloud Computing
Medição Usando Cloud ComputingMedição Usando Cloud Computing
Medição Usando Cloud Computing
 
Guia centrais impacta_portugues_05_13_site
Guia centrais impacta_portugues_05_13_siteGuia centrais impacta_portugues_05_13_site
Guia centrais impacta_portugues_05_13_site
 
Boletim contato dx nº 91
Boletim contato dx  nº 91Boletim contato dx  nº 91
Boletim contato dx nº 91
 
Arduino001 110911083100-phpapp02
Arduino001 110911083100-phpapp02Arduino001 110911083100-phpapp02
Arduino001 110911083100-phpapp02
 

Frequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PC

  • 1. MOD.AFTEBI.P-083.REV01 (FREQUENCIMETRO PIC → ARDUINO → PC) (PAULO DUARTE Nº:2444 TURMA: ARCI2) (12/09/2012)
  • 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
  • 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
  • 59. MOD.AFTEBI.P-083.REV01 59 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__ LCD_In1 LCD In1 LCD_Out3 LCD Out3 LCD_Out1 LCDOut1 LCD_Out2 LCDOut2 LCD_Back_Light LCDBack Light R2 10kΩ 5% R3 10kΩ 5% R4 10kΩ 5% R5 10kΩ 5% R6 10kΩ 5% R7 10kΩ 5% R8 10kΩ 5% R9 10kΩ 5% R10 10kΩ 5% R11 10kΩ 5% R13 10K 50% VCC 5V VCC 5V VCC 5V LCD_In2 LCD In2 R12 10kΩ 5% D1 1N4001 R1 33Ω 5% SW1 Key = Space Placa ADaptadora e de Testes para LCD
  • 60. MOD.AFTEBI.P-083.REV01 60 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 Controlo do PIC e Entrada do Sinal a Contar 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 Placa do Controlo de Gate e Contadores Binarios
  • 61. MOD.AFTEBI.P-083.REV01 61 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
  • 62. MOD.AFTEBI.P-083.REV01 62 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  • 63. MOD.AFTEBI.P-083.REV01 63 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__ VDD 5V J1 Keys VDD 5V SW1 RUN/STOP 2 4 1 3 SW2 10us 2 4 1 3 SW3 100us 2 4 1 3 SW4 1ms 2 4 1 3 SW5 10us 2 4 1 3 SW6 100ms 2 4 1 3 SW7 1s 2 4 1 3 SW8 10s 2 4 1 3 Teclas de Escolha da Gama e Run/Stop
  • 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