Voy a intentar adelantar un poco de código.
El proyecto lo voy hacer con XC32, con MPLAB Harmony 3 y con MCC.
Dejo en imágenes los pasos si alguien, en algún momento desea crear un proyecto con las herramientas mencionadas.Primero, en MPLAB X inicio un nuevo proyecto con H3 con MCC
Luego selecciono se abre otra ventana, donde debo seleccionar la ruta donde se descargó el repositorio de H3.
A continuación, indico donde deseo crear mi proyecto:
Finalmente, selecciono el microcontrolador que deseo usar.
Luego se abre el asistente del administrador de contenido, donde selecciono la opción para H3.
Nuevamente, el MCC solicita la ruta del repositorio, creo que es algo redundante, pero así está la cosa.
Finalmente el MCC tiene este aspecto:
Con el módulo
System, se puede calibrar los bits de configuración, también conocidos como
fuses.
La primera palabra de configuración se denomina DEVCFG3 el cual posee tres partes.
USERID nos permite agregar un número de identificación que podría ser la versión del firmware o cualquier otra información.
Una característica de la familia de este MCU es que las salidas o entradas de varios periféricos pueden ser ‘colocados’ en diferentes terminales del MCU. Esto es una ventaja sobre otros microcontroladores debido a que muy a menudo comparten varios periféricos sobre los mismos terminales. Por ejemplo si se utiliza el módulo de comunicación serial asincrónica RS232, el módulo SPI ya no se podría utilizar y viceversa.
Con la familia de este microcontrolador ese problema se resuelve fácilmente asignado a otros terminales las entradas y salidas del otro periférico.
Los periféricos que no poseen esta ventaja son el módulo de comunicación I2C y el conversor ADC cuyos terminales son fijos.
Al poner PMDL1WAY en ON nos permite una sola vez bloquear al Módulo Periférico (Peripheral Module), el cual permite deshabilitar a un módulo periféricos una sola vez, hasta asignarle correctamente los terminales externos del MCU. Luego de la configuración correcta de todos los periféricos no hay manera de volver a modificar al PPS hasta un reinicio del MCU.
El IOL1WAY en ON nos permite una sola vez bloquear a los registros RPnR para la asignación correcta de los terminales al periférico.
DEVCFG2 y DEVCFG1, están relacionados con el oscilador, así que prefiero usar la parte gráfica del oscilador para configurarlo.
EL CPU del microcontrolador puede trabajar a 50MHZ, pero poseo un cristal de 8MHz, así que la frecuencia próxima sería 48 MHz.
Si se regresa a la configuración de DEVCFG2 y DEVCFG1, se podrá observar que han cambiado algunos bits.
Nótese que el bit FNOSC, de DEVCFG1, está en FRCPLL, esto significa Fast RC PPL, que es oscilador interno RC de alta velocidad, y no deseo utilizar dicho oscilador, quiero usar el cristal.Y lo que deso usar es XT más multiplicador de frecuencia (PLL)
El bit IESO controla el arranque con dos velocidades, cuando se energiza el sistema, el cristal u oscilador necesitan un tiempo hasta estabilizarse correctamente, habilitado el modo de dos velocidades con el bit IESO, permite al CPU utilizar primero el oscilador interno para luego conmutar al oscilador principal. En nuestro caso no utilizaré dicha funcionalidad, pero debo utilizar el temporizador relacionado con el Power On Reset (POR) hasta que se estabilice el oscilador principal.
FPBDIV y permite definir la frecuencia a la cual los periféricos trabajarán y es un múltiplo de la frecuencia de oscilación del CPU. La dejaremos en un valor igual a 1, es decir sin división.
FCKSM y tiene 3 sub-opciones. El FSCM o Fail-Safe Clock Monitor vigila que el oscilador principal funcione correctamente, si existiera alguna falla, puede conmutar a un oscilador interno para que el CPU siga trabajando. Creo que voy a dejar deshabilitado al FSCM y a la conmutación de oscilador. O tal vez debería optar por la opción de conmutación al oscilador interno.
Deseo usar el perro guardián, así que configuro para que su desborde sea en 1024 ms, y las opciones de
ventana ese temporizador, no las utilizaré (en OFF)
Con respecto DEVCFG0, tiene cinco opciones, la primera se denomina JTAGEN y permite la depuración mediante JTAG que es una norma de la IEEE de un puerto de acceso para probar o depurar aun dispositivo. Yo usaré un ICD3 o un SNAP; por lo que dicha opción estará en OFF.
La segunda opción nos permite configurar que canal ICSP va ser utilizado y en este caso es el número 2.
Respecto a las protecciones de escritura en la memoria de programa y de bootlader, ya que es un proyecto casero y no pienso crear una actualización remota, no pienso activar esas casillas, sólo al de protección de lectura mediante un programador externo.
EL Background debugger, lo dejo en OFF, tampoco es algo no importante, ya que es un proyecto casero, y se pone de manera automática en ON, si utilizo el programador/depurador para depurar con el hardware.
Hasta aquí dejo esta explicación que resultó muy extensa.
En otro momento continuo con la configuración del MCC antes de generar el código.