Ai galera preciso de um Programa em Linguagem C para uso do módulo de reconhecimento de voz SPCE061A com PIC18F4550,alguem poderia ajudar??

Ai galera preciso de um Programa em Linguagem C para uso do módulo de reconhecimento de voz SPCE061A com PIC18F4550,alguem poderia ajudar??

Exibições: 1432

Anexos

Responder esta

Respostas a este tópico

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.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço