Autor Tema: Ayuda En PWM  (Leído 202 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Ivan Reyes

  • PIC10
  • *
  • Mensajes: 1
Ayuda En PWM
« en: 13 de Mayo de 2019, 19:45:54 »
Buen día chicos, espero puedan ayudar.

Sinceramente me acuerdo muy poco de programación en c, pero e estado recordando algunas cosa, lo que quiero realizar es un tarjeta con figurable por unos dips, segun se pueda controlar 2 salidas en diferentes ciclos, es decir salida 1 estaría encendida 2 minutos , mientras la salidas 2 encendería después de 1.5  minutos, la salida 2 activo durante .5 minutos y despues de 2 minutos apaga s1 y s2, y continua el ciclo en solo para s1 en forma inversa. Ademas que también se logre leer una lectura Analogica y controlar un pwm. y visualizar en un LCD si se presentan algunas alarmas segun sea activado el bit.

Con lo que pude entender en internet pude lograr este código pero no logro controlar el pwm y correr el ciclo antes mencionado.

#include <18f4550.h>
#device adc =10           // PIC  18F4550
#device high_ints=true
#fuses XT, NOWDT, NOPROTECT
#use delay(clock=4Mhz)


#define LCD_RS_PIN PIN_B0
#define LCD_RW_PIN PIN_B1
#define LCD_ENABLE_PIN PIN_B2
#define LCD_DATA4 PIN_B4
#define LCD_DATA5 PIN_B5
#define LCD_DATA6 PIN_B6
#define LCD_DATA7 PIN_B7
#define <DS1307.c>


#include <lcd.c>

#define S1    PIN_d0    //Semaforo 5 de Mayo Rojo
#define S2    PIN_d1    //Semaforo 5 de Mayo Amarillo
#define P3    PIN_d2    //Semaforo 5 de Mayp Verde

#define P4    PIN_d3    //Semaforo 4 Ote Rojo
#define P5    PIN_d4    //Semaforo 4 Ote Amarillo
#define P6    PIN_d5    //Semaforo 4 Ote Verde

#define P7    PIN_d6    //Semaforo Peatonal Rojo
#define p8    PIN_d7    //Semaforo Peatonal Verde

#define retardo 500   // Tiempo para hacer que Luz verde palpite. Medio Segundo

 #INT_TIMER1 high
 int minutos=0;
 int segundos=0;
 
int16 duty=0;
int Timer2,Poscaler;
 
void pwm()
{

timer2=249;
Poscaler=1;

setup_timer_2(t2_div_by_4,Timer2,Poscaler);
setup_ccp1(ccp_pwm);


setup_adc_ports(an0);
setup_adc(adc_clock_internal);
while (1){

 set_adc_channel(4);
 delay_us(100);
 duty=read_adc();
 set_pwm1_duty(duty);
}
}



void secuencia0()
{

}

void alarma1(void)
{
   lcd_init();
   lcd_gotoxy(1,1);
   printf(lcd_putc,"Alarma Ozonador");
   lcd_gotoxy(1,2);
   printf(lcd_putc,"Baja Presion Secador");
   
}

void alarma2(void)
{
   lcd_init();
   lcd_gotoxy(1,1);
   printf(lcd_putc,"Alarma Ozonador");
   lcd_gotoxy(1,2);
   printf(lcd_putc,"");
}

void alarma3(void)
{

   lcd_init();
   int8 i=0;
   lcd_gotoxy(1,1);
   printf(lcd_putc,"ALARMA OZONADOR2
   ");
   i++;
   delay_ms(1000);
}

void alarma4(void)
{

   lcd_init();
   int8 i=0;
   lcd_gotoxy(1,1);
   printf(lcd_putc,"ALARMA OZONADOR3
   ");
   i++;
   delay_ms(1000);
}

void secuencia1(void)
{
while((input(PIN_A3)==0)&&(input(PIN_A2)==0)&&(input(PIN_A1)==0)&&(input(PIN_A0)==1))
{

segundos++;
delay_ms(1000);

if (segundos==60)
   {
   minutos ++; segundos=0;
   }
if (minutos==4)
   {
   minutos =0;
   }
if (minutos==0)
    {
     output_high(PIN_D0);
    }
if (minutos==2)
    {
     output_low(PIN_D0);
    }
   
   lcd_init();
  lcd_gotoxy(7,1);
  printf(lcd_putc,"T=%u",segundos);
  lcd_gotoxy(7,2);
  printf(lcd_putc,"T=%u",minutos);
 
If(segundos==0)
{

}

if ((input(PIN_C0)==1))
   alarma1();
if ((input(PIN_C1)==1))
   alarma2();
if ((input(PIN_C2)==1))
   alarma3();
if ((input(PIN_C4)==1))
   alarma4();


}
}
// Primer secuencia

void secuencia2()
{

while((input(PIN_A3)==0)&&(input(PIN_A2)==0)&&(input(PIN_A1)==1)&&(input(PIN_A0)==1))
{

segundos++;
delay_ms(1000);
if (segundos==60)
   {
   minutos ++; segundos=0;
   }
if (minutos==4)
   {
   minutos =0;
   }

if (minutos >=0)
    {
     output_high(PIN_D1); // Enciende S2
    }
if (minutos >=2 )
    {
    output_low(PIN_D1); // Apaga S2, despues de 2 min
    output_low(PIN_D0);
    }
if (minutos==1 && segundos==30)
    {
     output_high(PIN_D0);
    }
if (minutos==3 && segundos==30)
    {
     output_high(PIN_D0);
    } 
if (minutos ==4 )
    {
    output_low(PIN_D1); // Apaga S2, despues de 2 min
    output_low(PIN_D0);
    segundos=0;
    }

   
  lcd_init();
  lcd_gotoxy(7,1);
  printf(lcd_putc,"T=%u",segundos);
  lcd_gotoxy(7,2);
  printf(lcd_putc,"T=%u",minutos);
}

}
void secuencia3()
{
   lcd_init();
   int8 i=0;
   lcd_gotoxy(1,1);
   printf(lcd_putc,"Hol3333");
   i++;
   delay_ms(1000);
}
void secuencia4()
{
 lcd_init();
   int8 i=0;
   lcd_gotoxy(1,1);
   printf(lcd_putc,"Pinche che");
   i++;
   delay_ms(1000);
}

void main()
{
setup_wdt(WDT_OFF);
setup_timer_1(T1_EXTERNAL|T1_DIV_BY_1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_oscillator (FAlSE);
enable_interrupts(INT_TIMER1);
enable_interrupts(GLOBAL);
set_timer1(0);





 
 
 while (TRUE)
{
//Realiza la comparatiba de bits
// 0, 0, 0, 0
// 0, 0, 0, 1
// 0, 0, 1, 1
// 0, 1, 1, 1


 
if ((input(PIN_A3)==0)&&(input(PIN_A2)==0)&&(input(PIN_A1)==0)&&(input(PIN_A0)==0))
   void secuencia0();
   
if ((input(PIN_A3)==0)&&(input(PIN_A2)==0)&&(input(PIN_A1)==0)&&(input(PIN_A0)==1))
   // secuencia1();
   pwm();
if ((input(PIN_A3)==0)&&(input(PIN_a2)==0)&&(input(PIN_A1)==1)&&(input(PIN_A0)==1))
   secuencia2();
if ((input(PIN_A3)==0)&&(input(PIN_A2)==1)&&(input(PIN_A1)==1)&&(input(PIN_A1)==1))
   secuencia4();
 
}

}

Espero Puedan guiarme y darme ideas.

Gracias
 


 

anything