Ir ao conteúdo
  • Cadastre-se

PIC Comunicação serial PIC HC05


Posts recomendados

Boa noite. Estou começando recentemente a programar em C e por algumas recomendações estou usando o CCS C compiler.

Estou fazendo um projetinho caseiro com PIC 18F4680 para enviar o RPM (pegando pulso da bobina) para o celular via bluetooth (usando o HC05). Fazendo uma breve pesquisa percebi que a comunicação serial tem a limitação de enviar 8bit's, e o valor do RPM convertido excede esses 8bit's. 

A ideia foi usar o timer1 e depois fazer uma conta matemática e obter o resultado em decimal, por exemplo, 2475 RPM, mas para enviar esse valor pelo serial não rolou, então tentei dividir por 100 (2475/100=24,75) e enviar, porém só transmito o 24 e o restante depois da virgula desaparece. Tentei algumas funções como, PUTC, vetor[] e etc, mas não tive sucesso.

A pergunta é: tem alguma forma mais simples de enviar esse valor?

PIC 18F4680

Desde já, agradeço. 

===================================================================================

#INT_EXT // Interrupção externa
void  EXT_isr(void) // Logica da contagem do timer
{
if (X = 1) // X variavel que recebe o pulso da bobina
{
RPM1 = get_timer1(); // Armazena a contagem do timer
set_timer1(5); // Degrau do timer 
CALC_RPM = (1/(RPM1*0.000001599))*60; // Calculo do RPM 
RPM = CALC_RPM; // Armazena o resultado do calculo do RPM
RPM_RS232 = (CALC_RPM/100); // Armazena o calculo do RPM e converte p/ ser enviado p/ SERIAL
}
else 
if (x = 0)
{
set_timer1(0);
}
}

=================================================================================

#INT_RDA  // Interrupção SERIAL (RS232)
void  RDA_isr(void) 
{
letra=getc();
switch (letra) //Armazena buffer vindo do RS232
{

case 'C':      //Se chegar 'C' da serial RS232, manda RPM p/ o painel
printf("\r\n%lu\r\n",RPM_RS232);
break; //Pausa


 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
9 horas atrás, HJArmando disse:

2475 RPM, mas para enviar esse valor pelo serial

Que tal algo como....

2475=0x09AB. Envie 0x9 e depois 0xAB e faça a recomposição no receptor. Algo como

 

enviaint(unsigned int i){
putc(i&0xff);
i>>=8;
putc(i);
}

unsigned int recebeint(){
unsigned int i;
i=getc();
i<<=8;
i|=getc();
return i;
}

Não explico...😁

Link para o comentário
Compartilhar em outros sites

10 horas atrás, .if disse:

Que tal algo como....

2475=0x09AB. Envie 0x9 e depois 0xAB e faça a recomposição no receptor. Algo como

 



enviaint(unsigned int i){
putc(i&0xff);
i>>=8;
putc(i);
}

unsigned int recebeint(){
unsigned int i;
i=getc();
i<<=8;
i|=getc();
return i;
}

Não explico...😁

Boa noite .if

Desde já agradeço sua ajuda. Fiz este teste e por algum motivo só apareceu as letras e não os numeros da conversão de inteiro para hexa, alem disso ficou aparecendo uns caracteres estranhos no terminal virtual (simulador proteus). 

Teria como separar o interio, por exemplo: 2475 e enviar o 24 e depois 75 ? sem conversão?

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP
11 horas atrás, HJArmando disse:

separar o interio, por exemplo: 2475 e enviar o 24 e depois 75

Pode até ter amigo mas acho que não te agregaria muito. Pra isso há a magia do sistema hexadecimal ao seu alcance. Este trabalha 'em blocos' pra facilitar sua vida pra estes casos. Tenta configurar o terminal pra imprimir em hexa. Pelo menos você vai sentir a magia da coisa operando.

E claro, não te esqueças de configurar corretamente o baud rate e afins.

E sabia que o proteus conversa com a serial de verdade do seu pc? Veja o componente COMPIN

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...