Autor Tema: Otro problema con 3BCD2BIN8BITS en PIC16F876A  (Leído 1771 veces)

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

Desconectado AcoranTf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1093
Otro problema con 3BCD2BIN8BITS en PIC16F876A
« en: 26 de Junio de 2011, 19:04:51 »
Bueno hace unos dias comente que ya habia solucionado el problema, pero solo lo habia probado en el simulador de Proteus. Al realizar el circuito real, no funciona correctamente.
He revisado mil veces el mini programa y no veo error alguno. Tambien he revisado y chequeado el hardware y esta correcto. Para chequear el hard, hice dos programitas que lo unico que hacen es uno crea un contador desde 1 hasta 255 y lo saca por la salida, que monitorizo con leds. El otro simplemente enciende alternativamente los leds pares e impares y ambos programas funcionan 100 %.
El problema que tengo con el programa que debo utilizar es que al encender la placa y teniendo todos los preselectores a 0, aparece ya con un "offset" o sea tiene unas salidas activadas, cuando no deberia ser asi y a esas salidas, le va sumando el valor que ponga en los preselectores.
He llegado a pensar que pueda ser un bug del CCS, ya que no veo otra razon por ningun lado. Por ello os queria pedir el favor de que me compilen el codigo que adjunto a continuacion, con CCS de versiones distintas a la 4.88, que es la que yo tengo y me envien el HEX a mi correo, (acorantf@yaitana.es). Se lo agradecere mucho.
Si quieren simularlo o verlo mejor, en el enlace de abajo esta el proyecto de Proteus.

Saludos.

P.D.: Codigo a compilar:

#include <16f876a.h>

//#device  ADC = 10     

#fuses HS       

// #fuses NOPUT                     

#fuses NOBROWNOUT

#fuses NOWDT

// #fuses NOMCLR               

#fuses NOPROTECT                                       

#use delay(clock = 4000000)       

//#use rs232(baud=9600, xmit=PIN_E2,rcv=PIN_E3)



#use fast_io(A)                       

#use fast_io(B)                       

#use fast_io(C)



int8 uni = 0;

int8 dec = 0;

int8 cent = 0;

int8 unidec = 0;

int8 salida = 0;





void main()             

 {               

    set_tris_a (63);

    set_tris_b (0);

    set_tris_c (255);                         

                                                                                                         
   output_b(salida);


                                 

    while(true)                         

      {                                                         

   unidec = input_c();

   cent = input_a();

   dec = unidec & 0x0F;

   uni = unidec >> 4;

   salida = uni + (dec * 10) + (cent * 100);
   
   salida = ~salida ;

   output_b(salida);

                         

      }

 }





Hola de nuevo, estoy realizando un convertidor de 3 preselectores BCD a una salida binaria de 8 bits, (para representar numeros entre 0 y 255), he utilizado el PIC16F876 y el codigo y esquema que adjunto. El codigo compila perfectamente en el CCS 4.088 y simula en el Proteus 7.6, pero el resultado no es el correcto.
Probando los preselectores por separado tengo lo siguiente: el de las centenas va bien, tanto en 0, 1 y 2, (0, 100 y 200), el de las decenas y las unidades van bien con las cifras del 0 al 7, pero al 8 y al 9 le suma una unidad de mas. Igualmente al utilizar numeros en los que intervengan dos o las tres cifras el resultado es incoherente.
¿Me podriais echar una mano a ver en que me he equivocado?
Gracias de antemano.

Saludos.

3BCD2BIN8BITS.rar
« Última modificación: 29 de Junio de 2011, 11:22:43 por AcoranTf »

Desconectado AcoranTf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1093
(Solucionado) Problema con 3BCD2BIN8BITS en PIC16F876A
« Respuesta #1 en: 26 de Junio de 2011, 20:13:45 »
Me respondo a mi mismo. Habia un error inicialmente y era que los digitos de decenas y unidades estaban intercambiados, (si mirais el codigo vereis los comentarios cambiados de linea) y antes de darme cuenta de eso, yo habia cambiado el bit a partir del que se toma el nible alto a 3 en lugar de 4, (lo podeis ver en el codigo), de tal modo que cuando me di cuenta que las cifras estaban intercambiadas y lo corregi, aun quedo mal lo del nible.
Una vez colocado su valor correcto de 4, todo funciona correctamente.
Igual seria util poner la funcion en la coleccion de funciones favoritas. Si RedPic lee esto que el lo decida.

Saludos.

Desconectado AcoranTf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1093
Re: Otro problema con 3BCD2BIN8BITS en PIC16F876A
« Respuesta #2 en: 29 de Junio de 2011, 11:24:46 »
Esto es solo para subirlo y que lo lean de nuevo.