Ai galera preciso de um Programa em Linguagem C para uso do módulo de reconhecimento de voz SPCE061A com PIC18F4550,alguem poderia ajudar??
Tags:
Você tem um shield com esse CI?
Olá Jucelei Freitas.Tenho sim,é a mesma usada com um arduino no blog
http://labdegaragem.com/profiles/blogs/reconhecimento-de-voz-spce06...
Você precisa estudar comunicação serial.. Esta bem fácil de se fazer, o artigo é muito bom.
Usa o CSS ou C18?
CSS
Cara,
Não sei se vc chegou a ver o post do blog sobre este shield, a explicação está ótima no post e bem detalhada.
O que vc vai precisar vc para usar ele com o pic é:
Habilitar a comunicação Rx/TX do pic;
Gravar as frases e verificar a saida.
No post a saida em Hexa, ai basta fazer um switch/case e mandar ver!
Qual a melhor forma que posso te ajudar?
Tipo Julio Henrique eu fiz este programa e simulei no proteus.O único problema é que se eu enviar um dado na serial com mais ou menos que 3 caracteres o programa não aciona o led mais quando chega o comando "0x11" que é para ligar o led.Se eu enviar somente 3 caracteres por vez para o pic ele aciona o led quando chega o comando "0x11",mas quando eu mandar mais de 3 ele para de acionar.
#include <18F4550.h>
#device adc=10
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#use delay(clock=20000000)
/*******************************************************************
********************Configura comunicação serial********************
********************************************************************/
#use rs232(baud = 9600, parity = N, xmit = PIN_B5, rcv = PIN_B6, bits = 8)
/********************************************************************/
//Variaveis
char n1,n2,n3,n4;
void main()
{
setup_adc_ports(NO_ANALOGS|VSS_VDD);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
//Abre a comunicação com a placa de reconhecimento de voz
printf("0xAA\r");
printf("0x37\r");
delay_ms(1000);
printf("0xAA\r");
printf("0x21\r");
while (true) // Loop infinito do programa
{
while(kbhit()==1){
n1=getc();
n2=getc();
n3=getc();
n4=getc();
//Comando de voz "Liga"
if (n1=='0' && n2=='x' && n3=='1' && n4=='1'){
output_high(pin_D1);
}
//Comando de voz "Desliga"
if (n1=='0' && n2=='x' && n3=='1' && n4=='2'){
output_low(pin_D1);
}
}
}
}
Olá,
a passagem: printf("0xAA\r"); está escrito corretamente se o objetivo é enviar como string :"0xAA", por este motivo o compilador ao linkar não avisa erro de sintaxe. Sendo totalmente diferente do que o Sr. precisa que é enviar 170 em decimal ou 10101010 em binário.
A forma de fazer isso utilizando boas práticas de programação em linguagem C é utilizar uma função para acessar estes valores que corresponde aos comandos do módulo.
att:JULIO
Coloquei em anexo o meu projeto,com o codigo fonte,a simulação no proteus e os programas para simulação da comunicação serial.
printf("0xAA\r");
printf("0x37\r");
delay_ms(1000);
printf("0xAA\r");
printf("0x21\r");
Essa parte do programa esta errado, esta convertendo o numero hexadecimal em string.
mas tipo como eu envio o valor em hexadecimal para a serial??
No caso teria que fazer uma conversão então de string para hexadecimal.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por