Autor Tema: timer1 en pic16f877A  (Leído 6552 veces)

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

Desconectado aprada

  • PIC10
  • *
  • Mensajes: 9
timer1 en pic16f877A
« en: 14 de Mayo de 2007, 20:00:26 »
hola ... estoy tratando de manejar el timer1 del pic para poder hacer control del cilclo util de un conversor DC-DC buck and boost pero no he podio avanzar porque el timer no me hace nada de nada ahi les envio el programa

void init_ports()
{
   set_tris_b(0x00);
   output_high(PIN_b0);
   output_high(PIN_b1);
   output_high(PIN_b2);
   output_high(PIN_b3);
   output_high(PIN_b4);
   output_high(PIN_b5);
   output_high(PIN_b6);
   output_high(PIN_b7);
   //output_b(56);
   
}
int main()
{
   init_ports();
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); 
   set_timer1(0);
   while(1)
{
   
   //set_timer0(0);
   if( get_timer1() <= 150 )
   {
   output_high(pin_b1);
   }
   if(get_timer1() <= 200 && get_timer1() > 150  )
   {
   output_low(pin_b1);
   }
   if(get_timer1()> 201)
   {
   set_timer1(0);
   }
   //delay_us(50);
   //output_high(pin_b0);***esto que esta con delay_us me funcion pero no es lo que deso porque yo nesecito realizar funciones mientras cuento
   //delay_us(50);
   //output_low(pin_b0);
   
}
return 0;
}

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: timer1 en pic16f877A
« Respuesta #1 en: 14 de Mayo de 2007, 20:09:03 »
has logrado revisar si el bit de habilitacion del timer1 esta activado en el registro T1CON?,  :-/ me parece que falta algo...
aparte me gustaria cambiar lo siguiente:

Código: C#
  1. #use fast_io(a)
  2. #use fast_io(b)
  3.  
  4. #byte PORTA = 0X05
  5. #byte PORTB = 0X06
  6. // coloca esto en el encabezado del programa
  7.    
  8. void main() //no es necesario el int pues MAIN no va a retornar nunca un valor.
  9. {
  10.  
  11.    set_tris_b(0x00);
  12.    PORTB=0X00;//con esto basta para configurar el puerto b
  13.  
  14.    setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
  15.    set_timer1(0);
  16.    while(1)
  17. {
  18.    
  19.    if( get_timer1() <= 150 )
  20.    {
  21.    output_high(pin_b1);
  22.    }
  23.    if(get_timer1() <= 200 && get_timer1() > 150  )
  24.    {
  25.    output_low(pin_b1);
  26.    }
  27.    if(get_timer1()> 201)
  28.   {
  29.   set_timer1(0);
  30.   }
  31. }

una pregunta mas, eso es todo tu programa? me gustaria ver la primera parte como lo estas configurando el resto de opciones como los fuses, revisa el sigueinte hilo donde aprenderas mas trucos sobre CCS: http://www.todopic.com.ar/foros/index.php?topic=4533.0
« Última modificación: 15 de Mayo de 2007, 01:44:03 por micro_cadaver »
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado aprada

  • PIC10
  • *
  • Mensajes: 9
Re: timer1 en pic16f877A
« Respuesta #2 en: 16 de Mayo de 2007, 21:29:51 »
hola.. la verdad  he revisado todo pero el t1con nose como revisarlo mejor dicho n ose en que direccion esta en el paper de 16f877A ...
y paso algo curioso el programa me funciono y me saco una se;al de 30 KHz con los timers y de una porgramada a otra el programa no me hace nada .. el codigo va adjunto
#include <16F877A.h>
#device *=16
#fuses HS,NOWDT,NOPROTECT,NOLVP
#priority rda,ad,rtcc,timer1,timer0
#use delay(clock=20000000)
#use fast_io(a)
#use fast_io(b)


void init_ports()
{
   set_tris_b(0x00);
   output_high(PIN_b0);
   output_high(PIN_b1);
   output_high(PIN_b2);
   output_high(PIN_b3);
   output_high(PIN_b4);
   output_high(PIN_b5);
   output_high(PIN_b6);
   output_high(PIN_b7);

   
}

void main()
{

     
   init_ports();
   setup_timer_1(T1_internal|T1_DIV_BY_8);
   set_timer1(0);
   while(1)

   if(get_timer1() >= 3000)
       {
        set_timer1(0);
        } 
   if( get_timer1() <= 1500)
   {
   output_low(pin_b0);
   }
   if( get_timer1() > 1500)
    {
       output_high(pin_b0);
       
         
      }     
}
/*
while(1)
{
output_high(pin_b0);
delay_us(50);
output_low(pin_b0);
delay_us(50);
}*/
}

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: timer1 en pic16f877A
« Respuesta #3 en: 16 de Mayo de 2007, 23:39:25 »
bacan pessss codigo procesando.... :ni)

Código: C#
  1. #include <16F877A.h>
  2. #device adc=8
  3.  
  4. #FUSES NOWDT                    //No Watch Dog Timer
  5. #FUSES HS                       //High speed Osc (> 4mhz)
  6. #FUSES NOPUT                    //No Power Up Timer
  7. #FUSES NOPROTECT                //Code not protected from reading
  8. #FUSES NODEBUG                  //No Debug mode for ICD
  9. #FUSES NOBROWNOUT               //No brownout reset
  10. #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  11. #FUSES NOCPD                    //No EE protection
  12. #FUSES NOWRT                    //Program memory not write protected
  13.  
  14. #use delay(clock=20000000)
  15.  
  16. #use fast_io(a)
  17. #use fast_io(b)
  18. #byte PORTB = 0X06
  19.  
  20. void main()
  21. {
  22.    setup_adc_ports(NO_ANALOGS);
  23.    setup_adc(ADC_OFF);
  24.    setup_psp(PSP_DISABLED);
  25.    setup_spi(FALSE);
  26.    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
  27.    setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
  28.    setup_timer_2(T2_DISABLED,0,1);
  29.    setup_comparator(NC_NC_NC_NC);
  30.    setup_vref(FALSE);
  31.  
  32.    set_tris_b(0x00);
  33.    PORTB=0XFF;    
  34.  
  35.    set_timer1(0);
  36.    while(1)
  37.    {
  38.       if(get_timer1() >= 3000)
  39.       {
  40.          set_timer1(0);
  41.       }
  42.       if( get_timer1() <= 1500)
  43.       {
  44.          output_low(pin_b0);
  45.       }
  46.       if( get_timer1() > 1500)
  47.       {
  48.          output_high(pin_b0);
  49.       }    
  50.    }
  51. }

he mejorado en algunas cosas tu programa y lo simule en el proteus y pues si corre normal el timer1 y el portb0 oscila pero no ha 30Hz sino a 208hz, porq le pones 20MHz de cristal¿? si lo que buscas es 30kHz nomas?
sabes porq te sale 208Hz? o mejor dicho sabes exactamente como conseguir los 30kHz? no lo tomes a mal la pregunta es que derepente no has leido el datasheet del 877 pues ahi te sale la forma. sino la conoces la podemos investigar  :-/
« Última modificación: 17 de Mayo de 2007, 00:14:58 por micro_cadaver »
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado aprada

  • PIC10
  • *
  • Mensajes: 9
Re: timer1 en pic16f877A
« Respuesta #4 en: 17 de Mayo de 2007, 00:36:47 »
gracias por la pasciencia ... la is se como se saca la senal es mas ya la saque pues porque  tengo reloj de 20MHz y se que el timer cuenta con 20 /4 y eso a su vez dividido 8 entocnes ese es el tiemp oque demora el timer 1 contar uno entocnes una senal de 20Khz son 50us pero el problema no es sacar la senal sino que cuando le meto las funciones del conversor el tiempo de las instruciones no es le suficiente para mantener constante la salida ... porque lo que busco es mover el cilo util de la se;al dependeinedo de la entrada del ADC entoces cre oqeu vboy a bajar la se;al a 10Khz .... lo que estoy realizando son se;ales de conmutacion apra un conversor DC-DC buck and boost con un contrl fusi... vamso a ver que pasa
 :-/ :)

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: timer1 en pic16f877A
« Respuesta #5 en: 17 de Mayo de 2007, 00:43:47 »
asu---- ya me cambiastes el programa  :mrgreen: :mrgreen: ADC? ciclo util? que tu post no era nada mas sobre el timer1? sino explicanos mejor el cometido de tu aplicación.  :-)
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado aprada

  • PIC10
  • *
  • Mensajes: 9
Re: timer1 en pic16f877A
« Respuesta #6 en: 17 de Mayo de 2007, 00:48:29 »
el cometido de mi apilcacion es hacer un control fusi .. que a la entrada del error pro medio del adc del micro se pueda variar el ciclo util de la senal de conmutacion del mosfet qeu es dispocitivo de conmutacion de lconversor dc-dc si estas en linea ... add : andres_209@hotmail.com