rev 0 : 17/02/2020
rev1 : 07/03/2024


Test Module (Microchip) Curiosity PIC18F47Q10
* Présentation
*
Premier Test : UART2 (via USB) et ADC (2020)


Tests avec BASE PIC18F27Q10
* Carte Hardware BASE 18F27Q10
*
Test #1 (2021)
*
Test #2 (2024) avec mini OLED et INA219







Présentation carte CURIOSITY PIC18F47Q10:
Liens :
https://www.microchip.com/Developmenttools/ProductDetails/DM182029

achetée en péeriode promotionelle pour 13,50€ HT .. 17,60 € TTC livrée

images/t_Curiosity_18F47Q10_photo.gif images/t_PIC18F47Q10_Curiosity_Nano_Pinout.gif

Photo

Pin out carte

On utilisera VTarget = 3,3V pour les Pull UP ou autres ..

PIC18F47Q10 Curiosity Nano Schematic (pdf)

extraits schémas :

images/t_Curiosity_18F47Q10_Powe_supply_from_USB.gif images/t_Curiosity_18F47Q10_schema.gif

Tensions elaborées à partir du 5V USB

Liaisons MCU 18F47Q10



MikroC NE SUPPORTE PAS CE PIC !
ni NECTO STUDIO d'ailleurs !
donc obligation de passer par MPLABX et XC8
For Heureusement il y a MCC configurator , un excellent outil


Premier TEST : UART2 et ADC

Je suis parti d'un exemple fournit par Microchip , ici
https://mplabxpress.microchip.com/mplabcloud/example/details/828

Traduction :

"Hello World " via une liaison serie ..donc via UART
Envoi et reception d'information via une liaison CDC sur la plupart des cartes curiosity avec un emulateur Terminal
Recuperer le programme " Hello World Serially.zip "
Le peripherique EUSART du PIC18F47Q10 connectés sur les Pins RD1=TX et RD0=RX
opère comme un (device) peripherique USB CDC pour transformer le message EUSART serie, en protocol USB vers un Port Virtuel PC
L'exemple montre comment faire une liaision unidirectionnelle (Half Duplex)
La carte Curiosity envoie systematiquement un message ascii sur le terminal PC


Procedure :

Lancer MPLABX
aller sur Fichier -> New Project
Selectionner Microchip Embedded -> Standalone Project
Entrer le modele de votre PIC, qui est donc PIC18F47Q10
Donner un nom au projet :
2) Ouvrir MPLABX Configurator (MCC) vers Tools -> embedded -> MPLAB Xpress Configurator
commencer par SYSTEM Module
Selectionner "Oscillator Set" choix sur "HF Internal clock " et "32 MHz"
select "clock divisor" -> 1
dans le menu "Device Ressources"
Rajouter le preipherique "EUSART" -> choix EUSART2
Modifier la config (Settings)

valider les cases EUSART,
Baud Rate -> 19200 che
Transmit
8 bits
Redirection STDIO sur USART
Configurations des Pins utilisées par EUSART2

EUSART2 -> RD1 -> to RX2 et RD0 to >TX2
Cliquez sur GENERATE (à coté du menu Project Ressources"

MPLAB genere alors les fichiers main.c et ceux dans le directory mcc.h et mcc.c
On retouve donc le fichier principal main.c
qu'on ouvre via un double click

nota : en amont du main
Systeme_Initalize() ; fait tout le boulot d'initialisation hardware et initialisation des peripheriques!
une simple procedure d'envoi d'un message se trouve dans la boucle principale du main programme
printf("\nHello from Q10 curiosity!"); delay_ms(500);

Compiler le programme
Cliquer sur l'icone Chargement
La carte comprend le Programmateur incorporé .. pas de pickit à rajouter .

à noter :
La sortie physique (pins ) EUART2 n'est pas utilisée, car passe via la liaison USB comme port virtuel
Usage de USB communications device class (or USB CDC class) is a composite Universal Serial Bus device class.
Cette classe peut etre utilisée dans un environnement industriel telle que machine C.N.C
set aussi à mettre à jour de vieux equipement basé sur une COM RS232 . Le composant USB apparait alors
comme un traditionnel PORT RS232 ..mais VIRTUEL . compatible avec les software gérant un port COM.
( Terminal, appli Visual Basic ..PIC UART ..etc ...)
Les fabricants de Puces (Devices) electroniques tel que Prolific Technology, FTDI, Microchip, Atmel
en propose ppour faciluter le developpemnt d'application USB-RS232.



1er test : Curiosity_18F47Q10_Uart_2020-01.zip
main source : main.c
chargeur : _18F47Q10_Curiosity_EUsart2_ADC.X.production.hex
Affectation des Pins via MCC
MyConfig_18F47Q10.mc3

ATTENTION à bien choisir le bon boitier MCU


Configurer un terminal PC quelconque :

Exemple avec Terminal YAT
COM 27 virtuel -> Curiosity Virtual COM Port
OK .. mais avec DTR forcé (Vert)

ou avec un outil MPLAB , sans lancer MPLABX
mplab-data-visualizer-standalone(windows).1.0.675.exe
ou via l'outil intégré dans MPLAB X_IDE
UART via USB communications device class (or USB CDC class)

pour mon test j'ai rajouté :
le clignotement de la led existante sur la carte (RE2)
Le BP sur RE0 sert à faire un RESET pour sortir de la boucle principale et recommencer!
le test en reception UART
Lecture entree ANA RA2
et le bus I2C pour y connecter plus tard ...un LCD OLED mini 128x32

SOFTWARE :

dossier de stockage du projet :
C:\MPLABX_Projects\_18F47Q10_Curiosity_EUsart2_ADC.X
enregistrement " Simple Serial Terminal "
COM35 sur cable Prolific TTL/USB , 19200,8,N,1
avec ....TX2 (fil blanc du cable prolific) sur RD0 ......et noir sur Gnd..

Fichier de capture : mchpterm-capture_2020_1114.txt

Projet MPLABX : Curiosity_18F47Q10_Uart
Compilation le Nov 14 2020 a 15:44:35 UTC
avec version XC8 : 2100
MPLABX IDE V5.30 XC8
Test sur carte Curiosity 18F47Q10
UART2 TX sur RD0 19200,8,N,1
Hello Chaps, are you fine ?
Lecture EA2:
0 ADC EAN2= 557
1 ADC EAN2= 18
2 ADC EAN2= 18
3 ADC EAN2= 18
4 ADC EAN2= 290
5 ADC EAN2= 637
6 ADC EAN2= 917
7 ADC EAN2= 991
8 ADC EAN2= 991
9 ADC EAN2= 992
10 ADC EAN2= 991
11 ADC EAN2= 992

Rappel :
Pour sauvegarder TOUT le projet,
se mettre sur l'icone du projet :
click droit
package

le deploiement du projet

La Fenetre Output montre :
Packaged project in C:\MPLABX_Projects\_18F47Q10_Curiosity_EUsart2_ADC.X\Curiosity_18F47Q10_Uart.zip
renomé en Curiosity_18F47Q10_Uart_2020_11.zip (pour la date fraicheur !)
Souce principal : main.c



2) TEST Filtrage / moyennage ADC
La gestion de l'ADC en mode Moyennage ou Glissant et via Interrupt
ou via DMA !!! est assez nébuleuse pour moi.
=> .A suivre

3) TEST NCO


4) TEST xx



Carte BASE 18F27Q10

le meme circuit imprimé que Base 18F26K22 ou 18F27K42

images/t_BASE_18F27Q10.gif


images/t_Pickit4_18F27Q10.gif


TEST #1 (18F27Q10 en PDIP 28)

UART1 TX sur RC7 (19200 bds)
ADC1 sur EA1 (10 bits)


Compilation MPLABX IDE V5.30 et XC8
C:\MPLABX_Projects\_BASE_18F27Q10_tests_UART1_ADC_I2C_SPI.X\dist\default\production
*****************************************************
Compilation
make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf
make[1]: Entering directory 'C:/MPLABX_Projects/_BASE_18F27Q10_tests_UART1_ADC_I2C_SPI.X'
make -f nbproject/Makefile-default.mk dist/default/production/_BASE_18F27Q10_tests_UART1_ADC_I2C_SPI.X.production.hex
make[2]: Entering directory 'C:/MPLABX_Projects/_BASE_18F27Q10_tests_UART1_ADC_I2C_SPI.X'
.. etc
Memory Summary:
Program space used 19AAh ( 6570) of 20000h bytes
( 5.0%)
Data space used 26Ah ( 618) of D1Fh bytes ( 18.4%)
Configuration bits used 6h ( 6) of 6h words (100.0%)
EEPROM space used 0h ( 0) of 400h bytes ( 0.0%)
ID Location space used 100h ( 256) of 100h bytes (100.0%)
Data stack space used 0h ( 0) of A00h bytes ( 0.0%)
make[2]: Leaving directory 'C:/MPLABX_Projects/_BASE_18F27Q10_tests_UART1_ADC_I2C_SPI.X'
make[1]: Leaving directory 'C:/MPLABX_Projects/_BASE_18F27Q10_tests_UART1_ADC_I2C_SPI.X'
BUILD SUCCESSFUL (total time: 9s)
Loading code from C:/MPLABX_Projects/_BASE_18F27Q10_tests_UART1_ADC_I2C_SPI.X/dist
/default/production/_BASE_18F27Q10_tests_UART1_ADC_I2C_SPI.X.production.hex...
Loading completed
Connecting to programmer...
Programming target...
Programming completed
Running target...


Pickit4 connecté coté USB et coté ICSP Base 18F27Q10

Connecting to MPLAB PICkit 4...
Currently loaded versions:
Application version............00.05.41
Boot version...................01.00.00
Script version.................00.03.33
Script build number............0540a22e50
Target voltage detected
Target device PIC18F27Q10 found.
Device Revision Id = 0xa0040000
Calculating memory ranges for operation...
Erasing...
The following memory area(s) will be programmed:
program memory: start address = 0x0, end address = 0x3
program memory: start address = 0x8, end address = 0x103
program memory: start address = 0xfe88, end address = 0x11733
configuration memory

Programming/Verify complete


Resultat sur terminal :

Projet MPLABX :

Directory : C:\MPLABX_Projects\P18F27Q10_tests_UART1_ADC_I2C_SPI.X
Projet : P18F27Q10_tests_UART1_ADC_I2C_SPI
Compilation le Jan 15 2021 at 18:13:48 UTC ,avec version XC8 : 2100


MPLABX IDE V5.30 XC8
Test sur Carte BASE 18F27Q10
UART1 TX sur RC6 19200,8,N,1
Analog sur EA1
<CR>ABC
j= 1 EA1= 1023 EA1ACC= 0 EA1F= 0
j= 2 EA1= 1023 EA1ACC= 0 EA1F= 0
j= 3 EA1= 1023 EA1ACC= 0 EA1F= 0
j= 4 EA1= 1023 EA1ACC= 0 EA1F= 0
j= 5 EA1= 1023 EA1ACC= 0 EA1F= 0
j= 6 EA1= 1023 EA1ACC= 0 EA1F= 0



Projet MPLABX XC8

Pack project : P18F27Q10_tests_UART1_ADC_I2C_SPI_X.zip
File List : Liste_des fichiers Base_18F27Q10_Tests
chargeur: P18F27Q10_tests_UART1_ADC_I2C_SPI.X.production.hex






Test #2 18F27Q10 .. (07/03/2024)

Hardware :
PIC18F27Q10 Dip28 sur Breadboard ,
alimenté via la connection interface USB /TTL 340G
UART1 RC7=RX , RC6=TX -> interface TTL/USB
Usage du bus I2C1 (RC3=SCL RC4=SDA) pour mini Oled SSD1306
Un module IN219 ( mesure de U et I) est aussi recoordé sur le bus I2C1
Potar 4,K alimenté via Vcc et Gnd, curseur sur EA1 ( RA1)
Led sur sortie RA4
RB1 input ..pour choix Mini -OLED ou OLED

images/t_Proto_Test_INA219_18F27Q10_2024-0307.gif images/t_Schema_18F27Q10_UART_OLED_INA219_2024.X.gif
Prototype de test INA219 et affichage alterné Schema



SOFTWARE

MPLABX IDE 6.0 + XC8 2.36
RB1 input permet de differencier l'init OLED entre un Mini-OLED et un OLED 0.96"
RB1=0 => choix mini-OLED
Gestion interruption sur Reception UART ..
Timer4 utilisé en interruption ..pour delay de 2 sec

Init FOSC interne 64Mhz
Init Hardware : Attention affectation logicielle des fonctions sur les pins ..PPS !
Init ADC
Init I2C1
Decouverte des devices presents sur le bus
Init OLED
Init Timer4

Terminal YAT :

Directory :C:\MPLABX_Projects
Projet : _18F27Q10_UART_OLED_INA219_2024.X
Version : 2024-0304
Compilation le Mar 4 2024 at 19:35:50 UTC ,avec version XC8 : 2360
Hardware : PIC18F27Q10 PDIP28 sur breadboard
Fosc interne =64Mhz
UART1 RC7=RX RC6=TX 115200bds
OLED LCD SSD1306 et INA219 sur bus I2C
I2C1: RC3=SCL RC4=SDA , Analog sur (RA1) EA1
I2C1_Initialize
Test_presence_Device_sur_I2C1( )
.
................
.............
@0x3C OLED SSD1306
.
@0x40 INA 219
................
................
................
.............
@0xBC .?.
.
@0xC0 .?.
................
..............
Scan bus I2C1 => 4 devices
Choix du type LCD OLED via etat Pin RB1 =0
mini-OLED SSD1306 20 x 10mm
Init OLED SSD1306

Calibration IN219 Sensor
Calibr. : 800mA et VBUS 16V

Change FOSC TMR4 -> LFINTOSC 31Khz
Test Timer4 2sec
Elapsed time (FOSC/4 PR4=250 Maxticks=62 -> 2 secondes

j= 0 EA1= 832, INA219 mVBus: 3054 soit
12.22 Volts, mvShunt: 10 soit 0.001 Amps
<- pas de charge

j= 1 EA1= 513, INA219 mVBus: 3045 soit 12.18 Volts, mvShunt: 2874 soit 0.287 Amps
<- 2 ampoules en serie
j= 2 EA1= 513, INA219 mVBus: 2947 soit 11.79 Volts, mvShunt: 2588 soit 0.259 Amps
j= 3 EA1= 513, INA219 mVBus: 2946 soit 11.78 Volts, mvShunt: 2588 soit 0.259 Amps
j= 4 EA1= 514, INA219 mVBus: 2944 soit
11.78 Volts, mvShunt: 2588 soit 0.259 Amps
j= 5 EA1= 514, INA219 mVBus: 2943 soit 11.77 Volts, mvShunt: 2587 soit 0.259 Amps
j= 6 EA1= 513, INA219 mVBus: 2943 soit 11.77 Volts, mvShunt: 2588 soit 0.259 Amps
......

j= 15 EA1= 513, INA219 mVBus: 2940 soit 11.76 Volts, mvShunt: 2583 soit 0.258 Amps

j= 16 EA1= 514, INA219 mVBus: 2894 soit 11.58 Volts, mvShunt: 3491 soit
0.349 Amps
<-1 seule ampoule
j= 17 EA1= 514, INA219 mVBus: 2901 soit 11.60 Volts, mvShunt: 3502 soit 0.350 Amps
j= 18 EA1= 513, INA219 mVBus: 2876 soit 11.50 Volts, mvShunt: 3502 soit 0.350 Amps
j= 19 EA1= 513, INA219 mVBus: 2896 soit 11.58 Volts, mvShunt: 3503 soit 0.350 Amps

j= 20 EA1= 513, INA219 mVBus: 2922 soit 11.69 Volts, mvShunt: 2576 soit 0.258 Amps
<- 2 ampoules en serie
...
j= 24 EA1= 514, INA219 mVBus: 2929 soit 11.72 Volts, mvShunt: 2579 soit 0.258 Amps
j= 28 EA1= 513, INA219 mVBus: 3047 soit
12.19 Volts, mvShunt: 8 soit 0.001 Amps <- pas de charge

La mesure de courant a une résolution de +-1mA
On voit bien la tension de batterie s'affaiblir en fonction du courant debité .
Le shunt de l 'INA ( valeur=0,1 ohm) est intercalé sur le point chaud (ligne +12V) High sens
EA1 mesure (independante) de tension sur le curseur du potar (alimenté entre Vdd = +5V USB et Gnd)



Mesures comparative avec Multimetre FI515X (calibre mA)
et INA219 sur YAT terminal (07/03/2024)

charge= 2 ampoules 12V 5W en serie
j= 63 EA1= 514, INA219 mVBus: 2945 soit 11.78 Volts, mvShunt: 2527 soit 0.253 Amps
j= 64 EA1= 514, INA219 mVBus: 2944 soit 11.78 Volts, mvShunt: 2524 soit 0.252 Amps
j= 65 EA1= 514, INA219 mVBus: 2944 soit 11.78 Volts, mvShunt: 2524 soit 0.252 Amps
FI 515X multimetre 253.7mA ... en serie avec la charge

charge= 2 ampoules 12V 5W en serie + 150 ohms
j= 117 EA1= 514, INA219 mVBus: 3039 soit 12.16 Volts, mvShunt: 166 soit 0.017 Amps
j= 118 EA1= 514, INA219 mVBus: 3041 soit 12.16 Volts, mvShunt: 167 soit 0.017 Amps
j= 119 EA1= 514, INA219 mVBus: 3043 soit 12.17 Volts, mvShunt: 166 soit 0.017 Amps
FI 515X multimetre 16.20mA

charge= 2 ampoules 12V 5W en serie + 40 ohms
j= 128 EA1= 514, INA219 mVBus: 2979 soit 11.92 Volts, mvShunt: 1750 soit 0.175 Amps
j= 129 EA1= 514, INA219 mVBus: 2978 soit 11.91 Volts, mvShunt: 1749 soit 0.175 Amps
j= 130 EA1= 514, INA219 mVBus: 2976 soit 11.90 Volts, mvShunt: 1749 soit 0.175 Amps
FI 515X multimetre 175.5mA

charge= 1 ampoules 12V 5W
j= 234 EA1= 514, INA219 mVBus: 2934 soit 11.74 Volts, mvShunt: 3439 soit 0.344 Amps
j= 235 EA1= 514, INA219 mVBus: 2934 soit 11.74 Volts, mvShunt: 3437 soit 0.344 Amps
j= 236 EA1= 514, INA219 mVBus: 2933 soit 11.73 Volts, mvShunt: 3437 soit 0.344 Amps
FI 515X multimetre 345.5 mA

Ressources utilisées :
_18F27Q10_UART_OLED_INA219_2024.X
Memory Summary:
Program space used 665Fh ( 26207) of 20000h bytes ( 20.0%)
Data space used 4EAh ( 1258) of D1Fh bytes ( 37.5%)
Configuration bits used 6h ( 6) of 6h words (100.0%)
EEPROM space used 0h ( 0) of 400h bytes ( 0.0%)
ID Location space used 100h ( 256) of 100h bytes (100.0%)



Projet :
_18F27Q10_UART_OLED_INA219_2024-0307.X.zip
Sources :
main_2024-0307.c
INA219_module.c
INA219_module.h
Chargeur : _18F27Q10_UART_OLED_INA219_2024-0307.X.hex


à suivre : affichage alterné en gros caractere des valeurs VOLT et AMPERE sur cette version 18F27Q10

Quid de l'usage d'un 16F1847 avec 8K programme et 1024 bytes RAM
sans ADC, uniquement I2C et UART, sans LCD OLED ..peut etre avec LCD Serie
un 12F1840 , avec seulement 4K progr et 256 bytes RAM semble trop rick rack ?
jouable , sans OLED ?


../common/mylogo_CI.jpg