Skip to content

RFE_IoT_SweepsAndChangeConfig example in Spanish

mballesteros-RFExplorer edited this page Dec 15, 2016 · 7 revisions

Ejemplo RFE_IoT_SweepsAndChangeConfig

Este es un ejemplo más avanzado para usar RF Explorer 3G+ IoT. Está basado en el ejemplo RFE_IoT_GetPeak.

La principal limitación del ejemplo RFE_IoT_GetPeak es la selección de un rango de frecuencia. En aquel ejemplo se utilizaba la configuración por defecto y no era modificado por el sketch de Arduino.

¿Qué es lo que hace?

Este sketch configura varios rangos de análisis en frecuencia. Utiliza diferentes frecuencias de inicio y parada en el escaneo, mostrando iterativamente el resultado de la señal máxima capturada en cada uno de esos rangos.

El ejemplo comienza utilizando la configuración por defecto del analizador, tras ello incrementa el rango de Span, configurado por el usuario, para establecer los análisis.

Por ejemplo en la frecuencia más baja posible (15MHz) y, usando un span de 10MHz, realizará una secuencia de barridos. Después incrementará el rango a la ranura siguiente (15 + 10 = 25MHz) y continuará con el escaneo. Seguirá hasta la frecuencia máxima de 2700MHz, momento en el que volverá a configurarse a 15MHz y reanudará el algoritmo. Es un análisis exhaustivo del espectro.

¿Cómo ejecutarlo?

Cargue el ejemplo RFE_IoT_SweepsAndChangeConfig en el Arduino Due y vea los resultados en el Serial Monitor del entorno de Arduino.

Resultados esperados

Como se muestra a continuación, la salida en el Serial Monitor incluye la siguiente información:

  • Encabezado y versión de la librería IoT.
  • Un print New Config que indica cuando el módulo 3G+ envía la configuración actual.
  • Un par de detalles sobre el rango del analizador de frecuencia. Muestra la frecuencia de inicio y parada según lo definido por los ajustes predeterminados actuales en el módulo RF. La configuración predeterminada se establece como 1,180 - 1,220 GHz.
  • Realiza escaneos sobre este rango de acuerdo a la constante _SWEEP que en este caso se encuentra a 2. Por consiguiente asegura que al menos va a realizar dos escaneos sobre este rango de frecuencia. Analiza los datos recibidos y muestra el valor en amplitud de la frecuencia más alta encontrada.
  • Reconfigura el rango. Partiendo de la frecuencia de inicio predeterminada (1,180GHz) le suma 10MHz para formar el nStartFreqKHZ. El Span está configurado por una constante de 10Mhz. En definitiva, el escaneo mostrado sera ahora sobre la base de 1,190 - 1,200GHz.
  • Realiza dos escaneos, analiza los datos recibidos y muestra el valor máximo.
  • Nueva configuración, escaneo , nueva configuración, escaneo, etc. Repite este esquema de reconfiguración hasta superar la frecuencia máxima de 2700 Mhz. En este caso comenzará a 15MHz que es la frecuencia más baja soportada.

Descripción detallada del código fuente

Un par de constantes #define permiten diferentes configuraciones del mismo sketch:

  • _SPAN_KHZ: Span en KHz para el ánalisis en frecuencia que realiza el código.
  • _SWEEPS: Número de barridos para cada configuración.

La principal diferencia (en código) con el ejemplo más simple es esta nueva claúsula if en la que se modifica la configuración usando la función g_objRF.sendNewConfig (nStartFreqKHZ, nEndFreqKHZ):

        if (bChangeConfig == true)
        {
            //Get configuration from RF module and add to constant defined values
            unsigned long int nStartFreqKHZ = g_objRF.getConfiguration()->getStartKHZ() + _SPAN_KHZ;
            unsigned long int nEndFreqKHZ = nStartFreqKHZ + _SPAN_KHZ;
            if (nEndFreqKHZ > g_objRF.getConfiguration()->getMaxFreqKHZ()) 
            {
                //Frequency limit, reconfigure with minimum value of RF module
                nStartFreqKHZ = g_objRF.getConfiguration()->getMinFreqKHZ();
                nEndFreqKHZ = nStartFreqKHZ + _SPAN_KHZ;
            }
            //Send Command to change RF module configuration
            g_objRF.sendNewConfig(nStartFreqKHZ, nEndFreqKHZ);
        }

Otros cambios

Pequeñas modificaciones en el código le permitirán hacer que este programa funcione de formas muy diferentes y útiles:

  • Cambie _SPAN_KHZ a otros valores en un rango válido para satisfacer sus necesidades. Cuanto más ancho sea el span, menor será la resolución pero más rápido se cubrirá el rango completo.
  • Cambiar _SWEEPS para mostrar más o menos barridos en el rango solicitado. También puede modificar una variable para permanecer analizando un rango particular durante más tiempo si no se detecta ninguna señal por encima de cierto umbral, etc.
  • Cambiar los rangos de inicio / parada. Substituir la línea if (nEndFreqKHZ> g_objRF.getConfiguration () -> getMaxFreqKHZ ()) a algo como if (nEndFreqKHZ> nMyValue). Un ejemplo de cómo escanear sólo el rango de transmisión FM sería:
        if (nEndFreqKHZ > 108000) 
        {
            //set new start frequency in FM broadcast range
            nStartFreqKHZ = 87500;
            nEndFreqKHZ = nStartFreqKHZ + _SPAN_KHZ;
        }