Autor Tema: Problema al convertir array de Bits en BCD  (Leído 1606 veces)

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

Desconectado emmanuelap

  • PIC10
  • *
  • Mensajes: 6
Problema al convertir array de Bits en BCD
« en: 09 de Octubre de 2014, 02:23:50 »
Buenas noches compañeros, estoy intentado convertir unos datos capturados y almacenados en un array, a su equivalente bcd. Pero el resultado es un disparate y no comprendo por que, espero alguno de uds tenga una perspectiva mas esclarecedora. El siguiente código debería arrojar como resultado una suma de 255. Desde ya agradezco este espacio.
Codigo:

#include <16F877A.H>
#fuses HS, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use delay(clock = 20000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8, parity=N)

void main()
{
int j=0;
char dato[8]={'1','1','1','1','1','1','1','1'};
int fcode=0;
int pot=0;

printf("\r\f\nDato = %s\n",dato);
         
    for(j=0;j<=7;j++)
    {
         if(dato[j]=='1')
         {
         pot=(2^j);
         fcode=fcode+pot;
         }
         printf(" \nbit = %u pot = %u  Suma = %u ",j,pot,fcode);
    }

j=0;
fcode=0;
pot=0;


Resultado :
{FF}
Dato = 11111111
 
bit = 0 pot = 2  Suma = 2 
bit = 1 pot = 3  Suma = 5 
bit = 2 pot = 0  Suma = 5 
bit = 3 pot = 1  Suma = 6 
bit = 4 pot = 6  Suma = 12 
bit = 5 pot = 7  Suma = 19 
bit = 6 pot = 4  Suma = 23 
bit = 7 pot = 5  Suma = 2

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Problema al convertir array de Bits en BCD
« Respuesta #1 en: 09 de Octubre de 2014, 09:27:22 »
no seria mas facil:

if(dato[j]=='1') fcode|=1<<j;
else fcode&=~(1<<j);


Desconectado emmanuelap

  • PIC10
  • *
  • Mensajes: 6
Re: Problema al convertir array de Bits en BCD
« Respuesta #2 en: 09 de Octubre de 2014, 17:59:28 »
Muchas gracias por el aporte MerLiNz, estoy tratando de interpretar como con las compuertas lógicas logras el resultado. Sin embargo, el cogido y la salida quedaron de la siguiente manera:
Espero alguien logre entender por que envía este tipo de dato tan extraño, cuando comienza con la lógica correcta. Saludos

void main()
{
int j=0;
char dato[8]={'1','1','1','1','1','1','1','1'};
int fcode=0;

printf("\r\f\nDato = %s\n",dato);
         
         for(j=0;j<=7;j++)
            {
            if(dato[j]=='1') fcode|=1<<j;
            else fcode&=~(1<<j);
            printf(" \nbit = %u  Suma = %u ",j,fcode);
            }
           
printf(" \nTotal = %u ",fcode);         
j=0;
fcode=0;
}


Resultado:
{FF}
Dato = 11111111
 
bit = 0  Suma = 1 
bit = 1  Suma = 3 
bit = 2  Suma = 7 
bit = 3  Suma = ? 
bit = 4  Suma = O 
bit = 5  Suma = o 
bit = 6  Suma = 10K 
bit = 7  Suma = 20g 
Total = 20

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Problema al convertir array de Bits en BCD
« Respuesta #3 en: 09 de Octubre de 2014, 18:07:57 »
prueba a poner unsigned int fcode=0;

Desconectado emmanuelap

  • PIC10
  • *
  • Mensajes: 6
Re: Problema al convertir array de Bits en BCD
« Respuesta #4 en: 09 de Octubre de 2014, 18:26:47 »
Gracias por la inmediata respuesta !! Continua haciendo exactamente lo mismo, también probé con long, char, int16, pero no modifica el resultado. Se te ocurre algún plan B para dar sentido a esa tira de bits en bcd?

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Problema al convertir array de Bits en BCD
« Respuesta #5 en: 09 de Octubre de 2014, 18:32:35 »
del 1 al 7 esta bien, pero lo demas nose, salen caracteres extraños, prueba a poner fcode=0b1111; y ver si te imprime tambien esos caracteres tan extraños, quizas sea problema del printf

Desconectado emmanuelap

  • PIC10
  • *
  • Mensajes: 6
Re: Problema al convertir array de Bits en BCD
« Respuesta #6 en: 09 de Octubre de 2014, 19:05:23 »
El asunto es MerLiNz, que estoy capturando el tren de pulsos de un lector Wiegand, logro esa captura y guardarla en un array, pero al convertirla en BCD me pasaba esto tan extraño, por eso asile el bloque e intente hacer una rutina que decodifique ese array de bits. De tal manera que no me serviría tenerlo como (fcode=0b1111;) ya que no seria el caso practico que deseo resolver. Lo que no entiendo es, si la logica esta correcta, por que envia caracteres especiales.


Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Problema al convertir array de Bits en BCD
« Respuesta #7 en: 09 de Octubre de 2014, 19:43:42 »
ahi es donde queria llegar, debes ir probando opciones para ver porque te modifica eso, si pones eso, la variable contiene ese valor, y te imprime mal pues es problema del printf. Si estas haciendo debug deberias ver que valor va tomando la  variable segun el ciclo y verificar que toma su valor correcto.

Desconectado emmanuelap

  • PIC10
  • *
  • Mensajes: 6
Re: Problema al convertir array de Bits en BCD
« Respuesta #8 en: 09 de Octubre de 2014, 21:09:07 »
Sabes a que puede deberse ese error en la función printf? en otros programas funciona correctamente

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Problema al convertir array de Bits en BCD
« Respuesta #9 en: 12 de Octubre de 2014, 20:56:43 »
Proba con:

char fcode=0;
char pot=0;

Algunos printf son celosos con los tipos.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado inventor1967

  • PIC10
  • *
  • Mensajes: 15
Re: Problema al convertir array de Bits en BCD
« Respuesta #10 en: 12 de Octubre de 2014, 22:41:30 »
Muchas gracias por el aporte MerLiNz, estoy tratando de interpretar como con las compuertas lógicas logras el resultado. Sin embargo, el cogido y la salida quedaron de la siguiente manera:
Espero alguien logre entender por que envía este tipo de dato tan extraño, cuando comienza con la lógica correcta. Saludos

void main()
{
int j=0;
char dato[8]={'1','1','1','1','1','1','1','1'};
int fcode=0;

printf("\r\f\nDato = %s\n",dato);
         
         for(j=0;j<=7;j++)
            {
            if(dato[j]=='1') fcode|=1<<j;
            else fcode&=~(1<<j);
            printf(" \nbit = %u  Suma = %u ",j,fcode);
            }
           
printf(" \nTotal = %u ",fcode);         
j=0;
fcode=0;
}


Resultado:
{FF}
Dato = 11111111
 
bit = 0  Suma = 1 
bit = 1  Suma = 3 
bit = 2  Suma = 7 
bit = 3  Suma = ? 
bit = 4  Suma = O 
bit = 5  Suma = o 
bit = 6  Suma = 10K 
bit = 7  Suma = 20g 
Total = 20

Parece ser que el código esta funcionando bien, poco se de C, pero lo que veo es que se están sumando las potencias de 2 0K,
1+2=3
3+4=7 hasta aquí no hay problema porque coincide con BCD
7+8=15 que es mayor que 10 de acuerdo?
desde aquí viene la jugada del ingeniero,
a la suma se le resta 10, 15 -10=5 ese es el valor en la unidad
y se sabe que se lleva un acarreo de 1
valor: 1 decena y 5 unidades,
así sucesivamente, los caracteres que aparecen después de 7 parecen ser los caracteres ASCII de la suma por tanto el código cumple con su función. Hice algo parecido para visualizar la cuenta de un frecuencimetro pero en assembler.

Desconectado emmanuelap

  • PIC10
  • *
  • Mensajes: 6
Re: Problema al convertir array de Bits en BCD
« Respuesta #11 en: 14 de Octubre de 2014, 10:47:11 »
Excelente aporte inventor1967, de ser asi, debería ir separando unidad, decena, etc etc.?
Por q no logro modificar el código para visualizar correctamente esos valores.
Se debe a los tipos de las variables?

Desconectado inventor1967

  • PIC10
  • *
  • Mensajes: 15
Re: Problema al convertir array de Bits en BCD
« Respuesta #12 en: 14 de Octubre de 2014, 18:01:34 »
Efectivamente, en C no hay una función que cambie de base numérica?