Saltar al contenido principal
LibreTexts Español

9.3: Agitando Rápidamente

  • Page ID
    81958
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    Entonces, ¿qué es todo este asunto de necesitar hacer este tipo de cosas muy rápido? Una aplicación podría ser la síntesis digital directa de formas de onda arbitrarias. La idea es crear una forma de onda de forma arbitraria; no solo los habituales senos, cuadrados y triángulos (aunque eso también es posible). Las formas de onda arbitrarias se pueden realizar usando técnicas de oscilador analógico junto con circuitos de conformación de onda, pero puede ser un desafío hacerlo bien. En su lugar, considere crear una tabla grande de valores enteros. Por lo general, el tamaño de la mesa sería un buen poder de dos, como 256. Cada entrada en la tabla sería el valor digitalizado de la forma de onda deseada. Una rampa simple podría verse así:

    unsigned short int ramp_table[] = { 0, 1, 2, 3, /* and so on */};
    

    Una ola más complicada podría verse así:

    unsigned short int squiggly_table[] = { 0, 21, 15, 33, /* etc */};
    

    Estos valores podrían entonces ser enviados secuencialmente a un convertidor digital a analógico (DAC) para crear la forma de onda deseada. Una vez que llegamos al final de la mesa, simplemente volvemos al inicio para hacer el siguiente ciclo. Con una tabla de 256 entradas, podemos usar un char sin signo como índice de tabla y una vez que llegue a 255, incrementarlo hará que se vuelva a enrollar a 0, automáticamente. El operador de incremento de poste es ideal para esto. Para el siguiente código, supongamos que PORT es la ubicación de memoria del DAC en el que estamos escribiendo.

    unsigned char i = 0;
    
    // loop forever
    while ( 1 )
    {
        PORT = ramp_table[i++];
    
        // now wait between each value, dependent on sample rate
        delay();
    }
    

    This page titled 9.3: Agitando Rápidamente is shared under a CC BY-NC-SA 4.0 license and was authored, remixed, and/or curated by James M. Fiore via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.