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.
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.
es eso exactamente lo que no he podido implementar, tengo dudas con esos diagramas de tiempo.
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.
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.
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.
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.Citartan 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 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
/* * File: main.c * Author: Sourav Gupta * By:- circuitdigest.com * Created on May 30, 2018, 2:26 PM */ // PIC16F877A Configuration Bit Settings // 'C' source line config statements // CONFIG #pragma config FOSC = HS // Oscillator Selection bits (HS oscillator) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled) #pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled) #pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled) #pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off) #pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control) #pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off) #include <xc.h> /* Hardware related definition */ #define _XTAL_FREQ 20000000 //Crystal Frequency, used in delay #define DATA_595 PORTBbits.RB0 #define STROBE_595 PORTBbits.RB1 #define CLK_595 PORTBbits.RB2 #define LED PORTBbits.RB3 /* Other Specific definition */ void system_init(void); /* *This function will enable the Clock. */ CLK_595 = 1; __delay_us(500); CLK_595 = 0; __delay_us(500); } /* *This function will strobe and enable the output trigger. */ void strobe(void){ STROBE_595 = 1; __delay_us(500); STROBE_595 = 0; } /* * This function will send the data to shift register */ void data_submit(unsigned int data){ for (int i=0 ; i<8 ; i++){ DATA_595 = (data >> i) & 0x01; } strobe(); // Data finally submitted } void main(void) { system_init(); // System getting ready while(1){ data_submit(0b00000000); __delay_ms(200); data_submit(0b10000000); __delay_ms(200); data_submit(0b01000000); __delay_ms(200); data_submit(0b00100000); __delay_ms(200); data_submit(0b00010000); __delay_ms(200); data_submit(0b00001000); __delay_ms(200); data_submit(0b00000100); __delay_ms(200); data_submit(0b00000010); __delay_ms(200); data_submit(0b00000001); __delay_ms(200); data_submit(0xFF); __delay_ms(200); } return; } /* This Function is for system initialisations. */ void system_init(void){ TRISB = 0x00; }
#include <xc.h>
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.
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.
...
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.
#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: 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);
//------------------------------
delay_us(100) ; output_high(LE);
delay_us(100) ; output_low(LE);
delay_us(100) ;
//------------------------------
Tiempos rigurosos para nada, mientras los tiempos relativos al clk, SDI y LE no estén al limite...gracias Eduardo2,
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.
...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
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?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.
#use spi (MASTER, CLK=PIN_B2, DO=PIN_B1, BAUD=500000, MODE=2 , BITS=16, LSB_FIRST)
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) ;
//------------------------------
...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,
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 funcionaCódigo: C
#bit data = PORTa.1 const signed int16 secuencia[]={0b00000000000001,0b0000000000000010,0b0000000000000100}; int16 n =0; int16 x =0; int16 y =0; for (n=0;n<3;n++) { x=secuencia[n] for (y=0;y<16;y++) { data=x,y } delay... }
...sin un pic no tiene "SPI" se podria emular?Sí. Es mas, #USE SPI te genera código emulado si querés.
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 funcionaProbá asi:
...........
for (n=0;n<3;n++)
{
x=secuencia[n] ;
for (y=0;y<16;y++ , x>>=1)
{
data=bit_test(x,0) ;
}
delay...
me llama la atencion que con estas areglos tan grandes no se me incrementa el uso de la "RAM"
* son 4 modulos en cascada.