Bueno en base a todo lo que aprendi quice hacer el dimmer.. pero no tuve exito. El problema es que no se seba nunca el Triac.
aca dejo el codigo a ver que ven anormal ustedes que yo no veo:
para variar la intencidad, vario una variable que se llama Intencidad. el ADC no lo uso por ahora solo para pueva, no lo miren...
#include <18f2550.h>
#device adc=8
//FUSES Y OCILADOR
#fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG
#use delay(oscillator=20M)
//DEFINO PARA EL LCD
#define LCD_DB4 PIN_B4
#define LCD_DB5 PIN_B5
#define LCD_DB6 PIN_B6
#define LCD_DB7 PIN_B7
#define LCD_RS PIN_B1
#define LCD_E PIN_B2
#define triac_on output_high(pin_a1)
#define triac_off output_low(pin_a1)
#define PIN1_ON output_high(pin_c0)
#define PIN1_OFF output_low(pin_c0)
#define PIN2_ON output_high(pin_c1)
#define PIN2_OFF output_low(pin_c1)
//CONSTANTE
//const int TotalTiempo=255; //Tiempo total q demora cada medio ciclo
//VARIABLES
int PasosDimer; // se incrementa en 1 cada X vueltas del timer, coincidendo con la captura de bits del mando
int Intencidad; //Variable de
int j=0; // Identifica Cruce por 0 si es alto o bajo
//INCLUDE LIBRERIAS
#include <LCD.lib>
//TIEMPO
#INT_TIMER0
void Desbordamiento()
{
set_timer0(255);//51.2us
PasosDimer++;
if (PasosDimer == Intencidad ){ //Si Tiempo es igual a Pote disparo Trian
triac_on;
}
triac_off;
}
//DETECTO PASO POR 0
#INT_EXT
void CrucePor0()
{
Intencidad = 100;//Regulo la intencidad manual mente por ahora variando esta variable y compilando (de 1 a 195)
PasosDimer=0;
if (j==0){
j=1;
PIN1_ON;
PIN2_OFF;
ext_int_edge(H_TO_L); // Cambio la detección del flanco, para que la proxima sea de bajada
}
else {
j=0;
PIN1_OFF;
PIN2_ON;
ext_int_edge(L_TO_H); // La próxima interrupción será de subida
}
}
//LECTURA ANALOGICA(NO LA USO POR AHORA)
#INT_AD
void leer()
{
// Intencidad = read_adc();
}
//MAIN
void main(void){
//INICIALIZO LCD
lcd_init();
//ADC
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc(AN0_ANALOG);
enable_interrupts(INT_AD);
//TIMER
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256);
//disable_interrupts(INT_TIMER0);
enable_interrupts(INT_TIMER0);
set_timer0(255);
//INTERUPCION
ext_int_edge(L_TO_H);
enable_interrupts(INT_EXT);
//GLOBAL
enable_interrupts(GLOBAL);
//SETEO CANCAR DE ADC
set_adc_channel(0);
//TIEMPO PARA Q TOME CONFIGURACIONES ADC
delay_ms(10);
for(;;){
//Muestro la variable PASOSDIMER
lcd_gotoxy(1,1);
printf(lcd_putc,"Timer: ");
lcd_gotoxy(8,1);
printf(lcd_putc,"%u",PasosDimer);
//Muestro la variable Intencidad
lcd_gotoxy(1,2);
printf(lcd_putc,"Intencidad: ");
lcd_gotoxy(12,2);
printf(lcd_putc," %u", Intencidad);
//Empieso Lectura
read_ADC(ADC_START_ONLY);
}
}
Saludos..