Autor Tema: Duda básica en lenguaje C  (Leído 7338 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado The_Chosen

  • PIC12
  • **
  • Mensajes: 51
Re: Duda básica en lenguaje C
« Respuesta #15 en: 20 de Abril de 2010, 20:05:34 »

Saludos

Citar
¿Con cuál micro estás trabajando?

Estoy trabajando con el 16f877

Citar
Si mantienes la misma tasa de muestreo, nada te garantiza que las muestras sean coincidentes en todos sus valores si se tratan de señales de frecuencias distintas. Tú lo has dicho, si a una señal seno de 1 HZ y a una de 100 Hz se utiliza la misma taza de muestreo, un cierta amplitud A no va tener la misma posición dentro de ambas señales ya que la variable tiempo es distinta para ambas señales. Por eso es que se necesita que las tasas de muestreo sean altas para señales de altas frecuencias, y así reconstruir la señal después lo más fiel posible.
Hasta ahora creo que funciona bien, de todas maneras si no te parece mal, subo algo del código y la simulación haber si me das alguna opión o definitivamente nada que hacer  :mrgreen:.  Hasta ahora ya logre simular la 3 señales con distintas frecuencias (1, 10, 50, 100) ahora le voy a poner una LCD para que indique tipo de señal y frecuencia para que quede más presentable.

Con el 16F877 tienes una memoria de programa de 8Kx14, creo que el espacio es suficiente para guardar distintos arrays, tendrías que probar creando una buena cantidad, o sea a lo bruto. :D

Y adelante, pon tu código :mrgreen: . A pesar que hace tiempo no programo PICs (algo me acuerdo), te puedo ayudar en lo relacionado con el lenguaje C y tu algoritmo. El resto de los presentes te pueden ayudar en los pequeños detalles ;-).

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Duda básica en lenguaje C
« Respuesta #16 en: 21 de Abril de 2010, 12:29:25 »

Saludos
 
Por acá pongo el código del generador de onda cuadrada y diente de sierra.

Parece que hay un problema cuando se agrega la onda seno porqué el simulador se vuelve loco y empieza a sacar un poco de warning y se empieza a volver lenta la simulación, al parecer el stack del micro se satura.

Código: [Seleccionar]
#if defined(__PCM__)
#include <16F877.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay (clock = 4000000)
#define use_portd_lcd TRUE
#use standard_io(B)
#use standard_io(C)
#use standard_io(D)
#byte puerto_b = 06
#byte conta = 0x20
#byte senal2 = 0x21
#byte i2 = 0x22
#include <lcd.c>

int contador,control_l,control_h,largo,senal;

#int_rtcc

desborde()
  {
// Señal cuadrada de 1 Hz

    if (contador == 1  && senal == 1)      // Pulso de 1 Hz
      {
        control_h = 0;
        control_l = control_l + 1;
        if(control_l<=100)
         {
           puerto_b = 100;                // Garantizo los primero 50 muestras en alto
         }
        else
         {
           puerto_b = 0;
         }
        if (control_l >200)
         {
           control_l = 0;                // Garantizo las demás 50 muestras en bajo
         }
        set_rtcc(178);                   // Se garantiza el periodo de 1s
      }

// Señal cuadrada de 10 Hz

    else if (contador == 2 && senal == 1)         // Pulso de 10Hz
      {
        control_l = 0;
        control_h = control_h + 1;
        if(control_h<=50)
         {
           puerto_b = 100;                   // Garantizo los primero 50 muestras en alto
         }
        else
         {
           puerto_b = 0;
         }
        if (control_h >100)
         {
           control_h = 0;                    // Ultimas muestras en 0 lógico
         }
        set_rtcc(240);                       // Se garantiza el periodo de 0.01s
      }

// Señal cuadrada de 50 Hz

     else if (contador == 3 && senal == 1)            // Pulso de 50 Hz
      {
        control_l = 0;
        control_h = control_h + 1;
        if(control_h<=50)
         {
           puerto_b = 100;                      // Garantizo los primero 50 muestras en alto
         }
        else
         {
           puerto_b = 0;
         }
        if (control_h >100)
         {
           control_h = 0;                     // Ultimas muestras en 0 lógico
         }
        set_rtcc(253);                       //Garantizo el periodo 0.002s
      }

// Señal cuadrada de 100 Hz

    else if (contador == 4 && senal == 1)            // Pulso de 100 Hz
      {
        control_l = 0;
        control_h = control_h + 1;
        if(control_h<=50)
         {
           puerto_b = 100;                   // Garantizo los primero 50 muestras en alto
         }
        else
         {
           puerto_b = 0;
         }
        if (control_h >100)
         {
           control_h = 0;                     // Ultimas muestras en 0 lógico
         }
        set_rtcc(254);                       //Garantizo el periodo 0.001s
      }

 // Señal diente de sierra 1Hz

   if(contador == 1 && senal == 2)            // señal diente sierra 1Hz
      {
       largo = largo + 1;                    // Se incrementa linealmente los valores hasta alcanzar la frecuencias deseada
        if(largo >= 100)
          {
            largo = 0;
          }
        puerto_b = largo;
        set_rtcc(178);
      }

// Señal diente de sierra 10Hz

   else if(contador == 2 && senal == 2)            // señal diente sierra 10Hz
      {
        largo = largo + 10;                  // Se incrementa linealmente los valores hasta alcanzar la frecuencias deseada
        if(largo >= 100)
          {
            largo = 0;
          }
        puerto_b = largo;
        set_rtcc(240);
      }

// Señal diente de sierra 50Hz

   else if(contador == 3 && senal == 2)            // señal diente sierra 50Hz
      {
        largo = largo + 5;
        if(largo >= 100)
          {
            largo = 0;
          }
        puerto_b = largo;
        set_rtcc(253);
      }

// Señal diente de sierra 100Hz

   else if(contador == 4 && senal == 2)            // señal diente sierra 100Hz
      {
        puerto_b = largo;
        set_rtcc(254);
        largo = largo + 10;
        if(largo >= 100)
          {
            largo = 0;
          }
      }
 }


void main()
  {
     set_tris_b(0x00);                    // Puerto B como salidas digitales
     set_tris_c(0xFF);                    // Puerto C como entradas digitales
     set_tris_d(0x00);                    // Puerto d como salidas digitales
     enable_interrupts(global);
     enable_interrupts(int_rtcc);         // Se habilita interrupciòn por desborde Timer 0 y se activa la interrupciòn global
     setup_counters(rtcc_internal, rtcc_div_64);         // Se configura con un predivisor de frecuencias 1:64
     set_rtcc(240);
     set_timer1(0);
     senal = 1;
     contador = 1;
     control_l = 0;           // Se inicializa todas la variables y la LCD
     control_h = 0;
     lcd_init();
     do
      {
       //lcd_init();

  // Pulsador para incremento de frecuencia

        if(input(PIN_C0)==0)     // se presiono el pulsador 1
         {
           lcd_init();
           delay_ms(200);        // eliminar antirebote
           if(input(PIN_C0)==1)
             {
               contador = contador + 1;     // cuando se acabe el rebote incremento el puerto
               if(contador>4)
                 {
                   contador = 1;          // Si elcontador es mayor a 4 pasa inmediatamente a uno, es decir a la señal de 1Hz
                 }
             }
         }

  // Pulsador de decremento de frecuencia

        if(input(PIN_C1)==0)     // se presiono el pulsador 2
         {
           lcd_init();
           delay_ms(200);        // eliminar antirebote
           if(input(PIN_C1)==1)
             {
               contador = contador - 1 ;
               if(contador  == 0)
                 {
                   contador = 4;       // Si contador es uno pasa imediatamente a 4 es decir a 100hz
                 }
             }
         }

  // Pulsador de cambio de señal


        if(input(PIN_C2)==0)     // se presiono el pulsador 3
         {
           lcd_init();
           delay_ms(200);        // eliminar antirebote
           if(input(PIN_C2)==1)
             {
               senal = senal + 1 ;  // Se incrementa senal en uno para cambiar de señal
               if(senal > 2)
                 {
                   senal = 1;       // Si senal es mayor a 3 vuelve a la señal seno
                 }
             }
         }

  // Muestra mensaje de frecuencia y tipo de señal el la LCD para 1 Hz y señal cuadrada

       if (contador == 1  && senal == 1 )
         {
           lcd_gotoxy(5,1);            // Ubico el puntero en la posición (8,1) primer fila columna 8
           lcd_putc("Cuadrada");       // Se escribe el tipo de señal
           lcd_gotoxy(8,2);            // Ubico en el puntero en la segunda fila columna 5
           lcd_putc("1Hz");            // Se escribe la frecuencia de la señal
           delay_ms(50);
         }

 // Muestra mensaje de frecuencia y tipo de señal el la LCD para 10 Hz y señal cuadrada

       if (contador == 2  && senal == 1)
         {
           lcd_gotoxy(5,1);            // Ubico el puntero en la posición (8,1) primer fila columna 8
           lcd_putc("Cuadrada");       // Se escribe el tipo de señal
           lcd_gotoxy(8,2);            // Ubico en el puntero en la segunda fila columna 5
           lcd_putc("10Hz");            // Se escribe la frecuencia de la señal
           delay_ms(50);
         }

 // Muestra mensaje de frecuencia y tipo de señal el la LCD para 50Hz y señal cuadrada

       if (contador == 3  && senal == 1)
         {
           lcd_gotoxy(5,1);            // Ubico el puntero en la posición (8,1) primer fila columna 8
           lcd_putc("Cuadrada");       // Se escribe el tipo de señal
           lcd_gotoxy(8,2);            // Ubico en el puntero en la segunda fila columna 5
           lcd_putc("50Hz");            // Se escribe la frecuencia de la señal
           delay_ms(50);
         }

 // Muestra mensaje de frecuencia y tipo de señal el la LCD para 100 Hz y señal cuadrada

       if (contador == 4  && senal == 1)
         {
           lcd_gotoxy(5,1);            // Ubico el puntero en la posición (8,1) primer fila columna 8
           lcd_putc("Cuadrada");       // Se escribe el tipo de señal
           lcd_gotoxy(8,2);            // Ubico en el puntero en la segunda fila columna 5
           lcd_putc("100Hz");            // Se escribe la frecuencia de la señal
           delay_ms(50);
         }

 // Muestra mensaje de frecuencia y tipo de señal el la LCD para 1 Hz y señal diente de sierra

       if (contador == 1  && senal == 2)
         {
           lcd_gotoxy(0,1);            // Ubico el puntero en la posición (8,1) primer fila columna 8
           lcd_putc(" Diente Sierra");       // Se escribe el tipo de señal
           lcd_gotoxy(8,2);            // Ubico en el puntero en la segunda fila columna 5
           lcd_putc("1Hz");            // Se escribe la frecuencia de la señal
           delay_ms(50);
         }

 // Muestra mensaje de frecuencia y tipo de señal el la LCD para 10 Hz y señal diente de sierra

       if (contador == 2  && senal == 2)
         {
           lcd_gotoxy(0,1);            // Ubico el puntero en la posición (8,1) primer fila columna 8
           lcd_putc(" Diente Sierra");       // Se escribe el tipo de señal
           lcd_gotoxy(8,2);            // Ubico en el puntero en la segunda fila columna 5
           lcd_putc("10Hz");            // Se escribe la frecuencia de la señal
           delay_ms(50);
         }

 // Muestra mensaje de frecuencia y tipo de señal el la LCD para 50Hz y señal dienete de sierra

       if (contador == 3  && senal == 2)
         {
           lcd_gotoxy(0,1);            // Ubico el puntero en la posición (8,1) primer fila columna 8
           lcd_putc(" Diente Sierra");       // Se escribe el tipo de señal
           lcd_gotoxy(8,2);            // Ubico en el puntero en la segunda fila columna 5
           lcd_putc("50Hz");            // Se escribe la frecuencia de la señal
           delay_ms(50);
         }

 // Muestra mensaje de frecuencia y tipo de señal el la LCD para 100 Hz y señal diente de sierra

       if (contador == 4  && senal == 2)
         {
           lcd_gotoxy(0,1);            // Ubico el puntero en la posición (8,1) primer fila columna 8
           lcd_putc(" Diente Sierra");       // Se escribe el tipo de señal
           lcd_gotoxy(8,2);            // Ubico en el puntero en la segunda fila columna 5
           lcd_putc("100Hz");            // Se escribe la frecuencia de la señal
           delay_ms(50);
         }
      }
     while(true);
  }
.

Está un poco extenso, trate de coemntar lo que se hizo, por acá dejo una simulación en el proteus 7.0

Saludos.
Un saludo desde Pereira - Colombia

Desconectado The_Chosen

  • PIC12
  • **
  • Mensajes: 51
Re: Duda básica en lenguaje C
« Respuesta #17 en: 21 de Abril de 2010, 14:18:18 »

Saludos
 
Por acá pongo el código del generador de onda cuadrada y diente de sierra.

Parece que hay un problema cuando se agrega la onda seno porqué el simulador se vuelve loco y empieza a sacar un poco de warning y se empieza a volver lenta la simulación, al parecer el stack del micro se satura.

Código: [Seleccionar]
#if defined(__PCM__)
#include <16F877.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay (clock = 4000000)
#define use_portd_lcd TRUE
#use standard_io(B)
#use standard_io(C)
#use standard_io(D)
#byte puerto_b = 06
#byte conta = 0x20
#byte senal2 = 0x21
#byte i2 = 0x22
#include <lcd.c>

int contador,control_l,control_h,largo,senal;

#int_rtcc

desborde()
  {
// Señal cuadrada de 1 Hz

    if (contador == 1  && senal == 1)      // Pulso de 1 Hz
      {
        control_h = 0;
        control_l = control_l + 1;
        if(control_l<=100)
         {
           puerto_b = 100;                // Garantizo los primero 50 muestras en alto
         }
        else
         {
           puerto_b = 0;
         }
        if (control_l >200)
         {
           control_l = 0;                // Garantizo las demás 50 muestras en bajo
         }
        set_rtcc(178);                   // Se garantiza el periodo de 1s
      }

// Señal cuadrada de 10 Hz

    else if (contador == 2 && senal == 1)         // Pulso de 10Hz
      {
        control_l = 0;
        control_h = control_h + 1;
        if(control_h<=50)
         {
           puerto_b = 100;                   // Garantizo los primero 50 muestras en alto
         }
        else
         {
           puerto_b = 0;
         }
        if (control_h >100)
         {
           control_h = 0;                    // Ultimas muestras en 0 lógico
         }
        set_rtcc(240);                       // Se garantiza el periodo de 0.01s
      }

// Señal cuadrada de 50 Hz

     else if (contador == 3 && senal == 1)            // Pulso de 50 Hz
      {
        control_l = 0;
        control_h = control_h + 1;
        if(control_h<=50)
         {
           puerto_b = 100;                      // Garantizo los primero 50 muestras en alto
         }
        else
         {
           puerto_b = 0;
         }
        if (control_h >100)
         {
           control_h = 0;                     // Ultimas muestras en 0 lógico
         }
        set_rtcc(253);                       //Garantizo el periodo 0.002s
      }

// Señal cuadrada de 100 Hz

    else if (contador == 4 && senal == 1)            // Pulso de 100 Hz
      {
        control_l = 0;
        control_h = control_h + 1;
        if(control_h<=50)
         {
           puerto_b = 100;                   // Garantizo los primero 50 muestras en alto
         }
        else
         {
           puerto_b = 0;
         }
        if (control_h >100)
         {
           control_h = 0;                     // Ultimas muestras en 0 lógico
         }
        set_rtcc(254);                       //Garantizo el periodo 0.001s
      }

 // Señal diente de sierra 1Hz

   if(contador == 1 && senal == 2)            // señal diente sierra 1Hz
      {
       largo = largo + 1;                    // Se incrementa linealmente los valores hasta alcanzar la frecuencias deseada
        if(largo >= 100)
          {
            largo = 0;
          }
        puerto_b = largo;
        set_rtcc(178);
      }

// Señal diente de sierra 10Hz

   else if(contador == 2 && senal == 2)            // señal diente sierra 10Hz
      {
        largo = largo + 10;                  // Se incrementa linealmente los valores hasta alcanzar la frecuencias deseada
        if(largo >= 100)
          {
            largo = 0;
          }
        puerto_b = largo;
        set_rtcc(240);
      }

// Señal diente de sierra 50Hz

   else if(contador == 3 && senal == 2)            // señal diente sierra 50Hz
      {
        largo = largo + 5;
        if(largo >= 100)
          {
            largo = 0;
          }
        puerto_b = largo;
        set_rtcc(253);
      }

// Señal diente de sierra 100Hz

   else if(contador == 4 && senal == 2)            // señal diente sierra 100Hz
      {
        puerto_b = largo;
        set_rtcc(254);
        largo = largo + 10;
        if(largo >= 100)
          {
            largo = 0;
          }
      }
 }


void main()
  {
     set_tris_b(0x00);                    // Puerto B como salidas digitales
     set_tris_c(0xFF);                    // Puerto C como entradas digitales
     set_tris_d(0x00);                    // Puerto d como salidas digitales
     enable_interrupts(global);
     enable_interrupts(int_rtcc);         // Se habilita interrupciòn por desborde Timer 0 y se activa la interrupciòn global
     setup_counters(rtcc_internal, rtcc_div_64);         // Se configura con un predivisor de frecuencias 1:64
     set_rtcc(240);
     set_timer1(0);
     senal = 1;
     contador = 1;
     control_l = 0;           // Se inicializa todas la variables y la LCD
     control_h = 0;
     lcd_init();
     do
      {
       //lcd_init();

  // Pulsador para incremento de frecuencia

        if(input(PIN_C0)==0)     // se presiono el pulsador 1
         {
           lcd_init();
           delay_ms(200);        // eliminar antirebote
           if(input(PIN_C0)==1)
             {
               contador = contador + 1;     // cuando se acabe el rebote incremento el puerto
               if(contador>4)
                 {
                   contador = 1;          // Si elcontador es mayor a 4 pasa inmediatamente a uno, es decir a la señal de 1Hz
                 }
             }
         }

  // Pulsador de decremento de frecuencia

        if(input(PIN_C1)==0)     // se presiono el pulsador 2
         {
           lcd_init();
           delay_ms(200);        // eliminar antirebote
           if(input(PIN_C1)==1)
             {
               contador = contador - 1 ;
               if(contador  == 0)
                 {
                   contador = 4;       // Si contador es uno pasa imediatamente a 4 es decir a 100hz
                 }
             }
         }

  // Pulsador de cambio de señal


        if(input(PIN_C2)==0)     // se presiono el pulsador 3
         {
           lcd_init();
           delay_ms(200);        // eliminar antirebote
           if(input(PIN_C2)==1)
             {
               senal = senal + 1 ;  // Se incrementa senal en uno para cambiar de señal
               if(senal > 2)
                 {
                   senal = 1;       // Si senal es mayor a 3 vuelve a la señal seno
                 }
             }
         }

  // Muestra mensaje de frecuencia y tipo de señal el la LCD para 1 Hz y señal cuadrada

       if (contador == 1  && senal == 1 )
         {
           lcd_gotoxy(5,1);            // Ubico el puntero en la posición (8,1) primer fila columna 8
           lcd_putc("Cuadrada");       // Se escribe el tipo de señal
           lcd_gotoxy(8,2);            // Ubico en el puntero en la segunda fila columna 5
           lcd_putc("1Hz");            // Se escribe la frecuencia de la señal
           delay_ms(50);
         }

 // Muestra mensaje de frecuencia y tipo de señal el la LCD para 10 Hz y señal cuadrada

       if (contador == 2  && senal == 1)
         {
           lcd_gotoxy(5,1);            // Ubico el puntero en la posición (8,1) primer fila columna 8
           lcd_putc("Cuadrada");       // Se escribe el tipo de señal
           lcd_gotoxy(8,2);            // Ubico en el puntero en la segunda fila columna 5
           lcd_putc("10Hz");            // Se escribe la frecuencia de la señal
           delay_ms(50);
         }

 // Muestra mensaje de frecuencia y tipo de señal el la LCD para 50Hz y señal cuadrada

       if (contador == 3  && senal == 1)
         {
           lcd_gotoxy(5,1);            // Ubico el puntero en la posición (8,1) primer fila columna 8
           lcd_putc("Cuadrada");       // Se escribe el tipo de señal
           lcd_gotoxy(8,2);            // Ubico en el puntero en la segunda fila columna 5
           lcd_putc("50Hz");            // Se escribe la frecuencia de la señal
           delay_ms(50);
         }

 // Muestra mensaje de frecuencia y tipo de señal el la LCD para 100 Hz y señal cuadrada

       if (contador == 4  && senal == 1)
         {
           lcd_gotoxy(5,1);            // Ubico el puntero en la posición (8,1) primer fila columna 8
           lcd_putc("Cuadrada");       // Se escribe el tipo de señal
           lcd_gotoxy(8,2);            // Ubico en el puntero en la segunda fila columna 5
           lcd_putc("100Hz");            // Se escribe la frecuencia de la señal
           delay_ms(50);
         }

 // Muestra mensaje de frecuencia y tipo de señal el la LCD para 1 Hz y señal diente de sierra

       if (contador == 1  && senal == 2)
         {
           lcd_gotoxy(0,1);            // Ubico el puntero en la posición (8,1) primer fila columna 8
           lcd_putc(" Diente Sierra");       // Se escribe el tipo de señal
           lcd_gotoxy(8,2);            // Ubico en el puntero en la segunda fila columna 5
           lcd_putc("1Hz");            // Se escribe la frecuencia de la señal
           delay_ms(50);
         }

 // Muestra mensaje de frecuencia y tipo de señal el la LCD para 10 Hz y señal diente de sierra

       if (contador == 2  && senal == 2)
         {
           lcd_gotoxy(0,1);            // Ubico el puntero en la posición (8,1) primer fila columna 8
           lcd_putc(" Diente Sierra");       // Se escribe el tipo de señal
           lcd_gotoxy(8,2);            // Ubico en el puntero en la segunda fila columna 5
           lcd_putc("10Hz");            // Se escribe la frecuencia de la señal
           delay_ms(50);
         }

 // Muestra mensaje de frecuencia y tipo de señal el la LCD para 50Hz y señal dienete de sierra

       if (contador == 3  && senal == 2)
         {
           lcd_gotoxy(0,1);            // Ubico el puntero en la posición (8,1) primer fila columna 8
           lcd_putc(" Diente Sierra");       // Se escribe el tipo de señal
           lcd_gotoxy(8,2);            // Ubico en el puntero en la segunda fila columna 5
           lcd_putc("50Hz");            // Se escribe la frecuencia de la señal
           delay_ms(50);
         }

 // Muestra mensaje de frecuencia y tipo de señal el la LCD para 100 Hz y señal diente de sierra

       if (contador == 4  && senal == 2)
         {
           lcd_gotoxy(0,1);            // Ubico el puntero en la posición (8,1) primer fila columna 8
           lcd_putc(" Diente Sierra");       // Se escribe el tipo de señal
           lcd_gotoxy(8,2);            // Ubico en el puntero en la segunda fila columna 5
           lcd_putc("100Hz");            // Se escribe la frecuencia de la señal
           delay_ms(50);
         }
      }
     while(true);
  }
.

Está un poco extenso, trate de coemntar lo que se hizo, por acá dejo una simulación en el proteus 7.0

Saludos.

¿Alguien puede por favor revisar su simulación y ver si genera las dos señales con las cuatro frecuencias distintas? Tengo un error cuando ejecuto Proteus en Windows vista  :mrgreen:.

El programa está entretenido  :D.  Modificas los valores de "contador" y "senal" con los botones y después consultas su valor usando una interrupción por timer generando la onda deseada. Sin embargo, no entiendo para que usas control_h y control_l. ¿Dónde están los arrays que tienen las muestras?

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Duda básica en lenguaje C
« Respuesta #18 en: 22 de Abril de 2010, 00:11:08 »

Saludos

Citar
El programa está entretenido  .  Modificas los valores de "contador" y "senal" con los botones y después consultas su valor usando una interrupción por timer generando la onda deseada. Sin embargo, no entiendo para que usas control_h y control_l. ¿Dónde están los arrays que tienen las muestras?

No hay necesidad compañero de crear una tabla simplemente como es un señal cuadrada garantizo la mitad del tiempo en alto y la otra mitad en bajo por eso los registros que se mencionan. Lo mismo para señal triangular sólo como tengo un señal diente de sierra está varia linelamente y por eso incremento en forma lineal cada vez que el micro se interrumpe.

Dejame contatarte que ya solucione el problema de la simulación no se que paso, simplemente se me ocurrio cambiar el oreden y funciono :shock:. Todavía me estoy preguntando porqué no simulaba en la otra configuración si no cambie nada de código simplemente cambie el orden del programa, pero quedo más o menos como yo queria salvo el hecho de la señal sinusoidal que me muestra un brinco (salto) bastante marcado como se podría mejorar :lol:.

Voy a seguir trabajando a ver como termina este monachito saludos y  a seguir trabajando  :-/ :-/   
Un saludo desde Pereira - Colombia

Desconectado The_Chosen

  • PIC12
  • **
  • Mensajes: 51
Re: Duda básica en lenguaje C
« Respuesta #19 en: 22 de Abril de 2010, 02:53:31 »
No hay necesidad compañero de crear una tabla simplemente como es un señal cuadrada garantizo la mitad del tiempo en alto y la otra mitad en bajo por eso los registros que se mencionan. Lo mismo para señal triangular sólo como tengo un señal diente de sierra está varia linelamente y por eso incremento en forma lineal cada vez que el micro se interrumpe.

Ammmm, ¿y qué pasa con la señal senoidal?


Dejame contatarte que ya solucione el problema de la simulación no se que paso, simplemente se me ocurrio cambiar el oreden y funciono :shock:. Todavía me estoy preguntando porqué no simulaba en la otra configuración si no cambie nada de código simplemente cambie el orden del programa, pero quedo más o menos como yo queria salvo el hecho de la señal sinusoidal que me muestra un brinco (salto) bastante marcado como se podría mejorar :lol:.

Voy a seguir trabajando a ver como termina este monachito saludos y  a seguir trabajando  :-/ :-/   

Excelente, ¿tienes planeado hacerlo en la realidad? Entre una simulación y un circuito real hay mucha diferencia  :P.

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Duda básica en lenguaje C
« Respuesta #20 en: 22 de Abril de 2010, 23:32:15 »

Saludos

Citar
Ammmm, ¿y qué pasa con la señal senoidal?

Ni idea compañero que pasa con la señal sinusoidal, hoy estuve trabajando un rato volviendo a revisar el programa y lo veo todo bien. Definitivamente no se que pasa  :5]

Citar
Excelente, ¿tienes planeado hacerlo en la realidad? Entre una simulación y un circuito real hay mucha diferencia 

Pues haber te comento, esté proyectico se lo estoy ayudando hacer a un compañero de estudio, la verdad no se si lo tendrá que implementar, sí así fuera hay si que se pone interesante el proyectico. :mrgreen:

Aprovecho para hacer una consultica en el foro, por ahy estuve leyendo acerca de que el MPLAB permite compilar el código hecho en lenguaje C y crea un archivo .COF "Si no estoy mal" si así es, que me recomiendan que consulte acerca de como programar lenguaje C en el MPLAB.

Saludos
Un saludo desde Pereira - Colombia


 

anything