TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Ivan Reyes 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