Ir ao conteúdo
  • Cadastre-se

Posts recomendados

Postado

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


 

  • Membro VIP
Postado
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...😁

Postado
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?

 

  • Membro VIP
Postado
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

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...