Version 0.0 : 09/01/2019
rev. 24/06/2023

MCU : PIC18F27K42 en pdip28

Base de départ pour Tests divers sur ce MCU
(avec MikroC version 7.60 ou MPLABX XC8 )
Datasheet MCU (PIC18FxxK42 DS 40001919B rev 2017)

Platine d'essai : circuit imprimé , schéma Layout6 et fichiers gerbers (rev 2023)

Applications :
Liaison UART1
ADC1 12 bits
I2C1 RTC DS3231
I2C1mini OLED 128x32
PWM 8 bits 1Khz (Fosc =Q10Mhz x 4)
PWM 8 bits 11025 Hz (Fosc interne =16 x 4=64Mhz)
PWM 10 bits (MC) ou en version MPLABX

lien sur :
Lecture / Restitution fichier Wave (File transfer via terminal-> UART) (MC) 5/11/2021
usage de PWM1 (MC) pour sortie son via N.MOSFET + HP



Platine d'essai :


Le projet de base comprend :
le HARDWARE
avec la carte BASE commune aux 18FxxKxx ou vieux 18Fxxx, 18Fxxxx en DPIP28
Base pour 18FxxKxx. 2019 ...réactualisée en 2023 ,
usage de Sprint LAYOUT 6 : Base_18F26K22_2023_0624.lay6
Exportation des fichiers Gerbers :
voir support technique JCLB

LAYOUT 6.0 Fichiers Gerbers :
Base_18F26K22_2023_0624_copper_bottom.gbr (cuivre)
Base_18F26K22_2023_0624_soldermask_bottom.gbr (Pastilles cuivre)
Base_18F26K22_2023_0624_silkscreen_top.gbr (Marquage reperes)
Base_18F26K22_2023_0624_outline.gbr (Contour)
..il faut aussi, en plus , Exporter le fichier de perçage (Drill) :
Base_18F26K22_2023_0624.DRL
Gerbers_Base_18Fxxkxx_2023.zip

images/t_Exportation_SANS_Miroir_gerber_Layout6_Base_18Fxx_2023-0624.gif


AVANT de passer commande !, Verifier avec JCLB Online Gerber Viewer
Importer le fichier Zip crée avec Layout6..

images/t_Capture_Online_Gerber_viewer_TOP_Silk_Base_18Fxx_2023-0624.gif images/t_Capture_Online_Gerber_viewer_TOP_Silk_Base_18Fxx_2023-0624.gif


nota :
* pour une entree ANA directe sur RA0 ou RA1 , ne pas installer les strap pour Pull-up R4-R5 de 4,7k.
* la version 2019 avait été réalisée pour moins de 25€ pour 10 unités par JLCB (RPC) !

Schema ISIS : Schema de principe .

images/t_Base_18FxxKxx_CI_rev_2021_01.gif images/t_Base_18FxxKxx_Serigraf_rev_2021_01.gif
la carte de developpement BASE 18F27K42 Implantation composants
images/t_Vue_Photo_Layout6_Base_18Fxx_2023-0624.gif images/P18F27K42_XPRESS_Pinout.jpg
Vue Photo Sprint Layout6 rev 2023 Pinout version PDIP 28

La majorité des pins MCU sont accessibles ..
Le Quartz et ses 2 condos ne sont pas systematiquement montés. (usage de FOSC interne : 8, 16, 64MHz)
On peut connecter facilement 4 devices sur le bus I2C


Un mimimum de configuration
avec :
* Fosc interne =64MHz
* Liaison UART1 Hardware avec RC6=TX et RC7=RX
* Une voie analogique ADC 12 bits sur RA1
* une sortie Led sur RA4
* Timer0 + interrupt


Liaison UART 1 Hardware

Connection Interface Prolific TTL/USB , sur connecteur Uart de la carte : RC7 et RC6 du MCU
Terminal YAT 19200,8,N,1 coté PC.

Utilisation quasi "standard" des Pins RC6=Tx et RC7=RX Uart1
au niveau Hardware (PPS) , UART1 TX est par défaut sur RC6.
ainsi que de la librairie UART1 MikroC
FOSC interne MCU à 64Mhz
config UART1 : 19200 (,8,N,1 par défaut).


Affectation des pins via PPS :

Unlock_IOLOCK();

// UART1 (optionnel ! )
//RC6PPS = 0x13; //RC6->UART1:TX1;
U1RXPPS = 0x17; //RC7->UART1:RX1;

// NCO
RA5PPS = 0x26; //RA5->NCO1:NCO1;
Lock_IOLOCK();

*nota: la librairie PPS doit etre active, elle occupe 1500 bytes !

ADC 12 bits avec Vref =+Vcc=3.6V


Hardware :

Ce PIC gere les ADC avec 12Bits de resolution
Configuration avec -Vref=Gnd=0V et +VRef=+Vcc=3.6V
Code MikroC 7.60
// _ADC_INTERNAL_VREFH High voltage reference set to internal VDD.
// _ADC_INTERNAL_FVRH1 High voltage reference set to 1.024V.
// _ADC_INTERNAL_FVRH2 High voltage reference set to 2.048V.
// _ADC_INTERNAL_FVRH4 High voltage reference set to 4.096V.
CPrint(" ADC_Init_Advanced (0 à +VCC pour 0 à 4095 pts) EA1=RA1=potar \r\n");
ADC_Init_Advanced(_ADC_INTERNAL_VREFL | _ADC_INTERNAL_VREFH); // gnd et +Vref

Attention :
il faut que VCC soit superieur à la réference plus 1V
ex: +Vcc=3.6V pour _ADC_INTERNAL_FVRH2
ex: +Vcc=5.0V pour _ADC_INTERNAL_FVRH4

Pour affichage sur terminal :

CPrint(" EA1 Volt brut =");
CRam1[0]=0;
WordToStr(EA1,CRam1);
UART1_Write_Text(CRam1);
UART1_Write(TAB);
F1= (float)EA1 *0.087; // 3600mV /4096 ; // avec 10mV/degre LM35DZ
CRam1[0]=0;
Float2Ascii (F1,CRam1,2);
UART1_Write_Text(CRam1);
CPrint(" °C");
CRLF1();


pour affichage sur mini-LCD OLED
#ifdef With_mini_OLED
sprintf(CRam1,"EA1=%4u ->%3.2f C",EA1,F1);
OLED_ShowStr(0,2,CRam1,2);
#endif




L'Application :

La premiere action est de definir FOSC du PIC .. ici FOSC Interne 64MHz.
Courte présentation de l'application sur le terminal
Ce Modele de Presentation est généralisé sur TOUTES MES APPLICATIONS ( Programmes)
pour connaitre le contenu du PIC en présence et avec quoi il est programmé !.
Nota : L'UART1 est quasiment toujours utilisé pour suivre le deroulement du programme
vu le tres peu de ressources MCU necessaires.


puis l'Init Hardware
Entree Analogique, Entrees,Sorties ...etc..
et l'aiguillage des fonctions et PINS, via PPS .
puis l'init de L'UART1 hardware. (19200,8,N,1)

Compilations Conditionelles :

elle permet de rajouter/activer certaines fonctionalités en différents endroits du programme, ici :
la gestion du BUS I2C1 Software via activation de la 2em ligne du programme principal :
#define With_I2C1_Softw ( qui est par défaut ,mise en commentaire avec //)
qui , elle meme permet ensuite, la possibilité d'activer la RTC et/ou le LCD OLED.
Note 1: il faut quand meme RECOMPILER le programme après le choix d'options.
Note 2: On pourrait aussi affecter une entree MCU pour le choix de programmes à activer

Nota en Mode I2C software , l'adresse I2C utilisée est sur 8 bits : 7 bits Device + bit R/W
par défaut RTC DS2331 et Ecran OLD sont activés si le Bus I2C1 Soft est activé, via
#define With_RTC_DS3231
#define With_mini_OLED
L 'EEPROM 24C32 presente sur le module RTC est vue aussi .. mais, non traitée ici

Test des devices présents sur le bus :
Device(s) trouvés sur le bus
    Device #1 at @78     <--- le LCD OLED
    Device #2 at @AE    <--- l'EEPROM sur le module carte RTC
    Device #3 at @D0     <--- la RTC DS3231

RTC DS3231 sur le bus I2C1

conditions :
#define With_I2C1_Soft
#define With_RTC_DS3231


Module RTC DS3231 , alimenté via +VCC et Gnd
Raccordement SCL sur RC3 ( avec pull-up de 2,7K sur la carte de base)
Raccordement SDA sur RC4 ( avec pull-up de 2,7K sur la carte de base)

Adrese I2C Eeeprom locale (sur le module RTC) 24C32 = 0xA0 !
Gestion I2C1 SOFTWARE !


ECRAN OLED sur le bus I2C1
conditions :
#define With_I2C1_Soft
#define With_mini_OLED

Apres une courte présentation de l'application sur le terminal
Ce Modele de Presentation est généralisé sur TOUTES MES APPLICATIONS ( Programmes)
pour connaitre le contenu du PIC en présence et avec quoi il est programmé !.
Nota : L'UART1 est quasiment toujours utilisé pour suivre le deroulement du programme
vu le tres peu de ressources MCU necessaires.


L'init de cet ecran est assez pointue ...
PLUS DE DETAILS sur pilotage OLED en I2C1 Software ICI .

Une courte présentation des possibilité d'affichage sur l'écran OLED est faite,


la lecture de la RTC : Date et heure apparait ,
avec la mesure ADC1 sur le Terminal : 07 Jan 19:11:57 EA1 Volt brut = 247 21.71 °C
ET sur le LCD OLED
La Pin RB1 mise à zero , permet de faire la 1ere Init d'une RTC Neuve.

L'application peut recevoir des commandes émanant du clavier terminal ,
via le traitement de RX Interrupt et Buffer1 associé
ex: commande "Help"
et pour la mise à jour RTC la commande "U:JJ;MM;AA;HH;MM;JS;#
U et # servant d'encadrement . ex: U:06;01;21;14;59;04# pour le 6 janvier 21 à 14H59 Jeudi

La boucle principale du programme est cadencée
par un évenement = Touche clavier CR ou / et Timeout timer 1 via la gestion des interruption RX UART et IT Timer0

//boucle d'attente :
Init_Timer0();
while(Drapeaux.Tmr0_Elapsed==0);


Ce qui donne sur le terminal :

Version SANS I2C1 Software
avec Ligne 2 du programme : //#define With_I2C1_Softw

Presentation :
Directory :C:\_MikroC\_MesProjets_MikroC\_BASE_18F27K42
MikroC pro 7.60
Projet :BASE_18F27K42_Minimal.mcppi
Test PIC18F27K42 I2C1 Softw
Config bit : P18F27K42_Fosc_Interne_64Mhz_with_RA6_Clockout.cfgsch
FOSC:64.0 MHz
Eeprom: not used ....
Source : BASE_PIC18F27K42__2021_0107.c
18F27K42 UART1 19200bds, ADC1 12 bits sur EA1
I2C1 Software NON active ! donc pas de RTC ,ni OLED !

ADC_Init_Advanced (0 a +VCC pour 0 a 4095 pts) EA1=RA1=potar

Init Timer0 sur 1 sec
Init Timer1 , interrupt sur base de 100mS
... Waiting Keyboard Touch for < 3,0 Sec >

EA1 Volt brut = 3967 348.66 °C
EA1 Volt brut = 3956 347.70 °C
EA1 Volt brut = 3964 348.40 °C
EA1 Volt brut = 3948 346.99 °C
EA1 Volt brut = 3956 347.70 °C
EA1 Volt brut = 3957 347.78 °C
EA1 Volt brut = 3952 347.34 °C
EA1 Volt brut = 3965 348.49 °C
EA1 moy = 3958 ;Temp=347.87 °C
EA1 Volt brut = 3956 347.70 °C



Version AVEC bus I2C activé
avec Ligne 2 du programme principal : #define With_I2C1_Softw


Presentation :
Directory :C:\_MikroC\_MesProjets_MikroC\_BASE_18F27K42
MikroC pro 7.60
Projet :BASE_18F27K42_Minimal.mcppi
Test PIC18F27K42 I2C1 Softw
Config bit : P18F27K42_Fosc_Interne_64Mhz_with_RA6_Clockout.cfgsch
FOSC:64.0 MHz
Eeprom: not used ....
Source : BASE_PIC18F27K42_2021_0107.c
18F27K42 UART1 19200, OLED LCD , RTC , ADC1 EA1 LM35DZ
Mini_OLED_128x32_I2C1_Softw_18Fx7K42_2021.c et *.h
Tiny_RTC_DS3231_I2C_Softw_for_AI2_2021_01.c

ADC_Init_Advanced (0 a +VCC pour 0 a 4095 pts) EA1=RA1=potar
Init I2C1 SOftware

Test presence device(s) sur le bus I2C1

Device(s) trouves sur le bus
Device #1 at @78
Device #2 at @AE
Device #3 at @D0

Init Timer0 sur 1 sec
Init Timer1 , interrupt sur base de 100mS
... Waiting Keyboard Touch for < 3,0 Sec >

Init RTC DS3231:
Active sortie SQW=1Hz:
Re-Lecture RTC 06-01-21 17:26:30
... Waiting Keyboard Touch for < 3,0 Sec >

OLED CLS
Affiche lettres A B C ...Q
Write_Char_At(X en pixel (0 a 127), ligne Y (0 a 3),code ascii char)
... Waiting Keyboard Touch for < 5,0 Sec >

Affiche Texte de 21 cars par ligne (Taille mini= 1) :
ABCDEFGHIJKLMNOPQRSTUVWXYZ
... Waiting Keyboard Touch for < 4,0 Sec >

Affiche 16 cars (Taille= 2) :0123456789012345 at x=0, ligne 1
... Waiting Keyboard Touch for < 4,0 Sec >

06-01-21 17:26:48
06 Jan 17:26:48 EA1 Volt brut = 3957 347.78 °C
06 Jan 17:26:49 EA1 Volt brut = 3956 347.70 °C
Recu :
U;07;01;21;17;44;04;#
RTC Update : U;07;01;21;17;44;04;#
4 Jeudi
Ecriture dans DS3231... OK
07-01-21 17:44:00 07 Jan 17:44:00 EA1 Volt brut = 3965 348.49 °C
07 Jan 17:44:01 EA1 Volt brut = 3956 347.70 °C

Un potar est connecté sur RA1 pour simuler un capteur LM35DZ
Ceci est un point de depart pour moultes applications ..

SOFTWARE :
rev 07/01/2021
Compiler MikroC 7.60:
Projet : _BASE_18F27K42_minimale_2021.zip
Main code : BASE_PIC18F27K42_2021_0107.c
Lib RTC: Tiny_RTC_DS3231_I2C_Softw_for_AI2_2021_01.mcl
Header : Tiny_RTC_DS3231_I2C_Softw_for_AI2_2021_01.h
Lib Mini-Oled 20x10mm : Mini_OLED_128x32_I2C1_Softw_18F27K42_2021.mcl
Header : Mini_OLED_128x32_I2C1_Softw_18Fx7K42_2021.h
Images BMP : BMP_images_128x32_2021.inc
Fontes caracteres : OLED_128x32_Tables_2021.h
Config projet : P18F27K42_Fosc_Interne_64Mhz_with_RA6_Clockout.cfgsch






Version PWM 8 bits à Freq=1KHz

usage du PWM1 en mode 8 bits
donc Duty Cycle pouvant varier de 0 à 255

Ressources :
Oscillateur Q10Mhz* PLL => 40MHz
Potar sur entrée RA0 analogique
Pin RC2 PWM output
pins RC6 (TX) et RC7 (RX) -> cordon Prolific TTL/USB <-> Terminal YAT
pin RA3-> SQA trigger
pin Gnd
TMR2 associé à PMW1

nota : Sortie PWM1 Affectée par defaut sur PIN RC2

2 modes de reglage Duty cycle (IRatio)
par défaut : en Analogique via l'entrée Ana RA1 (Potar)
ou via Clavier terminal et Commande
Cxxx avec xxx valeur de 0 à 255
retour à commande Analogique, via envoi char 'A' sur le clavier terminal

Rappel : ADC 12 bits sur ce MCU !

images/t_PWM_8bits_Test_18F27K42.gif


MCU : 18F27K42
Power supply: 5V
Directory : C:\_MikroC\_MesProjets_MikroC\_18F27K42_PWM
Projet : 18F27K42_Base_UART1_RX_IT_ADC0_PWM_8bits_2021.mcppi
Source : _18F27K42_32Mhz_Uart1_ADC_PWM_8b_2021-0912.c
CONFIG : P18F27K42_FOSC_Q10MHzx4_40MHz.cfgsch
FOSC : Q10MHzx4
Clock initiale in Khz = 40000
Sortie PWM1 Affectée par defaut sur PIN RC2
Init PWM1 8bits at 1000Hz
Init IRatio à 20% soit 51
cde A pour Duty cycle reglé par potar (ANALOGIQUE)
IRatio adjusté via Pot.Analog par défaut

Mesure # 0 => ADC RA1 = 3992 soit 0F98 Duty Cycle=97.6%
Mesure # 1 => ADC RA1 = 3993 soit 0F99 Duty Cycle=97.6%
Mesure # 2 => ADC RA1 = 3993 soit 0F99 Duty Cycle=97.6%
.......etc ....
Mesure # 11 => ADC RA1 = 3988 soit 0F94 Duty Cycle=97.6%
Mesure # 12 => ADC RA1 = 2739 soit 0AB3 Duty Cycle=67.0%
Mesure # 13 => ADC RA1 = 2442 soit 098A Duty Cycle=59.6%
Mesure # 14 => ADC RA1 = 1221 soit 04C5 Duty Cycle=29.8%
Mesure # 15 => ADC RA1 = 111 soit 006F Duty Cycle=2.4%
Mesure # 16 => ADC RA1 = 410 soit 019A Duty Cycle=9.8%
Mesure # 17 => ADC RA1 = 390 soit 0186 Duty Cycle=9.4%
Mesure # 18 => ADC RA1 = 457 soit 01C9 Duty Cycle=11.0%
Mesure # 19 => ADC RA1 = 525 soit 020D Duty Cycle=12.5%
Mesure # 39 => ADC RA1 = 982 soit 03D6 Duty Cycle=23.9%

C127
Recept UART1= C127

Iratio adjust by Keyboard now
New IRatio (8 bits) = 127 soit 49.8 %
Mesure # 4 => ADC RA1 = 983 soit 03D7 Duty Cycle=49.8%
Mesure # 5 => ADC RA1 = 982 soit 03D6 Duty Cycle=49.8%

Software :
usage de la librairie MikroC PWM1 (non remappable !)
Projet :
18F27K42_Base_UART1_RX_IT_ADC0_PWM_8bits_2021.mcppi
Source :
_18F27K42_Q10MHz_x4_Uart1_ADC_PWM_8b_2021_0912.c
Chargeur :
18F27K42_Base_UART1_RX_IT_ADC0_PWM_8bits_2021-0912.hex
Config :
18F27K42_Base_UART1_RX_IT_ADC0_PWM_8bits_2021.cfg

CONFIG1L : $300000 : 0x0022
CONFIG1H : $300001 : 0x0009
CONFIG2L : $300002 : 0x0025
CONFIG2H : $300003 : 0x00A7
CONFIG3L : $300004 : 0x000B


ATTENTION :
la version ci_dessus ne marche pas ,telle quelle,en version FOSC Interne 64MHz !
probleme de config..


Version avec FOSC Interne 64MHz


MCU : 18F27K42
Power supply: 5V
Directory : C:\_MikroC\_MesProjets_MikroC\_18F27K42_PWM
Projet : 18F27K42_Base_Fosc_Interne_64MHz_UART1_RX_IT_ADC0_PWM_8bits_2021.mcppi
Source : _18F27K42_Base_Fosc_Interne_64Mhz_Uart1_ADC_PWM_8b__2021-1105.c
CONFIG : P18F27K42_Base_Fosc_interne_16xPLL_64MHz.cfgsch
FOSC : 16x4= 64Mhz
Clock initiale in Khz = 64000
Config Oscillateur OSCCON2 := 0060
Etat Oscillateur OSCSTAT := 0070
Sortie PWM1 Affectée par defaut sur PIN RC2
Init PWM1 8bits at 11025Hz
Init IRatio à 20% soit 51
cde A pour Duty cycle reglé par potar (ANALOGIQUE)
IRatio adjusté via Pot.Analog par défaut
cde Cxxx pour Duty cycle via KEYBOARD

Mesure # 0 => ADC RA1 = 1609 soit 0649 Duty Cycle=39.2%
Mesure # 1 => ADC RA1 = 1609 soit 0649 Duty Cycle=39.2%



Projet MikroC 7.60 :
18F27K42_Base_Fosc_Interne_64MHz_UART1_RX_IT_ADC0_PWM_8bits_2021.mcppi
Source :
_18F27K42_Base_Fosc_Interne_64Mhz_Uart1_ADC_PWM_8b__2021-1105.c
Config :
P18F27K42_Base_Fosc_interne_16xPLL_64MHz.cfgsch
18F27K42_Base_Fosc_Interne_64MHz_UART1_RX_IT_ADC0_PWM_8bits_2021.cfg
Config Bits
CONFIG1L : $300000 : 0x0004
CONFIG1H : $300001 : 0x0009
CONFIG2L : $300002 : 0x0027
CONFIG2H : $300003 : 0x00B7
CONFIG3L : $300004 : 0x000B
CONFIG3H : $300005 : 0x003E
CONFIG4L : $300006 : 0x009F
CONFIG4H : $300007 : 0x000F
CONFIG5L : $300008 : 0x0001
CONFIG5H : $300009 : 0x0000


Chargeur :
18F27K42_Base_Fosc_Interne_64MHz_UART1_RX_IT_ADC0_PWM_8bits_2021-1105.hex








Version PWM 10bits à Freq=1KHz

Duty cyle cde 0 à 1023

Ressources :
Oscillateur 64Mhz
Potar ver entree RA0 analogique
Pin RC5 PWM output -> MOSFET IRLZ14 -> Ampoule 12V 5W -- alim externe 12V
pins RC6 (TX) et RC7 (RX) -> cordon Prolific TTL/USB <-> Terminal YAT
pin RA3-> SQA trigger
pin Gnd
TMR4 associé à PMW5

MCU : 18F27K42
Power supply: 3.6V mini
Directory : C:\_MikroC\_MesProjets_MikroC\_18F27K42_PWM
Projet : 18F27K42_UART1_RX_IT_ADC0_PWM_Base_2021.mcppi
Source : _18F27K42_32Mhz_Uart1_ADC_PWM_10b_20210517.c
CONFIG : P18F26K22_FOSC_interne_64Mhz.cfgsch
FOSC : 64MHz
Clock initiale in Khz = 64000


Project
MikroC 7.60 :
18F27K42_UART1_RX_IT_ADC0_PWM_Base_2021.mcppi
Source : _
18F27K42_64Mhz_Uart1_ADC_PWM_10b_20210517.c
Chargeur : 18F27K42_UART1_RX_IT_ADC0_PWM1_10bits_Base_2021.hex


voir version MPLABX XC8 ...ICI




 

 



paulfjujo@free.fr