#include <16F88.h>
#fuses INTRC,NOWDT,NOPROTECT,NOLVP,NOPUT,NOBROWNOUT,NOMCLR,NOCPD,NOWRT
#use delay(clock=8000000) //8MHz
#use rs232(baud=9600, xmit=PIN_B5, rcv=PIN_B2)
////////////////////////////////////////////////////////////////////////////////
//////////////////////// Rutina del Temporizador 1 //////////////////////////
////////////////////////////////////////////////////////////////////////////////
// Esta interrupción se activa cuando hemos transmitido 4095 pulsos de GSCLK (a través de PORTC0) //
// y nos avisa de que debemos generar el pulso de reseteo BLANK //
#INT_TIMER1
void inter1(){
set_timer1(0xF000); // Recarga el TIMER1 para una nueva cuenta de 4095
output_toggle(PIN_A1); // solo para mirar en el osciloscopio para asegurarme que este funcionando la INT_TIMER1
}
////////////////////////////////////////////////////////////////////////////////
///////////////////////////////// PRINCIPAL //////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
void main(){
setup_oscillator(OSC_8MHZ);
SETUP_ADC(ADC_OFF);
setup_timer_1 (T1_INTERNAL | T1_CLK_OUT | T1_DIV_BY_1); // Configuracion de TIMER1, reloj interno, preescaler de 1 y salida por PORTC0.
enable_interrupts(INT_TIMER1); // Habilita el flag de interrupción de TIMER1
enable_interrupts(GLOBAL); // Activamos interrupciones globales
set_timer1(0xF000); // Recarga el TIMER0 para contar 4095 pulsos
printf("Test");
for(;;){
output_toggle(PIN_A2); //solo para mirar en el osciloscopio para asegurarme que este funcionando el Micro
delay_ms(10);
}
}need help with tlc5940 interface.
anyone can give me some code example or ideas for implementation?
thanks
Ok.... al fin he logrado hechar a correr este Bicho de 28 patas, los resultados son muy buenos y prueba de ello es el video que adjunto. (aunque se puede notar un pequeño flickering ante la camara, frente al ojo humano, la vision es perfecta, nada pero absolutamente nada de flickering.... incluso en movimiento fisico de la matriz)
en este muestro como cubro una matriz completa de forma multiplexada y heciendo un fade muy rapido, luego se ven unos destellos los que acusan de una reprogramacion para disminuir el tiempo de escaneo que hago en las filas y dar a mostrar el multiplexado, y por ultimo vuelvo a subir el mismo para mostrar un fade mas lento cubriendo la gama completa que me permite este, osea 4096 pasos...
de momento esto esta todo hecho solo con estos acompañantes....
1 -> PIC16F887
2 -> TLC5940
7 -> IRF9540
1 -> PICKIT2 (este esta encargado de programar y alimentar todo esto, si incluyendo la matriz por el puerto USB =P... que abuso, no...)
cuando tenga algo mas ordenado todo el codigo y tiempo lo subire como una libreria para ir depurandola y ampliandola con la ayuda de sus comentarios...
Saludossss....
#include<18F4685.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock = 800000)
#use fast_io (B)
#use spi(DI=PIN_C4,DO=PIN_C5, CLK=PIN_C3, BITS=12, MODE=0, MSB_FIRST, STREAM=envio)
#define GSCLK PIN_C0
#define BLANK PIN_C1
#define XLAT PIN_C2
//EN 18f4685
// SDO ---> C5
// SDI ---> C4 NO USADO
// SCK ---> C3
// XLAT ---> C2
// BLANK ---> C1
// GSCLK ---> C0
//EN TLC5940
//VPRG---> 27 ----> GND (SOLO GS)
//DCGRG--> 19 ----> +5
void main(){
SET_TRIS_B( 0x80 );
output_low(XLAT);
output_high(BLANK);
output_low(GSCLK);
int16 count;
int first;
unsigned int inf;
unsigned char a;
const unsigned int CHANNELS[16] = {0x000,0xfff,0x000,0xfff,0x000,0xfff,0x000,0xfff,
0x000,0xfff,0x000,0xfff,0x000,0xfff,0x000,0xfff};
const unsigned int CHANNELSA[16] = {0xfff,0x000,0xfff,0x000,0xfff,0x000,0xfff,0x000,
0xfff,0x000,0xfff,0x000,0xfff,0x000,0xfff,0xfff};
first=1;
while(TRUE){
if (input(PIN_B7)){
for (a = 16;a > 0;a --) // 16 ciclos
{ inf = CHANNELS[a-1]; // Carga el canal MSB
spi_xfer(envio, inf, 12);}}
else {
for (a = 16;a > 0;a --) // 16 ciclos
{ inf = CHANNELSA[a-1]; // Carga el canal MSB
spi_xfer(envio, inf, 12);}
}
output_high(XLAT);
output_low(XLAT);
output_low(BLANK);
if (first == 1){ //PRIMERA VEZ
output_high(GSCLK);
output_low(GSCLK);
first++;
}
for (count = 1; count <= 4096;count ++) {
output_high(GSCLK);
output_low(GSCLK);
}
output_high(BLANK);
}
}
Los leds RGB se conectan a la patilla del TLC sin resistencia limitadora ??
Si, sin resistencias. La resistencia en IREF establece la corriente. En el datasheet podes verlo en la sección SETTING MAXIMUM CHANNEL CURRENT
Mi duda es porque alimentas con una tension bastante más alta que la necesaria. No podrías hacer una fuente para alimentar los LED más cercana a la necesaria? Me parece un desperdcio de energía poner esa R en serie...
Saludos!
... me llamo la atención que en la placa demo de TI, hay solo un led RGB por salida, y tres TLC (uno por color) para controlar solo 16 leds RGB.16 leds = 48 canales, de ahí tres drivers
Bueno nos fuimos por lo simple, el data dice que si soporta "hablamos del encapsulado DIP", 17v. de caída de voltaje 120mA por salida mmm solo requerimos 60mA maximo (cálculos), perfecto sin resistencias esto se aplico en un marcador electrónico para uso exterior los resultados; bueno si se calientan un poco =)El encapsulado DIP el 5940 soporta como máximo 2,5W. Se lo podes sacar a una sola salida (17V*120mA=2W) o dividirlo en varias salidas (ver figura 4 del datasheet). Pero no le podes sacar nunca 2W por salida....
Según la data, en el mejor de los casos disipa aproximadamente 4W.El tema es que hay que calcular todo para que soporte el 100% de duty cicle en cada salida por si queremos tener el panel con color blanco por mucho tiempo... El PWM es en este caso para conseguir los diversos colores.
¿No será que al gestionar los leds mediante switching no necesita disipar esa potencia porque la mayor parte del tiempo están desconectados?, así es como los reguladores switching son capaces de gestionar bastantes amperios sin levantar apenas la temperatura.
hay métodos de incluir una sola resistencia para las 8 salidas, con la desventaja de ser una resistencia grande o utilizar diodos rectificadores en serie para absorber el exceso de voltaje de VLED eliminandoDisipar la potencia en resistencias o diodos es lo mismo. En el diodod será Vf * Iled lo que se disipe y con resistencia será Iled*Iled*R, pero es lo mismo...
la colocación de resistencias por salida. sin embargo depende de la aplicación.
En el cultivode marihua..de interior, si no recuerdo mal, se usan azules en la floración y rojos para el crecimiento (o puede que al revés), y solucionan ...