TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: nahueldiaz1992 en 10 de Febrero de 2016, 01:06:12

Título: Conversion de binario a decimal para 7 segmentos xc8
Publicado por: nahueldiaz1992 en 10 de Febrero de 2016, 01:06:12
Hola , buenas noches , en el proyecto que estoy haciendo tomo el valor en binario del adc y lo muestro en dos 7 segmentos , la cuestion es que no encuentro codigo que pueda comprender para realizar la conversion de uno a otro . alguien sabe de un codigo o forma en la que pueda hacerlo
??
Título: Re:Conversion de binario a decimal para 7 segmentos xc8
Publicado por: KILLERJC en 10 de Febrero de 2016, 01:11:59
El ADC posee 8/10 bits, por lo cual si queres pasar ese valor a decimal necesitarias 3/4 displays , con 8 bits para representar de 0 a 255, y con 10 de 0 a 1024.

Y Aqui mi pregunta... ¿ Es eso lo que queres hacer, sabiendo que con 2 displays no vas a poder representar todos los valores ?.

O estas buscando hacer algo que te de un valor de 0 a 99 % ¿?
Título: Re:Conversion de binario a decimal para 7 segmentos xc8
Publicado por: nahueldiaz1992 en 10 de Febrero de 2016, 16:39:18
en realidad la idea era solo representar de 0 a 1024 en 3 displays 7 segmentos , si , se que no voy a poder representar todos los valores , igualmente solo querria saber un metodo para realizar la conversion dando un resultado decimal con 3 digitos de aprox. osea 5,00 ej.
Título: Re:Conversion de binario a decimal para 7 segmentos xc8
Publicado por: KILLERJC en 10 de Febrero de 2016, 18:20:50
Tenes 2 formas de hacerlo.. las simple a vista seria:

Código: C
  1. valor = xxxxx;
  2.  
  3. milesima = valor / 1000;
  4. valor = valor % 1000;
  5. centena = valor / 100;
  6. valor = valor % 100;
  7. decena = valor / 10;
  8. unidad = valor % 10;

El tema es el costo computacional de la division y el modulo, Y tal ves lo mejor sea restas sucesivas, solo hasta 999:

Código: C
  1. for(milesima=0;milesima<10 && valor > 1000;milesima++,valor-=1000);
  2.         for(centena=0;centena<10 && valor > 100;centena++,valor-=100);
  3.         for(decena=0;decena<10 && valor > 10;decena++,valor-=10);
  4.         unidad=valor;

Eso es lo mismo que esto:

Código: C
  1. milesima=0;
  2.         centena=0;
  3.         decena=0;
  4.         unidad=0;
  5.  
  6.         while(valor>1000 && milesima<10)
  7.         {
  8.             milesima++;
  9.             valor-=1000;
  10.         }
  11.         while(valor>100 && centena<10)
  12.         {
  13.             centena++;
  14.             valor-=100;
  15.         }
  16.         while(valor>10 && decena<10)
  17.         {
  18.             decena++;
  19.             valor-=10;
  20.         }
  21.         unidad = valor;