Acerca del uso del temporizador PIC16F1933
1. Respecto al uso de la versión 9.8 del compilador.
(1) Simplemente instálelo de acuerdo con la carpeta de software profesional versión 9.8 y cómo usarlo. (Recuerde marcar FUERA DE LÍNEA)
(2) Debe seleccionar HI-TECH Universal Toolsuite en mplab ide y luego señalar la ruta a picc.exe. En este momento, el ícono compilado cambiará a. negro y rojo.
2. En cuanto al método de configuración del bit de configuración: si es la primera vez que lo opera, se recomienda leer el manual de datos y configurarlo en el menú mplab ide. Una vez completada la configuración, el sistema. establecerá automáticamente el bit de configuración de acuerdo con su configuración. Generará los datos específicos de los bits de configuración. Anota y añade estas dos líneas al inicio del programa:
__CONFIG(0x0FA4);
__CONFIG(0x3AFF);
La ventaja de esto es que puede crear un nuevo Durante el proyecto, si agrega este código fuente, no necesita configurarlo nuevamente. El compilador lo configurará automáticamente en función de estas dos líneas de programa.
3. Acerca de la configuración del reloj del sistema de 16F1933 usando oscilación interna
Excepto por el reloj del sistema de 32 MHz, puede seguir estos pasos:
1) Desactivar 4 Multiplicación de frecuencia (SPLLEN = 0), configurada para usar IRCFlt de oscilación interna de 8 MHz; 3: 0gt; = 1110, bit de selección de reloj del sistema SCSlt 1: 0gt = 1X o 00
2) Esperar oscilación interna de frecuencia HFIOFR = 1
3) Asegúrese de que el oscilador interno de alta frecuencia sea estable HFIOFS = 1 (la precisión es de al menos 0,5)
Rutina:
OSCCON = 0B01110000 ; // 8MHz, INTOSC
mientras(!HFIOFR);
mientras(!HFIOFS);
4) Si necesita configurar 32MHz, la selección del reloj del sistema es SCSlt;1:0gt;=1X, no puede =00 aquí;
Rutina:
OSCCON = 0B11110000 // 32MHz, INTOSC
;while( !HFIOFR);
while(!HFIOFS);
4. En los temporizadores 2, 4 y 6, existen diferencias entre TMRX y PRX. sus funciones? ¿Cuál es el papel del post-preescalador?
Cuando solo se usa TMRX, se puede usar para cargar un valor inicial para contar hasta el desbordamiento.
Cuando solo usa PRX, puede cargar un recuento específico de veces, porque cuando TMRX = PRX, se activa la interrupción del temporizador X. La ventaja de usar PRX es que puede guardar una declaración para recargar el valor inicial en la interrupción, que es la llamada "recarga automática del valor inicial del contador".
La función del post-preescalador es que cuando el período de su interrupción programada es 1 ms, y luego el post-preescalador se establece en 1/X, entonces el período real de su interrupción se convierte en Xms. Dado que la salida del preescalador de los temporizadores 2, 4 y 6 se utiliza principalmente en el módulo CCP, se utiliza como base de tiempo cuando el módulo CCP funciona en modo PWM.
5. Dado que mi aplicación requiere una alta resolución PWM, se utilizará el reloj del sistema de 32 MHz.
¿Puedo usar el mismo temporizador si el período es el mismo? ¿Es necesario utilizar diferentes temporizadores para diferentes períodos?
Si los periodos son iguales se puede utilizar el mismo temporizador para generar PWM. Si los periodos son diferentes se deben utilizar temporizadores diferentes.
6. Con respecto a la inicialización del puerto de E/S, si la inicialización es incorrecta, las funciones correspondientes no se pueden utilizar normalmente.
¿Es necesario inicializar ANSELA, ANSELB, APFCON y otros registros relacionados con puertos de E/S? ¿Cuáles son sus usos?
Hay un conflicto en la hoja de datos sobre los pines de respaldo. Al observar el diagrama de pines de arriba, CCP2 se puede configurar en RC1 o RB3, pero cuando se explica específicamente la función del registro, dice RC0 y RB5. ¿Cuál es correcto?
No configurar ANSELA y ANSELB no tendrá ningún impacto en la generación de PWM, pero se recomienda configurarlos. APFCON debe estar configurado correctamente.
Cuando CCP2SEL =0, se genera PWM en RC1.
Cuando CCP2SEL =1, se genera PWM en RB3.
Al configurar PWM mejorado, P2BSEL se usará en este momento para seleccionar el pin de salida P2B. CCP2/P2A se puede configurar en RC1 o RB3, y CCP2/P2B se puede configurar con RC0 y RB5.
7. Pruebe los dos valores límite del ciclo de trabajo 0 y 100
Cuando use PRX = 0xFF, establecer el ciclo de trabajo en 100 causará fallas porque en este momento, 4. *(255 1)=1024=0x400, los datos se han desbordado. ¿Es cierto que cuando la resolución alcanza los 10 bits, no se pueden generar de acuerdo con el ciclo de trabajo de 100?
¿Pregunta?
Al usar PIC16F1933, descubrí que cuando el ciclo de trabajo de la salida PWM de 10 bits es 100, habrá muchos fallos, pero si no se usa la salida PWM de 10 bits, no habrá fallos.
Después del análisis personal, utilicé el temporizador 4 como base de tiempo para que CCP1 emita PWM. Si necesito usar PWM de 10 bits, PR4 = 0xFF. manual de datos: 100= (CCPR4L:CCP4CONlt;5:4gt;)/(4*(PR4 1))
CCPR4L:CCP4CONlt;5:4gt; = 4*(PR4 1) = 4*( 0xFF 1)=0x400 =0B100 0000 0000
El registro anterior es de 12 bits y el resultado del cálculo posterior es de 13 bits. ¿Es esta la razón por la cual el PWM de 10 bits con un ciclo de trabajo de 100 produce muchos fallos? Por lo tanto, en el proyecto real, si necesita alcanzar el ciclo de trabajo completo, no puede seleccionar PRX=0xFF y PRX=0xFE.
8. Al depurar el puerto serie, se descubrió que el puerto serie enviaba varios códigos confusos al encender o apagar. Esto puede deberse a que el puerto de reinicio no se utiliza como reinicio, lo cual debe realizarse. verificado.
Los experimentos muestran que la razón por la que pueden aparecer caracteres confusos durante el encendido o apagado es que durante el proceso de encendido o apagado, el chip puede vibrar cerca del voltaje de encendido confirmado, causando que el chip calcule mal el voltaje de encendido. Un corte de energía puede causar caracteres confusos. Hay un registro PWRTE en los bits de configuración. Para habilitar el temporizador de retardo de encendido, configure este registro en 1 y esta situación desaparecerá. Además, esta situación no tiene nada que ver con que el puerto de reinicio sea un pin de entrada.
9. Es necesario confirmar una función de 100us, que puede usarse para retrasos muy cortos.
En el caso de 32MHz, i=255, en el caso de 11.0592MHz, i=89;
Retraso nulo100us(void)
{ p>
Uint8 i = 255;
While(i--);
}
10. Con respecto al módulo DAC, ¿cuál es la precisión? ? ¿La prueba puede generar una referencia de voltaje externo?
Después de las pruebas, se descubrió que la salida de voltaje del DAC será 0,02 V menor que el valor teórico, y el valor convertido por el ADC también tendrá el mismo problema. Al leer el manual se encontró que. La precisión de la salida de voltaje fijo es de alrededor de ±4. Debido a esto, la solución tiene requisitos de precisión de voltaje muy altos y no puede cumplir con los requisitos. 431 debe usarse como referencia externa.
También puede verificar el voltaje de referencia interno según el método del manual, es decir, puede salir al exterior como voltaje de referencia.
DACEN = 0;
DACLPS = 1; // Seleccionar fuente de voltaje de referencia positiva DAC
DACOE = 1 // salida DACOUT
DACPSS0 = 0; // Para seleccionar FVR como voltaje de referencia, es necesario configurar el bit correspondiente de FVRCON
DACPSS1 = 1;
DACNSS = 0;
DACCON1 = 31;
Cuando el voltaje de referencia interno se establece en 4.096, el valor medido real es 4.089. La precisión inexacta no es obvia aquí.
Cuando mi voltaje de referencia interno está configurado en 4.096 y DACCON1 = 20, debería tener una salida de 2.56 V, pero la medición real es 2.543 V, lo que es una diferencia de casi 0.02 V.