• rev0 ....2013
    MAJ
    . 30/03/2023


    Test Lecture PCF8574 ( 18F26K22 ...2013)
    LCD 4x20 en I2C1 via PigBack Board PCF8574 18F46K22 (Mplab8 C18 2013)
    LCD 4x20 en I2C avec PCF8574 version 2020 (Mikro C)
    LCD 2x16 en I2C1 HW PIC18F46K22 (Mikro C , 2019)
    LCD 2x16 en I2C1 HW (Base PIC18F26K22) (Mikro C , 17/08/2019)
    LCD 2x16 ou LCD 4x20 en I2C1 via PCF8754 ( Base PIC18F26K22) MC (Mikro C ,30/03/2023)

    LCD Mini Oled (30x10mm) grafique 128x32 , PIC 18F26K22 (Mikro C , 26/11/2019)
    .....rajout RTC DS1307 I2C
    LCD I2C Oled (25x15 mm) SSD1306 128x64 PIC 18F26K22 (Mikro C , 15/12/2020)






    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




    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 :







    Test Affichage sur LCD 4x20 en I2C et PIC18F46K22 (2019)

    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,char bavard);
    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_2020_2020_0721.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 ADC RA0=EA0, RA1=EA1
    Init I2C1 100Khz
    Device @ 32 not found
    Device @ 34 not found
    Device @ 36 not found
    ... etc
    Device @ 74 not found
    Device @ 76 not found
    Device @ 78 Device #8 find at @ 78 soit 4E

    Device @ 80 not found
    Device @ 82 not found
    Device @ 84 not found
    ... etc
    Device @ 246 not found
    Device @ 248 not found
    Device @ 250 not found
    Device @ 252 not found

    Liste des adresses de base devices I2C decouvertes :
    Device #1 @= 4E
    Device #2
    Device #3
    Device #4
    Device #5
    Device #6
    Device #7
    Device #8

    Init Display LCD 4x20 : 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
    J= 3
    J= 7
    J=8
    J= 10
    Hello chaps, are you fine today ? for me es get mir gut
    Hello chaps, are you fine today ? for me es get mir gut
    J= 11
    ....
    J= 58
    envoi message superieur a 20 caracteres voire meme plus de soixante ou septante et quelques
    J= 590 ..





    Projet Mikro C:

    * ATTENTION : à l'usage de static

    18F46k22_Big_LCD_4x20_I2C1_HW_UART1_2020_0723.zip
    18F46K22_BIG_LCD_4x20_I2C_PCF8754_2020_0723.hex
    _18F46k22_Big_LCD_4x20_I2C1_HW_2020_0723.c
    Check_I2C_device_adresse.inc




    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




    images/t_Diagram_Init_LCD1602_4bits.gif
    diagram init LCD 1602 en mode 4 bits



    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 I2C 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 dans le passé

    images/t_Maquette_Test_LCD1602_I2C_Front_view.gif images/t_Maquette_Test_LCD1602_I2C_1908.gif
    à peine visible , si vu de face ! mais vu 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





    (03/2023)
    LCD 4x20 ou LCD 2x16 avec cablage et adresses differentes du PCF8754
    Application MikroC Pro V7.60

    Compilation conditionelle suivant le type de LCD via:
    // #define LCD_Bleu_4x20
    si en commentaire : LCD 2x16 , sinon LCD 4x20

    ATTENTION : le cablage PCF8754 <-> LCD est différent suivant le type de LCD
    LCD 4x20 : module PigBack monté au dos du LCD ( delivré AVEC )
    LCD2x16 : PCF8754 monté à coté du LCD
    d'où la differenciation via software :

    #ifdef LCD_Bleu_4x20
    // LCD 4x20
    #define LCD_ADDR 0x4E // PCF8574 on pigboard YwRobot back located on LCD4x20
    // Hardware :
    // PCF8574 I2C LCD Port Definition
    // P4,P5,P6,P7= Data,
    // P3=Backlight (BL), P2=E, P1=RW, P0=RS
    #define LCD_BL 0x08 .... optionel
    #define LCD_EN 0x04
    #define LCD_RW 0x02 ... optionel
    #define LCD_RS 0x01
    // ref : ODT OCM-20416D-A2023 LCD Module 8/4/1999
    // LCD Command
    #define LCD_LINE3 0x94 // 0x14 + bit D7=1
    #define LCD_LINE4 0xD4 // 0x54 + bit D7=1

    #else

    // LCD 2x16
    #define LCD_ADDR 0x40 // PCF8574 à coté du LCD 2x16
    // Hardware :
    // PCF8574 I2C LCD Port Definition
    // P0,P1,P2,P3 = Data,
    // P4=En , P5 not used car RW=0V , P6=RS , P7=Backlight (BL) not used, fixé via R au +Vcc
    #define LCD_BL 0x80............optionel
    #define LCD_EN 0x10
    #define LCD_RW 0x20 ... .....optionel
    #define LCD_RS 0x40

    #endif


    La liaison pin R/W du LCD peut etre mise au 0V (Gnd) car on ne fait pas de lecture Busy en mode 4 bits.
    Le Back Light peut etre maintenu fixe ..avec liaison directe Back LED ....pull-up au +Vcc
    Mode de dialogue : 4 bits
    MSB PCF pour le LCD 4x20
    LSB PCF pour le LCD 2x16
    Nota : c'est un choix délibéré!...pour le fun

    compilation conditionelle pour active les modules :
    // activation module :
    //#define With_RTC
    //#define With_24LC256
    avec adresses I2C
    #define DS1307_ADDR 0xD0 // RTC DS1307
    #define EEPROM_32K_ADR 0xA0 // EEPROM 24LC256

    un scan du bus I2C est fait , pour montrer les devices présents et reconnus (
    maxi :8 devices !)
    Liste des adresses de base devices I2C decouvertes :
    Device #1 @= 40
    Device #2
    Device #3
    Device #4
    Device #5
    Device #6
    Device #7
    Device #8

    Valeur analogiques sur RA0 et RA1 affichées sur le LCD
    et sur le terminal YAT via l'UART1
    EA0= 946 Pts => 4.62;EA1= 1023 Pts; => 5.00
    EA0= 942 Pts => 4.60;EA1= 1023 Pts; => 5.00


    Yat PC Terminal :
    Presentation :
    18F26k22_LCD4x20_LCD2x16_DS1307_UART1_I2C_2023.mcppi
    _18F26k22_LCD4x20_LCD2x16_DS1307_UART1_I2C_2023.c
    Version LCD 2x16 + PCF8754 externe
    18F26K22 Test I2C LCD 4x20 car
    UART 115,2 8,N,1BlueTooth HC06
    rev 29-03-2023 MikroC V7.60
    Init I2C bus 400KHz
    Recherche des devices connectés sur le bus I2C1 RC3 =SCL RC4=SDA

    Hardware Test :



    images/t_LCD2x16_I2C_via_PCF8754_2023.gif

    SOFTWARE
    Projet : _18F26K22_LCD4x20_LCD2x16_PCF8754_I2C_RTC_24LC256_2023-0330_MC.zip
    Source : _18F26k22_LCD4x20_LCD2x16_DS1307_UART1_I2C_2023_MC.c
    eeprom :18F26k22_LCD4x20_LCD2x16_DS1307_UART1_I2C_2023.ihex
    config : 18F26k22_LCD4x20_LCD2x16_DS1307_UART1_I2C_2023.cfg
    version compilée pour 4x20 : 18F26k22_LCD4x20_UART1_I2C_2023-0329.hex
    version compilée pour 2x16 : 18F26k22_LCD2x16_UART1_I2C_2023.hex

    Nota : Le LCD 2119 2x16 en i2C n'a pas de module annexe PCF8754 accollé , il est directement en I2C,
    ............ mais malheureusement plus disponible car non RohS




    (2013)
    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




    LCD I2C OLED SSD1306 128x64 PIC 18F26K22 (Mikro C , 16/12/2020)

    Rappel Generalités sur le module d'affichage :
    voir ICI
    Test du module d'affichage, seul .
    Hardware :
    Base 18F26K22 : Fosc interne 64MHz, bus I2C1 SCL sur RC3 et SDA sur RC4 .
    UART1 sur TX=RC6. avec 19200,8,N,1

    SQA 50 Analyser sur bus I2C1, reconnaissance du device LCD OLED @I2C 7bits= 0x3C

    images/t_LCD_OLED_SSD1306_I2C_detection.gif


    comportement bizarre de l'affichage si T°Amb <18°C ! forte baisse de luminosité/contraste
    display ayant souffert ?

    Modif de ce parametre :
    // modif init OLED .. n'affichait plus avec 3,6V et T°amb=17°C
    // contrast tres faible meme avec 5V VCC
    // modif
    // SSD1306_Cmd(SSD1306_CHARGEPUMP); // 0x8D
    // SSD1306_Cmd(0x14); // 16/12/2020 was 0x10
    //... OK


    terminal :

    MCU : 18F26K22 DIP28
    Power supply: 3.6 to 5.0V
    Directory : C:\_MikroC\_MesProjets_MikroC\_BASE_18F26K22
    Projet : Base_18F26K22_Test_OLED_I2C_128x64_2020_12.mcppi
    Source : Base_18F26K22_Test_OLED_I2C_128x64 version 2020_1216
    Autres : Driver_Oled_2020_12.h, et Driver_Oled_2020_12.mcl
    Config : P18F26K22_FOSC_interne_16xPLL_64MHz_RA6_FreqOut.cfgsch
    FOSC : 16MHz x PLL = 64MHz
    Hardware : Carte Base 18F26K22, LCD OLED 0,96" 128x64 Jaune et Bleu
    Init I2C1 Hardware RC3=SCL RC4=SDA
    Recherche OLED sur le Bus I2C


    ............................................

    Device at adresse : 120 found OK
    ..................................................................
    Init OLED SSD1306 LCD 128x64
    2 demi images 128x32
    1 image dans 128x64
    draw rectangles
    Debug
    i= 0 j= 127 k= 63
    i= 4 j= 119 k= 55
    i= 8 j= 111 k= 47
    i= 12 j= 103 k= 39
    i= 16 j= 95 k= 31
    i= 20 j= 87 k= 23
    i= 24 j= 79 k= 15
    i= 28 j= 71 k= 7
    <BS> draw 1 rectangle 1,1, 126,31
    draw multiple rectangles
    draw mulitple cercles
    Cercle bleu plein R=10
    draw scrolling text
    Texte <Hello World> taille 1
    Texte affichage valeur de PI en taille 1
    Texte <Hello World> taille 2
    Inversion affichage
    Inversion affichage



    Software MikroC 7.60
    usage de I2C1 hardware avec adresse I2C sur 8 bits.

    projet :
    Base_18F26K22_Test_OLED_I2C_128x64_2020_1216.zip
    source :
    Base_18F26K22_Test_OLED_I2C_128x64_2020_1216.c
    librairie :
    Driver_Oled_2020_12.mcl
    header lib. :
    Driver_oled_2020_12.h
    Chargeur :
    Base_18F26K22_Test_OLED_I2C_128x64_2020_1216.hex
    Config :
    P18F26K22_FOSC_interne_16xPLL_64MHz_RA6_FreqOut.cfgsch


    Video :






    paulfjujo@free.fr


    ../common/GIF/LTC1286p.jpg
    image en raytracing


    Retour à l'index general