TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: johenrod en 09 de Febrero de 2023, 10:11:30

Título: como configurar pic para shift register TLC5925?
Publicado por: johenrod en 09 de Febrero de 2023, 10:11:30
Cordial saludo...
tan amables requiero hacer un montaje con shift register en cascada con TLC5925 de 16 bits.
tengo idea del la interconexion, salida de datos de uno con el data in del siguiente, inicialmente pense que la comunicacion seria SPI pero veo que la tecnica es ingresar los datos  y estos se desplazan con el flanco positivo del reloj  luego pasar a alto el "LE" y asi colocar los datos en la salida.
la idea es hacerlo con 12 de estos chips pero la idea es comenzar con 2 para ver el proceso.
creeria que puedo hacerlo con un pic de 8 bits y los datos almacenarlos en una variable de 16 y enviarlos.
como seria el proceso de envio de datos en el codigo, trabajo en CCS.
Gracias de antemano.
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: DominusDRR en 09 de Febrero de 2023, 12:47:53
Cordial saludo...
tan amables requiero hacer un montaje con shift register en cascada con TLC5925 de 16 bits.
tengo idea del la interconexion, salida de datos de uno con el data in del siguiente, inicialmente pense que la comunicacion seria SPI pero veo que la tecnica es ingresar los datos  y estos se desplazan con el flanco positivo del reloj  luego pasar a alto el "LE" y asi colocar los datos en la salida.
la idea es hacerlo con 12 de estos chips pero la idea es comenzar con 2 para ver el proceso.
creeria que puedo hacerlo con un pic de 8 bits y los datos almacenarlos en una variable de 16 y enviarlos.
como seria el proceso de envio de datos en el codigo, trabajo en CCS.
Gracias de antemano.

Lo que entiendo es que el TLC5925  es una especie de convertidor de serial a paralelo, y parecería que tiene un bus SPI pero parece que no es así.

En la Figura 1 de las hojas de datos, parece que muestra un ejemplo, de lo que tendrías que hacer.

(https://pbs.twimg.com/media/FoiTAZpXgAIpN4J?format=png&name=900x900)

Entonces tu deberías escribir un código, para escribir unos o ceros en terminales o pines del microntrolador para generar el reloj, y generar los datos en SDI. Cuando hayas completado los 16 bits enviados, OE pasaría a cero lógico (que iniciamente estaba en 1L) para colocar los datos seriales en las salidas en paralelo (OUT0, OUT1, ... OUT15)
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: johenrod en 09 de Febrero de 2023, 13:21:44
Gracias por tu respuesta DominusDRR,,,
si eso lo tengo mas o menos claro, lo que pasa es que el shif 5925 dice que trabaja a 30Mhz entonces no se si implementar comunicacion spi o hacerlo por instrucciones.
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: DominusDRR en 09 de Febrero de 2023, 13:26:26
Gracias por tu respuesta DominusDRR,,,
si eso lo tengo mas o menos claro, lo que pasa es que el shif 5925 dice que trabaja a 30Mhz entonces no se si implementar comunicacion spi o hacerlo por instrucciones.

Deberías leer las hojas de datos.

(https://pbs.twimg.com/media/Foicf0PWcAMpH09?format=jpg&name=medium)
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: johenrod en 09 de Febrero de 2023, 13:38:01
es eso exactamente lo que no he podido implementar, tengo dudas con esos diagramas de tiempo.
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: DominusDRR en 09 de Febrero de 2023, 13:44:06
es eso exactamente lo que no he podido implementar, tengo dudas con esos diagramas de tiempo.

Esa frecuencia es un límite que el fabricante te proporciona y no es buena idea trabajar cerca o en los límites establecidos.

Lo ideal sería unos 20 o 25 MHz.

Si deseas trabajar con el módulo SPI, la pregunta es ¿Por qué tu obsesión por trabajar a 30MHz? ¿Acaso no puedes modificar la configuración SPI para trabajar a una frecuencia menor?
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: johenrod en 09 de Febrero de 2023, 13:57:50
DominusDRR //no es que quiera a 30 mhz, es que no se como configurar o armar el programa.. solo desearia un ejemplo para poder comprender y poder implemantarlo.
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: DominusDRR en 09 de Febrero de 2023, 14:01:30
DominusDRR //no es que quiera a 30 mhz, es que no se como configurar o armar el programa.. solo desearia un ejemplo para poder comprender y poder implemantarlo.

Tu información es difusa, nadie es adivino para conocer con detalle tus intenciones.

Deberías indicar lo siguiente:

1. Microcontrolador que deseas utilizar.

2. Lenguaje que deseas utilizar para programar.

3. Software que deseas utilizar.

4. Indicar nivel de experiencia en los puntos desde el 1 al 3.


Una vez indicado eso alguien puede leerlo y podría empezar hacerte más preguntas y compartirte alguna idea inicial.

Título: Re:como configurar pic para shift register TLC5925?
Publicado por: johenrod en 09 de Febrero de 2023, 14:21:11
DominusDRR //no es que quiera a 30 mhz, es que no se como configurar o armar el programa.. solo desearia un ejemplo para poder comprender y poder implemantarlo.

Tu información es difusa, nadie es adivino para conocer con detalle tus intenciones.

Deberías indicar lo siguiente:

1. Microcontrolador que deseas utilizar.

2. Lenguaje que deseas utilizar para programar.

3. Software que deseas utilizar.

4. Indicar nivel de experiencia en los puntos desde el 1 al 3.


Una vez indicado eso alguien puede leerlo y podría empezar hacerte más preguntas y compartirte alguna idea inicial.

Citar
tan amables requiero hacer un montaje con shift register en cascada con TLC5925 de 16 bits.
tengo idea del la interconexion, salida de datos de uno con el data in del siguiente, inicialmente pense que la comunicacion seria SPI pero veo que la tecnica es ingresar los datos  y estos se desplazan con el flanco positivo del reloj  luego pasar a alto el "LE" y asi colocar los datos en la salida.
la idea es hacerlo con 12 de estos chips pero la idea es comenzar con 2 para ver el proceso.
creeria que puedo hacerlo con un pic de 8 bits y los datos almacenarlos en una variable de 16 y enviarlos.
como seria el proceso de envio de datos en el codigo, trabajo en CCS.

creo que ahi esta claro, perdon si no me comprendes o no tienes tanta paciencia para nosotros los novatos.
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: DominusDRR en 09 de Febrero de 2023, 14:28:17
DominusDRR //no es que quiera a 30 mhz, es que no se como configurar o armar el programa.. solo desearia un ejemplo para poder comprender y poder implemantarlo.

Tu información es difusa, nadie es adivino para conocer con detalle tus intenciones.

Deberías indicar lo siguiente:

1. Microcontrolador que deseas utilizar.

2. Lenguaje que deseas utilizar para programar.

3. Software que deseas utilizar.

4. Indicar nivel de experiencia en los puntos desde el 1 al 3.


Una vez indicado eso alguien puede leerlo y podría empezar hacerte más preguntas y compartirte alguna idea inicial.

Citar
tan amables requiero hacer un montaje con shift register en cascada con TLC5925 de 16 bits.
tengo idea del la interconexion, salida de datos de uno con el data in del siguiente, inicialmente pense que la comunicacion seria SPI pero veo que la tecnica es ingresar los datos  y estos se desplazan con el flanco positivo del reloj  luego pasar a alto el "LE" y asi colocar los datos en la salida.
la idea es hacerlo con 12 de estos chips pero la idea es comenzar con 2 para ver el proceso.
creeria que puedo hacerlo con un pic de 8 bits y los datos almacenarlos en una variable de 16 y enviarlos.
como seria el proceso de envio de datos en el codigo, trabajo en CCS.

creo que ahi esta claro, perdon si no me comprendes o no tienes tanta paciencia para nosotros los novatos.

Lo siento, no leí las últimas líneas, eso sería en C y usando CCs.

Pero deberías explicar que PIC, pueda que no tengas modulo SPI el que deseas usar. Deberías indicar el tipo oscilador, para determinar que velocidades y retardos puedes generar.

En pocas, explicar el hardware que vas a diseñar.
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: johenrod en 09 de Febrero de 2023, 14:37:53
lo que pasa es que no tengo pic elegido ya que no se que necesito para empezar, encontre un codigo donde no se utiliza el modulo spi (lo coloco al final creo que es pic_basic) y si se pudiera implementar asi solo necesitaria un pic con buena memoria de programa para colocar varias funciones. ( en este momento estoy tratando de pasarlo a ccs con un 12f1822. saludos..
Código: C
  1. /*
  2.  
  3.  * File:   main.c
  4.  
  5.  * Author: Sourav Gupta
  6.  
  7.  * By:- circuitdigest.com
  8.  
  9.  * Created on May 30, 2018, 2:26 PM
  10.  
  11.  */
  12.  
  13.  
  14. // PIC16F877A Configuration Bit Settings
  15.  
  16.  
  17. // 'C' source line config statements
  18.  
  19.  
  20. // CONFIG
  21.  
  22. #pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator)
  23.  
  24. #pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
  25.  
  26. #pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
  27.  
  28. #pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled)
  29.  
  30. #pragma config LVP = OFF         // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled)
  31.  
  32. #pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
  33.  
  34. #pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
  35.  
  36. #pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)
  37.  
  38.  
  39.  
  40.  
  41.  
  42. #include <xc.h>
  43.  
  44. /*
  45.  
  46.  Hardware related definition
  47.  
  48.  */
  49.  
  50. #define _XTAL_FREQ 20000000 //Crystal Frequency, used in delay
  51.  
  52. #define DATA_595 PORTBbits.RB0
  53.  
  54. #define STROBE_595 PORTBbits.RB1
  55.  
  56. #define CLK_595 PORTBbits.RB2
  57.  
  58. #define LED PORTBbits.RB3
  59.  
  60.  
  61. /*
  62.  
  63.  Other Specific definition
  64.  
  65.  */
  66.  
  67. void system_init(void);
  68.  
  69.  
  70. /*
  71.  
  72.  *This function will enable the Clock.
  73.  
  74.  */
  75.  
  76. void clock(void){
  77.  
  78.     CLK_595 = 1;
  79.  
  80.     __delay_us(500);
  81.  
  82.     CLK_595 = 0;
  83.  
  84.     __delay_us(500);
  85.  
  86. }
  87.  
  88.  
  89. /*
  90.  
  91.  *This function will strobe and enable the output trigger.
  92.  
  93.  */
  94.  
  95.  
  96. void strobe(void){
  97.  
  98.     STROBE_595 = 1;
  99.  
  100.     __delay_us(500);
  101.  
  102.     STROBE_595 = 0;
  103.  
  104.     }
  105.  
  106.  
  107. /*
  108.  
  109.  * This function will send the data to shift register
  110.  
  111.  */
  112.  
  113. void data_submit(unsigned int data){
  114.  
  115.     for (int i=0 ; i<8 ; i++){
  116.  
  117.         DATA_595 = (data >> i) & 0x01;
  118.  
  119.         clock();
  120.  
  121.     }
  122.  
  123.     strobe(); // Data finally submitted
  124.  
  125. }
  126.  
  127.  
  128. void main(void) {
  129.  
  130.     system_init(); // System getting ready    
  131.  
  132.     while(1){
  133.  
  134.         data_submit(0b00000000);
  135.  
  136.         __delay_ms(200);
  137.  
  138.         data_submit(0b10000000);
  139.  
  140.         __delay_ms(200);
  141.  
  142.         data_submit(0b01000000);
  143.  
  144.         __delay_ms(200);
  145.  
  146.         data_submit(0b00100000);
  147.  
  148.         __delay_ms(200);
  149.  
  150.         data_submit(0b00010000);
  151.  
  152.         __delay_ms(200);
  153.  
  154.         data_submit(0b00001000);
  155.  
  156.         __delay_ms(200);        
  157.  
  158.         data_submit(0b00000100);
  159.  
  160.         __delay_ms(200);
  161.  
  162.         data_submit(0b00000010);
  163.  
  164.         __delay_ms(200);
  165.  
  166.         data_submit(0b00000001);
  167.  
  168.         __delay_ms(200);
  169.  
  170.         data_submit(0xFF);        
  171.  
  172.         __delay_ms(200);
  173.  
  174.      }
  175.  
  176.     return;
  177.  
  178.     }
  179.  
  180.    
  181.  
  182. /*
  183.  
  184.  This Function is for system initialisations.
  185.  
  186.  */
  187.  
  188.  
  189. void system_init(void){
  190.  
  191.     TRISB = 0x00;  
  192.  
  193.     }
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: DominusDRR en 09 de Febrero de 2023, 15:24:14
lo que pasa es que no tengo pic elegido ya que no se que necesito para empezar, encontre un codigo donde no se utiliza el modulo spi (lo coloco al final creo que es pic_basic) y si se pudiera implementar asi solo necesitaria un pic con buena memoria de programa para colocar varias funciones. ( en este momento estoy tratando de pasarlo a ccs con un 12f1822. saludos..
Código: C
  1. /*
  2.  
  3.  * File:   main.c
  4.  
  5.  * Author: Sourav Gupta
  6.  
  7.  * By:- circuitdigest.com
  8.  
  9.  * Created on May 30, 2018, 2:26 PM
  10.  
  11.  */
  12.  
  13.  
  14. // PIC16F877A Configuration Bit Settings
  15.  
  16.  
  17. // 'C' source line config statements
  18.  
  19.  
  20. // CONFIG
  21.  
  22. #pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator)
  23.  
  24. #pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
  25.  
  26. #pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
  27.  
  28. #pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled)
  29.  
  30. #pragma config LVP = OFF         // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled)
  31.  
  32. #pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
  33.  
  34. #pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
  35.  
  36. #pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)
  37.  
  38.  
  39.  
  40.  
  41.  
  42. #include <xc.h>
  43.  
  44. /*
  45.  
  46.  Hardware related definition
  47.  
  48.  */
  49.  
  50. #define _XTAL_FREQ 20000000 //Crystal Frequency, used in delay
  51.  
  52. #define DATA_595 PORTBbits.RB0
  53.  
  54. #define STROBE_595 PORTBbits.RB1
  55.  
  56. #define CLK_595 PORTBbits.RB2
  57.  
  58. #define LED PORTBbits.RB3
  59.  
  60.  
  61. /*
  62.  
  63.  Other Specific definition
  64.  
  65.  */
  66.  
  67. void system_init(void);
  68.  
  69.  
  70. /*
  71.  
  72.  *This function will enable the Clock.
  73.  
  74.  */
  75.  
  76. void clock(void){
  77.  
  78.     CLK_595 = 1;
  79.  
  80.     __delay_us(500);
  81.  
  82.     CLK_595 = 0;
  83.  
  84.     __delay_us(500);
  85.  
  86. }
  87.  
  88.  
  89. /*
  90.  
  91.  *This function will strobe and enable the output trigger.
  92.  
  93.  */
  94.  
  95.  
  96. void strobe(void){
  97.  
  98.     STROBE_595 = 1;
  99.  
  100.     __delay_us(500);
  101.  
  102.     STROBE_595 = 0;
  103.  
  104.     }
  105.  
  106.  
  107. /*
  108.  
  109.  * This function will send the data to shift register
  110.  
  111.  */
  112.  
  113. void data_submit(unsigned int data){
  114.  
  115.     for (int i=0 ; i<8 ; i++){
  116.  
  117.         DATA_595 = (data >> i) & 0x01;
  118.  
  119.         clock();
  120.  
  121.     }
  122.  
  123.     strobe(); // Data finally submitted
  124.  
  125. }
  126.  
  127.  
  128. void main(void) {
  129.  
  130.     system_init(); // System getting ready    
  131.  
  132.     while(1){
  133.  
  134.         data_submit(0b00000000);
  135.  
  136.         __delay_ms(200);
  137.  
  138.         data_submit(0b10000000);
  139.  
  140.         __delay_ms(200);
  141.  
  142.         data_submit(0b01000000);
  143.  
  144.         __delay_ms(200);
  145.  
  146.         data_submit(0b00100000);
  147.  
  148.         __delay_ms(200);
  149.  
  150.         data_submit(0b00010000);
  151.  
  152.         __delay_ms(200);
  153.  
  154.         data_submit(0b00001000);
  155.  
  156.         __delay_ms(200);        
  157.  
  158.         data_submit(0b00000100);
  159.  
  160.         __delay_ms(200);
  161.  
  162.         data_submit(0b00000010);
  163.  
  164.         __delay_ms(200);
  165.  
  166.         data_submit(0b00000001);
  167.  
  168.         __delay_ms(200);
  169.  
  170.         data_submit(0xFF);        
  171.  
  172.         __delay_ms(200);
  173.  
  174.      }
  175.  
  176.     return;
  177.  
  178.     }
  179.  
  180.    
  181.  
  182. /*
  183.  
  184.  This Function is for system initialisations.
  185.  
  186.  */
  187.  
  188.  
  189. void system_init(void){
  190.  
  191.     TRISB = 0x00;  
  192.  
  193.     }

EL código me parece bastante bueno. El lenguaje es C. No estoy seguro pero me parece que CCS sólo utiliza lenguaje C. ¿En que lenguaje de programación tienes expereincia?

 Si no tienes hardware físico para probar su funcionamiento deberías verificar su funcionamiento en un simulador como Proteus (ver las formas de onda con el osciloscopio/analizador lógico)

Título: Re:como configurar pic para shift register TLC5925?
Publicado por: uZYNQ en 09 de Febrero de 2023, 15:57:44
Saludos,
Citar
#include <xc.h>

  Esta en lenguaje C del compilador de microchip xc8. Pero en el programa solo están utilizando 8 bits de los 16bits del 595. y la frecuencia del reloj es de solo 1KHz. Y está dedicado el micro a hacer solo esa tarea. Si quieres aprovechar los 16bits, deberías modificar el ciclo for hasta 16, y la variable data debe ser de 16 bits. Si quieres modificar la frecuencia del reloj, debes reducir los delays en la función de clock.
 En cambio si quieres utilizar un modulo SPI para delegar ese trabajo al módulo, lo mejor seria utilizar un PIC de al menos 16bits que maneje el SPI con un bus de datos de 16bits.
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: johenrod en 09 de Febrero de 2023, 17:13:34
uZYNQ, gracias por tu respuesta.
 antes trabaje con el xc8 ahora lo hago en ccs por lo que no tengo acceso a las librerias xc8,  busque para descargarla pero no la he podido conseguir.
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: DominusDRR en 09 de Febrero de 2023, 17:17:23
uZYNQ, gracias por tu respuesta.
 antes trabaje con el xc8 ahora lo hago en ccs por lo que no tengo acceso a las librerias xc8,  busque para descargarla pero no la he podido conseguir.

¿Y que librería necesitas y para qué?
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: uZYNQ en 09 de Febrero de 2023, 18:41:20
Citar
uZYNQ, gracias por tu respuesta.
 antes trabaje con el xc8 ahora lo hago en ccs por lo que no tengo acceso a las librerias xc8,  busque para descargarla pero no la he podido conseguir.

XC8 es el compilador de microchip, si quieres lo puedes descargar de su página. Normalmente se instala para trabajar con su IDE el MplabX. Pero ya que tu trabajas con CCS, fácilmente puede pasar ese código y no necesitas ninguna librería.

Saludos.
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: johenrod en 09 de Febrero de 2023, 19:26:35
una libreria que tiene xc8 de ejemplo de shift register del 74hc595
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: Eduardo2 en 09 de Febrero de 2023, 19:33:41
...
la idea es hacerlo con 12 de estos chips pero la idea es comenzar con 2 para ver el proceso.
creeria que puedo hacerlo con un pic de 8 bits y los datos almacenarlos en una variable de 16 y enviarlos.
como seria el proceso de envio de datos en el codigo, trabajo en CCS.

Con #USE SPI de CCS  podés enviar bloques de hasta 32 (o 40) bits.   En tu caso, siendo 12*8=96 bits vas a tener que enviar tandas de a 8 o 16 bits y al final un pulso en LE.

Algo asi:
Código: [Seleccionar]
#use spi (MASTER, CLK=PIN_B2,  DO=PIN_B1, BAUD=800000, MODE=0, BITS=8, LSB_FIRST)
#define LE  PIN_B3
y el envío de datos:
Código: [Seleccionar]
    spi_xfer(0xFF);  // primer dato
    spi_xfer(0x0F); 
    spi_xfer(0xF0);
    spi_xfer(0x11);
..............................
    spi_xfer(0x33);
    spi_xfer(0x55); // ultimo
   
    output_high(LE); // Pulso en LE
    delay_us(1) ;
    output_low(LE);
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: johenrod en 10 de Febrero de 2023, 00:06:19
Eduardo2, cordial saludo..
implemente tu sugerencia y los leds se quedan encendidos con un ligero titileo,, sera que los tiempos de este integrado son muy rigurosos?
lo implemente con un16f1827 no se si hay problema ya que tiene 2 spi.
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: Eduardo2 en 10 de Febrero de 2023, 00:56:29
Tiempos rigurosos para nada, mientras los tiempos relativos al clk, SDI y LE no estén al limite...   
Probá a una frecuencia baja (BAUD=1000) y retardá y ensancha el pulso LE
ej:
Código: [Seleccionar]
    //------------------------------
    delay_us(100) ; output_high(LE);
    delay_us(100) ; output_low(LE);
    delay_us(100) ;
    //------------------------------

Si desaparece el problema entonces era distorsión se la señal --> vas aumentando la velocidad y achicando el LE hasta un valor seguro.

Si lo sigue haciendo ya habrá que revisar software y hardware. Sobre todo el hardware, porque en Proteus es un violín.
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: johenrod en 10 de Febrero de 2023, 12:33:54
Tiempos rigurosos para nada, mientras los tiempos relativos al clk, SDI y LE no estén al limite...   
Probá a una frecuencia baja (BAUD=1000) y retardá y ensancha el pulso LE
ej:
Código: [Seleccionar]
    //------------------------------
    delay_us(100) ; output_high(LE);
    delay_us(100) ; output_low(LE);
    delay_us(100) ;
    //------------------------------

Si desaparece el problema entonces era distorsión se la señal --> vas aumentando la velocidad y achicando el LE hasta un valor seguro.

Si lo sigue haciendo ya habrá que revisar software y hardware. Sobre todo el hardware, porque en Proteus es un violín.
gracias Eduardo2,
bueno al menos ya me prenden aunque descontrolados..
una pregunta este ic tlc5925 tiene 16 salidas hay 3 ic en cascada pero  manejan 12 leds tricolor el primero solo los rojos el segundo solo los verdes y el tercero solo los azules pero al ser 12 quedan faltando 4 posiciones para desplazarsen los datos y llegar al 16 creo, es que empiezan a pasar los datos al al otro integrado, como se puede resolver ya que siempre hay un espacio de 4 pociciones no utilizadas?
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: Eduardo2 en 10 de Febrero de 2023, 14:45:11
...
bueno al menos ya me prenden aunque descontrolados..
Pero tenías razón con el MODE=0 , queda muy cerca el cambio del dato con el flanco del clock.  El que corresponde es MODE=2

Citar
una pregunta este ic tlc5925 tiene 16 salidas hay 3 ic en cascada pero  manejan 12 leds tricolor el primero solo los rojos el segundo solo los verdes y el tercero solo los azules pero al ser 12 quedan faltando 4 posiciones para desplazarsen los datos y llegar al 16 creo, es que empiezan a pasar los datos al al otro integrado, como se puede resolver ya que siempre hay un espacio de 4 pociciones no utilizadas?
Los 4 primeros o ultimos bits de cada tanda de 16 se llenan con cualquier cosa. Además, si vas a trabajarlo con esos datos te conviene que spi_xfer mande de a 16 bits.

Ejemplo
Código: [Seleccionar]
#use spi (MASTER, CLK=PIN_B2,  DO=PIN_B1, BAUD=500000, MODE=2 , BITS=16, LSB_FIRST)
Código: [Seleccionar]
    spi_xfer(0x0bbb);   // o 0xbbb0    según de qué lado estén los leds sin conexión
    spi_xfer(0x0ggg);   // o 0xggg0
    spi_xfer(0x0rrr);   // o 0xrrr0
   
    //------------------------------
    delay_us(2) ; output_high(LE);
    delay_us(2) ; output_low (LE);
    delay_us(2) ;
    //------------------------------


Título: Re:como configurar pic para shift register TLC5925?
Publicado por: johenrod en 12 de Febrero de 2023, 16:50:09
todo va muy bien , el problema si,, efectivamente era ruido con pull down lo solucione.
por ultimo que podria hacer para ahorrar memoria ya que en algun momento para llegar al ultimo IC deberia enviar 192 bits en 12 tandas de 16 bytes, se me ocurre una matrix.
algo como esto,, aunque no se si sirva bit a bit.

Código: C
  1. byte const s1d7[]={0b00000001,0b00000010,0b00000100,0b00001001,0b00010010,0b00100100,0b01001001,0b10010010
  2.                     0b00100100,0b01001000,0b10010000,0b00100000,0b01000000,0b10000000,0b00000000};//0-14
  3.                          
  4.      const signed int16   s2d7[]={0,2000,3500,5000};//0-2
  5.      const signed int16   s3d7[]={6000,4000,2500,1000};//0-2
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: Eduardo2 en 12 de Febrero de 2023, 21:13:14
...por ultimo que podria hacer para ahorrar memoria ya que en algun momento para llegar al ultimo IC deberia enviar 192 bits en 12 tandas de 16 bytes,

- Tu idea era poner los 12 TLC5925 en cascada, eso en memoria son 24 bytes y para alterar cualquier bit siempre vas a tener que transferir todo de nuevo. 

- Se podrían transferir bloques mas chicos, por ejemplo de 48 bits ( tres TLC5925 en cascada) pero necesitás disponer de dos pines mas. De esta manera tendría 3 pines LE para activar el grupo de TLC5925 que corresponda.

- También se puede ir recirculando los datos en anillo e ir alterando solo los bits que corresponda.  No consume memoria pero consume ciclos, pues si antes era transferir 192 bits, de esta forma son 384.

Pero es difícil sugerir porque sé muy poco de lo que querés ni porqué lo querés hacer así.
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: johenrod en 14 de Febrero de 2023, 14:40:25
muchas gracias por  toda la ayuda,,,
sin un pic no tiene "SPI"  se podria emular?
en algun momento requiero llamar una variable de 16 bits y luego ir pasando bit a bit a un pin,, tengo esto pero no me funciona
Código: C
  1. #bit   data = PORTa.1
  2.       const signed int16   secuencia[]={0b00000000000001,0b0000000000000010,0b0000000000000100};
  3.      
  4.      int16 n =0;
  5.      int16 x =0;
  6.      int16 y =0;
  7.      
  8.      
  9.       for (n=0;n<3;n++)
  10.      {      
  11.        x=secuencia[n]
  12.        for (y=0;y<16;y++)
  13.        {
  14.        data=x,y
  15.        }
  16.        
  17.        delay...
  18.      
  19.       }
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: DominusDRR en 14 de Febrero de 2023, 16:29:31
muchas gracias por  toda la ayuda,,,
sin un pic no tiene "SPI"  se podria emular?
en algun momento requiero llamar una variable de 16 bits y luego ir pasando bit a bit a un pin,, tengo esto pero no me funciona
Código: C
  1. #bit   data = PORTa.1
  2.       const signed int16   secuencia[]={0b00000000000001,0b0000000000000010,0b0000000000000100};
  3.      
  4.      int16 n =0;
  5.      int16 x =0;
  6.      int16 y =0;
  7.      
  8.      
  9.       for (n=0;n<3;n++)
  10.      {      
  11.        x=secuencia[n]
  12.        for (y=0;y<16;y++)
  13.        {
  14.        data=x,y
  15.        }
  16.        
  17.        delay...
  18.      
  19.       }

Sería algo similar el código de Xc8 que tu mismo compartiste

Código: C
  1. for (int i=0 ; i<16 ; i++){
  2.  
  3.         DATA_595 = (data >> i) & 0x01;
  4.  
  5.         clock();
  6.  
  7.     }
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: Eduardo2 en 14 de Febrero de 2023, 16:39:07
...sin un pic no tiene "SPI"  se podria emular?
Sí.  Es mas, #USE SPI  te genera código emulado si querés.
Como el código necesario es sencillo, puede ser preferible escribir el propio y que funcione como uno quiere.

Citar
en algun momento requiero llamar una variable de 16 bits y luego ir pasando bit a bit a un pin,, tengo esto pero no me funciona
...........
Probá asi:
Código: [Seleccionar]
      for (n=0;n<3;n++)
     {     
       x=secuencia[n] ;
       for (y=0;y<16;y++ , x>>=1)
       {
       data=bit_test(x,0) ;
       }
       
       delay...

Para sacar primero el MSB  cambiás  x>>=1 por x<<=1 y bit_test(x,0) por bit_test(x,15)
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: johenrod en 23 de Febrero de 2023, 15:54:49
les agradezco mucho, tal como me dijeron trabaja al pelo. ya estoy esperimentando con las secuencias.
estoy enviando datos asi,,,
Código: C
  1. const signed int16 sec0[]={   0b0000000000000000,0b0000000000000000,0b0000000000000000,  0b0000000000000000,0b0000000000000000,0b0000000000000000,    
  2.                               0b0000000000000000,0b0000000000000000,0b0000000000000000,   0b0000000000000000,0b0000000000000000,0b0000000000000000};                      
  3.  
  4. const signed int16 sec1[]={   0b1111111111111111,0b0000000000000000,0b0000000000000000,  0b1111111111111111,0b0000000000000000,0b0000000000000000,  
  5.                               0b1111111111111111,0b0000000000000000,0b0000000000000000,   0b1111111111111111,0b0000000000000000,0b0000000000000000};
  6.  
  7. const signed int16 sec2[]={   0b0000000000000000,0b1111111111111111,0b0000000000000000,  0b0000000000000000,0b1111111111111111,0b0000000000000000,  
  8.                               0b0000000000000000,0b1111111111111111,0b0000000000000000,   0b0000000000000000,0b1111111111111111,0b0000000000000000};
  9.  
  10. const signed int16 sec3[]={   0b0000000000000000,0b0000000000000000,0b1111111111111111,  0b0000000000000000,0b0000000000000000,0b1111111111111111,  
  11.                               0b0000000000000000,0b0000000000000000,0b1111111111111111,   0b0000000000000000,0b0000000000000000,0b1111111111111111};

me llama la atencion que con estas areglos tan grandes no se me incrementa el uso de la "RAM"

lo otro es que son muchas lineas para hacer una sola secuencia, se podria esto resumir un poco, estos son los detalles..

* son  4 modulos en cascada.
* cada modulo tiene 3 shift register uno para rojo otro para azul y otro para verde
* por lo que para encender un solo modulo digamos que en color blanco debo enviar 48 bits todos en "1"
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: DominusDRR en 23 de Febrero de 2023, 16:00:04
me llama la atencion que con estas areglos tan grandes no se me incrementa el uso de la "RAM"

Esto:
Código: C
  1. const
crea una constante en la memoria flash
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: DominusDRR en 23 de Febrero de 2023, 16:05:12
* son  4 modulos en cascada.


En lugar de conectarlos en cascada, posiblemente puedas conectarlos en paralelo, algo similar a esto:

(http://www.learningaboutelectronics.com/images/SPI-hardware-configuration.png)
Título: Re:como configurar pic para shift register TLC5925?
Publicado por: johenrod en 23 de Febrero de 2023, 16:38:15
que pena, no discrimine la forma de conexion.
(la entrada de datos el pic entra al primer shift r, luego por la salida conecta al segundo asi hasta el 12)
el circuito no tiene los esclavos independientes todo esta en paralelo, tiene señal de reloj , datos y latch para visualizar, se envian los bits requeridos y se habilita el latch y muestra el led segun el dato., por decir para encender el ultimo led envio primero un 1 y los otros 47 en cero habilito y enciende.
como decia cada modulo tiene 3 shift r,, el primer ic maneja los rojos el segundo los verdes y el tercero los azules de un led tricolor son 12 led por modulo , los SHIFT R, son de 16 bits por lo que se pierden los ultimos 4 de cada modulo.
Tambien me preocupan los ultimos 4 bits ya que me hacen un hueco entre los "shift r".