Autor Tema: :: SPI - Decoder 7 Segmentos - ahorrar pines en PIC ::  (Leído 12018 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
:: SPI - Decoder 7 Segmentos - ahorrar pines en PIC ::
« en: 07 de Enero de 2013, 18:12:05 »
hola

Me gustaria saber si ustedes antes pusieron uno o varios bloques de 7 segmentos
para encender con un pic y en tal caso, ¿que chip usaron pra ahorrarse pines?.
¿cual me reconedarian? usando solo 4 lineas.

0000 --> 0
0001 --> 1
0010 --> 2
...
asi hasta
1111 --> F


yo ahora tengo uno problemilla un poco raro..
Por el momentos yo monte un PIC18F2550 con 1 solo chip de 7 segmentos en el simulador de proteus
acionado por: 7447, 4511, 7449 y no funciona muy bien.
pero si lo acciono de forma manual si que funciona, pero desde el pic solo me muestra de 0 a 4  

la cosa es sencilla con el bus spi le envio del master al esclavo los 9 primeros numeros
pero solo me muestra del 0 al 4 no se lo que pasa con el resto.

alguna idea de que puede ocurrir?

sigo indagando en la resolucion del problema...

coloco el codigo del master y del esclavo ...

Código: CSS
  1. #include "C:\spi_pic18F2550\master_04\main.h"
  2.  
  3. //char taBCD[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};
  4. int taBCD[]={0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09};
  5. //int taBCD[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67};
  6. int dato;    //variable entera que sirve para que , al incrementar, vaya variando el dato.
  7.  
  8. void main()
  9. {
  10. //int cnt=0;
  11.    setup_adc_ports(NO_ANALOGS|VSS_VDD);
  12.    setup_adc(ADC_CLOCK_DIV_2);
  13.    setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_16);
  14.    setup_wdt(WDT_OFF);
  15.    setup_timer_0(RTCC_INTERNAL);
  16.    setup_timer_1(T1_DISABLED);
  17.    setup_timer_2(T2_DISABLED,0,1);
  18.    setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
  19.    setup_comparator(NC_NC_NC_NC);
  20.    setup_vref(FALSE);
  21. //Setup_Oscillator parameter not selected from Intr Oscillator Config tab
  22.  
  23.    // TODO: USER CODE!!
  24.  
  25.     while(true) {
  26.         for(dato=0;dato<10;dato++) {
  27.        
  28.           spi_write(taBCD[dato]);
  29.           delay_ms(300);
  30.         }//fin for
  31.        // dato=0;
  32.     } //fin while
  33.  
  34.  
  35. }


codigo del esclavo:

Código: CSS
  1. #include "C:\spi_pic18F2550\esclavo_04\main.h"
  2.  
  3. //char taBCD[]={0x00,0x01,0x02,0x03,0x04,0x06,0x07,0x08,0x09};
  4. //int dato;
  5.  
  6. void main(){
  7.  
  8.    setup_adc_ports(NO_ANALOGS|VSS_VDD);
  9.    setup_adc(ADC_CLOCK_DIV_2);
  10.    setup_spi(SPI_SLAVE);
  11.    setup_wdt(WDT_OFF);
  12.    setup_timer_0(RTCC_INTERNAL);
  13.    setup_timer_1(T1_DISABLED);
  14.    setup_timer_2(T2_DISABLED,0,1);
  15.    setup_comparator(NC_NC_NC_NC);
  16.    setup_vref(FALSE);
  17.  
  18. //Setup_Oscillator parameter not selected from Intr Oscillator Config tab
  19.  
  20.    // TODO: USER CODE!!
  21.  //set_tris_c(0x00);
  22.  while(true) {
  23.    if(spi_data_is_in()){      // Esto sirve para detectar que hay o no un dato en el SPI al leer.          
  24.       dato=spi_read();
  25.       //output_high(PIN_B0);
  26.       output_c(dato);
  27.       delay_ms(500);
  28.      }
  29.  }
  30.  
  31.  }

si alguno lo desea puedo poner el circuito
solo tienen que pedirlo.

Un saludo.



#########################################################

::  Indice de pruebas ::

=========================================================


1.- 1 Master por SPI enciende  1 Modulo de 7seg de un esclavo.

2.- 1 Master por SPI enciende  n Modulos de 7seg de N esclavos a la vez.

3.- 1 Master por SPI enciende  1 Modulo de 7seg de un esclavo numeros pares
     y en otro esclavo de construcion igulito enciende los numeros impares.




##########################################################






# Enlaces #
========

http://www.todopic.com.ar/foros/index.php?topic=28952.msg239608#msg239608



« Última modificación: 25 de Enero de 2013, 19:46:32 por pajaro »

Desconectado jfmateos2

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3145
Re: :: SPI - Decoder 7 Segmentos - ahorrar pines en PIC ::
« Respuesta #1 en: 07 de Enero de 2013, 18:21:38 »
Yo uso el MAX6951

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: :: SPI - Decoder 7 Segmentos - ahorrar pines en PIC ::
« Respuesta #2 en: 07 de Enero de 2013, 19:01:20 »
Con 74HC595 o simil podés lograr controlar infinidad de salidas con capacidad source/drain de 20ma y sólo 3 pines del uC, mediante un protocolo serial que puede usarse con el módulo SPI.

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 AcoranTf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1093
Re: :: SPI - Decoder 7 Segmentos - ahorrar pines en PIC ::
« Respuesta #3 en: 07 de Enero de 2013, 19:47:50 »
Echale un vistazo a la hoja tecnica del TPIC6B595.

Saludos.

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: :: SPI - Decoder 7 Segmentos - ahorrar pines en PIC ::
« Respuesta #4 en: 07 de Enero de 2013, 20:38:21 »
Si todos son equivalentes  :mrgreen:
Tambien puedes usar el mm5450 y sirve hasta para manejar matriz de led  :mrgreen:

Y aqui para manejo de displays


Saludos
« Última modificación: 07 de Enero de 2013, 20:40:36 por RALF2 »

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: :: SPI - Decoder 7 Segmentos - ahorrar pines en PIC ::
« Respuesta #5 en: 09 de Enero de 2013, 11:22:54 »
HoLa compañeros

por el momento no dispongo de ellos  fisicamente asi que lo estoy simulando con el proteus
pero alguno de ellos no vienen en las librerias como es el caso del mm5450, TPIC6B595,
pero el MAX6951 si que vienen al igual que la serie74hcxxx,
yo cuando empece a simularlo lo hice con un 7447 pero solo me mostraba de 0 a 4
adjunto las fotos comprimidas en rar y el fichreo de proteus.
el codigo que cargan lo mostre anteriormente.

sigo investigando los problemillas..


Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: :: SPI - Decoder 7 Segmentos - ahorrar pines en PIC ::
« Respuesta #6 en: 09 de Enero de 2013, 12:51:23 »
No he visto los últimos adjuntos, despues en casa los bajo y te digo.

Lo que si veo en el primer mensaje es que en el programa del esclavo estas usando el puerto C para sacar los datos, si usas un conversor BCD a 7 segmentos solo usas los 4 bits de menor peso.

Tambien veo que comentas la linea donde decis que el puerto c es salida, aunque no creo que sea el error, pero verificalo.

Lo mejor para ahorrar pines del pic es usar el 74hc595, es mas complicado el programa, pero no por eso imposible.
Podes multiplexar muchos y tener muchas salidas.
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: :: SPI - Decoder 7 Segmentos - ahorrar pines en PIC ::
« Respuesta #7 en: 09 de Enero de 2013, 20:22:27 »
Hola
por mas que miro el codigo no encuentro el error
es sencillo cargo los valores del 0 a 9 en un vector
y mediante un for los envio del master al esclavo por spi
si se detecta datos en spi lo muestra en la parte baja
del puerto c.

he comentado lo del fast_io porque da errores con
en la comunicación con spi.
En la depuración del proteus
he notado una cosa rara:

como si fuera desfasado lo que envia el master de lo que recibe el esclavo:

lo que muetra la salida del depurador spi
====================================
 master: 00 00 00 81 01 82 02 03
esclavo: 00 01 02 03 04 05 06 07

 master: 03 84 04 80 00 81 01 82
esclavo: 08 09 00 01 02 03 04 05

 master: 02 83 03 84 04 80 00 81
esclavo: 00 07 08 09 00 01 02 03

no entiendo muy bien lo que pasa,

sigo investigando...





Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: :: SPI - Decoder 7 Segmentos - ahorrar pines en PIC ::
« Respuesta #8 en: 09 de Enero de 2013, 20:45:00 »
he comentado lo del fast_io porque da errores con
en la comunicación con spi.

Ahí me parece que está el error, vos usas el SPI con RC6 y RC7?

Probaste hacer la salida por otro puerto, por ejemplo el puerto B?

Si quieres usar el puerto C para la salida al 7 segmentos quizas deberias modificar bit a bit.

Nunca he hecho algo con SPI, pero viendo el diagrama del 18f2550 me surge esa duda.
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: :: SPI - Decoder 7 Segmentos - ahorrar pines en PIC ::
« Respuesta #9 en: 09 de Enero de 2013, 21:14:54 »
hola willynovi

Eso fue lo que pense en un primer momento, de tratar al puerto c
con el fuse fast_io, y set_tris_c(), pero con ello activado la comunicacion no
funcionaba y el spi no se realizaba fue comentar eso y el fuse y enpezar a ir.

En teoria del c0 al c3 son salida el resto de bit me da igual lo que sean,
quitando que el c7 es SDO, no se lo que puede ser seguro que es alguna cosa
muy tonta y no lo logro ver.

Voy a seguir leyendo más post sobre el 7 segmentos y el spi,
no hay mal que dure 100 años...
« Última modificación: 10 de Enero de 2013, 10:24:13 por pajaro »

Desconectado irukza

  • PIC12
  • **
  • Mensajes: 87
Re: :: SPI - Decoder 7 Segmentos - ahorrar pines en PIC ::
« Respuesta #10 en: 14 de Enero de 2013, 09:40:42 »
Hola pajaro

Te adjunto el circuito que uso yo para estos casos. No es tan elegante como tu idea pero funciona muy bien, y usa 3 líneas del uC.
No es la manera más económica de realizarlo, pero los componentes se consiguen siempre por acá y como yo lo uso a nivel comercial no puedo arriesgarme a la falta de stock  :?

Como te decía, hay 3 lineas:

- dt_disp: por aca mandas los datos en serie (BCD) para cargar los registros de desplazamiento

- ck_disp: esta es la linea de clock

- LE_disp: una vez que transmitiste todos los bits, esta señal te permite pasa los datos a los 4511 (latch)



Otra forma de hacerlo es quitar los 4511 y manejar directamente los segmentos, pero necesitas cortar la masa de los 7 seg mientras realizas la transmisión, para que los displays no muestren basura mientras se acomodan los bits.

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: :: SPI - Decoder 7 Segmentos - ahorrar pines en PIC ::
« Respuesta #11 en: 15 de Enero de 2013, 20:13:20 »
hola

hace dias que lo tengo apartado
el cirduito a un lado del escritorio y de vez en cuando lo miro
no se, no entiendo que cosas más raras hace,

termine por hacer el spi por software.
pero no me comunica nada bien.

he mirado detenimamente los pines que prenden el  7 segmentos
veo como solo cuentasn hasta 4, lo que no entiendo por que no cuentan hasta 9
ya que dedico 4 pines equivalente a 4 bit, en teroria 1111 es F, y si enciende 4
que es 100 tambien deberia de hacer lo mismo con 7 ya que es  111
no se que le pasa .

creo que primero conectare el pic con un decoder y un 7 seg y lo hare contar de 0 a F
y cuando funcione seguro y bien lo hare con spi,

Agradezco que me compartas tu circuito.


Un saldo y gracias por su colaboracion.


Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: :: SPI - Decoder 7 Segmentos - ahorrar pines en PIC ::
« Respuesta #12 en: 16 de Enero de 2013, 07:02:25 »
Que tal amigos!
Pajaro prueba lo siguiente: en el programa del maestro coloca un retardo de digamos 200ms antes del while, debado de donde dice: TODO: USER CODE!!
y aumenta el delay del maestro de 300ms a digamos 700ms para ver bien la cuenta  :-/

Para el slave: quita el retardo de 500ms   :mrgreen:

Porque me parece que el problema es de sincronizacion entre el esclavo y el maestro  :mrgreen:

Prueba y nos dices que paso  ;-)

Saludos
« Última modificación: 16 de Enero de 2013, 07:18:18 por RALF2 »

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: :: SPI - Decoder 7 Segmentos - ahorrar pines en PIC ::
« Respuesta #13 en: 16 de Enero de 2013, 13:21:08 »
hola

hace dias que lo tengo apartado
el cirduito a un lado del escritorio y de vez en cuando lo miro
no se, no entiendo que cosas más raras hace,

Hola pájaro,

tu contador no funciona porque estás intentando usar RC4 como salida de propósito general, lo que no está disponible ni para ese pin ni para el pin C5, ambos condicionados por estar multiplexados con el módulo USB. Usá otro pin disponible que permita ser configurado como lo estás necesitando.  :mrgreen:

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 RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: :: SPI - Decoder 7 Segmentos - ahorrar pines en PIC ::
« Respuesta #14 en: 16 de Enero de 2013, 17:11:55 »
Es correcto lo que comenta al amigo Bruno debes utilizar otro pin distinto de RC4, pero si haces la modificacion que comente arriba y en vez de contar hasta 9 lo haces hasta 7 funciona perfecto, ya lo probe asi :mrgreen: