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
AVANT de passer commande !, Verifier avec JCLB Online
Gerber Viewer
Importer le fichier Zip crée avec Layout6..
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 .
![]() |
![]() |
la carte de developpement BASE 18F27K42 | Implantation composants |
![]() |
![]() |
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 !
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