• 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.

    images/t_LCD_PC8574_I2C_test_130505.jpg LCD4x20_I2C_bleu_Front_view.jpgimages/t_LCD4x20_I2C_bleu_Front_view
    images/LCD4x20_I2C_bleu_Backpg

    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 :
    images/LCD_PC8574_I2C_test_result_130505.jpg
    sur le terminal RS232 :




    rajout d'un module horloge temps reel RTC DS1307 , dialogue en I2C

    dispo ici pour ~5 euros

    images/Proto_18F26K22_DS1307_LCD_I2C_HW_130611.jpg

    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 :

    images/18F26K22_LCD_4x20_I2C_DS1307_PCF8754.jpg

    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)

    images/t_Test_LCD1602_PCF8754_190521.gif
    le module soudé sur le LCD1602 le module PCF8754 seul



    images/t_Diagram_Init_LCD1602_4bits.gif
    diagram init LCD 1602 en mode 4 bits visible de face ??



    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

    images/t_Maquette_Test_LCD1602_I2C_Front_view.gif images/t_Maquette_Test_LCD1602_I2C_1908.gif
    à peine visible si vue de face ! mais vue OK avec angle d'incidence ~45°

    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




     

     

     

     

     

     

     

    paulfjujo@free.fr


    ../common/GIF/LTC1286p.jpg



    Retour à l'index general