rev 17/08//2019
version 0.0 29 Mai 2013
Test LCD
4x20 en I2C via PigBack Board PCF8574 (2013)
Test
Lecture PCF8574
(20123)
Test LCD 4x20 en I2C1 HW PIC18F46K22
Test
LCD 2x16 en I2C1 HW PIC18F46K22
Test
librairie LCD 2x16 en I2C1 HW Base PIC18F26K22 (17/08/2019)
LCD 4x20 cars , dialogue en mode I2C (via PCF8574)
avec PIC 18F26K22
sous MPLAB C18
usage d'un PIC18F26K22 avec Quartz=10Mhz (versions sans
et avec PLL)
Le LCD 4x20 :
- ref: YwRobot LCM1602 IIC Arduino 20x4
(18.48)
ref : ODT OCM-20416D-A2023 LCD Module 8/4/1999
http://www.miniinthebox.com/fr/arduino-iic-i2c-twi-serie-lcd-2004-20-x-4-module-d-affichage-shield_p508938.html
Livre SANS DOCUMENTATION
- couleur : fond bleu, caracteres blancs avec
retroeclairage
- dimension utiles de l'ecran 86mm x 36mm et Hors tout :100x60x20
- livre avec interface I2C PCF8754 yW robot LCM1602
Arduino
- 4 pins de connection :
1- Gnd (fil noir)
2- +VCC (5V fil rouge)
3- SDA (fil jaune)
4-SCL (fil vert)
cavalier pour activer le retro-eclairage et potar (bleu)
pour regler le contraste d'affichage
attention à zero =RIEN NE S'AFFICHE !
PCF8574(T)
Test avec un PCF8574 avec 8 leds pour validation du
dialogue I2C
18f26K22_I2C_Hardw_PCF8574_2013_ok.c
Prototype
le bus I2C va sur le 1er PCF8754 et aussi sur le second
PCF8574T du LCD4x20
leur adresses sont differentes 0x46 pour le 1er et 0x4E
pour le second
La liaision RS232 sert au debugging et tracage du
programme.
Attention module interface RS232 à alimenter en 3 ou 3,3V NOT 5V !
astuce pour alimenter le module RS232 en 3,1V : alimenter 2 led rouges via 100 ohms et connecter le module aux bornes des 2 leds
les leds se comportant comme des Zeners! mais le mieux reste l'usage d'un petit regulateur 3,3V !
1er test du LCD avec programmes trouves sur le web ... NEGATIF
De nombreux documents concernant cet afficheur ( prevu pour Arduino !)
donnent des infos utiles mais certaines contradictoires , quant à l'adresse I2C du module et les pins utiliser sur le PCF8574.
liens de recherches :
http://www.edaboard.com/thread278067.html
http://web4robot.com/files/SerialLCDCtrN.pdf
http://arduino-info.wikispaces.com/LCD-Blue-I2C
http://www.skpang.co.uk/blog/archives/25
http://www.picbasic.co.uk/forum/showthread.php?t=17302
ce qui m'a fait perdre plusieurs heures de test!
N'etant sur de rien et tournant en rond, j'ai d'abord rajouté sur ma plaque d'essai PIC18F, un autre PCF8574
à l'adresse 0x46 et pourvu 8 leds sur ses sorties, afin de tester le dialogue I2C (sans le LCD)
L'adresse de base du PCF8754 est 0x40, auquelle on rajoute 2x le code defini par les bits d'adresse A0,A1,A2
donc 0x46 correspond à A0=1 A1=1 A2=0
La datasheet PIC18F4XK22 n'est pas bien clair quand au nombre de MSSP I2C dans la version 18FK26K22 (28 pins)
alors qu'il doit y avoir 2 MSSP I2C dans le modele 18F46K22 (40pins)
J'ai donc utilisé la bibliotheque I2C.h du C18 et OpenI2C(Master,SLEW_OFF) en considerant qu'il n'y avait qu'un seul I2C Hardware.
Apres quelques mise au point, j'ai pu faire allumer mes 8 leds en sequence ..
Un autre essai en declarant cette fois OpenI2C1(MASTER,SLEW_OFF); a ete aussi concluant
Deduction OpenI2C = OpenI2C1 sur ce PIC
L'acces I2C étant OK, j'ai rajouté sur le bus I2C, le LCD qui est sensé etre à l'adresse 0x4E ( car c'est un PCF8574 et A0,A1,A2 reliees au +VCC)
Rappel : il n'ya pas de commutateur d'adresse sur ce modele de LCD !
1er test non conluant : les bits de commandes du LCD ne sont pas definis au bon endoit ..
essai avec autre source d'info sur le web...
Philips PCF8574T
adresse I2C : 0x4E et non pas 0x27 ou 0x40
#define LCD_BL 0x08
#define LCD_EN 0x04
#define LCD_RW 0x02
#define LCD_RS 0x01
puis affichage de quelque chose mais pas au bon endoit et pas exactement ce que je voulais...
Recherche des adresses de lignes
#define LCD_LINE1 0x80 // 0x00 + bit D7=1
#define LCD_LINE2 0xC0 // 0x40 + bit D7=1
#define LCD_LINE3 0x94 // 0x14 + bit D7=1
#define LCD_LINE4 0xD4 // 0x54 + bit D7=1
Attention,il faut rajouter 80h à l'adresse de debut
Test : 2 infos mal placée sur les lignes
Debordement de la ligne ,par non detection de fin de ligne, donc affichage de n'importe quoi
=> Rajout dans les procedures d'ecriture de string en ROM , ou en RAM
d'un test sur le nombre de caractere <= 20 (en plus de la detection 0 fin de chaine)
Apres coup, l'affichage se fait bien au bon endroit.
Affichage dynamique de la mesure ADC RA0 sur la 4em ligne pour visualiser quelque chose qui bouge!Version 10Mhz (sans PLL ) : 18F26k22_LCD_PCF8574_I2C_Hardw_master_10Mhz.c
Chargeur 10Mhz: 18F26k22_LCD_I2C_Hard_PCF8574_10Mhz_2013.hex
Version 40Mhz (avec PLL) : 18F26k22_LCD_I2C_Hard_PCF8574_40Mhz_2013.hex
Resultats OK
sur le LCD :
sur le terminal RS232 :
rajout d'un module horloge temps reel RTC DS1307 , dialogue en I2C
dispo ici pour ~5 euros
Liaison sur le bus I2C (deja relié au LCD 4x20 et au PCF8574)
La pile LIR2032 est en fait un ACCU donc rechargeable !, tension relevée=4,41V
La sortie SQWE est situé de l'autre coté du circuit ! liaison vers led tiree au +5V via R=1K
Si l'init de la RTC DS1307 est OK, la led doit clignoter..NO clignotement=Probleme
Adresse du module RTC fixée à 0x58+ bit R/W => @ 0xD0 pour ecriture et 0xD1 pour lecture
Schema :
Affichage :
Teste de presentation sur la 1ere ligne
Affiche sur le LCD le temps en cours sur la 2eme
La date sur la 3eme
et la Valeur ADC 0 et indice de progression sur la 4em
Le programme :
Impossible de m'en sortir avec l'usage de la bibliotheque I2C Hardware C18, donc usage de fonction re-ecrites
source C18 :18F26k22_DS1307_I2C_HW_10Mhz_130611.c
chargeur: 18F26k22_DS1307_I2C_HW_10Mhz_130611.hex
16/12/2013
Version OK avec fonctions I2C MPLAB originales
Projet C18,
_18F26K22_Test_DS1307.zip version light , sortie sur terminal UART1
Version avec afficheur LCD 4x20 sur le meme bus I2C
version avec FOSC interne 16Mhz , bus I2C à 100Khz
Projet complet : LCD4x20_I2C_PCF8574_DS1307_131216.zip
Test LECTURE PCF8574 avec 18LF46K22
TEST PCF8754 en Ecriture ET LECTURE
Pour la partie Lecture, test fait sur la breadboard prototype EDF 2019, pour plus de facilité
Le bus I2C etant deja connecté sur LCD 4x20 + RTC3232 + PCF8574-2 en Sorties sur 8 leds avec pull up.
Un 18LF46K22 est monté .
Rappel: schema EDF
La lecture du PCF est bloquante ..voir MikroE forum
Projet mikroC: 18F26K22_Test_lib_LCD_I2C1_Uart1_PCF8754_Inp_1903.zip
Source : PIC18F26K22_Test_Lib_LCD_PCF8574_I2C1_et_PCF8754_Input_190312.c
Test Affichage sur LCD 4x20 en I2C et PIC18F46K22
Sans librairie !
Afficheur 4x20 cars connecté via I2C1 ( Pigboard PCF8574 sur l'arrirere de l'afficheur LCD)
Mode I2C1 Hardware RC3=SCL RC4=SDA
Utilisation de FOSC interne 16MHz
UART1 RC6 Rx et RC7 TX utilisé comme outil de tracage du programme, ET pour envoyer un essage sur le LCD
Accepte un message pouvant atteindre 80 caracteres .
Trop simple pour faire un schema !
Rappel:
#define LCD_LINE1 0x80 // 0x00 + bit D7=1
#define LCD_LINE2 0xC0 // 0x40 + bit D7=1
#define LCD_LINE3 0x94 // 0x14 + bit D7=1
#define LCD_LINE4 0xD4 // 0x54 + bit D7=1
Les fonctions :
unsigned char check_device(unsigned char dev_address);
unsigned char I2C_PCF8574_Write(unsigned char Adr,unsigned char value);
void LCD_init_2x16(void);
void LCD_putcmd(unsigned char d,unsigned char cmdtype);
void LCD_putch(unsigned char d);
void LCD_puts(char *s);
void LCD_putsRom(code char *s);
void LCD_display_date_Time(void);
void LCD_Write_CText(const char *txt) ;
void LCDHandler(char c);
Init UART1 19200,8,N,1
Mikroc Pro 7.20
Source :_18F46k22_Big_LCD_4x20_I2C1_HW_190521.c
PIC 18F46K22 MCU Dip40
LCD 4x20 sur bus I2C1
UART1 via USB -> COM4 19200,8,N,1 TerTerm Terminal
Test LCD Bleu 4x20 en I2C via PCF8754 addon circuit
Fosc = 8000 KHz
Check delay de 5000mS entre # et @
#
@
Init I2C1 100Khz
Device at adresse : 48 is not found
Device at adresse : 50 is not found
Device at adresse : 52 is not found
Device at adresse : 54 is not found
Device at adresse : 56 is not found
Device at adresse : 58 is not found
Device at adresse : 60 is not found
Device at adresse : 62 is not found
Device at adresse : 64 is not found
Device at adresse : 66 is not found
Device at adresse : 68 is not found
Device at adresse : 70 is not found
Device at adresse : 72 is not found
Device at adresse : 74 is not found
Device at adresse : 76 is not found
Device at adresse : 78 found OK
Init Big Display LCD 2x16 : 0123456789
Ecrit. sur 1ere ligne du LCD : Hello I am alive
Ecrit. sur 2em ligne du LCD : paulfjujo 0123456789
Ecrit. sur 3em ligne du LCD : 3em ligne LCD4x20
Ecrit. sur 4em ligne du LCD : 4em ligne LCD4x20
J= 0
J= 1
J= 2
= 56
J= 57
J= 58
envoi message superieur a 20 caracteres voire meme plus de soixante ou septante et quelques
J= 590 ..
Projet Mikro C:
_18F46K22_LCD_4x20_I2C_w_PCF8574_1905.zip
18F46K22_BIG_LCD_4x20_I2C_PCF8754_2019.hex
Test LCD 2x16 en I2C1 HW PIC18F46K22
Le meme programme, adapté à un vieux LCD 1602 2x16 cars + un module PCF8754 I2C soudé derriere
Montage Hardware ( avec une RTC non utilisée pour ce test)
Rappel des liaison PCF8754 au LCD1602
#define LCD_2x16_PCF8754
// PCF8574 I2C LCD Port Definition
// P7,P6,P5,P4 = Data, P3=Backlight (BL), P2=E, P1=RW, P0=RS
Projet MikroC
_18F46K22_LCD1602_2x16_I2C_w_PCF8574_1905.zip
18F46K22_LCD_1602_2x16_I2C_PCF8754_2019.hex
Test du LCD 1602 avec platine Base 18F26K22
RIEN sur le LCD ?
Je cherche pendant 2H00 ! rien ne cloche dans le programme..d'autant qu'il tournait sur le 18F46K22
Surprise: en le positionnant à PLAT , je vois le texte s'afficher , donc en regardant le LCD avec un angle de visée de l'ordre de 30 à 45°
Je n'avais jamais prété garde à ce cas de figure auparavant .. j'ai pourtant déja bien usité ce LCD
et le reglage de contraste n'a rien à y voir ..
testé avec Fosc=8MHz ou 16MHz ..idem
testé avec I2C 1 à 100Khz ou 400KHz ..idem
une idée ? une piste à suivre ?
SOFTWARE :
projet zip: PIC18F_LCD1602_I2C_Tests_1908.zip
usage de la librairie *.mcl
C:\_MikroC\mikroC PRO for PIC\uses\P18\" "ESP8266_Base_18F26K22_tests_190817.c" "Lib_LCD_I2C.mcl" "
fichier header : Lib_LCD1602_I2C.h
fichier header : LCD_definitions.h (contient les definitions des fonction de la librairie compilée)
Main source : ESP8266_Base_18F26K22_tests_190817.c
exec: Base_18F26K22_LCD1602_tests_190817.hex