TODOPIC

Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: Camello83 en 04 de Diciembre de 2010, 09:58:27

Título: Como se concatenan dos bytes
Publicado por: Camello83 en 04 de Diciembre de 2010, 09:58:27
Hola estoy empezando con los micro y ya estoy trabado :oops: resulta que tengo un pic 12f675 q tiene un conversor AD de 10 bits, mi pregunta basicamente es como leer el resultado dado q se guarda en dos bytes (ADRESH,ADRESL). desde ya muchas gracias! ;-)
Título: Re: Como se concatenan dos bytes
Publicado por: edu1989 en 04 de Diciembre de 2010, 11:56:47
Yo he hecho una pequeña funcion para esto:
Código: [Seleccionar]
unsigned char read_adc(void)
{
char buf[15];
int i=0;
int j=0;
int cont=0;

if( ADIF==1){ //An A/D conversion completed (must be cleared in software)
palabra_low= ADRESL;
palabra_high=ADRESH;
ADIF=0;
}  

for(i=0,i=7,i++)
{

if(palabra_low & 2^i)
buf[i] = '1';
else
   buf[i] = '0';
cont++;

if(cont==8)
j=8;
  
}              
            
for(j=8,j=15,j++)
{

if(palabra_high & 2^j)
buf[j] = '1';
else
  buf[j] = '0';
                
}    
return buf;
}

No se si esta bien, aun no me he parado a mirarla en question pero la idea ahi la tienes. Un saludo
Título: Re: Como se concatenan dos bytes
Publicado por: jim_17 en 04 de Diciembre de 2010, 12:32:42
No hace falta hacerlo tan complicado. Defines 1 variable de 16 bits, i haces lo siguiente:

variable = ADRESH<<8; desplazas 8 veces ADRESH
variable = variable+ADRESL;


Un Saludo.
Título: Re: Como se concatenan dos bytes
Publicado por: edu1989 en 04 de Diciembre de 2010, 13:00:01
Perfecto! Muchas gracias.
La variable la definiria como unsigned char * buffer, por ejemplo? ( creo que un unsigned char son 16bits...)

Adjunto mi codigo:
Código: [Seleccionar]
unsigned char read_adc(void)
{

GODONE=1; //A/D conversion in progress

if( ADIF==1){ //An A/D conversion completed (must be cleared in software)
buffer = ADRESH<<8;
buffer = buffer+ADRESL;
ADIF=0;
}   

return buffer;
}

buffer lo tengo declarado asi:
unsigned char * buffer;
Título: Re: Como se concatenan dos bytes
Publicado por: jim_17 en 04 de Diciembre de 2010, 13:54:53
Que compilador estas usando ?
Título: Re: Como se concatenan dos bytes
Publicado por: edu1989 en 04 de Diciembre de 2010, 13:57:20
Hi- Tech PICC-18 para el 18f4550
Título: Re: Como se concatenan dos bytes
Publicado por: AngelGris en 04 de Diciembre de 2010, 14:05:03
Perfecto! Muchas gracias.
La variable la definiria como unsigned char * buffer, por ejemplo? ( creo que un unsigned char son 16bits...)

Adjunto mi codigo:
Código: [Seleccionar]
unsigned char read_adc(void)
{

GODONE=1; //A/D conversion in progress

if( ADIF==1){ //An A/D conversion completed (must be cleared in software)
buffer = ADRESH<<8;
buffer = buffer+ADRESL;
ADIF=0;
}  

return buffer;
}

buffer lo tengo declarado asi:
unsigned char * buffer;

  No Edu, no uses el símbolo * porque eso indica que es un puntero.

  Para este caso, read_ADC tiene que devolver un tipo int, porque el conversor es de 10 bit y no entran en un char. Entonces usas un variable del tipo int para llamar a la función read_ADC

unsigned int valor_leido;            // variable que se usa para la lectura

unsigned int read_ADC(void)      // función que devuelve la lectura del ADC
{
  .....
  .....
  ....
  return ((ADRESH << 8 ) + (ADRESL));
}

y se utilizaría....

valor_leido = read_ADC();
Título: Re: Como se concatenan dos bytes
Publicado por: jim_17 en 04 de Diciembre de 2010, 14:33:54
Hola, tal y como ha dicho AngelGris para declarar una variable de 16 bits debes poner: unsigned int buffer ya que el char es para 8 bits.

Para hacer una rutina que sea read_adc yo haría lo siguiente:
Código: C
  1. unsigned int read_adc(void){
  2. GODONE=1;          // Activamos la conversion ADC
  3. while(ADIF==0);   // Espera hasta que la conversion ADC se haya completado
  4. ADIF=0;          // Limpiamos el flag de la conversion ADC
  5. return (ADRESH<<8)+ADRESL;  // Nos devuelve el valor de la conversion ADC
  6.  
  7. }

Para obtener el valor del ADC siguiendo esta funcion se haria de la siguiente manera:

Código: C
  1. unsigned int buffer;   // Se declara buffer como una variable unsigned int (para que sea de 16 bits)
  2. buffer=read_adc();

Título: Re: Como se concatenan dos bytes
Publicado por: mtristan en 04 de Diciembre de 2010, 17:37:17
.


No conozco nada de este lenguaje, pero si es un derivado del C ¿no existe el tipo union?
Código: C
  1. union dato
  2. {
  3. unsigned int var1;
  4. unsigned char[4]var2;
  5. };
Título: Re: Como se concatenan dos bytes
Publicado por: Camello83 en 04 de Diciembre de 2010, 21:09:37
Muchas gracias por su ayuda, pero el problema es que como recien estoy empezando uso assembler y no tengo un compilador en C, podrian ecplicarme como funciona y de ahi tratare de volcarlo a assembler...
Título: Re: Como se concatenan dos bytes
Publicado por: mtristan en 04 de Diciembre de 2010, 21:42:32
.


En assembler no hay tipos de datos, así que solamente se puede trabajar con valores de 8 bits  :? (en caso de que el uC sea de 8 bits, como este). La forma de manejar los datos depende de lo que quieras hacer con ellos...

Título: Re: Como se concatenan dos bytes
Publicado por: Camello83 en 04 de Diciembre de 2010, 22:43:59
Lo que estoy queriendo hacer es una medición de temperatura, el sensor es un LM35, la medición la ingreso al pic y realizo la conversión AD hasta ahi todo bien :) pero a ese valor lo quiero mostrar en una pantalla LCD, entoces lo que tengo que hacer es realizar una rutina que me entregue un valor en BCD, es decir un byte para centena, otro para decena y otro para unidad. Me dijeron que debo concatenar lo bytes del AD, Esto es así??
Título: Re: Como se concatenan dos bytes
Publicado por: Suky en 04 de Diciembre de 2010, 23:03:31
Lo que estoy queriendo hacer es una medición de temperatura, el sensor es un LM35, la medición la ingreso al pic y realizo la conversión AD hasta ahi todo bien :) pero a ese valor lo quiero mostrar en una pantalla LCD, entoces lo que tengo que hacer es realizar una rutina que me entregue un valor en BCD, es decir un byte para centena, otro para decena y otro para unidad. Me dijeron que debo concatenar lo bytes del AD, Esto es así??

Para convertir el valor del conversor (0-255 si es 8-bits, o 0-1023 si es 10-bits) a temperatura realizas una regla de tres simple. Luego el resultado lo puedes convertir a BCD. Por aquí hay rutinas necesarias:

http://www.todopic.com.ar/foros/index.php?topic=23812.msg213329#msg213329



Saludos!
Título: Re: Como se concatenan dos bytes
Publicado por: Camello83 en 05 de Diciembre de 2010, 00:34:00
Muchas gracias!!! muy buenas las rutinas, las probé con unos ejemplos numéricos y anda de diez :mrgreen: ahora voy a ponerlo en el micro, mientras vaya avanzando voy a ir subiendo los progresos!!!!!!
 :-/ :-/ :-/ :-/ :-/