Autor Tema: se me desactivan las entradas digitales al usar el modulo CCP O EL TIMER 2  (Leído 2182 veces)

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

Desconectado EDJMM91

  • PIC10
  • *
  • Mensajes: 5
hola  a todos . soy novato , actualmente estoy en un proyecto que usa varias funciones, usando el pic 16f877a un lcd 16*4 , donde en cada una de las funciones uso varias teclas donde una de las teclas uso una rutina para salirme de los bucles " usando unos if leyendo una entrada, con un push button en la tecla ya definida como SALIR (#define SALIR   PIN_E2). dicho pin ya antes configurado como entrada en el main,  todo perfecto funciona como quiero en cada función  . pero en una función en especifica donde uso el adc el timer_0 y el puerto CCP1 para generar una señal pwm ,esta función entra en un bucle para leer constantemente la entrada analogica  en AN0 , PERO AL ENTRAR EN ESTE BUCLE el programa funciona y muestra los resultados esperados en el lcd y hasta lee la entrada analogica en AN0. casi todo ok, PERO  al parecer se desactivan las ENTRADAS DIGITALES y cuando quiero usar la tecla salir, o quiero usar cualquier otra tecla  no funciona a menos que haga un reset al micro , es como sin se desactivaran las entradas digitales o no me reconoce ningún botton , todavia no consigo el error , si hay alguien que sepa ayudarme estare muy agradecido . aclaro que la funcion que quiero usar es esta , y funciona perfectamente en cualquier otra función donde no use el adc los timers y ccp1 
Código: [Seleccionar]
  //  ESTA SIGUIENTE INSTRUCCION NO ME FUNCIOINA YA QUE NO RECONOCE LAS ENTRADAS DIGITALES EN DICHO PUERTO
        // EN OTRAS FUNCIONES SI FUNCIONA MIENTRAS NO USE EL TIMER 2 O EL MODULO modulo CCP1
        if (input(SALIR) == 0) {
            DELAY_MS(250);
            if (input(SALIR) == 1) {
                DELAY_MS(10);
                men = 6;
                break;
            }
        } 



y aquí la funcion completa

Código: [Seleccionar]
void PWM_SENAL() {
    lcd_putc("\f");
    lcd_gotoxy(1, 1);
    lcd_putc("\fGENERANDO SEÑAL ");
    lcd_gotoxy(1, 2);
    lcd_putc("PWM DE 0 A 1KHZ ");
    lcd_gotoxy(1, 3);
    lcd_putc("AJUSTAR ANCHO   ");
    // Generemos una Señal cuadrada de 1 Khz
    Timer2 = 249; //Se carga timer 2 con 249 como lo vimos en la pagina
    //Preescaler=4;  //Preescaler solo puede tomar valores de: 1 - 4 - 16
    //Para el preescaler colocamos "t2_div_by_4"
    Poscaler = 1; //Preescaler solo puede tomar valores de: 1
    //setup_timer_2(T2_DIV_BY_16, 15, 1);
    //    setup_timer_2(T2_DIV_BY_4,249,1);
    //Configuracion de Timer 2 para establecer frec. PWM a 1kHz
    setup_timer_2(t2_div_by_4, Timer2, Poscaler);
    //Configurar modulo CCP1 en modo PWM
    setup_ccp1(ccp_pwm);
    //Configurar ADC
    setup_adc_ports(ALL_ANALOG);
    setup_adc(ADC_CLOCK_INTERNAL);
   // aqui entro en el bucle
    while (TRUE) {
        set_adc_channel(0);
        delay_us(100);
        duty = read_adc();
        set_pwm1_duty(duty);
        lcd_gotoxy(1, 4);
        printf(lcd_putc, " PWM: %4Lu ", duty);
        //   RUTINA PARA SALIR DEL BUCLE usando la tecla salir
        DELAY_MS(10);
       
      //  ESTA SIGUIENTE INSTRUCCION NO ME FUNCIOINA YA QUE NO RECONOCE LAS ENTRADAS
      // DIGITALES EN DICHO PUERTO
      // EN OTRAS FUNCIONES SI FUNCIONA MIENTRAS NO USE EL TIMER 2 O EL MODULO modulo 
     //CCP1

        if (input(SALIR) == 0) {
            DELAY_MS(250);
            if (input(SALIR) == 1) {
                DELAY_MS(10);
                men = 6;
                break;
            }
        }
    }
}

Desconectado EDJMM91

  • PIC10
  • *
  • Mensajes: 5
Re:se me desactivan las entradas digitales al usar el modulo CCP O EL TIMER 2
« Respuesta #1 en: 19 de Octubre de 2019, 21:59:07 »
// me respondo yo mismo la solución era , desactivar las entradas analógicas y ponerlas como digitales antes de leer la tecla y volver a configurar entradas analógicas despues de leer la tecla salir . y asi quedo .
Código: C
  1. void PWM_SENAL() {
  2.     lcd_putc("\f");
  3.     lcd_gotoxy(1, 1);
  4.     //          ****************
  5.     lcd_putc("\fGENERANDO SEÑAL ");
  6.     lcd_gotoxy(1, 2);
  7.     lcd_putc("PWM DE 0 A 1KHZ ");
  8.     lcd_gotoxy(1, 3);
  9.     lcd_putc("AJUSTAR ANCHO   ");
  10.     // Generemos una Señal cuadrada de 1 Khz
  11.     Timer2 = 249; //Se carga timer 2 con 249 como lo vimos en la pagina
  12.     //Preescaler=4;  //Preescaler solo puede tomar valores de: 1 - 4 - 16
  13.     //Para el preescaler colocamos "t2_div_by_4"
  14.     Poscaler = 1; //Preescaler solo puede tomar valores de: 1
  15.     //setup_timer_2(T2_DIV_BY_16, 15, 1);
  16.     //    setup_timer_2(T2_DIV_BY_4,249,1);
  17.     setup_timer_2(t2_div_by_4, Timer2, Poscaler); //Configuracion de Timer 2 para establecer frec. PWM a 1kHz
  18.     setup_ccp1(ccp_pwm); //Configurar modulo CCP1 en modo PWM
  19.     setup_adc_ports(ALL_ANALOG); //Configurar ADC
  20.     setup_adc(ADC_CLOCK_INTERNAL);
  21.     while (TRUE) {
  22.  
  23.         // CONFIGURO EL ADC
  24.         set_adc_channel(0);
  25.         delay_us(100);
  26.         duty = read_adc();
  27.         set_pwm1_duty(duty);
  28.         DELAY_MS(10);
  29.         // MUESTRO EN LA PANTALLA LOS RESULTADOS
  30.         lcd_gotoxy(1, 4);
  31.         printf(lcd_putc, " PWM: %4Lu ", duty);
  32.         //   RUTINA PARA SALIR DEL BUCLE usando la tecla salir
  33.  
  34.         // DESACTIVO ENTRADAS ANALOGICAS  PARA PODER LEER LAS TECLAS // QUEDAN COMO DIGITALES
  35.         setup_adc_ports(NO_ANALOGS);
  36.         setup_comparator(NC_NC_NC_NC);
  37.  
  38.         if (input(SALIR) == 0) {
  39.             DELAY_MS(250);
  40.             if (input(SALIR) == 1) {
  41.                 DELAY_MS(10);
  42.                 men = 6;
  43.                 break;
  44.             }
  45.         }
  46.         DELAY_MS(10);
  47.         // vuelvo a configurar  el ADC
  48.         setup_adc_ports(ALL_ANALOG); //Configurar ADC
  49.         setup_adc(ADC_CLOCK_INTERNAL);
  50.     }
  51. }

Desconectado EDJMM91

  • PIC10
  • *
  • Mensajes: 5
Re:se me desactivan las entradas digitales al usar el modulo CCP O EL TIMER 2
« Respuesta #2 en: 19 de Octubre de 2019, 22:06:22 »