Aquí tengo algo con color
#INCLUDE <18F2550.h>
#FUSES PLL5, CPUDIV1, NOUSBDIV, HSPLL, NOFCMEN, NOIESO
#FUSES PUT, NOBROWNOUT, NOVREGEN, NOWDT, CCP2C1, NOPBADEN
#FUSES NOLPT1OSC, MCLR, STVREN, NOLVP, NOXINST, NODEBUG, PROTECT
#USE DELAY (CLOCK = 48 000 000)
#USE FAST_IO (A)
#USE FAST_IO (B)
#USE FAST_IO (C)
#DEFINE LED PIN_A0
#DEFINE R PIN_B2
#DEFINE B PIN_B1
#DEFINE G PIN_B0
#DEFINE HS PIN_C0
#DEFINE VS PIN_C1
#BIT T0IF = 0xFF2.2
#BIT T1IF = 0xF9E.0
int16 cont = 509;
int1 EstadoHS;
int8 dat = 0b111;
void main (void)
{
set_tris_a(0);
set_tris_b(0);
set_tris_c(0);
delay_us(500);
EstadoHS = 1;
output_high(VS);
output_high(HS);
output_low(G);
output_low(R);
output_low(B);
delay_ms(17);
setup_timer_0(T0_INTERNAL | T0_DIV_1);
set_timer0(65362);
enable_interrupts(INT_TIMER0);
setup_timer_1(T1_INTERNAL | T1_DIV_BY_1);
set_timer1(0);
//enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
while (true)
{
delay_ms(100);
dat--;
if (dat == 255) dat = 0b111;
}
}
#INT_GLOBAL
void isr_h(void)
{
static int1 Flag1=0;
// T = 32us, Tlow=3.82us
if (T0IF)
{
output_b(0);
if (estadoHS == 1)
{
set_timer0(65505);
output_low(HS);
if (++cont > 480) Flag1 = 1;
}
else
{
set_timer0(65211);
output_high(HS);
if (Flag1)
{
if (cont == 510)
output_low(VS);
if (cont == 512)
output_high(VS);
if (cont == 521)
{
cont = 0; Flag1 = 0;
}
}
else
{
delay_us(1); delay_cycles(6);
output_b(dat);
}
}
EstadoHS++;
}
clear_interrupt(INT_TIMER0);
}
A diferencia del primero, he cambiado los pines RGB al puerto B para poder conmutarlos paralelamente. También, el periodo de Hs es de 32us con 3.82us en bajo.
Decir que aun estoy muy ajustado con los tiempos para hacer algo un poco mas allá, tal vez sea porque gran parte (por no decir todo) del código lo estoy tratando dentro de la interrupción del TMR0. He intentado poner la ejecución de la lineas RGB y VS en el while pero tengo problemas de sincronismo.
Posiblemente, si no me da por pasarme de una vez a un PIC24 o mayor, pueda perfeccionar el código un poco más, pero de verdad que me da muchos dolores de cabeza
También, estaba pensando en aumentar los colores hasta 64, usando un pin mas en paralelo por cada linea RGB, pues aún me quedan pines del puerto B.
Gracias!