Sei sulla pagina 1di 18

Projetos de Micros controladores

Micro controlador com notas musicais


Temos discutido nas experincias passadas como usar um microcontrolador PIC para fazer uma variedade de coisas de piscar um LED para conduo de um motor, etc Hoje, vamos ver como jogar notas de uma cano com um microcontrolador PIC. As notas musicais so simplesmente ondas sonoras de freqncias especficas. Se a frequncia de uma nota conhecido correctamente, um microcontrolador pode ser programado para desempenhar a nota atravs da gerao de uma onda quadrada (da mesma frequncia) do sinal de um dos seus pinos I / O.O sinal deve ser alimentado com um alto-falante para ouvir o som. Aqui, vamos discutir tocando notas do "Parabns pra voc" popular melodia usando um microcontrolador PIC16F628A e uma campainha.

As notas musicais usando um micro PIC

Teoria Para tocar a msica de uma cano, voc precisa saber as suas notas musicais. Cada nota tocada por um perodo determinado e h um intervalo de tempo determinado entre duas notas sucessivas. A tabela seguinte apresenta as frequncias de notas musicais a partir de meio C. O meio C designado como C4, porque a tecla C quarto de um teclado de piano padro 88-chave.

As notas musicais e suas freqncias a partir de C Mdio As notas das oitavas outros pode ser obtida multiplicando ou dividindo-se estas frequncias por 2. Por exemplo, a nota prximo C acima do meio C teria uma frequncia de 524 hertz. Voc pode encontrar as freqncias de descanso das notas no seguinte link: http://cs.nyu.edu/courses/fall03/V22.0201-003/notes.htm As notas musicais podem ser geradas atravs de ondas quadradas de as freqncias de notas. Assim, a fim de tocar a msica de uma cano com um microcontrolador, tudo que voc precisa saber so as notas musicais e suas informaes de calendrio, o restante toda a programao. Uma onda quadrada pode ser gerado em um pino de I / O do microcontrolador PIC por bits batendo o pino de alta e baixa. Uma forma alternativa de conseguir isso usando um hardware PWM mdulo. Aqui, vamos usar o anterior. Diagrama de circuito O diagrama do circuito para este experimento bastante simples. O pino de RB0 do microcontrolador PIC16F628A bits bateu para gerar um sinal de onda quadrada de frequncia desejada. Um pino de I / O de PIC16F628A pode fonte de corrente at 25 mA, o que pode no ser suficiente para conduzir uma campainha eltrica diretamente. Portanto, um transistor NPN BC547 usado como um amplificador de corrente para a campainha. Uma filtragem RC pode ser utilizada para melhorar a qualidade de udio (ondas quadradas no so ondas puros e assim, eles no parece to boa como ondas sinusoidais), mas, para simplicidade, no implementado aqui.

Buzzer bobina eltrica conduzido atravs RB0 pino usando um transistor

Configurao do circuito em breadboard Voc pode ver que eu estou usando o meu mdulo breadboard PIC16F628A neste experimento. Software

Gerao de tons de udio muito fcil no mikroC Pro para PIC compilador. Ele tem uma biblioteca de som embutido para servir esta finalidade. A biblioteca tem as seguintes duas funes: Sound_Init ( de char * snd_port, carvo snd_pin): Configura o pino MCU apropriado para a gerao do som. Por exemplo, Sound_Init (& PORTB, 0) ir configurar RB0 pinos para a sada de som. Sound_Play ( unsigned freq_in_hz, no assinados duration_ms): Gera um sinal de onda quadrada no pino apropriado. As freqncias de notas de uma msica pode ser definida como uma varivel de matriz ou salvos como uma matriz constante na ROM (se o tamanho do RAM no suficiente) do microcontrolador. As notas da cano "Parabns pra voc" no so muito grandes e, portanto, pode ser definido em uma matriz de inteiros do tipo em mikroC, como: / * Hap py Nascimento Dia para voc, Hap py dia do nascimento de C4 C4 C4 D4 E4 F4 C4 C4 C4 D4 G4 * / sem sinal notas int [] = {262, 262, 294, 262, 349, 330, 262, 262, 294, 262, 392, / * Voc, Hap Dia Nascimento py querida xxxx Hap py nascimento F4 C4 C4 C5 A4 F4 E4 D4 B4b B4b A4 * / 349, 262, 262, 523, 440, 349, 330, 294, 466, 466, 440, / Dia * para voc F4 G4 F4 * / 349, 392, 349 }; Da mesma forma, a durao de cada frequncia nota pode tambm ser definido em outra matriz inteiro-tipo do mesmo tamanho. O programa completo (fonte + arquivos HEX) pode ser baixado no seguinte link. Baixar fonte mikroC e arquivos HEX Aqui est um vdeo mostrando o "Parabns pra voc" tune que est sendo desempenhado pelo microcontrolador PIC16F628A. Voc pode ajustar as duraes de tempo de notas pouco para soar melhor.

Comversor ADC digital


Descrio Analgico-digital de converso (ADC) necessria porque, enquanto os sistemas incorporados acordo com os valores digitais, os seus arredores tipicamente envolvem muitos sinais analgicos, tais como, temperatura, velocidade, a presso, a sada de um microfone, etc Todos eles tm de ser convertidos em dados digitais, antes de ser processado pelo microcontrolador.Hoje, veremos como ler um sinal analgico externo usando um microcontrolador PIC16F688, e mostra a sada de converso (nmero digital) em um LCD. O sinal de entrada analgico ser uma tenso que varia entre 0-5V derivadas utilizando um potencimetro. Teoria Obrigatrio O microcontrolador PIC16F688 tem um built-in 10-bit ADC com oito canais de entrada. Os oito canais esto disponveis em RA0, RA1, RA2, RA4, RC0, RC1, RC2, e RC3. Eles tm rtulos alternativos, AN0-AN7, para esta funo, e so multiplexados em uma nica amostra e Hold circuito. A sada do amostragem e reteno ligado entrada do conversor A / D. O resultado da converso de 10-bit armazenado no resultado ADC registra ADRESH (byte A / D Resultado Superior) e ADRESL (byte A / D Resultado Baixa). Cada um destes registros de 8 bits. A funcionalidade do mdulo A / D controlada por trs registos: Ansel, ADCON0, e ADCON1. Os detalhes destes registos de controlo so discutidos em canais ADC em PIC16F688 . Diagrama de Circuito O circuito de teste para demonstrar a 10-bit converso A / D usando PIC16F688 mostrado abaixo. A tenso de entrada de ensaio para o ADC derivado de um potencimetro 5K ligado atravs da fonte de alimentao de +5 V, e est ligado ao pino de RA2/AN2 PIC16F688. A tenso de alimentao (+5 V) escolhida como a tenso de referncia para converso A / D.Portanto, o ADC 10-bit vai converter qualquer tenso analgica entre 0-5V para um nmero digital variando entre 01023. O nmero ser exibido no LCD. Este diagrama do circuito no muito diferente do anterior para o nosso laboratrio (Laboratrio 4: Interfaceamento um personagem LCD ), exceto que ele tem um potencimetro de 5K para a gerao de tenso de teste analgico para operao ADC.

Diagrama de circuito

Configurao do circuito em breadboard

Configurao do circuito usando o mdulo breadboard PIC16F688 Software A programao envolve ANSEL configurando, ADCON0 e ADCON1 registros. Desde RA2/AN2 usado como entrada analgica, o bit ANSEL correspondente deve ser definido. Em ADCON0 registo, defina CHS1 e clara CHS0 e CHS2, de modo que o canal de AN2 ser ligado ao Exemplo interno e reter circuito. Limpar o bit VCFG em ADCON0 ir seleccionar a tenso de alimentao (+5 V) como a tenso de referncia para converso A / D. O registo ADCON1 usado para selecionar a fonte de clock para converso A / D. No entanto, a Pro MikroC para PIC tem uma funo de biblioteca built-in chamado ADC_Read () que, por padro, usa o relgio interno RC para operao ADC. Ento voc no precisa inicializar o registo ADCON1. O programa completo dado abaixo. /* Laboratrio 5: analgico-digital conversor Oscilador Interno @ 4MHz, MCLR Enabled, PWRT Enabled, WDT OFF Copyright @ Rajendra Bhatt 10 de outubro de 2010 */ / / LCD conexes do mdulo LCD_RS SBIT em RC4_bit; SBIT LCD_EN em RC5_bit; SBIT LCD_D4 em RC0_bit;

SBIT LCD_D5 em RC1_bit; SBIT LCD_D6 em RC2_bit; SBIT LCD_D7 em RC3_bit; LCD_RS_Direction SBIT em TRISC4_bit; LCD_EN_Direction SBIT em TRISC5_bit; LCD_D4_Direction SBIT em TRISC0_bit; LCD_D5_Direction SBIT em TRISC1_bit; LCD_D6_Direction SBIT em TRISC2_bit; LCD_D7_Direction SBIT em TRISC3_bit; / / Fim conexes do mdulo LCD / / Define Mensagens caractere message1 [] = "Valor ADC ="; char * temp = "0000"; ADC_Value unsigned int; void main () { ANSEL = 0b00000100 / / RA2/AN2 a entrada analgica ADCON0 = 0b00001000 / / Analgico canal select @ AN2 CMCON0 = 0x07; / Disbale / comparadores TRISC = 0b00000000 / / PORTC Todas as sadas TRISA = 0b00001100 / / PORTA Todas as sadas, excepto RA3 RA2 e Lcd_Init () / / Inicializar LCD Lcd_Cmd (_LCD_CLEAR); display / / CLEAR Lcd_Cmd (_LCD_CURSOR_OFF); / Cursor / off Lcd_Out (1,1, message1) / / Escreva message1 na 1 fila fazer { adc_value = ADC_Read (2); temp [0] = adc_value/1000 + 48 / / Adicionar 48 para obter o valor de caracteres ASCII temp [1] = (adc_value/100) 10% + 48; temp [2] = (adc_value/10) 10% + 48; temp [3] = adc_value 10% + 48; Lcd_Out (1,11, temp); Delay_ms (2000); } While (1); } Baixar arquivo HEX

Carregando o arquivo HEX com a minha mo programador PIC iCP01. Sada Varie o potencimetro e voc ver o resultado da converso de 10-bit tambm variam proporcionalmente 0-1023.

Interface de carter LCD


Descrio HD44780 monitores LCD baseados so muito populares entre os amadores, porque eles so baratos e podem exibir caracteres. Alm disso, eles so muito fceis de interface com microcontroladores e mais da atual alto nvel compiladores tm rotinas embutido biblioteca para eles. Hoje, veremos como integrar um LCD HD44780 personagem baseada em um microcontrolador PIC16F688. A interface requer 6 linhas I / O do microcontrolador PIC16F688: 4 linhas de dados e 2 linhas de controlo. Uma mensagem de teste piscando, "Welcome to Embedded-Lab.com", ser exibida na tela LCD. Teoria Obrigatrio Todos os HD44780 exibe caracteres baseados em LCD so conectados atravs de 14 pinos: 8 pinos de dados (D0-D7), 3 pinos de controle (RS, E, R / W) e trs linhas de alta tenso (VDD, VSS, Vee). Alguns LCDs tm LED backlight caracterstica que ajuda a ler os dados na tela durante condies de baixa iluminao. Ento eles tm duas conexes adicionais (LED + e LED), tornando completamente pino 16. Um pino 16-mdulo de LCD com a sua diagraam pino mostrado abaixo.

Pinos de controle O controle pino RS determina se a transferncia de dados entre o mdulo de LCD e um microcontrolador externo so dados de caracteres reais ou comando / status. Quando o microcontrolador necessita de enviar comandos para LCD ou para ler o estado de LCD, ele deve ser puxado para baixo. Da mesma forma, este deve ser puxado de alta se os dados de caracteres para ser enviado para ea partir do mdulo de LCD. A direco de transferncia de dados controlada pelo pino R / W. Se ele puxado para baixo, os comandos ou dados de caracteres so escritos para o mdulo de LCD. E, quando puxado para alto, os dados de caracteres ou informaes de estado a partir de registos de LCD lido.Aqui, vamos usar uma forma de transferncia de dados, ou seja, a partir de microcontrolador para LCD mdulo, de modo que o pino R / W ser aterrada permanentemente. O pino de habilitao (E) inicia a transferncia de dados reais. Quando escrito para o visor LCD, os dados so transferidos apenas sobre a transio alto a baixo do pino de E. Pinos de alimentao Embora a maioria das folhas de dados do mdulo LCD recomendam +5 V dc oferta para a operao, alguns LCDs pode funcionar bem para uma gama mais ampla (3,0 a 5,5 V). O pino Vdd deve ser ligado fonte de alimentao positiva e Vss para o solo. O pino 3 Vee, que usado para ajustar o contraste da exibio. Na maioria dos casos, este pino est ligado a uma tenso entre 0 e 2V usando um potencimetro predefinida.

Pinos de dados pinos 7 a 14 so as linhas de dados (D0-D7). A transferncia de dados de e para o visor pode ser alcanada quer em 8 bits ou 4 bits. O modo de 8 bits utiliza todos os oito linhas de dados para transferir um byte, enquanto que, num modo de 4-bits, um byte transferido como dois nibbles de 4 bits. No caso mais tarde, apenas os superiores 4 linhas de dados (D4-D7) so utilizados. Esta tcnica benfico pois isso salva 4 de entrada / sada dos pinos de microcontrolador. Ns iremos usar o modo de 4-bit. Para mais detalhes sobre LCDs, eu recomendo a leitura destes dois primeiros artigos da revista eletrnica diria Prtico: Como usar inteligente LCDs Parte 1 e Parte 2 . Diagrama de Circuito A transferncia de dados entre o MCU eo mdulo de LCD ir ocorrer no modo de 4 bits. O pino de R / W (5) do mdulo de LCD est permanentemente terra, como no haver quaisquer dados lidos a partir do mdulo de LCD. RC0-RC3 serve as linhas 4-bits de dados (D4-D7, dos pinos 11-14) do mdulo de LCD. Linhas de controlo, RS e E, esto ligados a RC4 e RC5. Assim, no total 6 de E / S pinos dos PIC16F688 microcontroladores so utilizados pelo mdulo de LCD.O ajuste de contraste feito com um potencimetro 5K como mostrado abaixo. Se o seu mdulo de LCD tem iluminao LED, utilize uma resistncia 68 em srie com o pino 15 ou 16 para limitar a corrente atravs do LED. O detalhe do diagrama de circuito mostrado abaixo.

O circuito de todo construdo sobre a placa de montagem mostrado abaixo. Se voc quiser reduzir algumas das conexes dos cabos na breadboard e poupar algum espao, voc pode construir o meu primeiro mdulo breadboard PIC16F688 , e depois inseri-lo na breadboard (mostrado nas fotos a seguir).

LCD interface com PIC16F688 Mdulo Breadboard

Software Os dados de LCD e linhas de controle so acionados por PORTC, por isso deve ser definida como porta de sada (TRISC = 0). Voc precisa desabilitar as funes de comparao (CMCON0 = 7), e selecione todos os pinos de I / O como digital (ANSEL = 0). A programao de um LCD HD44780 um procedimento complexo pouquinho, pois exige um timing preciso e boa seqncia de sinais de controle e vrios comandos. Mas, felizmente, o Pro MikroC para PIC compilador tem rotinas embutido biblioteca para se comunicar com um padro de mdulo de LCD HD44780 base usando o modo de 4 bits. Isso torna a programao muito mais fcil. Antes de utilizar as funes built-in para o LCD, as conexes de pinos de LCD para os microcontroladores PIC deve ser definido. Os comentrios so fornecidos no cdigo fonte para entender como usar as rotinas de biblioteca para LCDs no MikroC Pro para PIC. /* Laboratrio 4: Mensagem Blink Personagem em LCD Relgio interno @ 4MHz, MCLR Enabled, PWRT Enabled, WDT OFF Copyright @ Rajendra Bhatt 9 de outubro de 2010 */ / / Definir conexes do mdulo LCD. LCD_RS SBIT em RC4_bit; SBIT LCD_EN em RC5_bit; SBIT LCD_D4 em RC0_bit; SBIT LCD_D5 em RC1_bit; SBIT LCD_D6 em RC2_bit;

SBIT LCD_D7 em RC3_bit; LCD_RS_Direction SBIT em TRISC4_bit; LCD_EN_Direction SBIT em TRISC5_bit; LCD_D4_Direction SBIT em TRISC0_bit; LCD_D5_Direction SBIT em TRISC1_bit; LCD_D6_Direction SBIT em TRISC2_bit; LCD_D7_Direction SBIT em TRISC3_bit; / End / LCD definio de conexo do mdulo / / Define Mensagens caractere message1 [] = "Bem-vindo ao"; caractere message2 [] = "Embedded-Lab.com"; void main () { ANSEL = 0b00000000 / / Todos os pinos de I / O so configurados como digital CMCON0 = 0x07; / Disbale / comparadores TRISC = 0b00000000 / / PORTC Todas as sadas TRISA = 0b00000000 / / PORTA Todas as sadas, excepto RA3 Lcd_Init () / / Inicializar LCD fazer { Lcd_Cmd (_LCD_CLEAR); display / / CLEAR Lcd_Cmd (_LCD_CURSOR_OFF); / Cursor / off Lcd_Out (1,4 e message1) / / Escreva message1 na 1 fila Lcd_Out (2,1, message2) / / Escreva message2 em 2 fila Delay_ms (1000); / / Espera por 1 segundo Lcd_Cmd (_LCD_CLEAR); display / / Limpar Delay_ms (1000); / / Espera por 1 segundo } While (1); / / Loop Infinito } Baixar arquivo HEX Sada Depois que o arquivo hex carregado no microcontrolador PIC16F688, eo poder est ligado, voc ver a mensagem "Welcome to Embedded-Lab.com", no visor LCD, a piscar a cada segundo.

Potrebbero piacerti anche