5 votos

¿Por qué necesito un retraso como potencias PIC up?

Yo estoy usando una de baja potencia PIC16LF1554 junto con un nRF24l01+ transceptor de 2,4 GHz.

Durante el encendido, el PIC intentar inicializar el módulo de RF antes de que el suministro se ha alcanzado el mínimo requerido y no se realizará a menos de insertar un retraso. Algo como esto

void main()
{
    // 4x PLL, 8MHz internal oscillator = 32MHz clock
    OSCCON = 0xF0;

    // wait for HFINTOSC to stabilise
    while (OSCSTATbits.HFIOFR == 0);
    while (OSCSTATbits.HFIOFS == 0);

    // configure TRIS, APFCON etc.
    // (removed for clarity)

    // **** necessary delay ****
    __delay_ms(500);

    // initialise RF transceiver
    NRF_Setup();

    // main loop
    while (1)
    {
        // ... whatever ...
    }
}

No acabo de entender por qué esto es así porque el RF tiene un requisito mínimo de 1.9 V y, de acuerdo a la hoja de datos del PIC requiere de 2.5 V para el HFINTOSC a estabilizar, así que pensé que debería estar bien. (El nRF24l01+ es independiente breakout board, que tiene otros componentes de apoyo, así que tal vez que afecta a las cosas).

Así, mientras que este funciona bien y, obviamente, el retraso no tiene ningún impacto en la aplicación final, yo aún no le gusta la idea de tener que escribir código arbitrario retraso y mi sensación sería probar algo un poco más determinista. El 500ms es probablemente una exageración y yo podría empíricamente encontrar algo más corto, pero que no se siente como un enfoque sólido.

Así que, ¿hay alguna manera fácil de medir lo que el VDD es como rampas durante el encendido, ya sea en el código o con componentes externos, en ausencia de un voltaje de referencia? O tal vez ese no es el problema que estoy viendo y el retraso es necesario por otra razón?

EDITAR En caso de que sea pertinente, estos son los parámetros de configuración

// CONFIG1
#pragma config FOSC = INTOSC    // Oscillator Selection Bits (INTOSC oscillator: I/O function on CLKIN pin)
#pragma config WDTE = OFF       // Watchdog Timer Enable (WDT disabled. SWDTEN bit is ignored.)
#pragma config PWRTE = OFF      // Power-up Timer Enable (PWRT disabled)
#pragma config MCLRE = OFF      // MCLR Pin Function Select (MCLR/VPP pin function is digital input)
#pragma config CP = OFF         // Flash Program Memory Code Protection (Program memory code protection is disabled)
#pragma config BOREN = OFF      // Brown-out Reset Enable (Brown-out Reset disabled. SBOREN bit is ignored.)
#pragma config CLKOUTEN = OFF   // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)

// CONFIG2
#pragma config WRT = OFF        // Flash Memory Self-Write Protection (Write protection off)
#pragma config STVREN = OFF     // Stack Overflow/Underflow Reset Enable (Stack Overflow or Underflow will not cause a Reset)
#pragma config BORV = LO        // Brown-out Reset Voltage Selection (Brown-out Reset Voltage (Vbor), 1.9V trip point selected.)
#pragma config LPBOR = OFF      // Low-Power Brown Out Reset (Low-Power BOR is disabled)
#pragma config LVP = OFF        // Low-Voltage Programming Enable (High-voltage on MCLR/VPP must be used for programming)

5voto

GetFree Puntos 495

¿Experimento con el valor de retardo, puede ser inferior?

Más complejo fichas a menudo tienen una secuencia de encendido durante el cual no pueden ser utilizados, como la (in)famoso controlador de LCD HD44780. Me di cuenta de esto Tpor valor en el nRF24L01+ hoja de datos (100 ms). No estoy realmente seguro de lo que se especifica, pero se podría interpretar como el tiempo entre el poder llegar a 1.8 V y el chip está listo para manejar los comandos.

enter image description here

Leyendo un poco más, el diagrama de la p22 confirma mi interpretación.

enter image description here

4voto

Salem Koja Puntos 21

Esto se hizo un poco largo por los comentarios tan sólo tres pequeños puntos.

Usted podría capturar el momento del encendido con un alcance y un desencadenador adecuado, ello en tanto el PIC y el nRF24L01 y verás si se elevan a diferentes velocidades. Bien podría ser que capacitancia suplementaria o adicional de regulación de hacer las dos vertientes diferentes.

Con respecto a la demora en el código, creo que no es malo si se puede cuantificar. Usted sabe la razón de la demora es dejar que el voltaje de resolver, este debe ser un período de tiempo similar en cada arranque. Un montón de mi código tiene un retraso similar como la suya, por ejemplo, para esperar por una pantalla gráfica LCD para iniciar o para partes externas a la estabilización.

Si fueron simplemente insertar un retardo para solucionar un desconocido, intermitente problema sería muy diferente, pero ese no es el caso.

Sin embargo, otra idea es que en algunas Fotos se puede conectar el Voltaje Fijo de Referencia (FVR) a la entrada del ADC - siempre y cuando usted tiene una referencia estable en otra parte (o la referencia interna) se puede utilizar para el umbral de una adecuada voltaje estable para el módulo de RF. Escribí un breve artículo acerca de esta "Medición de la PIC Vdd sin componentes externos el uso de la FVR".

Desde el artículo:

Para calcular nuestro desconocido Vdd necesitamos un valor conocido para comparar en contra, que el Voltaje Fijo de Referencia (FVR) módulo proporciona. Normalmente la FVR suministro estable el voltaje de referencia para el ADC, pero cerca de la inspección de la hoja de datos demuestra que también puede ser utilizado como una entrada.

También puede conectar la fuente de alimentación del RF de la junta (si el alcance de las pruebas muestran que varía) a un canal ADC y el monitor.

4voto

ianb Puntos 659

¿Por qué no considerar un MAX6326 - es un SOT23-3 pin proveedor de energía supervisor chip que va a mantener la PIC en reset hasta que las líneas de alimentación se han estabilizado por encima de un cierto voltaje. Aquí están los tipos que se pueden obtener: -

enter image description here

Uno de estos debe hacer el trabajo. Por CIERTO que no es necesario utilizar en el pin reset - sólo puede leer el pin en cualquier GPIO de la línea.

2voto

Camil Staps Puntos 7589

Es necesario borrar la PWRTE configuración de bits para permitir que el power-up timer. Con esta característica, la foto que se espera con la ejecución de cualquier código por algún tiempo determinado por un oscilador RC. Para su chip que significa un retraso de aproximadamente 64 milisegundos. Más información se puede encontrar en AN607 y en la sección 6.1 de la hoja de datos de su ficha.

También puede probar la configuración de la BOREN bits a 10, que permite Brown-out reset, lo que significa que VDD tiene que llegar a un mínimo de tensión antes de iniciar la ejecución de código.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X