Autor Tema: RS232 visualizacion en 3 displays de 7 segmentos  (Leído 12734 veces)

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

Desconectado jmosorio

  • PIC10
  • *
  • Mensajes: 15
RS232 visualizacion en 3 displays de 7 segmentos
« en: 04 de Marzo de 2008, 13:59:00 »
hola
necesito tomar un dato del puerto serial, y poderlo visualizar en 3 displays de 7 segmentos usando un pic18f452

es posible hacer esto usando 1 solo puerto del pic para la visualizacion en los 3 displays?
en caso de no ser posible, y necesitar decodificadores de 7 segmentos, me podrian ayudar con el codigo?
me podrian ayudar con el codigo en C que me permita hacerlo?

gracias por la ayuda que me puedan prestar.

John

Desconectado Rulo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 168
Re: RS232 visualizacion en 3 displays de 7 segmentos
« Respuesta #1 en: 04 de Marzo de 2008, 15:22:17 »

     Si puedes hacerlo con un puerto de 8 bits, puedes utilizar un solo decodificador de esos que le das el dato en BCD osea que utilizarias 4 bits y necesitaras otros 3 bits para multiplexar los displays.

         Utiliza el buscador, seguro que por ahi encuentras algun ejemplo.

        Saludos.
« Última modificación: 04 de Marzo de 2008, 15:25:41 por Rulo »

Desconectado jmosorio

  • PIC10
  • *
  • Mensajes: 15
Re: RS232 visualizacion en 3 displays de 7 segmentos
« Respuesta #2 en: 04 de Marzo de 2008, 17:07:39 »
Ya mas o menos se como hacerlo, pero tengo una duda: al enviar el dato, no se modificarian todos los displays? es decir, si tengo el dato en el puerto, al cambiarlo, inicialmente cambiaria el display que yo habilite, pero el dato que se presentará en los otros cambiaria??
Si acaso es una pregunta estupida te pido disculpas  :)
otra cosa, me puedes ilustrar un poco con el codigo para la recepcion del dato del puerto serial?? lo he mirado un poco en el buscador pero no lo encuentro, es para un pic18f452

grax

Desconectado Rulo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 168
Re: RS232 visualizacion en 3 displays de 7 segmentos
« Respuesta #3 en: 04 de Marzo de 2008, 17:25:16 »
Citar
al enviar el dato, no se modificarian todos los displays?

    No, es algo asi...

           Envias dato1, display 1 on, display 2 off, display 3 off, retardo (unos 10 o 5 ms)
           Envias dato2, display 1 off, display 2 on, display 3 off, retardo
           Envias dato3, display 1 off, display 2 off, display 3 on, retardo

        y se repite el proceso.


   Para la recepcion puedes utilizar la interrupcion, trabajas con CCS?'

       si trabajas con ccs seria algo asi
Código: [Seleccionar]

#use rs232(baud=xxxxx, xmit=xxxxx, rcv=xxxxx, stream=PC)


#INT_RDA
void serial_isr(void)
{
   dato = getc(PC);
     y procesas el dato...
   }
}

     Saludos

Desconectado jmosorio

  • PIC10
  • *
  • Mensajes: 15
Re: RS232 visualizacion en 3 displays de 7 segmentos
« Respuesta #4 en: 05 de Marzo de 2008, 11:40:15 »
Hola, creo que ya lo tengo casi funcionando. pero se me ocurre una modificacion, te hago una pregunta:

necesito ahora hacer que se vea un dato tomado del puerto serial en 2 displays (un numero de 00 a 99), habilitando los 2 displays. en total necesito 8 juegos de 2 displays de 7 segmentos, si me llega por el pc un dato, mostrarlo por ejemplo en la pareja 1, y si me llega otro dato, mostrarlo por ejemplo en la pareja 2 pero sin que el dato de la pareja 1 desaparezca, y asi sucesivamente, la idea es que el dato que llegue aparezca en la pareja de displays que necesito, sin que el dato que estan mostrando las otrs 7 parejas se modifique. esto será posible trabajando de la misma manera?

la idea seria tomar 1 puerto de 8 bits, separarlo en 2 x 4 bits, conectado cada uno a un decodificador para los displays, cada uno de los 7447 maneja 1 cifra del numero, y a estos conectaria 8 displays, y usar otro puerto para realizar la habilitacion de la pareja de displays. Si funcionaría?

gracias por tu ayuda, no sabia que existian estos foros donde podemos aprender tanto!!  8)

Desconectado Rulo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 168
Re: RS232 visualizacion en 3 displays de 7 segmentos
« Respuesta #5 en: 05 de Marzo de 2008, 21:56:49 »
Citar
la idea seria tomar 1 puerto de 8 bits, separarlo en 2 x 4 bits, conectado cada uno a un decodificador para los displays, cada uno de los 7447 maneja 1 cifra del numero, y a estos conectaria 8 displays, y usar otro puerto para realizar la habilitacion de la pareja de displays. Si funcionaría?

    Sii suena bien, utilizarias los 4 MSB del puerto para un digito y los 4 LSB para el otro digito, y con otro puerto activas los displays, con el bit 0 activas un par, con el bit 1 otro par...

       Pues yo a lo mucho he multiplexado 4 o 5 displays sin problemas, si seran 16 displays donde se activan 2 al mismo tiempo seria como tener 8 displays, no creo que haya problema, en el caso de notar parpadeo habria que probar reduciendo el tiempo del retardo.


  Suerte con esto y no olvides comentarnos tus avances y/o dudas.

           Saludos.

Desconectado jmosorio

  • PIC10
  • *
  • Mensajes: 15
Re: RS232 visualizacion en 3 displays de 7 segmentos
« Respuesta #6 en: 06 de Marzo de 2008, 15:13:31 »
Hola
gracias por la gran ayuda, ya estoy trabajando en el tema, tengo otra pregunta
como puedo separar el numero, por ejemplo un numero cualquiera como 54, como puedo pasarlo a los 2 nibles, es decir mandar el 5 por 4 bits y el 4 por los otrs 4.
la pregunta es porque necesito leer el dato que me llega del pc (numero 54 en este caso) y separarlo en unidades y decenas para mostrarlo. para esto estoy haciendo un switch y un case de esta manera:
las variables son tipo int

cifra1=datopc/10;
digito1=cifra1;//primer digito del display para pasar a bcd
digito2=datopc-(cifra1*10);//2do digito del display para pasar a bcd
switch (digito1)
{
case 1
//pasariamos el dato al codigo bcd para el numero 1
....
....

}

existe una funcion que me pase un numero de 2 digitos a 2 numeros bcd, o alguna manera sencilla de realizar esto, que se me hace muy larga metiendo numero por numero por medio de un "case"

gracias

Desconectado Rulo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 168
Re: RS232 visualizacion en 3 displays de 7 segmentos
« Respuesta #7 en: 06 de Marzo de 2008, 15:33:35 »
   Hola, Mmm ahora mismo se me ocurre esto.

      siguiendo con el ejemplo que muestras en digito1 ya tienes 5 y en digito2 el 4.

              digito1 = 5 = 00000101
              digito2 = 4 = 00000100

        lo que seguiria seria rotar 4 bits en digito1 de manera que te quede digito1 = 01010000

              despues hacer una operacion or entre digito1 y digito2 y quedaria por ejemplo digito3 = 01010100

  y ya tienes el BCD en la parte alta el digito 1 y en la baja el 2.

     Mmm No se si es lo que querias saber, pero bueno, es lo que ahora se me ocurre, talvez haya una mejor forma de realizarlo.

     
 Saludos.
« Última modificación: 07 de Marzo de 2008, 06:03:43 por Rulo »

Desconectado jmosorio

  • PIC10
  • *
  • Mensajes: 15
Re: RS232 visualizacion en 3 displays de 7 segmentos
« Respuesta #8 en: 07 de Marzo de 2008, 14:14:48 »
nuevamente gracias, ya tengo el codigo bastante adelantado

ahora la duda es:
yo puedo tener ya la variable con el numero, y enviarla directamente al puerto asi:
suponemos que tenemos el dato 54 ya pasado al bdc, que seria 0101 0100, el cual en decimal es 84
yo puedo decir directamente

numero=84;
portb=numero;

o como puedo enviar ese dato al puerto??
gracias nuevamente por la gran ayuda recibida

Desconectado Rulo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 168
Re: RS232 visualizacion en 3 displays de 7 segmentos
« Respuesta #9 en: 07 de Marzo de 2008, 15:34:56 »

 Bueno, si es en CCS seria output_b(84);

  si definiste anteriormente a portb con su direccion correspondiente...
Citar
numero=84;
portb=numero;
Esto es correcto.

      Saludos
« Última modificación: 07 de Marzo de 2008, 15:37:51 por Rulo »

Desconectado jmosorio

  • PIC10
  • *
  • Mensajes: 15
Re: RS232 visualizacion en 3 displays de 7 segmentos
« Respuesta #10 en: 12 de Marzo de 2008, 20:45:06 »
hola a todos.
Mi programa / montaje va biento en popa, quiero agradecer la valiosisima colaboracion del foro, al cual seguiré visitando y cualquier duda que tenga o algo que pueda aportar pues se los hare saber.

una pregunta, estoy trabajando con mcc18, cual es mejor para trabajar, ese o el ccs?
gracias

Desconectado jmosorio

  • PIC10
  • *
  • Mensajes: 15
Re: RS232 visualizacion en 3 displays de 7 segmentos
« Respuesta #11 en: 26 de Marzo de 2008, 12:30:11 »
hola nuevamente.
habia dejado el tema de lado por algunos dias, ahora estoy tratando de simularlo y no me esta funcionando.

la idea es:
del puerto B estoy sacando 4 bits a un decodificador de 7 segmentos y los 4 restantes al otro
del puerto D estoy sacando cada bit para la habiilitacion del display
no se si este codigo tenga algun problema:
//
TRISB=0;
TRISD=0;

PORTB=3; //coloco un 0 en el primer display y un 3 en el segundo
PORTD=1; //habilito el primer juego de displays
Delay10KTCYx(1); //retardo

PORTB=147; // coloco un 9 en el primer display y un 3 en el segundo
PORTD=2; //habilito el segundo juego de displays
Delay10KTCYx(1);//retardo
//
 
la simulacion en proteus no me esta funcionando, pero la verdad no se si esto lo tengo que colocar dentro de un ciclo o que mas tengo que hacer. agradezco la ayuda que me puedan prestar.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: RS232 visualizacion en 3 displays de 7 segmentos
« Respuesta #12 en: 26 de Marzo de 2008, 16:39:47 »
hola jmosorio

Mira, yo tenia un problema similar en la simulacion con C18 y era porque no configuraba los "config" en el programa. Yo lo hago de la siguiente manera:
  • #pragma config OSC = HS

En la carpeta doc del mcc18 esta el Addendum.pdf en donde estan los "config" de los diferentes pics.

Otra cosa que puede ser (o que a mi me paso), es que la conmutacion de 2 o mas 7 segmentos individuales no funciona, por eso hay, en las librerias de proteus, 7 segmentos multiples (de 2 y 4 digitos) en un mismo "device", yo hice el cambio y me funciono correctamente.

Espero te sirva mi ayuda :)
El papel lo aguanta todo

Desconectado jmosorio

  • PIC10
  • *
  • Mensajes: 15
Re: RS232 visualizacion en 3 displays de 7 segmentos
« Respuesta #13 en: 06 de Abril de 2008, 15:36:39 »
hola, estoy teniendo problemas con la multiplexacion, no logro que se vean los numeros en cada uno, sino que en cada uno de los displays se ven todos los numeros, como puedo configurar los delays de manera que logre esto. el cristal que estoy usando es de 4M, y tengo 5 displays conectados, la rutina para mostrarlos la tengo de esta manera:

PORTD=0;//APAGO DISPLAYS
Delay10KTCYx(1);
PORTB=numero1; //MANDO DATO
Delay10KTCYx(1);//DELAY
PORTD=1; //HABILITO DISPLAY1
Delay10KTCYx(50);//DELAY PARA QUE SE VEA

PORTD=0;//APAGO DISPLAYS
Delay10KTCYx(1);//DELAY
PORTB=numero2;//PONGO NUMERO 2
Delay10KTCYx(1);//DELAY
PORTD=2; //HABILITO DISPLAY 2
Delay10KTCYx(50);//DELAY PARA QUE SE VEA
......................
......................

agradezco la ayuda que me puedan prestar

Desconectado Rulo

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 168
Re: RS232 visualizacion en 3 displays de 7 segmentos
« Respuesta #14 en: 06 de Abril de 2008, 18:47:07 »
  Mmmm, te podrias ahorrar las siguientes lineas...

PORTD=0;//APAGO DISPLAYS
Delay10KTCYx(1);<-------------------------------
PORTB=numero1; //MANDO DATO
Delay10KTCYx(1);//DELAY<-------------------------------
PORTD=1; //HABILITO DISPLAY1
Delay10KTCYx(50);//DELAY PARA QUE SE VEA

PORTD=0;//APAGO DISPLAYS
Delay10KTCYx(1);//DELAY<-------------------------------
PORTB=numero2;//PONGO NUMERO 2
Delay10KTCYx(1);//DELAY<-------------------------------
PORTD=2; //HABILITO DISPLAY 2
Delay10KTCYx(50);//DELAY PARA QUE SE VEA

  solo una duda, Delay10KTCYx(50);   a cuanto tiempo equivale?'' =S no conosco ese C =P

  Para habilitar el display 3 pones PORTD=3;?'''' o PORTD=5;?''

         saludos.
« Última modificación: 06 de Abril de 2008, 18:52:32 por Rulo »