O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×

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

Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
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...
MOD.AFTEBI.P-083.REV01
3 de 75
(FREQUENCIMETRO PIC – ARDUINO - PC)
FORMANDO: (PAULO DUARTE)
DATA _12_/_09_/__2012__
ESTRUT...
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Carregando em…3
×

Confira estes a seguir

1 de 75 Anúncio

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

Baixar para ler offline

PIC16F877A send Readings thru SPI (Serial Peripheral Interface) to Arduino then Arduino translate raw binary data to ASCII Numeric Data then Arduino sends thru is Programming Port to PC USB Virtual COM Port then Applictaion in Visual Basic show the PIC16F877A Readings and has some Control over Arduino. Used MPLAB PIC Macro Assembler to write the code for PIC, Arduino was Coded in C.
Multisim 11 Pro and Protheus to develop and Design the Schematics and PCB

PIC16F877A send Readings thru SPI (Serial Peripheral Interface) to Arduino then Arduino translate raw binary data to ASCII Numeric Data then Arduino sends thru is Programming Port to PC USB Virtual COM Port then Applictaion in Visual Basic show the PIC16F877A Readings and has some Control over Arduino. Used MPLAB PIC Macro Assembler to write the code for PIC, Arduino was Coded in C.
Multisim 11 Pro and Protheus to develop and Design the Schematics and PCB

Anúncio
Anúncio

Mais Conteúdo rRelacionado

Diapositivos para si (20)

Semelhante a Frequency Meter using Microchip PIC16F877A SPI to Arduino Virtual COM to PC (20)

Anúncio

Mais recentes (20)

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

  1. 1. MOD.AFTEBI.P-083.REV01 (FREQUENCIMETRO PIC → ARDUINO → PC) (PAULO DUARTE Nº:2444 TURMA: ARCI2) (12/09/2012)
  2. 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. 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. 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. 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. 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. 7. MOD.AFTEBI.P-083.REV01 USB COM EmuladoSPI PCArduino ESQUEMA DE BLOCOS DAS COMUNICAÇÔES ENTRE DISPOSITIVOS Frequencimetro - PIC
  8. 8. MOD.AFTEBI.P-083.REV01 Explicação dos EsquEmas parciais
  9. 9. MOD.AFTEBI.P-083.REV01 9 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  10. 10. MOD.AFTEBI.P-083.REV01 10 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  11. 11. MOD.AFTEBI.P-083.REV01 11 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  12. 12. MOD.AFTEBI.P-083.REV01 12 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  13. 13. MOD.AFTEBI.P-083.REV01 13 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  14. 14. MOD.AFTEBI.P-083.REV01 14 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  15. 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. 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. 17. MOD.AFTEBI.P-083.REV01 17 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  18. 18. MOD.AFTEBI.P-083.REV01 18 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  19. 19. MOD.AFTEBI.P-083.REV01 19 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  20. 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. 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. 22. MOD.AFTEBI.P-083.REV01 22 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  23. 23. MOD.AFTEBI.P-083.REV01 23 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  24. 24. MOD.AFTEBI.P-083.REV01 24 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  25. 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. 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. 27. MOD.AFTEBI.P-083.REV01 27 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  28. 28. MOD.AFTEBI.P-083.REV01 28 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  29. 29. MOD.AFTEBI.P-083.REV01 29 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  30. 30. MOD.AFTEBI.P-083.REV01 30 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  31. 31. MOD.AFTEBI.P-083.REV01 31 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  32. 32. MOD.AFTEBI.P-083.REV01 32 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  33. 33. MOD.AFTEBI.P-083.REV01 33 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  34. 34. MOD.AFTEBI.P-083.REV01 34 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  35. 35. MOD.AFTEBI.P-083.REV01 35 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  36. 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. 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. 38. MOD.AFTEBI.P-083.REV01 38 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  39. 39. MOD.AFTEBI.P-083.REV01 39 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  40. 40. MOD.AFTEBI.P-083.REV01 40 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  41. 41. MOD.AFTEBI.P-083.REV01 41 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  42. 42. MOD.AFTEBI.P-083.REV01 42 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  43. 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. 44. MOD.AFTEBI.P-083.REV01 44 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  45. 45. MOD.AFTEBI.P-083.REV01 45 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  46. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
  58. 58. 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
  59. 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. 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. 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. 62. MOD.AFTEBI.P-083.REV01 62 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  63. 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. 64. MOD.AFTEBI.P-083.REV01 64 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  65. 65. MOD.AFTEBI.P-083.REV01 65 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  66. 66. MOD.AFTEBI.P-083.REV01 66 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  67. 67. MOD.AFTEBI.P-083.REV01 67 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  68. 68. MOD.AFTEBI.P-083.REV01 68 de 75 (FREQUENCIMETRO PIC – ARDUINO - PC) FORMANDO: (PAULO DUARTE) DATA _12_/_09_/__2012__
  69. 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. 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. 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. 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. 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. 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. 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

×