Autor Tema: Estoy intentando generar una onda triangular con interrupciones.  (Leído 2477 veces)

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

Desconectado Joshuegp

  • PIC10
  • *
  • Mensajes: 7
Buenas,

Estoy intentando generar una señal triangular usando la interrupción del Timer2 a su vez, uso un DAC (R2R) para obtener la señal en proteus, pero hasta el momento no he podido lograrlo (solo logro la onda "serrucho" o algún tipo de "pwm" forzado). Por favor, podrían indicarme en qué estoy fallando. Muy agradecido.

Código: [Seleccionar]
int flag, flag1; //flag mediante software


.....
   
     
       
    while(true){

       
    if(flag ==1){   
        if(count ==256){
            flag1 =1;
           
        }else{
            ++count;
            PORTB =count;
            flag =0;
        }
    }   
     
    }   
   
void interrupt high_priority TMR2_int(void){
    if(PIR1bits.TMR2IF ==1){

     
      flag =1;
     
      if(flag1 ==1){
                if(count ==0){
                    flag =0;
         
                }else{
                    --count;
                    PORTB =count;
                    flag1 =0;
                }
            }
     
      PIR1bits.TMR2IF =0;
    }
}


Por favor, guienme.

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Estoy intentando generar una onda triangular con interrupciones.
« Respuesta #1 en: 10 de Abril de 2020, 12:41:40 »
count nunca va a valer 256.

 De 255 desborda y pasa a cero. Por eso no te sale.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Estoy intentando generar una onda triangular con interrupciones.
« Respuesta #2 en: 10 de Abril de 2020, 14:04:12 »
Hay mas errores:

Flag siempre va a valer 1 en esta situacion:


Código: C
  1. flag =1;
  2.      
  3.       if(flag1 ==1){
  4.                 if(count ==0){
  5.                     flag =0;
  6.          
  7.                 }else{
  8.                     --count;
  9.                     PORTB =count;
  10.                     flag1 =0;
  11.                 }
  12.             }

Se lo estas asignando antes, por eso la parte del else jamas se va a ejecutar...

Y usualmente no modificas variables en el main e interrupcion al mismo tiempo.

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:Estoy intentando generar una onda triangular con interrupciones.
« Respuesta #3 en: 10 de Abril de 2020, 17:13:24 »
Hay mas errores:

Flag siempre va a valer 1 en esta situacion:


Código: C
  1. flag =1;
  2.      
  3.       if(flag1 ==1){
  4.                 if(count ==0){
  5.                     flag =0;
  6.          
  7.                 }else{
  8.                     --count;
  9.                     PORTB =count;
  10.                     flag1 =0;
  11.                 }
  12.             }

Se lo estas asignando antes, por eso la parte del else jamas se va a ejecutar...

Y usualmente no modificas variables en el main e interrupcion al mismo tiempo.

  La variable asignada es flag mientras que la evaluada es flag1

    En mis códigos jamás utilizo juegos de nombres y números así para que no pase eso, que hasta tu lo has leído mal  :lol:

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Estoy intentando generar una onda triangular con interrupciones.
« Respuesta #4 en: 10 de Abril de 2020, 17:29:10 »
Si la verdad.... me parecian identicos xD un error :P

Desconectado Joshuegp

  • PIC10
  • *
  • Mensajes: 7
Re:Estoy intentando generar una onda triangular con interrupciones.
« Respuesta #5 en: 10 de Abril de 2020, 19:55:43 »
Hay mas errores:

Flag siempre va a valer 1 en esta situacion:


Código: C
  1. flag =1;
  2.      
  3.       if(flag1 ==1){
  4.                 if(count ==0){
  5.                     flag =0;
  6.          
  7.                 }else{
  8.                     --count;
  9.                     PORTB =count;
  10.                     flag1 =0;
  11.                 }
  12.             }

Se lo estas asignando antes, por eso la parte del else jamas se va a ejecutar...

Y usualmente no modificas variables en el main e interrupcion al mismo tiempo.

Ya intenté de todo, pero sigo sin obtener la onda deseada  :(  Ya estoy apunto de tirar todo al tacho.

Desconectado Eduardo2

  • PIC24H
  • ******
  • Mensajes: 1004
Re:Estoy intentando generar una onda triangular con interrupciones.
« Respuesta #6 en: 10 de Abril de 2020, 20:43:56 »

1- Eliminá el código que mostraste.

2- Creas una variable de bit , por ejemplo: up y dentro de la interrupción del timer2
Código: [Seleccionar]
    if(up){ if(++count==0xFF) up=0 ; }
    else  { if(--count==0x00) up=1 ; }
    PORTB = count ;

y listo, todo se hace dentro de la interrupción. Nada de andar incrementando en un lado y decrementando en otro.


Desconectado Joshuegp

  • PIC10
  • *
  • Mensajes: 7
Re:Estoy intentando generar una onda triangular con interrupciones.
« Respuesta #7 en: 19 de Abril de 2020, 00:51:36 »

1- Eliminá el código que mostraste.

2- Creas una variable de bit , por ejemplo: up y dentro de la interrupción del timer2
Código: [Seleccionar]
    if(up){ if(++count==0xFF) up=0 ; }
    else  { if(--count==0x00) up=1 ; }
    PORTB = count ;

y listo, todo se hace dentro de la interrupción. Nada de andar incrementando en un lado y decrementando en otro.




Muy agradecido. Excelente.


 

anything