VO 10/07/2016
rev 22/01/2017

TEST Interface 8 digits 7 segment MAX7219 avec PIC18F45K22

Affichage sur 8 digits 7 segments
Amelioration partie Mesure LM335



La carte Ready For PIC 18F45K22

Lien sur Presentation Ready For PIC 18F45K22 board

images/t_Ready_for_Pic_18F45K22_2_UART_LCD_sch.gif




Interface 8 digits 7 segment MAX7219

HARDWARE :

Lien pour plus de details sur le MAX7219 : Version pour Demo Board 16F887

images/MAX7219_Afficheur_8x7seg.gif


Le module d'affichage est relié au PIC18F45K22 à la carte Ready For PIC via 5 fils
2 fils : alimentation 5V bornier PWR +V et GND
3 fils SPI :
RC3 ->Clk ouput to -> CLK MAX7219
RC5 -> SDO output to -> DIN MAX7219
RC2 - >output to CS MAX7219
RC4 - SDI non connecté

La liaison USB assume 3 fonctions :
Alimente l'ensemble en 5V. nota: Strap Alim coté 5V
le chargement du programme avec le logiciel MikroE Bootloader
Une laison Port COM Virtuel avec UART1 (ici COM13)

RC6 et RC7 UART1 sont relié au circuit FTDI de la carte
ce qui permet aussi l' acces au USB serial Terminal MikroE





Schema de principe :

images/RFP_18F45K22_MAX7219_links.gif


liaison SPI1 Hardware extrait Datasheet :

images/RFP_18F45K22_MSSP_SPI1_diagram.gif

SOFTWARE (MikroC)

void MAX7219_Init(void);
void MAX7219_Mode_BCD(void);
void MAX7219_Mode_7seg(void);
void MAX7219_Affiche_ON (void);
void MAX7219_Affiche_OFF (void) ;
void MAX7219_Efface(void);
void MAX7219_Affiche_Long(unsigned long L);
void MAX7219_Affiche_HELP();
unsigned char MAX7219_LookupCode (char cx);
void MAX7219_Write (unsigned char reg_number, unsigned char dataout);
void MAX7219_Display_Char (char digit, char character) ;
void MAX7219_Luminosite_Maxi(void);
void MAX7219_Luminosite_Mini(void);
void MAX7219_Display_Text(char * T);
void MAX7219_Luminosite(int Lu); // reglage 0 à 3
void MAX7219_Display_Temp(char ici,char * T);
void fltToa (float x, unsigned char *str,char precision); // 972 bytes;
void floattostr1(float n_decimal,char *texto_); // 2608 bytes


Le MAX7219 possede un decodage interne BCD permettant l'affichage direct de valeur 0 à 9
A noter :
void floattostr1(float n_decimal,char *texto_);
Formatte la sortie sur un nombre immuable de digits , avec Nb de decimales variables , mais gamme limitée à +- 9999.9
void MAX7219_Display_Temp(char ici,char * T);
est adapatée à la mesure de temperature : affichage maxi 655.35 °C. Le point decimal est inclus dans le digit
void MAX7219_Affiche_Long(unsigned long L);
Affiche un entier long , mais limité par le nombre de digit 99999999 maxi (en mode BCD)
void MAX7219_Display_Text(char * T);
Affiche du Texte en ASCII .. (en Mode 7seg)

Projet zipé:

18F45k22_Max7219_8digits_with_UART_160710.zip
contenu du zip:





Partie Mesure de Temperature avec LM335 :


*brochage LM335 , vue de dessus
Shema du Bloc Breadboard deporté :

../common/t_Temper_Mesure_Expans_10bits.gif images/t_Temper_Mesure_Expans_Hardw.gif
schema mesure LM335 + references montage sur mini breadboard 400 pts



Le potar permet de regler au mieux la tension de sortie du LM335 à 2930 mV pour Tamb=20°C
Pour augmenter la resolution et stabilité de mesure,utilisation d'un effet loupe, grace
à l'usage de tension de reference +Vref=4.096V et -Vref =2.50V
Cela mobilise respectivement les 2 entree RA3 et RA2 ..
Les fonctions biblio MikroC: Init_ADC et Read ADc ne convienent plus dans ce cas
car utilisent par defaut VSS (0V) et VCC (+5V) comme references ADC.
On programme donc directement les registres du PIC .. pour EA0

void Init_ADC_Vref_externes(void)
{
//REGISTER 17-1: ADCON0: A/D CONTROL REGISTER 0
ADCON0=0x01; // channel 0 par defaut et ADON=1 enabled
//REGISTER 17-2: ADCON1: A/D CONTROL REGISTER 1
// bit 3-2 PVCFG<1:0>: Positive Voltage Reference Configuration bits
//01 = A/D VREF+ connected to external pin, VREF+
ADCON1.PVCFG1=0;
ADCON1.PVCFG0=1;
// bit 1-0 NVCFG<1:0>: Negative Voltage Reference Configuration bits
//01 = A/D VREF- connected to external pin, VREF
ADCON1.NVCFG1=0;
ADCON1.NVCFG0=1;
// REGISTER 17-3: ADCON2: A/D CONTROL REGISTER 2
// bit 7 ADFM: A/D Conversion Result Format Select bit
ADCON2.ADFM=1; // Right justified
// bit 5-3 ACQT<2:0>: A/D Acquisition time select bits 100 = 8 TAD
ADCON2.ACQT2=1;
ADCON2.ACQT2=0;
ADCON2.ACQT2=0;
// bit 2-0 ADCS<2:0>: A/D Conversion Clock Select bits
ADCON2.ADCS2=0; // 001 = FOSC/8
ADCON2.ADCS1=0;
ADCON2.ADCS0=1;
}


Les sorties references tensions sont connectées sur les entrees RA2 et RA3
La mesure LM335 (ajustée par potar) connectée sur RA0
La procedure peut etre eventuellement modifiée/adaptée pour lire les autres channels ADC..
le bloc 2 ref + Lm335 est relié via un connecteur HE10 à la Carte READY FOR PIC 18F45K22


HARDWARE :

images/t_Proto_18F45K22_MAX7219_LM335.gif
prototype

2.927-2.730=187 => 18.7°C


Nota:
le point decimal est inclus dans le meme afficheur ( OU avec 2 fontes caracteres)
via une procedure specifique d'affichage


Resultat sur terminal:




Projet MikroC :

18F45K22_MAX7219_LM335_170103.hex
_18F45k22_Max7219_8digits_LM335_with_UART_170103.c


Test (peu academique !) avec Tout l'ensemble dehors à 0°C

images/t_Proto_18F45K22_MAX7219_LM335_dehors.gif images/t_Temp_Negative_LM335.gif
LM335 en local sur breadboard, à l'exterieur (autre) LM335 deporté via 1 M de cable à l'exterieur

C'est bien mieux avec la partie electronique (VRef ) à l'interieur ..

DECEVANT ! On mesure 4,13°C au lieu de 0 degres !
Les tensions de reference n'ont pas bronché ! ça c'est un plus .
Le LM335 delivre 2,779 -2,730 => delta 49 mV soit 4,9°C !.. assez coherent avec l'affichage
Probleme etalonnage capteur ?
pourtant déja reglé autour de 20°C amb, via le potar de reglage
PAS GLOP ...

Le detail de la Data Sheet montre que le version LM335 (sans le A!) peut accuser un certain decalage de mesure..


d'ou la NECESSITE de CALIBRER l'Offest et la PENTE de conversion en unite physique(°C)
Offset theorique -23°C => -25°C
Pente theorique 0,156 => 0,160
Avec ces reglages je reste à +-0,2°C en comparatif avec mon thermometre à alcool , verifié pour -5°C à +20°C.
J'en resterai là .. sinon il faut utiliser un LM335A trié
ou changer de type de capteur : DS18B20 OWS temperature Sensor.. ou PT1000.

Test avec un AUTRE LM335
=> l' erreur globale reste < |0,5°C| sur la plage testé temp ambiante de +21 °C à -8°C !

le soft corrigé :


_18F45k22_Max7219_8digits_LM335_with_UART_170107.zip
_18F45k22_Max7219_8digits_LM335_with_UART_170107.c
Max7219_inc.c




Video :
MAX7219_8x7seg_Test.webm


paulfjujo@free.fr