<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	
	>
<channel>
	<title>
	Comentarios en: Timer PIC	</title>
	<atom:link href="https://controlautomaticoeducacion.com/sistemas-embebidos/microcontroladores-pic/timer-pic/feed/" rel="self" type="application/rss+xml" />
	<link>https://controlautomaticoeducacion.com/sistemas-embebidos/microcontroladores-pic/timer-pic/</link>
	<description>En este sitio web vas a encontrar cursos sobre microcontroladores, teoria de control, automatización y ejemplos de implementación de código</description>
	<lastBuildDate>Fri, 19 Jul 2024 21:58:53 +0000</lastBuildDate>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>
		Por: Amanda Lima		</title>
		<link>https://controlautomaticoeducacion.com/sistemas-embebidos/microcontroladores-pic/timer-pic/#comment-11696</link>

		<dc:creator><![CDATA[Amanda Lima]]></dc:creator>
		<pubDate>Fri, 19 Jul 2024 21:58:53 +0000</pubDate>
		<guid isPermaLink="false">http://controlautomaticoeducacion.com/?p=278#comment-11696</guid>

					<description><![CDATA[Olá, temos 2 tempos aqui, um tempo usando a frequência da rede de 60 Hz, para que eu tenha 10 minutos com as saídas em nível lógico alto e depois 10 minutos em nível lógico baixo, então terei contagem, minuto, segundo e i em 0, vai está repetindo o ciclo, se o pino A3 estiver em  0. E um tempo usando o timer 0 para que eu tenha 3 segundos na transição de saída alta para saída baixa e vice-versa.  Com o pino A3 estando em 0 e depois em 1, ou em 1 e depois em 0. os 3 segundo usando o  timer0 é para não usar delay, a contagem fica bem superior se eu usar o delay, por isso não quero usar ele, quero uma pausa sem que isso atrapalha minha contagem.consigo fazer isso desse jeito ou tem outro funcional. Obrigada desde já
]]></description>
			<content:encoded><![CDATA[<p>Olá, temos 2 tempos aqui, um tempo usando a frequência da rede de 60 Hz, para que eu tenha 10 minutos com as saídas em nível lógico alto e depois 10 minutos em nível lógico baixo, então terei contagem, minuto, segundo e i em 0, vai está repetindo o ciclo, se o pino A3 estiver em  0. E um tempo usando o timer 0 para que eu tenha 3 segundos na transição de saída alta para saída baixa e vice-versa.  Com o pino A3 estando em 0 e depois em 1, ou em 1 e depois em 0. os 3 segundo usando o  timer0 é para não usar delay, a contagem fica bem superior se eu usar o delay, por isso não quero usar ele, quero uma pausa sem que isso atrapalha minha contagem.consigo fazer isso desse jeito ou tem outro funcional. Obrigada desde já</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Por: Miguel Navia		</title>
		<link>https://controlautomaticoeducacion.com/sistemas-embebidos/microcontroladores-pic/timer-pic/#comment-11630</link>

		<dc:creator><![CDATA[Miguel Navia]]></dc:creator>
		<pubDate>Wed, 20 Sep 2023 21:43:50 +0000</pubDate>
		<guid isPermaLink="false">http://controlautomaticoeducacion.com/?p=278#comment-11630</guid>

					<description><![CDATA[Muchas Gracias Sergio por la informacion,
Como hacer para leer pulsos mas cortos, p.e. una frecuencia de 300.000 Hz

Gracias de antemano]]></description>
			<content:encoded><![CDATA[<p>Muchas Gracias Sergio por la informacion,<br />
Como hacer para leer pulsos mas cortos, p.e. una frecuencia de 300.000 Hz</p>
<p>Gracias de antemano</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Por: Sergio C		</title>
		<link>https://controlautomaticoeducacion.com/sistemas-embebidos/microcontroladores-pic/timer-pic/#comment-11622</link>

		<dc:creator><![CDATA[Sergio C]]></dc:creator>
		<pubDate>Sun, 13 Aug 2023 21:22:57 +0000</pubDate>
		<guid isPermaLink="false">http://controlautomaticoeducacion.com/?p=278#comment-11622</guid>

					<description><![CDATA[En respuesta a &lt;a href=&quot;https://controlautomaticoeducacion.com/sistemas-embebidos/microcontroladores-pic/timer-pic/#comment-11621&quot;&gt;Luiz G Fonseca&lt;/a&gt;.

1. Parece que você esqueceu de especificar a biblioteca que está utilizando no início do código com #include. Deveria ser algo como #include &lt;16F877A.h&gt;, mas depende do microcontrolador que você está usando.

2. Você tem uma linha #fuses NOMCLR INTRC_IO PLL_SW. Estes fuses dependem do microcontrolador que você está utilizando. Certifique-se de que são corretos para o seu microcontrolador.

3. Na linha if (minuto = 20), você está usando o operador de atribuição (=) em vez do operador de comparação (==). Deveria ser: if (minuto == 20).

4. A sua lógica para lidar com as variáveis segundo e minuto parece correta. No entanto, você não está usando as variáveis liga e li em nenhuma parte do loop principal while(TRUE).

5. Você está inicializando o pin_a0 como HIGH e o pin_a5 como LOW no começo do programa. Mas, posteriormente, dentro do loop, você só está manipulando esses pinos com base nos valores de segundo e minuto.

Corrigindo alguns destes problemas, o código fica assim:
&lt;code&gt;
#include &lt;16F877A.h&gt; // Altere para o microcontrolador correto

int16 minuto = 0;
int16 segundo = 0;

#fuses NOMCLR INTRC_IO PLL_SW
#device ADC = 10
#use delay(clock=32000000)
#use fast_io(A)

int32 cnt = 0;

#INT_TIMER0
void TIMER0_isr(void) {
    clear_interrupt(INT_TIMER0);
    set_timer0(131);
    cnt++;
    if(cnt == 250) {
        cnt = 0;
        segundo++;
    }
}

#INT_RA 
void RA_isr(void) {
    clear_interrupt(INT_RA3);
    if(input(PIN_A3)) {
        liga++;
    }
    if (liga &gt;= 3600) {
        liga = 0;
        li++;
    }
}

void main() {
    set_timer0(131);
    setup_adc_ports(sAN1&#124;sAN2&#124;sAN3);
    setup_adc(ADC_CLOCK_INTERNAL);
    setup_oscillator(OSC_8MHZ &#124; OSC_PLL_ON);
    setup_timer_0(RTCC_INTERNAL&#124;RTCC_DIV_128&#124;RTCC_8_bit);
    set_tris_a(0b00011110);
    enable_interrupts(INT_TIMER0);
    enable_interrupts(GLOBAL);
    output_high(pin_a0);
    output_low(pin_a5);
    enable_interrupts(INT_RA3);
    clear_interrupt(INT_RA3);

    while(TRUE) {
        if(segundo == 60) {
            segundo = 0;
            minuto++;
            output_toggle(pin_a0);
        }
        if(minuto == 20) {
            output_low(pin_a5);
        }
    }
}
&lt;/code&gt;]]></description>
			<content:encoded><![CDATA[<p>En respuesta a <a href="https://controlautomaticoeducacion.com/sistemas-embebidos/microcontroladores-pic/timer-pic/#comment-11621">Luiz G Fonseca</a>.</p>
<p>1. Parece que você esqueceu de especificar a biblioteca que está utilizando no início do código com #include. Deveria ser algo como #include &lt;16F877A.h>, mas depende do microcontrolador que você está usando.</p>
<p>2. Você tem uma linha #fuses NOMCLR INTRC_IO PLL_SW. Estes fuses dependem do microcontrolador que você está utilizando. Certifique-se de que são corretos para o seu microcontrolador.</p>
<p>3. Na linha if (minuto = 20), você está usando o operador de atribuição (=) em vez do operador de comparação (==). Deveria ser: if (minuto == 20).</p>
<p>4. A sua lógica para lidar com as variáveis segundo e minuto parece correta. No entanto, você não está usando as variáveis liga e li em nenhuma parte do loop principal while(TRUE).</p>
<p>5. Você está inicializando o pin_a0 como HIGH e o pin_a5 como LOW no começo do programa. Mas, posteriormente, dentro do loop, você só está manipulando esses pinos com base nos valores de segundo e minuto.</p>
<p>Corrigindo alguns destes problemas, o código fica assim:<br />
<code><br />
#include &lt;16F877A.h> // Altere para o microcontrolador correto</p>
<p>int16 minuto = 0;<br />
int16 segundo = 0;</p>
<p>#fuses NOMCLR INTRC_IO PLL_SW<br />
#device ADC = 10<br />
#use delay(clock=32000000)<br />
#use fast_io(A)</p>
<p>int32 cnt = 0;</p>
<p>#INT_TIMER0<br />
void TIMER0_isr(void) {<br />
    clear_interrupt(INT_TIMER0);<br />
    set_timer0(131);<br />
    cnt++;<br />
    if(cnt == 250) {<br />
        cnt = 0;<br />
        segundo++;<br />
    }<br />
}</p>
<p>#INT_RA<br />
void RA_isr(void) {<br />
    clear_interrupt(INT_RA3);<br />
    if(input(PIN_A3)) {<br />
        liga++;<br />
    }<br />
    if (liga >= 3600) {<br />
        liga = 0;<br />
        li++;<br />
    }<br />
}</p>
<p>void main() {<br />
    set_timer0(131);<br />
    setup_adc_ports(sAN1|sAN2|sAN3);<br />
    setup_adc(ADC_CLOCK_INTERNAL);<br />
    setup_oscillator(OSC_8MHZ | OSC_PLL_ON);<br />
    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_128|RTCC_8_bit);<br />
    set_tris_a(0b00011110);<br />
    enable_interrupts(INT_TIMER0);<br />
    enable_interrupts(GLOBAL);<br />
    output_high(pin_a0);<br />
    output_low(pin_a5);<br />
    enable_interrupts(INT_RA3);<br />
    clear_interrupt(INT_RA3);</p>
<p>    while(TRUE) {<br />
        if(segundo == 60) {<br />
            segundo = 0;<br />
            minuto++;<br />
            output_toggle(pin_a0);<br />
        }<br />
        if(minuto == 20) {<br />
            output_low(pin_a5);<br />
        }<br />
    }<br />
}<br />
</code></p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Por: Luiz G Fonseca		</title>
		<link>https://controlautomaticoeducacion.com/sistemas-embebidos/microcontroladores-pic/timer-pic/#comment-11621</link>

		<dc:creator><![CDATA[Luiz G Fonseca]]></dc:creator>
		<pubDate>Wed, 09 Aug 2023 01:32:30 +0000</pubDate>
		<guid isPermaLink="false">http://controlautomaticoeducacion.com/?p=278#comment-11621</guid>

					<description><![CDATA[Hola, no se que hice mal, pero mi codigo no quiere funcionar, hice el calculo pero el resultado no coincide con lo que esperaba, por ejemplo, pin_a0 no cambia cada 1 segundo y pin_a5 debe permanecer encendido por 20 minutos y después de apagarlo, sin embargo, hizo una gran diferencia, más o menos un 50% más, he intentado todo y no tuve éxito, no sé si entienden lo que yo Digo, porque no hablo tu idioma. Gracias. Ese es el código.


#include 


//int16 analogico1 = 0;
//int16 analogico2 = 0;   
//int16 analogico3 = 0;  
int16 minuto = 0;     
int16 segundo = 0;   
#fuses NOMCLR INTRC_IO PLL_SW   
#device ADC = 10               
#use delay(clock=32000000)    
#use fast_io(A)              
int32 cnt = 0;              
int32 liga = 0;            
int32 li = 0;   
//*************************************************************************************************************
#INT_TIMER0                                                                              
void  TIMER0_isr(void)                                                                
{
 clear_interrupt(INT_TIMER0);    // Clear timer0 interrupt flag bit                 
 
 set_timer0(131);
 cnt++;
 if(cnt == 250) // if(cnt &#062;= 3750)//if(cnt &#062;= 125)
    {
        cnt=0;                                                             
       segundo++; 
      //output_toggle(PIN_A0);  
     
          } 
          /*set_timer0( 130 + get_timer0());*///set_timer0(130);
             } 
     // ************************************************************************************************************        

#INT_RA                                // interrupção RA.
//------------------------------------------------------------------------
void RA_isr(void)                         // interromper a rotina de serviço
{
  clear_interrupt(INT_RA3);
  if(input(PIN_A3))                    // Se RA3 for HIGH
  {
    
    liga++;
  }
  if (liga &#062;= 3600 ) 
   {
    liga = 0; 
     li++;
} 
 }

//***************************************************************************************************************
void main(){ 
// set_timer0( 130 + get_timer0());
    set_timer0(131);
    setup_adc_ports(sAN1&#124;sAN2&#124;sAN3);
    setup_adc(ADC_CLOCK_INTERNAL);                                                                                        
    setup_oscillator(OSC_8MHZ &#124; OSC_PLL_ON);                       // Set internal oscillator to 32MHz (8MHz and PLL)    
    setup_timer_0(RTCC_INTERNAL&#124;RTCC_DIV_128&#124;RTCC_8_bit);         //4,0 ms overflow  (Uso do timer0) EM 32MHz
    set_tris_a  (0b00011110 );   //(0b00011110);                 // HEX 1E  RA Tris  76543210  0X1E                    
    enable_interrupts(INT_TIMER0);                              // (uso do interrupts)
    enable_interrupts(GLOBAL);                                 // (uso do interrupts)
    clear_interrupt(int_timer0);                              
    output_high(pin_a0);                                    
    output_low(pin_a5);                                   
    enable_interrupts(GLOBAL);                  // Enable global interrupts
    enable_interrupts(INT_RA3); 
    clear_interrupt(INT_RA3);                    // Clear RA IOC flag bit
      
     while(TRUE) {
    
     
      if (segundo == 60 )     
     {
       segundo=0;
       minuto ++;
       output_toggle(pin_a0); 
     }
      if (minuto =20 ) 
     {
     output_low(pin_a5); 
   
     }}}]]></description>
			<content:encoded><![CDATA[<p>Hola, no se que hice mal, pero mi codigo no quiere funcionar, hice el calculo pero el resultado no coincide con lo que esperaba, por ejemplo, pin_a0 no cambia cada 1 segundo y pin_a5 debe permanecer encendido por 20 minutos y después de apagarlo, sin embargo, hizo una gran diferencia, más o menos un 50% más, he intentado todo y no tuve éxito, no sé si entienden lo que yo Digo, porque no hablo tu idioma. Gracias. Ese es el código.</p>
<p>#include </p>
<p>//int16 analogico1 = 0;<br />
//int16 analogico2 = 0;<br />
//int16 analogico3 = 0;<br />
int16 minuto = 0;<br />
int16 segundo = 0;<br />
#fuses NOMCLR INTRC_IO PLL_SW<br />
#device ADC = 10<br />
#use delay(clock=32000000)<br />
#use fast_io(A)<br />
int32 cnt = 0;<br />
int32 liga = 0;<br />
int32 li = 0;<br />
//*************************************************************************************************************<br />
#INT_TIMER0<br />
void  TIMER0_isr(void)<br />
{<br />
 clear_interrupt(INT_TIMER0);    // Clear timer0 interrupt flag bit                 </p>
<p> set_timer0(131);<br />
 cnt++;<br />
 if(cnt == 250) // if(cnt &gt;= 3750)//if(cnt &gt;= 125)<br />
    {<br />
        cnt=0;<br />
       segundo++;<br />
      //output_toggle(PIN_A0);  </p>
<p>          }<br />
          /*set_timer0( 130 + get_timer0());*///set_timer0(130);<br />
             }<br />
     // ************************************************************************************************************        </p>
<p>#INT_RA                                // interrupção RA.<br />
//&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
void RA_isr(void)                         // interromper a rotina de serviço<br />
{<br />
  clear_interrupt(INT_RA3);<br />
  if(input(PIN_A3))                    // Se RA3 for HIGH<br />
  {</p>
<p>    liga++;<br />
  }<br />
  if (liga &gt;= 3600 )<br />
   {<br />
    liga = 0;<br />
     li++;<br />
}<br />
 }</p>
<p>//***************************************************************************************************************<br />
void main(){<br />
// set_timer0( 130 + get_timer0());<br />
    set_timer0(131);<br />
    setup_adc_ports(sAN1|sAN2|sAN3);<br />
    setup_adc(ADC_CLOCK_INTERNAL);<br />
    setup_oscillator(OSC_8MHZ | OSC_PLL_ON);                       // Set internal oscillator to 32MHz (8MHz and PLL)<br />
    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_128|RTCC_8_bit);         //4,0 ms overflow  (Uso do timer0) EM 32MHz<br />
    set_tris_a  (0b00011110 );   //(0b00011110);                 // HEX 1E  RA Tris  76543210  0X1E<br />
    enable_interrupts(INT_TIMER0);                              // (uso do interrupts)<br />
    enable_interrupts(GLOBAL);                                 // (uso do interrupts)<br />
    clear_interrupt(int_timer0);<br />
    output_high(pin_a0);<br />
    output_low(pin_a5);<br />
    enable_interrupts(GLOBAL);                  // Enable global interrupts<br />
    enable_interrupts(INT_RA3);<br />
    clear_interrupt(INT_RA3);                    // Clear RA IOC flag bit</p>
<p>     while(TRUE) {</p>
<p>      if (segundo == 60 )<br />
     {<br />
       segundo=0;<br />
       minuto ++;<br />
       output_toggle(pin_a0);<br />
     }<br />
      if (minuto =20 )<br />
     {<br />
     output_low(pin_a5); </p>
<p>     }}}</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Por: Valentina		</title>
		<link>https://controlautomaticoeducacion.com/sistemas-embebidos/microcontroladores-pic/timer-pic/#comment-11526</link>

		<dc:creator><![CDATA[Valentina]]></dc:creator>
		<pubDate>Mon, 23 Jan 2023 21:42:31 +0000</pubDate>
		<guid isPermaLink="false">http://controlautomaticoeducacion.com/?p=278#comment-11526</guid>

					<description><![CDATA[Hola! Quisiera consultar algo para un proyecto que estoy haciendo:
Necesito que dentro de un lapso de 10 segundos se testee si mi sensor detectó una figura. Y en caso de no detectarlo, se reinicie el lapso de 10 segundos (Y así sucesivamente hasta que se detecte una figura en ese sensor). ¿Cómo podría hacerlo? 
Tengo problemas con la última parte, que sería el reinicio del timer.

Tengo armado algo como esto: 

 SET_TIMER0(156);
if(circuloS==1) // Si el CNY70 de la figura seleccionada (CIRCULO) capta un objeto
 {
 generate_tone(C_NOTE[1],800), generate_tone(D_NOTE[1],800), generate_tone(E_NOTE[1],800); // Se genera música WIN
 delay_ms(2000);
//Luego del delay se tendría que seguir adelante con las demás instrucciones
 }
else
 {
 generate_tone(E_NOTE[1],800), generate_tone(D_NOTE[1],800), generate_tone(C_NOTE[1],800); // CASO CONTRARIO: Se genera música FAIL
delay_ms(2000);
// Luego de este delay, se tendría que reiniciar el timer.
 }]]></description>
			<content:encoded><![CDATA[<p>Hola! Quisiera consultar algo para un proyecto que estoy haciendo:<br />
Necesito que dentro de un lapso de 10 segundos se testee si mi sensor detectó una figura. Y en caso de no detectarlo, se reinicie el lapso de 10 segundos (Y así sucesivamente hasta que se detecte una figura en ese sensor). ¿Cómo podría hacerlo?<br />
Tengo problemas con la última parte, que sería el reinicio del timer.</p>
<p>Tengo armado algo como esto: </p>
<p> SET_TIMER0(156);<br />
if(circuloS==1) // Si el CNY70 de la figura seleccionada (CIRCULO) capta un objeto<br />
 {<br />
 generate_tone(C_NOTE[1],800), generate_tone(D_NOTE[1],800), generate_tone(E_NOTE[1],800); // Se genera música WIN<br />
 delay_ms(2000);<br />
//Luego del delay se tendría que seguir adelante con las demás instrucciones<br />
 }<br />
else<br />
 {<br />
 generate_tone(E_NOTE[1],800), generate_tone(D_NOTE[1],800), generate_tone(C_NOTE[1],800); // CASO CONTRARIO: Se genera música FAIL<br />
delay_ms(2000);<br />
// Luego de este delay, se tendría que reiniciar el timer.<br />
 }</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Por: Andrey		</title>
		<link>https://controlautomaticoeducacion.com/sistemas-embebidos/microcontroladores-pic/timer-pic/#comment-11260</link>

		<dc:creator><![CDATA[Andrey]]></dc:creator>
		<pubDate>Thu, 02 Dec 2021 16:37:53 +0000</pubDate>
		<guid isPermaLink="false">http://controlautomaticoeducacion.com/?p=278#comment-11260</guid>

					<description><![CDATA[En respuesta a &lt;a href=&quot;https://controlautomaticoeducacion.com/sistemas-embebidos/microcontroladores-pic/timer-pic/#comment-10845&quot;&gt;Sergio C&lt;/a&gt;.

Hola buenas, me podrías facilitar el código de un tiempo de 5 minutos para luego activar un LED es para observar y simularlo en proteus estoy trabajando un proyecto y quiero implementarlo te agradecería]]></description>
			<content:encoded><![CDATA[<p>En respuesta a <a href="https://controlautomaticoeducacion.com/sistemas-embebidos/microcontroladores-pic/timer-pic/#comment-10845">Sergio C</a>.</p>
<p>Hola buenas, me podrías facilitar el código de un tiempo de 5 minutos para luego activar un LED es para observar y simularlo en proteus estoy trabajando un proyecto y quiero implementarlo te agradecería</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Por: Sergio C		</title>
		<link>https://controlautomaticoeducacion.com/sistemas-embebidos/microcontroladores-pic/timer-pic/#comment-11025</link>

		<dc:creator><![CDATA[Sergio C]]></dc:creator>
		<pubDate>Tue, 13 Apr 2021 03:08:36 +0000</pubDate>
		<guid isPermaLink="false">http://controlautomaticoeducacion.com/?p=278#comment-11025</guid>

					<description><![CDATA[En respuesta a &lt;a href=&quot;https://controlautomaticoeducacion.com/sistemas-embebidos/microcontroladores-pic/timer-pic/#comment-11024&quot;&gt;wilhem&lt;/a&gt;.

Hola Wilhem, aparentemente tienes todo bien configurado, revisa el cálculo con el que inicializas el timer (set_rtcc()) para trabajar junto con el contador. Yo particularmente, siempre uso el timer0 con el PWM para mis proyectos de control y trabajan sin inconvenientes. Saludos.]]></description>
			<content:encoded><![CDATA[<p>En respuesta a <a href="https://controlautomaticoeducacion.com/sistemas-embebidos/microcontroladores-pic/timer-pic/#comment-11024">wilhem</a>.</p>
<p>Hola Wilhem, aparentemente tienes todo bien configurado, revisa el cálculo con el que inicializas el timer (set_rtcc()) para trabajar junto con el contador. Yo particularmente, siempre uso el timer0 con el PWM para mis proyectos de control y trabajan sin inconvenientes. Saludos.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Por: wilhem		</title>
		<link>https://controlautomaticoeducacion.com/sistemas-embebidos/microcontroladores-pic/timer-pic/#comment-11024</link>

		<dc:creator><![CDATA[wilhem]]></dc:creator>
		<pubDate>Mon, 12 Apr 2021 03:56:25 +0000</pubDate>
		<guid isPermaLink="false">http://controlautomaticoeducacion.com/?p=278#comment-11024</guid>

					<description><![CDATA[hola, tengo una pregunta, que sucede si yo quiero utilizar dos timer al mismo tiempo?
lo que trato de decir es que quiero utilizar el timer0 para llevar una cuenta de reloj (me incremente una variable cada 1 segundo ) y al mismo tiempo genere un pwm de 1KHz , entiendo que el PWM utiliza el TIMER2 y quisiera saber si de alguna forma uno puede interferir con el otro?
en concreto cuando en mi codigo escribo este conjunto de instrucciones:

//configuracion pwm

setup_timer_2(t2_div_by_4,Timer2,Poscaler);   //Configuracion de Timer 2 para establecer frec. PWM a 1kHz
   setup_ccp1(ccp_pwm);                //Configurar modulo CCP1 en modo PWM
   setup_adc_ports(all_analog);        //Configurar ADC
   setup_adc(adc_clock_internal);

//configuracion del timer0

setup_timer_0(RTCC_INTERNAL&#124;RTCC_DIV_256&#124;RTCC_8_bit);      //13.1 ms overflow
   ENABLE_INTERRUPTS(INT_RTCC);                 //Activa interrupcion del timer
   ENABLE_INTERRUPTS(GLOBAL);                   //Activa TODAS las interrupciones

   enable_interrupts(INT_EXT);
   enable_interrupts(INT_EXT1);

cuando compilo el codigo pareciera que la cuenta del timer0 se alenta, a comparacion de un codigo similar pero sin el uso del pwm, como puedo usar ambos al mismo tiempo? el timer0 y el PWM?]]></description>
			<content:encoded><![CDATA[<p>hola, tengo una pregunta, que sucede si yo quiero utilizar dos timer al mismo tiempo?<br />
lo que trato de decir es que quiero utilizar el timer0 para llevar una cuenta de reloj (me incremente una variable cada 1 segundo ) y al mismo tiempo genere un pwm de 1KHz , entiendo que el PWM utiliza el TIMER2 y quisiera saber si de alguna forma uno puede interferir con el otro?<br />
en concreto cuando en mi codigo escribo este conjunto de instrucciones:</p>
<p>//configuracion pwm</p>
<p>setup_timer_2(t2_div_by_4,Timer2,Poscaler);   //Configuracion de Timer 2 para establecer frec. PWM a 1kHz<br />
   setup_ccp1(ccp_pwm);                //Configurar modulo CCP1 en modo PWM<br />
   setup_adc_ports(all_analog);        //Configurar ADC<br />
   setup_adc(adc_clock_internal);</p>
<p>//configuracion del timer0</p>
<p>setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256|RTCC_8_bit);      //13.1 ms overflow<br />
   ENABLE_INTERRUPTS(INT_RTCC);                 //Activa interrupcion del timer<br />
   ENABLE_INTERRUPTS(GLOBAL);                   //Activa TODAS las interrupciones</p>
<p>   enable_interrupts(INT_EXT);<br />
   enable_interrupts(INT_EXT1);</p>
<p>cuando compilo el codigo pareciera que la cuenta del timer0 se alenta, a comparacion de un codigo similar pero sin el uso del pwm, como puedo usar ambos al mismo tiempo? el timer0 y el PWM?</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Por: Pablo		</title>
		<link>https://controlautomaticoeducacion.com/sistemas-embebidos/microcontroladores-pic/timer-pic/#comment-10855</link>

		<dc:creator><![CDATA[Pablo]]></dc:creator>
		<pubDate>Mon, 12 Oct 2020 18:36:47 +0000</pubDate>
		<guid isPermaLink="false">http://controlautomaticoeducacion.com/?p=278#comment-10855</guid>

					<description><![CDATA[¿La rutina del timer tiene que estar en el fichero main? ¿Podría tener un fichero aparte timer.c donde estuviera definida la acción de la interrupción de la finalización del timer? Definir #INT_RTCC en un fichero aparte.]]></description>
			<content:encoded><![CDATA[<p>¿La rutina del timer tiene que estar en el fichero main? ¿Podría tener un fichero aparte timer.c donde estuviera definida la acción de la interrupción de la finalización del timer? Definir #INT_RTCC en un fichero aparte.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		Por: Sergio C		</title>
		<link>https://controlautomaticoeducacion.com/sistemas-embebidos/microcontroladores-pic/timer-pic/#comment-10845</link>

		<dc:creator><![CDATA[Sergio C]]></dc:creator>
		<pubDate>Sun, 04 Oct 2020 17:53:12 +0000</pubDate>
		<guid isPermaLink="false">http://controlautomaticoeducacion.com/?p=278#comment-10845</guid>

					<description><![CDATA[En respuesta a &lt;a href=&quot;https://controlautomaticoeducacion.com/sistemas-embebidos/microcontroladores-pic/timer-pic/#comment-10844&quot;&gt;Francisco Ulises&lt;/a&gt;.

Hola Francisco, efectivamente en el PIC debes usar los timers. En esta entrada por ejemplo, vimos como configurar un timer para que aumente el contador &lt;strong&gt;seg&lt;/strong&gt; cada segundo. Si tu quisieras por ejemplo, activar un led cada 5 segundos, simplemente en el void main, haces un condicional que cuando seg==5 active el led. Este condicional, también puedes hacerlo dentro de la interrupción, caso necesites mucha presición en el tiempo y que se active exactamente cada 5 segundos.]]></description>
			<content:encoded><![CDATA[<p>En respuesta a <a href="https://controlautomaticoeducacion.com/sistemas-embebidos/microcontroladores-pic/timer-pic/#comment-10844">Francisco Ulises</a>.</p>
<p>Hola Francisco, efectivamente en el PIC debes usar los timers. En esta entrada por ejemplo, vimos como configurar un timer para que aumente el contador <strong>seg</strong> cada segundo. Si tu quisieras por ejemplo, activar un led cada 5 segundos, simplemente en el void main, haces un condicional que cuando seg==5 active el led. Este condicional, también puedes hacerlo dentro de la interrupción, caso necesites mucha presición en el tiempo y que se active exactamente cada 5 segundos.</p>
]]></content:encoded>
		
			</item>
	</channel>
</rss>
