Autor Tema: voltimetro sin adc  (Leído 1374 veces)

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

Desconectado callecuatro1976

  • PIC12
  • **
  • Mensajes: 85
voltimetro sin adc
« en: 27 de Julio de 2021, 13:17:48 »
Código: [Seleccionar]
hola necesito de su ayuda como hacer para concatenar el contador con el ciclo activo, no se me ocurre como hacer , subo el código , gracias 
[

#include <16f886.h>
#device ADC=10
#use     delay(internal = 8MHz)                           
#define  LCD_DATA_PORT getenv("SFR:PORTC")
#include <flex_lcd.c>

#define LCD_RW_PIN    PIN_C3

#define    pin_decr    PIN_a4
#define    pin_incr    PIN_a5
   float conteo = 0;
    int16 cont_r = 0, retardo;
 int16 cont3;
  int8   ciclo_activo=1;
 
 void establecer_ciclo (int8 ciclo)
{
   
    set_pwm1_duty(ciclo);   
     
}


void mostrar_conteo (float conteo)
{
    if(conteo < 10)
    {   
        lcd_gotoxy(11,1);
        printf(lcd_putc,"V:%0.1f ", conteo);
    }
    else
    {
        lcd_gotoxy(11,1);
        printf(lcd_putc,"V:%0.1f ", conteo);
    }
}



void voltimetro(void)
{

  retardo = 150;
       
        if(!input_state(pin_decr))
        {
            while(!input_state(pin_decr))
            {
                  ciclo_activo --;  // Disminuir el ciclo activo.
                    if (ciclo_activo <= 1) ciclo_activo = 0;
                establecer_ciclo(ciclo_activo);
               
               
               
               

     
                 cont_r ++;
                if(cont_r > 9)        // Si "cont_r" llega a 10, se reduce el retardo.
                    retardo = 50;
                else
                    retardo = 250;
                   
                conteo -= 0.1;
           
                if(conteo <= 0)
                {
                    conteo = 0;
                    cont_r = 0;        // Para evitar el desborde por mantener el pulsador presionado.
                }
           
                mostrar_conteo(conteo);
               
                delay_ms(retardo);
            }
            cont_r = 0;                // Limpiar "cont_r" si no se entra al bucle.
        }
       
        if(!input_state(pin_incr))
        {
            while(!input_state(pin_incr))
            {
              ciclo_activo ++;  // Incrementar el ciclo activo.
                establecer_ciclo(ciclo_activo);
               
               
                cont_r ++;
                 
 
                if(cont_r > 9)        // Si "cont_r" llega a 10, se reduce el retardo.
                    retardo = 50;
                else
                    retardo = 250;
                   
                conteo += 0.1;
           
                if(conteo > 17)
                {
                    conteo = 17;
                    cont_r = 0;        // Para evitar el desborde por mantener el pulsador presionado.
                }
           
                mostrar_conteo(conteo);
             
   
                delay_ms(retardo);
            }
            cont_r = 0;                // Limpiar "cont_r" si no se entra al bucle.
        }
       
}
void energia()   
{

if(input(pin_B4)==0){
cont3++;
delay_ms(1);
if (cont3 >10) {
write_eeprom(03,ciclo_activo );
delay_ms(50);
cont3 = 0;             
               }
                  }
}
void volta()   
{

if(input(pin_B4)==0){
cont3++;
delay_ms(1);
if (cont3 >10) {
write_eeprom(04,conteo );
delay_ms(50);
cont3 = 0;             
               }
                  }
}
void main (void)
{

 ciclo_activo =read_eeprom(03);                   
    establecer_ciclo(ciclo_activo);   
   
 setup_ccp1(CCP_PWM);
   setup_timer_2(T2_DIV_BY_4,249,1);   // 1000 Hz. @ 4 MHz.
   set_pwm1_duty(1);                   // Ciclo activo al mínimo
   
   setup_adc_ports(sAN1|san3|san11);
   setup_adc(ADC_CLOCK_INTERNAL);
   
   setup_timer_1(T1_INTERNAL | T1_DIV_BY_8);
   enable_interrupts(int_ext);
   ext_int_edge(0,L_TO_H);
   enable_interrupts(global);



  #ZERO_RAM

 
   
    lcd_init();
   
    mostrar_conteo(conteo);
   
    while (TRUE)
   
    {
 
 
    voltimetro();
   
               
         
    }
 
}]
« Última modificación: 27 de Julio de 2021, 14:31:44 por callecuatro1976 »

Desconectado callecuatro1976

  • PIC12
  • **
  • Mensajes: 85
Re:voltimetro sin adc
« Respuesta #1 en: 29 de Julio de 2021, 16:08:48 »
puede hacerlo funcionar mejor ahora no se porque cuando toco el pulsador que incrementa en el primer pulso se va al maximo, subo el archivo de proteus y el codigo , gracias


 

anything