version 1.2
15/02/2016
rev 25/11/2023
Ready for PIC 18F45K22 .. Application RFID RC522 (2016)
Ready
for PIC 18F45K22 .. Test 2eme carte RFID RC522 (2018)
Presentation de la
carte de developpement Ready For PIC18F45K22
Le LCD 2119 (alim 3,3V) 2x16cars , relié via
Bus I2C1 (2020)
Version
MikroC 2023 .. sans LCD , sortie UART1 ..terminal PC YAT (2023)
Version
MPLABX 2023.. sans LCD, 18F27K42 SPI HW et RFID RC522 avec MPLABX
XC8
ATTENTION
Alimentation PIC, LCD et carte RFID-RC522 en 3,3V
=> commutateur carte Ready for PIC sur 3,3V
Afficheur piloté en I2C via I2C1 Hardware
Modification Hardware sur Afficheur LCD 2119 I2C:
Rajout de 2 R de 4,7K sur la face arriere du LCD pour R pull up
BUS I2C
Modif hardware pour Backlite
minimum permanent ::
pont entre 1 et 7 et R=750 entre 2 et 6 sur le connecteur haut (libre
opposé)
et suppresion de la liaison pin 5 et 6 du connecteur bas pour R=220
Docu sur LCD : PCF2119X_rev12.pdf
(1ere) Carte RFID RC522
RFID-RC522 RF IC Card Module capteur #01392735 4.89
carte RFID-RC522 livrée avec un jeton belu et 1 carte RFID
blanche
![]() |
Interconnections avec
carte Ready For PIC
![]() |
![]() |
Liaisons Hardware entre PIC et carte RC522 | Schematic (pour MikroC) |
HARDWARE Prototype
L'I2C1 bus est utilisé pour piloter le LCD
2119 2x16 car
L'UART1 est connecté par défaut au
circuit FTDI de la carte => COM23 via liaison USB
Le MSSP2 SPI est utilisé via le PORTD ( MSSP1 non dispo because I2C1)
Carte RC522 livrée avec 2 TAG RFID Passif , 1 jeton et 1 carte
Lien tres interssant sur la RFID
au Scope :
Avec une boucle de Herz constituée de 7 spires jointives de fil
dia 1mm bobiné sur bouchon diam 40mm (voir photo)
on peut oberver le signal emis par la carte RC522 13,6Mhz ~1V cr
cr sinus
![]() |
![]() |
![]() |
signal SPI MOSI | signal SPI MISO | boucle 7 tours dia 40mm fil 1mm diam 13,6Mhz |
BUS SPI :
// connectique equivalente à SPI2 Hardware
sbit MFRC522_CS at LATD.B3; // NSS/SDA
sbit MFRC522_Rst at PORTD.B2;
sbit SoftSpi_SDO at LATD.B4;
sbit SoftSpi_CLK at LATD.B0;
sbit SoftSpi_SDI at PORTD.B1;
//Init SPI2 en Mode Hardware via MikroC library
// master mode
//clock Fosc/4
//clock idle state low
//data transimtted on low to high edge
//input data sampled at the middle of interval
SPI2_Init();
LIAISONS :
Pour des raisons de commodités, une "planche à pain"
(BreadBoard=planche d'essais) est utilisée
pour recuperer l'alim 3,3V et 0V, et rajouter Led, Buzzer + 3
Resistances de pull up.
18F45K22 pins | RC522 |
RD3 -> out Select
Board SS RD0 -> out SCK RD4 -> Master Output Slave Input RD1 <- Master Input Slave Output RB0 <- Interrupt from RC522 Gnd --------- RD2 output Reset Power Supply 3,3V |
1 |
RA3 output ->270 ohms ->l | Buzzer to +0V |
RA4 output -> 750 ohms -> | LED to +3,3V |
RC3 I2C1 SCL | 3 LCD2119 |
RC4 I2C1 SDA | 4 LCD2119 |
RA2 input + R 4,7K pull up ->+3,3 | choix Init /RAZ Eeprom |
La bibliotheque MFR5C522 issue de ce lien
Auteur du Blog
Cette bibliotheque donne entiere satisfaction..
attention à l'inversion
MOSI , MISO
Les fonction de cette librairie :
voir l'original en cas de doute sur la traduction .. car faite
surtout par déduction
Principales fonctions :
MFRC522_Init() - Initialisation du module RC522
MFRC522_Reset() - Reset du module MFRC522.
MFRC522_Halt() - Desactivation du module = Hibernation.
MFRC522_SelectTag(
char *serNum ) - Selection type de
carte, param servant à l'authentification. serNum = Numero de
série. 5 bytes.
MFRC522_Auth ( char
authMode, char BlockAddr, char *Sectorkey, char *serNum )
- Authentification et determination du bloc actif en Lecture et
Ecriture
authMode: type d'autentification A ( PICC_AUTHENT1A
) ou B ( PICC_AUTHENT1B ).
BlockAddr - Numéro du block. 4 blocs de secteur.
SectorKey - Senha d'autentification 6 bytes. Generalement definit
comme 0xFFFFFFFFFFFF.
serNum - Numero de série de la carte sur 5 bytes.
MFRC522_Write( char
blockAddr, char *writeData )
Ecriture 16 bytes dans le numero de bloc destinataire, sert de
logo d'autentification.
blockAddr - Numero do bloco. Exceto o quarto bloco do setor, que
é usado para autenticar.
writeData - 16 bytes en ecriture.
MFRC522_Read( char
blockAddr, char *recvData ) Lecture
des 16 bytes du numéro de bloc passé, logo d' authentification.
blockAddr - Numero do bloc.
recvData - Retourne les 16 bytes lus dans le tabelau recvData.
MFRC522_isCard(
char *TagType ) - Verification
presence d'une carte devant le lecteur.
TagType - Retourne un type de carte.
MFRC522_ReadCardSerial(
char *str ) Lecture du numero de
serie de la carte
str - Retourne un pointeur sur le numero de serie : 5 bytes
( 4 bytes + checksum ).
Le programme MikroC pro 6.20
Juste quelques petites modifs pour adapter le LCD en I2C
et utilisation du MSSP2 SPI2 hardware du PIC 18F45K22
L'UART1 => TeraTerm COM23, 19200,8,N,1 sur PC est utilisé
pour tester le tout, mais aussi apporte d'autres fonctionalites.
L'afficheur LCD 2x16 cars renseigne sur l'avancement et le
controle du lecteur RFID.
L'EEPROM du PIC est utilisee pour stoker jusqu'à 8 numeros de
cartes et signatures.
La laison Terminal UART offre les possibilites suivantes,
résumées par l'envoi de "Aide" via le clavier PC
Aide
Message= : assigne un msg d'authentification de 16 sur le bloc 4
de la carte
Liste_UID : liste les numéros d'identifications de cartes déja
reconnues
Liste_Msg : liste des msg d'authentification asscociées aux
carte
Liste_EEprom : liste contnu EEPROM PIC
Assigne_Nom= : Assigne un nom à l'étiquette lue
RAZ_EEprom : RAZ contenu EEPROM du PIC
LedA=1 ou LedA=0
A la mise sous tension,
FOSC interne initialisée à 16 Mhz
Hardware initalisé
RAZ de l''EEPROM du PIC ..
Liaison I2C1 initialisée, ainsi que le LDC2119 sur le bus I2C
Liaison UART1 initalise, de meme l'interruption reception de
caractere.
Liaison MSSP SPI2 initialisée
Carte RFID RC522 initialisee
Le LCD affiche les etapes , ainsi que le terminal UART
Si tout se passe bien, on arrive à une boucle principale qui
tourne sur un delai de 1 sec
"Attente Carte" affiché sur le LCD, et affiché toutes
les 10 sec sur l'UART
Des que la carte RC522 detecte l'approche d'une carte RFID ,
Beep#1
Affiche le TAG (type de la carte ):; 0400
puis le numero de serie du 10 digits (5 bytes)
affichage contigu des 5 bytes sur le LCD, et separé par
":" sur le terminal
La lecture du Bloc: affiche me message d'autentification associé..(voir
nota)
Puis un message "Bonjour "... sur lequelle on peut
rajouter un prénom (ou 8 cars) avec la commande "Assigne_Nom="
On envoi la commande Message, on dispose alors de 4 secondes pour
presenter la carte sur laquelle sera inscrite le Message.
et un message d'invite, en 1ere ligne du LCD , pour retirer la
carte.. avec un Beep#2 specifique
Si on presente la carte et qu'on la retire avant la fin de
sequence,
Beep#3 d'alerte et message ..bad en 2em ligne du LCD
En fin de sequence de lecture d'une carte , le numero de carte
est conservé,
pour recevoir une eventuelle commande au clavier.
Nota 1: Message:
Ce message aura été prealablement installé via la commande
terminal "Message = XXXXXXXXXXXXXXX"
ou les 16 X, represente le message.
Une fois installé ,il est stocké en epermancne dans la Carte
RFID !
Nota 2 : apres presentation des cartes les numero de series sont
stockes en EEPROM en fonction de l'ordre de presentation
L'Assignation d'un nom est associé à la carte , et il faut ,
sur RESET general, representer les cartes dans le meme ordre
que lors de l'initialisation de celle-ci, sinon , refaire une
assignation de Nom.
Video sur le test avec 1 jeton et 1 carte
Le programme Source
La partie LCD2119
Le chargeur
dans le fichier RC522_18F45k22_UART1_LCD2_I2C1_SPI2_Hardw_160222.zip
TeraTerm terminal Dialogue avec RFID RC522 :
Teraterm_RC522_echanges_160225.log
Modif :
Rajout entree RA2 pour RAZ ou
init forcee de l'EEPROM du PIC .
RA2=1 => init Forcee
RA2=0 => RAZ Eeprom .. à utiliser au moins une fois, lors de
la decouverte des nouvelles cartes
Rajout detection Interrupr RB0 depuis carte RC522 ..
source MikroC rev 160229
Ecriture dans tout l'espace carte
RFID
Le fait de rajouter du code .. bloque le démarrage du CPU ..
Probleme du à la présence du Bootloader ?
probleme posé sur MikroE ICI
Video : RFID_RC522_18F45K22_test_160225.webm
. Test sur
une 2eme Carte RFID RC522 (avec Ready for PIC 18F45K22 .)
pour test avec 4 jetons au lieu de
2 ..
Meme logiciel , meme connectique
LCD2119 en I2C sur RC3,RC4
RFID carte sur SPI Port D
Liaison UART RC6,RC7 <-----> interface USB/serie CH340G TTL
HW-597 <-> COM16 19200,8,N,1
Cette carte reconnait déja le jeton Bleu et carte Blanche de la
precedente carte RFID
La detection de la nouvelle carte blanche s'effectue OK
* test new carte
blanche :
cPresence carte ou Jeton detectée OK
TAG TYPE: 0400
Version Logiciel :
Lecture Numero de serie : CB:2D:A0:49:0F
uiD= CB:2D:A0:49:0F
c_Index=3 Deja existant : CB:2D:A0:49:0F
Lecture bloc 4 = Num_UID=3
de meme ,pour le jeton Bleu
*Test New jeton bleu
Presence carte ou Jeton detectée OK
TAG TYPE: 0400
Version Logiciel :
Lecture Numero de serie : DC:93:60:83:AC
uiD= DC:93:60:83:AC
c_Index=2 Deja existant : DC:93:60:83:AC
Lecture bloc 4 =
Num_UID=2
envoi depuis le terminal, de la commande
Liste_UID <CR>
Reception de : Liste_UID
Index 0 UID : 44:B7:E1:E9:FB
Index 1 UID : 0A:E6:E8:75:71
Index 2 UID : DC:93:60:83:AC
Index 3 UID : CB:2D:A0:49:0F
Index 4 UID : 00:00:00:00:00
Index 5 UID : 00:00:00:00:00
Index 6 UID : 00:00:00:00:00
Index 7 UID : 00:00:00:00:00
il faut associer maintenant un nom
au jeton
... retirer la carte Num_UID=2
Attente Presence Carte :
Attente Presence Carte :
Reception de : Assigne_Nom=ROBERT
Nom : ROBERT -> EEPROM ligne 10
Presence carte ou Jeton detectée OK
TAG TYPE: 0400
Version Logiciel :
Lecture Numero de serie : DC:93:60:83:AC
uiD= DC:93:60:83:AC
c_Index=2 Deja existant : DC:93:60:83:AC
Lecture bloc 4 = Num_UID=2
Comparaison
44:B7:E1:E9:FB --> DC:93:60:83:AC
0A:E6:E8:75:71 --> DC:93:60:83:AC
DC:93:60:83:AC --> DC:93:60:83:AC
Bonjour
: ROBERT
... retirer la carte Num_UID=2
et pour la nouvelle carte
CB:2D:A0:49:0F --> CB:2D:A0:49:0F
Bonjour : NoName Assigned.
... retirer la carte Num_UID=3
Attente Presence Carte :
Reception de : Assigne_Nom=JULIANNE
Nom : JULIANNE -> EEPROM ligne 11
Attente Presence Carte :
Presence carte ou Jeton detectée OK
TAG TYPE: 0400
Version Logiciel :
Lecture Numero de serie : CB:2D:A0:49:0F
uiD= CB:2D:A0:49:0F
c_Index=3 Deja existant : CB:2D:A0:49:0F
Lecture bloc 4 = Num_UID=3
Comparaison
44:B7:E1:E9:FB --> CB:2D:A0:49:0F
0A:E6:E8:75:71 --> CB:2D:A0:49:0F
DC:93:60:83:AC --> CB:2D:A0:49:0F
CB:2D:A0:49:0F --> CB:2D:A0:49:0F
Bonjour : JULIANNE
... retirer la carte Num_UID=3
Rajout d'un Message associé à la
carte :
Interruption RB0
Attente Presence Carte :
Reception de : Message=Architecte
Modif bloc de 16 cars sur La Carte presentée
Vous avez 4 sec. pour presenter le Jeton ou la Carte
Presence carte ou Jeton detectée OK
Re-Lecture Numero de serie : DC:93:60
Ecriture de <Architecte> sur 1A bloc 4
... retirer la carte Num_UID = 2
Attente Presence Carte :
Reception de : ... retirer la carte Num_UID = 2bloc 4Presence
carte ou Jeton detectée OK
TAG TYPE: 0400
Version Logiciel :
Lecture Numero de serie : DC:93:60:83:AC
uiD= DC:93:60:83:AC
c_Index=2 Deja existant : DC:93:60:83:AC
Lecture bloc 4 = Architecte Num_UID=2
Comparaison
44:B7:E1:E9:FB --> DC:93:60:83:AC
0A:E6:E8:75:71 --> DC:93:60:83:AC
DC:93:60:83:AC --> DC:93:60:83:AC
Bonjour : ROBERT
... retirer la carte Num_UID=2
et pour la carte
Attente Presence Carte :
Presence carte ou Jeton detectée OK
TAG TYPE: 0400
Version Logiciel :
Lecture Numero de serie : CB:2D:A0:49:0F
uiD= CB:2D:A0:49:0F
c_Index=3 Deja existant : CB:2D:A0:49:0F
Lecture bloc 4 = Num_UID=3
Comparaison
44:B7:E1:E9:FB --> CB:2D:A0:49:0F
0A:E6:E8:75:71 --> CB:2D:A0:49:0F
DC:93:60:83:AC --> CB:2D:A0:49:0F
CB:2D:A0:49:0F --> CB:2D:A0:49:0F
Bonjour : JULIANNE
... retirer la carte Num_UID=3
Attente Presence Carte :
Attente Presence Carte :
Reception de : Message= Ecrivain
Modif bloc de 16 cars sur La Carte presentée
Vous avez 4 sec. pour presenter le Jeton ou la Carte
Presence carte ou Jeton detectée OK
Re-Lecture Numero de serie : CB:2D:A0
Ecriture de < Ecrivain> sur 1A bloc 4
... retirer la carte Num_UID = 3
Interruption RB0
Interruption RB0
Presence carte ou Jeton detectée OK
TAG TYPE: 0400
Version Logiciel :
Lecture Numero de serie : CB:2D:A0:49:0F
uiD= CB:2D:A0:49:0F
c_Index=3 Deja existant : CB:2D:A0:49:0F
Lecture bloc 4 = Ecrivain Num_UID=3
Comparaison
44:B7:E1:E9:FB --> CB:2D:A0:49:0F
0A:E6:E8:75:71 --> CB:2D:A0:49:0F
DC:93:60:83:AC --> CB:2D:A0:49:0F
CB:2D:A0:49:0F --> CB:2D:A0:49:0F
Bonjour : JULIANNE
... retirer la carte Num_UID=3
Reception de :
Liste_Msg
Index 0 Nom : Joelle 25-02-55
Index 1 Nom : paulfjujo.free.f
Index 2 Nom : Architecte
Index 3 Nom : Ecrivain
Index 4 Nom : no Message
Index 5 Nom : no Message
Index 6 Nom : no Message
Index 7 Nom : no Message
Test OK, repetitif 2 ans apres ..
L'UART est utilisé ici pour initialiser les NOMS et MESSAGES,
mais n'est pas indispensable.
Le programme est BAVARD , affiche tous les details de deroulement
du programme.
il pourrait etre allégé .. mais BON,
L'afficheur 2x16 semble suffisant .
Sinon , une appli Anroid Phone serait plus mieux bien .
Version 2023 (MikroC) , SANS LCD ,
sortie sur terminal PC ou
Android ( avec HC05)
N'ayant plus de LCD 2x16 pouvant
fonctionner sous 3,3V , suppression du LCD
Usage de la laision UART1 115200bds <-> terminal YAT via
cordon USB/LTTL.
commandes clavier terminal
Attente Carte
Attente Carte
Help
Reception de : Help
Help & Commandes dispo:
Msg= : assigne un msg de 16 sur le bloc 4 de la carte
Liste_UID : liste les numeros de cartes déja reconnues
Liste_Msg : liste des Msg stocké sur cartes
Liste_EEprom : liste contnu EEPROM PIC
Assigne_Nom= : Assigne un nom à l'etiquette lue
RAZ_EEprom : RAZ contenu EEPROM du PIC
Liste_EEprom
Reception de : Liste_EEprom
Liste EEprom PIC :
00 --> 44:B7:E1:E9:FB
01 --> 0A:E6:E8:75:71
02 --> DC:93:60:83:AC
03 --> CB:2D:A0:49:0F
04 --> 00:00:00:00:00
05 --> 00:00:00:00:00
06 --> 00:00:00:00:00
07 --> 00:00:00:00:00
08 --> Joelle
09 --> Paul
10 --> NoName Assigned.
11 --> NoName Assigned.
12 --> NoName Assigned.
13 --> NoName Assigned.
14 --> NoName Assigned.
15 --> NoName Assigned.
Attente Carte
Attente Carte
Attente Carte
Liste_Msg
Reception de : Liste_Msg
Index 0 Nom : Joelle 25-02-55
Index 1 Nom : no Message
Index 2 Nom : Architecte
Index 3 Nom : Ecrivain
Index 4 Nom : no Message
Index 5 Nom : no Message
Index 6 Nom : no Message
Index 7 Nom : no Message
Attente Carte
Procedure d'init RFID RC522 , SPI examinée avec SQA Analyser
logique
SPI sur port D
Projet MikroC 7.60
RFID_RC522_18F45k22_UART1_SPI2_Hardw_2023-11.mcppi
Source : RC522_18F45k22_LCD_I2C_SPI2_Hardw_2023_1122_MC.c
Chargeur : RFID_RC522_18F45k22_UART1_SPI2_Hardw_2023-1122_MC.hex
Config : RFID_RC522_18F45k22_UART1_SPI2_Hardw_2023-11.cfg
Specifique : RC522_SPI2_Hardw_MC.h
il y a encore du
TAF à faire ...mais pour l'instant
je n'ai pas d'application UTILE en vue
Version 18F27K42 MPLABX XC8 (25/11/2023 )
avec SPI Hardware (Special ) sur PortC , sortie uniquement sur
terminal PC
BAD results !!!!!!
Je n'arrive pas à avoir exactement la meme Init RFID !
qu'avec ma version MikroC 18F45K22 (avec un MSSP Hardware = SPI
classique !)
avec la meme ligne de commande !
... et donc je ne peux pas poursuivre ... ne detecte pas mes
cartes ou jetons ...
malgré xx tentatives ..
Projet MPLABX XC8 et C99:
Pack : 18F27k42_RFID_reader_2023-1125.X.bad.zip
Source : main_18F27k42_RFID_reader_2023-1125.X_bad.c
chargeur : 18F27k42_RFID_reader_2023-1125.X.bad.hex