Autor Tema: Receber numero decimal com um pic  (Leído 3506 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado tretas

  • PIC10
  • *
  • Mensajes: 15
Receber numero decimal com um pic
« en: 25 de Octubre de 2009, 18:43:26 »
Ola,

estou tentando usar um pic 16f877 para gerir a temperatura de um aquecedor ... até aqui nenhum problema (para a minha primeira aplicação) até parecia mentira.
O problema começou quando quis enviar a temperatura com hypertermeninal pois se enviar A para 10 graus ...

if ( consg == 'A')
{
consg_temp = 10;
printf (" nn Nova Consigna de Temperatura >> %dn", consg_temp);
break;
}

consigo receber bem...

Mas que eu queria era enviar 10 com o hyperterminal e ser o pic a tratar da conversão ascii decimal, já tentei usar a função ATOI() mas sem sucesso ... que estarei eu a fazer de mal

PS: estou usando o compilador ccs

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Receber numero decimal com um pic
« Respuesta #1 en: 25 de Octubre de 2009, 22:59:28 »
Bienvenido al foro tretas!

Para imprimir 10º puedes hacerlo así:


Código: C
  1. int onsg_temp;
  2.  
  3. if ( consg == 'A')
  4. {
  5.      consg_temp = 10;
  6.      printf ("\n\r Nova Consigna de Temperatura >> %uº", consg_temp);
  7. }

En la ayuda de CCS (F12) buscando printf, al final hay más ejemplos de como se puede usar los parámetros.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Receber numero decimal com um pic
« Respuesta #2 en: 25 de Octubre de 2009, 23:26:33 »
try this
Código: [Seleccionar]
char s[8];
int temp=0;

gets(s);
temp=atoi(s);

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado tretas

  • PIC10
  • *
  • Mensajes: 15
Re: Receber numero decimal com um pic
« Respuesta #3 en: 07 de Noviembre de 2009, 17:53:21 »
ola,


acabei de testar o vosso codigo com o ccs e nada :(


#int_RDA

void RDA_isr()
{

char s[2];
int temp =0;

  gets(s);
  temp = atoi(s);

    consg_temp_chaudiere = temp;
    printf (" \r\n\n Nova Consigna de Temperatura >> %d\n",  consg_temp_chaudiere);
       
}


o programa simplesmente bloquei como esteja a espera de mais caracteres

ps : estou a usar o programa siow.exe que vem com o ccs para ver toda a comunicação

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: Receber numero decimal com um pic
« Respuesta #4 en: 09 de Noviembre de 2009, 11:50:23 »
hola  aver prueva con esto:

Código: [Seleccionar]
int lectura;

#int_RDA
void RDA_isr(){
int temp=0;

if(kbhit()){

lectura=getc;
}
temp=atoi(lectura);
printf("\r\n\n nova consigna de temperatura %d",temp)
}
« Última modificación: 09 de Noviembre de 2009, 11:55:04 por japifer_22 »

Desconectado tretas

  • PIC10
  • *
  • Mensajes: 15
Re: Receber numero decimal com um pic
« Respuesta #5 en: 13 de Noviembre de 2009, 18:04:48 »
Ola,

japifer_22 não funciona "temp"  é sempre = a 0 :(

nova consigna de temperatura 0

Gracias

Tretas


Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Receber numero decimal com um pic
« Respuesta #6 en: 13 de Noviembre de 2009, 22:21:49 »
Hola.

Código: C#
  1. char dataRS232=0;
  2. #int_RDA
  3. void Serial_isr(void)
  4. {
  5.  dataRS232=0;
  6.  if(kbhit)
  7.  {
  8.   dataRS232=getc();
  9.  }
  10. }
  11.  
  12. int consg_temp;
  13.  
  14. void main (void)
  15. {
  16.   while(true)
  17.   {
  18.    if ( dataRS232 == 'A')
  19.    {
  20.      consg_temp = 10;
  21.      printf ("\n\r Nova Consigna de Temperatura >> %uº", consg_temp);
  22.      dataRS232=0;
  23.    }
  24.   }
  25. }

Saludos
El papel lo aguanta todo

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Receber numero decimal com um pic
« Respuesta #7 en: 13 de Noviembre de 2009, 22:30:28 »
Todavia no entiendo si los datos los esta recibiendo en ASCII o directamente en decimal. Y si siempre recibe 0 me parece q es otro el problema :S

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Receber numero decimal com um pic
« Respuesta #8 en: 14 de Noviembre de 2009, 00:10:15 »
Podria hacerse así entonces:

Código: C#
  1. char dataRS232=0;
  2. int8 contador=0;
  3. char Buffer[5]="\0";
  4. int8 Temp=0;
  5.  
  6. #int_RDA
  7. void Serial_isr(void)
  8. {
  9.  dataRS232=0;
  10.  if(kbhit)
  11.  {
  12.   dataRS232=getc();
  13.   if(dataRS232!='\r')
  14.     Buffer[contador++]=dataRS232;
  15.  }
  16. }
  17.  
  18. void main (void)
  19. {
  20.   while(true)
  21.   {
  22.    if ( dataRS232 == '\r')
  23.    {
  24.      Temp = atoi(Buffer);
  25.      printf ("\n\r Nova Consigna de Temperatura >> %uº", Temp);
  26.      dataRS232 = 0;
  27.      Temp = 0;
  28.    }
  29.   }
  30. }

El papel lo aguanta todo

Desconectado tretas

  • PIC10
  • *
  • Mensajes: 15
Re: Receber numero decimal com um pic
« Respuesta #9 en: 19 de Noviembre de 2009, 16:56:47 »
Ola,

com o seguinte codigo o PIC não recebe nenhum dado... o programa apenas corre

  printf ("\n\r DEBUG while");
  delay_ms(1000);
 

PS: para enviar os dados estou a usar o siow do ccs

Código: [Seleccionar]

#include <16f877A.h>
#fuses NOWDT,XT, PUT, NOPROTECT, BROWNOUT, LVP, NOCPD, NOWRT, NODEBUG
#use delay(clock=8000000) // para o 16f877A
#use rs232(baud=19200, parity=N, xmit=PIN_C6, rcv=PIN_C7, STOP=1, BITS=8)
#include <stdlib.h>


char dataRS232=0;
int8 contador=0;
char Buffer[5]="\0";
int8 Temp=0;
 
#int_RDA
void Serial_isr(void)
{
 
  printf ("\n\r DEBUG Serial_isr");
 
 dataRS232=0;
 if(kbhit())
 {
  dataRS232=getc();
  if(dataRS232!='\r')
    Buffer[contador++]=dataRS232;
 }
}
 
void main (void)
{
  while(true)
  {
 
  printf ("\n\r DEBUG while");
  delay_ms(1000);
 
  if ( dataRS232 == '\r')
   {
     printf ("\n\r DEBUG 1");
     Temp = atoi(Buffer);
     printf ("\n\r Nova Consigna de Temperatura >> %uº", Temp);
     dataRS232 = 0;
     Temp = 0;
      printf ("\n\r DEBUG 1");
   }
  }
}



Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Receber numero decimal com um pic
« Respuesta #10 en: 20 de Noviembre de 2009, 00:11:21 »
Hola.

No pongas la funcion printf() dentro de la interrupcion, ya que toma mucho tiempo y te genera errores.
El papel lo aguanta todo

Desconectado tretas

  • PIC10
  • *
  • Mensajes: 15
Re: Receber numero decimal com um pic
« Respuesta #11 en: 20 de Noviembre de 2009, 14:55:46 »
ola,
Código: [Seleccionar]
printf ("\n\r DEBUG Serial_isr");

era apenas para debugar para ver se entrava dentro da função mas com o
Código: [Seleccionar]
printf ("\n\r DEBUG Serial_isr");printf ("\n\r DEBUG Serial_isr")o resultado é o mesmo ... não funciona :(

Cumprimentos


 

anything