TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: JOLUCI en 10 de Septiembre de 2017, 13:52:48

Título: generador de señales
Publicado por: JOLUCI en 10 de Septiembre de 2017, 13:52:48
Hola amigos.
necesito generar una forma como la de la figura 1, pero sólo puedo hacerla quedar como está en la figura 2.
¿sería posible hacerlo?
estoy enviando las figuras y los archivos adjuntos.
si algún amigo puede ayudarme, estaré muy agradecido.
Título: Re:generador de señales
Publicado por: Geo en 11 de Septiembre de 2017, 02:06:13
Tienes que tomar en cuenta la interrupción para ambos flancos, tanto de subida como de bajada, por cada que se detecte un flanco, dentro de la interrupción hay que configurar para detectar el flanco contrario. Una forma puede ser así (todo el código dentro de la interrupción):

lo que se hace es poner a la salida el valor detectado en el flanco, excepto para los flancos de 33 a 37 para el cambio a 1, mientras que para los flancos 38 y 39 para el cambio a 0.

Código: [Seleccionar]
/*******************************************************************************
*                      PROGRAMA PARA SIMULAÇÃO DE SINAIS                       *
*******************************************************************************/

#include <12F683.h>

#use delay(clock = 8000000)
#fuses INTRC_IO,NOMCLR,NOWDT,NOPROTECT,PUT,BROWNOUT

char saida1=0;

#int_ext
void indexador(){
   saida1++;
   if (saida1 >= 40) {
      saida1 = 0;
   }

   // L_TO_H
   if (input(PIN_A2)) {
      if (saida1 < 32 || saida1 >= 37) {
         output_high(PIN_A0);
      }
      ext_int_edge(H_TO_L);
   }
   // H_TO_L
   else {
      if (saida1 < 38 || saida1 >= 39) {
         output_low(PIN_A0);
      }
      ext_int_edge(L_TO_H);
   }
}

void main() {
   ext_int_edge(L_TO_H);                //interrupção externa na borda de descida
   SET_TRIS_A (0b00000100);             //configura GP2 como entrada e o resto saida
   Enable_interrupts(INT_EXT);          //habilita interrupção externa
   Enable_Interrupts(GLOBAL);           //habilita interrupção global
   
   while(true) {
   }
}
Título: Re:generador de señales
Publicado por: JOLUCI en 11 de Septiembre de 2017, 08:19:16
Gracias Geo,

me voy testar y despues retorno
Título: Re:generador de señales
Publicado por: JOLUCI en 11 de Septiembre de 2017, 09:24:37
Geo,

la señal se hizo perfecta, pero los ciclos no quedan iguales en la simulación que hice.
puede ser error del compilador o del simulador que estoy usando aquí?
ha ocurrido lo mismo con usted en la simulación?
Título: Re:generador de señales
Publicado por: JOLUCI en 11 de Septiembre de 2017, 09:26:42
me olvidé de adjuntar la figura de mi simulación.
Título: Re:generador de señales
Publicado por: Geo en 11 de Septiembre de 2017, 18:17:08
Probablemente sea el simulador, pero intenta analizar el funcionamiento del programa en varios ciclos para validar que no sea problema de este.
Título: Re:generador de señales
Publicado por: JOLUCI en 12 de Septiembre de 2017, 06:50:20
Gracias Geo,

me voy testar y despues retorno.
Título: Re:generador de señales
Publicado por: JOLUCI en 16 de Septiembre de 2017, 21:07:14
Hola Geo,
la señal se quedó perfecta grabada en el pic, no tiene errores.
voy a dejar un mensaje privado para usted.
Título: Re:generador de señales
Publicado por: JOLUCI en 28 de Octubre de 2017, 10:22:35
Hola Geo,

¿sería posible hacer más formatos de onda con otras cantidades de pulsos y poner en un código que tiene botones y display para seleccionar?
Estoy tratando de hacer aquí, pero no estoy obteniendo resultados