Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

LCD en I²C
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#51 Message par Jérémy » ven. 28 août 2015 20:23

SendI2CAddress(0x76);
i2c_write(0x00);


Oui mais la commande sendI2Caddress n'existe pas en MikroC !!!

Je dispose de :
Library Routines
I2C1_Init
I2C1_Start
I2C1_Repeated_Start
I2C1_Is_Idle
I2C1_Rd
I2C1_Wr
I2C1_Stop
C'est en faisant des erreurs, que l'on apprend le mieux !!!

LCD en I²C
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#52 Message par Jérémy » sam. 29 août 2015 10:24

Bonjour ,

Encore une grosse soirée à essayer , sans rien du tout . Même pas un caractère qui s'affiche furtivement . Rien de rien ! . J'abandonne , je vais en acheter d'autres !

Merci à vous pour le temps passé, mais il ne veut rien savoir cet écran ! Je reste quand même en colère contre les gens qui vendent des trucs pareils !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

LCD en I²C
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3260
Âge : 75
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#53 Message par paulfjujo » sam. 29 août 2015 10:42

Attention
e vais vous faire une photo + un schéma de ce que j'ai fait . exactement .



un exemple qui est censé fonctionner :
(avec adresse 0x74 au lieu de 0x76 !)

Code : Tout sélectionner



//http://www.avrfreaks.net/forum/batron-i2c-lcd-display-stays-blank
The LCD display is working.
There is indeed a difference in the Batron LCD display used in Avr Applnote AVR155, and the batron that i used.
AVR155 uses Batron BT21605V-SRE-I2C-COG
I Use BATRON BTHQ 21605AV
-YETF-LED04-I2C-5V
The 
..COG type means Chip-On-Glas. While
mine is an LCD mounted on a PCB
.
The contrast LCD reset and the Contrast steering signals are brought outside on the COG type. On the PCB version these features have to be set via I2C commands.
So the fact that my LCD screen stayed BLANK was due to a contrast problem.
After initialising the constrast Values the LCD worked.
You can find a list of initialisation command on the website DATA-MODULE AG
www
.data-module.de Click further on
- Support
- Driver
- PCF2119 BT21605
Here they are anyhow
.
//Initialisation sample and Ram writing routine for PCF2119
void Display_init(void)
{
Reset=1;
delay_ms(5);
Reset=0;
delay_ms(5000);
iic_start();
iic_write(0x76); // i2c slave Address
iic_write(0x00);    // Control byte for Instruction
iic_write(0x34);    // DL: 8 bits, M: 16 by two line display, SL: 1:18, H: normal instruction set
iic_write(0x0C); // D: Display on, C: curser off, B: blink off
iic_write(0x06);    // I/D: increment, S: no shift
iic_write(0x35); // DL: 8 bits, M: 16 by two line, SL: 1:18, H: extended instruction set
iic_write(0x04); // P: left to right, Q: top to bottom
iic_write(0x10); // TC1: 0, TC2: 0
iic_write(0x42); // HV Stages 3
iic_write(0x9f); // set Vlcd, store to VA
iic_write(0x34); // DL: 8 bits, M: two line, SL: 1:18, H: normal instruction set
iic_write(0x80); // DDRAM Address set to 00hex
iic_write(0x02); // return home
iic_stop();
}
void Write_text(void)
{
int i;
iic_start();
iic_write(0x76); // i2c slave Address
iic_write(0x00); // Control byte for Instruction
iic_write(0x80); // DDRAM Address set to 00hex
iic_stop();
iic_start();
iic_write(0x76); // i2c slave Adress
iic_write(0x40); // Control byte for Data
for (i=1;i<=16;i++)
{
iic_write(0xC0+i); // Write ABCDE....
}
iic_stop();
iic_start();
iic_write(0x76); // i2c slave Adress
iic_write(0x00); // Control byte for Instruction
iic_write(0xc0); // DDRAM Address set to 10hex
iic_stop();
iic_start();
iic_write(0x76); // i2c slave Address
iic_write(0x40); // Control byte for Data
for (i=1;i<=16;i++)
{
iic_write(0xe0+i); // Write abcde....
}
iic_stop();
}
void upside_down(void)
{
iic_start();
iic_write(0x76);
iic_write(0x00); // Control byte for Instruction
iic_write(0x35); // DL: 8 bits, M: 16 by two line, SL: 1:18, H: extended instruction set
iic_write(0x07); // P=1; Q=1;
iic_stop();
}
void normal(void)
{
iic_start();
iic_write(0x76);
iic_write(0x00); // Control byte for Instruction
iic_write(0x35); // DL: 8 bits, M: 16 by two line, SL: 1:18, H: extended instruction set
iic_write(0x04); // P=0; Q=0;
iic_stop();
}
Thanks for all reply's
Fabrizio
------
In the Application_Note they say we need to add an Character_Offset 0X80 to the written
characters. I tried to write 0xD0, with the same result, blank screen.
Thanks for help,
Fabrizio




il y aussi cette discution sur microchip
http://www.microchip.com/forums/m529926-p2.aspx


Est-ce que au niveau connectique, tu pourrais l'utiliser en mode parrallele ?

A voir si une commande I2C software ( bit bang) qui serait au plus pres de la specification
de commande de ce PCF2119 ne serait pas plus pratique ...
certains Device I2C ne suivant pas assez scrupuleusement la norme I2C
le I2C Hardware du PIC ne s'en soucit pas.

exemple from germany

Code : Tout sélectionner

#include <avr/pgmspace.h>
#include <inttypes.h>
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <avr/interrupt.h>
#include "LCD.h"
#include <util/delay.h>

#define sbi(ADDRESS,BIT) (ADDRESS |= (1<<BIT))
#define cbi(ADDRESS,BIT) (ADDRESS &= ~(1<<BIT))
#define ibi(ADDRESS,BIT) (ADDRESS ^= (1<<BIT))

#define NO_I2C_ACK 0
#define OK_I2C_ACK 1
#define DDR_LCD       DDRC
#define PORT_LCD   PORTC
#define PIN_LCD       PINC
#define SDA        PC4
#define SCL           PC5
#define Wartezeit  0

void LCD_init()
{
    i2cInit();
    Display_init();
}

void SetLowSDA()
{
   PORT_LCD &= ~(1<<SDA); 
   _delay_ms
(Wartezeit);
}

void SetHighSDA()
{
   PORT_LCD |= (1<<SDA);         
   _delay_ms
(Wartezeit);
}

void SetLowSCL()
{
   PORT_LCD &= ~(1<<SCL);
   _delay_ms(Wartezeit);
}

void SetHighSCL()
{
   PORT_LCD |= (1<<SCL);
   _delay_ms(Wartezeit);
}
/*************************/
/* To initialize the bus */
/*************************/
void i2cInit()
{
   PORT_LCD &= ~(1<<SCL);   
   PORT_LCD 
&= ~(1<<SDA);   

   DDR_LCD 
|= (1<<SCL)|(1<<SDA);    

   SetHighSCL
();
   SetLowSDA(); 
   SetHighSDA
();
}

/*************************/
/* Start Data Transfer   */
/*************************/
void i2cStart()
{
  DDR_LCD |= (1<<SCL)|(1<<SDA);
  SetHighSCL();
  SetHighSDA();

  SetHighSCL();
  SetLowSDA();

  SetLowSCL();
  SetHighSDA();
}
/*************************/
/* Stop  Transfer        */
/*************************/
void i2cStop()
{
  DDR_LCD |= (1<<SCL)|(1<<SDA);
  SetLowSCL();
  SetLowSDA();

  SetHighSCL();
  SetLowSDA();

  SetHighSCL();
  SetHighSDA();
}
/*************************/
/* Write  Transfer       */
/*************************/
int i2cWrite(char a)
{
  DDR_LCD |= (1<<SCL)|(1<<SDA);
  int i;
  int return_ack;

  for (i=0; i<8; i++)
  {
     SetLowSCL();
     if (& 0x80)          
       SetHighSDA
();
     else
       SetLowSDA
();

     SetHighSCL();
     a <<= 1;
  }
  SetLowSCL();

  /* ack Read */
  SetHighSDA();

  SetHighSCL();
  DDR_LCD &= ~(1<<SDA);
  if (PIN_LCD & (1<<SDA))         
   return_ack 
= NO_I2C_ACK;      
  else
   return_ack 
= OK_I2C_ACK;
  SetLowSCL();
  return(return_ack);
}
/*************************/
/* Read  Transfer        */
/*************************/
char  i2cRead(int ack)
{
  int i;
  char caracter = 0x00;
  DDR_LCD |= (1<<SCL)|(1<<SDA);
  SetLowSCL();
  SetHighSDA();

  for (i=0; i<8; i++)
  {
     caracter = caracter << 1;
     SetHighSCL();
     DDR_LCD &= ~(1<<SDA);
     if (PINC & (1<<SDA))
       caracter = caracter  + 1;
     SetLowSCL();
  }
  
  DDR_LCD 
|= (1<<SCL)|(1<<SDA);
  if (ack)
  {                          
     SetLowSDA
();
  }
  SetHighSCL();
  SetLowSCL();

  return (caracter);
}


void Display_init(void) 
{ 
    
//normal Instructions
    LCD_write_Config(0b00100110); // DL: 8 bits, M: 16 by two line display, SL: 1:18, H: normal instruction set
    LCD_write_Config(0b00001100); // D: Display on, C: curser off, B: blink off 
    LCD_write_Config(0b00000110); // I/D: increment, S: no shift 
    
    
//extended Instructions
    LCD_write_Config(0x35);       // DL: 8 bits, M: 16 by two line, SL: 1:18, H: extended instruction set
    LCD_write_Config(0x04);       // P: left to right, Q: top to bottom
    LCD_write_Config(0x10);       // TC1: 0, TC2: 0 
    LCD_write_Config(0x42);       // HV Stages 3 
    LCD_write_Config(0x9f);       // set Vlcd, store to VA 

    //normal Instructions
    LCD_write_Config(0x34);        // DL: 8 bits, M: 16 by two line display, SL: 1:18, H: normal instruction set
    LCD_home();
}
 

void LCD_write_char
(uint8_t a)
{
    a+=128;
    i2cStart();
    i2cWrite(0x76); //Display adress
    i2cWrite(0x40); //Write to DDRAM 
    i2cWrite(a);     //Write Data
    i2cStop(); 
}

void LCD_write_command(uint8_t a)
{
    i2cStart();
    i2cWrite(0x76); //Display adress
    i2cWrite(0x80); //Register Select Control Write 
    i2cWrite(a);     //Write Data
    i2cStop(); 
}

void LCD_write_Config(uint8_t a)
{
    i2cStart();
    i2cWrite(0x76); //Display adress
    i2cWrite(0x00); //Register Select Config Register
    i2cWrite(a);     //Write Data
    i2cStop(); 
}


void LCD_line_2()
{
    LCD_home();
    for (uint8_t i = 0; i < 40;i++)
    {
        LCD_move_right();
    }
}

void LCD_move_right()
{
    LCD_write_Config(0b00010100);
}

void LCD_move_left()
{
    LCD_write_Config(0b00010000);
}

void LCD_home()
{
    LCD_write_command(0x02);
}

void LCD_write_text(const char* ptext)
{
    while(ptext[0]!=0)
    {
        LCD_write_char(ptext[0]);
        ptext++;
    }
}

void LCD_clear()
{
    LCD_home();
    for (uint8_t i = 0; i < 56; i++)
    {
        LCD_write_char(' ');
    }
    LCD_home();
}


void LCD_start()
{
    i2cInit();
    Display_init();
    _delay_ms(10);
    LCD_clear();
    LCD_write_text("   FHWT 2011");
    LCD_line_2();
    LCD_write_text("      BMS");
}

void LCD()
{


}


 


Tu es dans quelle region ?
moi je suis à l'est de Lyon, à 20kms,
Aide toi, le ciel ou FantasPic t'aidera

LCD en I²C
Pat
Débutant
Débutant
Messages : 43
Enregistré en : juillet 2015

#54 Message par Pat » sam. 29 août 2015 10:59

Si j'ai bien compris le datasheet...
Le second octet transmis met RS a 1 automatiquement
rs => bit 0x40
Le bit 0x80 doit être à 1
(fig 31 du datasheet)

0x00 c est la commande
0xC0 c est l'affichage

Le second coup
a nouveau adresse
puis second octet avec le bit 0x80 à 0
(donc 0x00 commandes et 0x40 pour l'affichage)
suivis de de n datas

Si j'ai bien compris le datasheet...
La séquence d’écriture se fait comme ça;


// Affiche des caractères

int i;
I2C1_Start();
I2C1_Wr(LCD_ADDR); // I2C slave Address
I2C1_Wr(0xC0); // Control byte for Instruction

I2C1_Wr(LCD_ADDR); // I2C slave Adress
I2C1_Wr(0x40); // Control byte for Data
for (i=1;i<=16;i++) {
I2C1_Wr(0xC0+i); // Write ABCDE....
}
I2C1_Stop();


// commandes

int i;
I2C1_Start();
I2C1_Wr(LCD_ADDR); // I2C slave Address
I2C1_Wr(0x00); // Control byte for Instruction

I2C1_Wr(LCD_ADDR); // I2C slave Adress
I2C1_Wr(0x00); // Control byte for Data
;
;commandes au moins 1 commande
;
I2C1_Stop();

LCD en I²C
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#55 Message par Jérémy » sam. 29 août 2015 11:15

Voici le montage que j'ai effectué sur ma plaque d'essai. J'ai fabriqué le petit câble de liaison. les alimentations sont en 3.3V en sont toutes en commun . Je sert d'un autre PORT pour alimenté le rétro-éclairage . Les broches I2C sont prises sur l'emplacement de l'EEPROM ( que j'ai enlevée) ainsi je profite des résistances de pull-up pour l'I2C de la plaque . Et enfin le circuit le PCF2119 est alimenté aussi en 3.3V sur une autre broche , les masses sont bien évidemment commune . En gros j'ai viré l'EEprom en Place et je l'ai remplacé par mon écran pour l'I2C.

Image

Image

Image

Allez j'essaye une dernière fois grâce à vos codes.

un exemple qui est censé fonctionner :

Oui c'est le même . Peut-être que je fais une erreur quand j'essaye de l'adapter à mikroC . le voici dans ma version .

Code : Tout sélectionner

//Initialisation sample and Ram writing routine for PCF2119
void Ecran_init(void)
{

I2C1_Start();
I2C1_Wr (0x74); // i2c slave Address
I2C1_Wr(0x00);    // Control byte for Instruction
I2C1_Wr(0x34);    // DL: 8 bits, M: 16 by two line display, SL: 1:18, H: normal instruction set
I2C1_Wr(0x0C); // D: Display on, C: curser off, B: blink off
I2C1_Wr(0x06);    // I/D: increment, S: no shift
I2C1_Wr(0x35); // DL: 8 bits, M: 16 by two line, SL: 1:18, H: extended instruction set
I2C1_Wr(0x04); // P: left to right, Q: top to bottom
I2C1_Wr(0x10); // TC1: 0, TC2: 0
I2C1_Wr(0x42); // HV Stages 3
I2C1_Wr(0x9f); // set Vlcd, store to VA
I2C1_Wr(0x34); // DL: 8 bits, M: two line, SL: 1:18, H: normal instruction set
I2C1_Wr(0x80); // DDRAM Address set to 00hex
I2C1_Wr(0x02); // return home
I2C1_Stop();
delay_ms(500);
}
void Write_text(void)
{
int i;
I2C1_Start();
I2C1_Wr(0x74); // i2c slave Address
I2C1_Wr(0x00); // Control byte for Instruction
I2C1_Wr(0x80); // DDRAM Address set to 00hex
I2C1_Stop();
I2C1_Start();
I2C1_Wr(0x74); // i2c slave Adress
I2C1_Wr(0x40); // Control byte for Data
for (i=1;i<=16;i++)
    {
     I2C1_Wr(0xC0+i); // Write ABCDE....
    }
I2C1_Stop();

I2C1_Start();
I2C1_Wr(0x74); // i2c slave Adress
I2C1_Wr(0x00); // Control byte for Instruction
I2C1_Wr(0xc0); // DDRAM Address set to 10hex
I2C1_Stop();
I2C1_Start();
I2C1_Wr(0x74); // i2c slave Address
I2C1_Wr(0x40); // Control byte for Data
for (i=1;i<=16;i++)
    {
      I2C1_Wr(0xe0+i); // Write abcde....
    }
I2C1_Stop();

}
void upside_down(void)
{
I2C1_Start();
I2C1_Wr(0x74);
I2C1_Wr(0x00); // Control byte for Instruction
I2C1_Wr(0x35); // DL: 8 bits, M: 16 by two line, SL: 1:18, H: extended instruction set
I2C1_Wr(0x07); // P=1; Q=1;
I2C1_Stop();
}
void normal(void)
{
I2C1_Start();
I2C1_Wr(0x74);
I2C1_Wr(0x00); // Control byte for Instruction
I2C1_Wr(0x35); // DL: 8 bits, M: 16 by two line, SL: 1:18, H: extended instruction set
I2C1_Wr(0x04); // P=0; Q=0;
I2C1_Stop ();
}

/*################################################################################*/
/*######################     PROGRAMME PRINCIPAL     #############################*/
/*################################################################################*/
void main()
{

  ANSELD  = 0;
  PORTD = 0;
  TRISD = 0;

  Delay_ms(100);         // Attente  pour stabilisation apres l'allumage

  I2C1_Init(100000);     // Initialisation de l'I2C

  LATD = 1;             // Allume une led pour declenchement analyseur logique
  Ecran_init();          // On va initialiser notre écran

 /*################################################################################*/
/*#########################     BOUCLE INFINIE     ###############################*/
/*################################################################################*/
  while(1)
  {
   Write_text();
   Delay_ms(2000);
  }
}

 


Est-ce que au niveau connectique, tu pourrais l'utiliser en mode parrallele ?

Je ne sais pas , je connais pas .

Tu es dans quelle region ?
moi je suis à l'est de Lyon, à 20kms,

Je suis dans les PO , ca fait loin ! :D
C'est en faisant des erreurs, que l'on apprend le mieux !!!

LCD en I²C
Pat
Débutant
Débutant
Messages : 43
Enregistré en : juillet 2015

#56 Message par Pat » sam. 29 août 2015 12:42

regarde mon message précédent !

LCD en I²C
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#57 Message par Jérémy » sam. 29 août 2015 12:45

regarde mon message précédent !

Je vais essayer Pat , je vous montre le programme que j'ai ecris
C'est en faisant des erreurs, que l'on apprend le mieux !!!

LCD en I²C
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#58 Message par Jérémy » sam. 29 août 2015 16:53

Pat a écrit :Source du message Le second octet transmis met RS a 1 automatiquement

Non Pat c'est à nous de le mettre à 1 . Pour choisir dans quel registre on va écrire .

Pat a écrit :Source du message Le bit 0x80 doit être à 1

Ca j'ai pas compris ?

Par contre je viens de me rendre compte d'un truc . Bizarre les ordres ne sont pas , ou sont mal envoyés . Je voulais vérifier l'initialisation . Parce que entre celle de du Net et celle qu'on a faite, il ni as que la configuration "extended" qui change pour le contraste et autres bricoles .
Et voila ce que je j'observe à l'analyseur avec ce programme ! ;

programme d’initialisation:

Code : Tout sélectionner

I2C1_Start();
I2C1_Wr(0x74); // i2c slave Address
I2C1_Wr(0x00); // Control byte for Instruction
I2C1_Wr(0x34); // DL: 8 bits, M: 16 by two line display, SL: 1:18, H: normal instruction set
I2C1_Wr(0x0C); // D: Display on, C: curser off, B: blink off
I2C1_Wr(0x06);    // I/D: increment, S: no shift
I2C1_Stop();
I2C1_Start();
I2C1_Wr(0x74); // i2c slave Address
I2C1_Wr(0x00); // Control byte for Instruction
I2C1_Wr(0x35); // DL: 8 bits, M: 16 by two line, SL: 1:18, H: extended instruction set
I2C1_Wr(0x04); // P: left to right, Q: top to bottom
I2C1_Wr(0x10); // TC1: 0, TC2: 0
I2C1_Wr(0x42); // HV Stages 3
I2C1_Wr(0x9f); // set Vlcd, store to VA
I2C1_Wr(0x34); // DL: 8 bits, M: two line, SL: 1:18, H: normal instruction set
I2C1_Wr(0x80); // DDRAM Address set to 00hex
I2C1_Wr(0x02); // return home
I2C1_Stop();


Image

Seulement 8 octets sont envoyés en I2C ? comment cela se fait ? Forcement l’initialisation se fait mal

Je pense que l'initialisation est plus compliquée que ca. Je comprends pas comment réglé soit le mode basic , standard ou extended ? le tableau en page 28 est flou .
C'est en faisant des erreurs, que l'on apprend le mieux !!!

LCD en I²C
Pat
Débutant
Débutant
Messages : 43
Enregistré en : juillet 2015

#59 Message par Pat » sam. 29 août 2015 18:21

Non Pat c'est à nous de le mettre à 1 . Pour choisir dans quel registre on va écrire .


Bien sur que c est à nous de le mettre !
ça fait plusieurs post que j’essaie de te l'expliquer...

bit de poids 0X40
page 27

il faut envoyé 2 fois à la suite fig 31

start
0x74
0x80 nouveau control byte
1 commande
0x0 le même control byte
1 commande
stop

pour les data
start
0x74
0xC0 nouveau control byte
1 data
0x40 le même control byte
1 data
stop

LCD en I²C
Jérémy
Administrateur du site
Administrateur du site
Messages : 2750
Âge : 46
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#60 Message par Jérémy » sam. 29 août 2015 20:45

Je sais pas si j'ai compris Pat , j'ai essayé d’écrire ceci .

Code : Tout sélectionner


 int i 
0;

//Initialisation sample and Ram writing routine for PCF2119
void Ecran_init()
{
I2C1_Start();
I2C1_Wr(0x74); // i2c slave Address
I2C1_Wr(0x80); // Control byte for Instruction
I2C1_Wr(0x34); // DL: 8 bits, M: 16 by two line display, SL: 1:18, H: normal instruction set
I2C1_Wr(0x00);
I2C1_Wr(0x0C); // D: Display on, C: curser off, B: blink off
I2C1_Wr(0x00);
I2C1_Wr(0x06);    // I/D: increment, S: no shift
I2C1_Stop();


delay_ms(5);
}

/*################################################################################*/
/*######################     PROGRAMME PRINCIPAL     #############################*/
/*################################################################################*/
void main()
{
  
ANSELB  0;                // Configure les broches en digital
  
ANSELC  0;
  
ANSELD  0;

  
PORTB 0;                 // PORTB en sortie
  
PORTC 0;
  
PORTD 0;

  
TRISB 0;                 // Mise a 0 du port B
  
TRISC 0;
  
TRISD 0;

  
Delay_ms(100);         // Attente  pour stabilisation apres l'allumage

  
I2C1_Init(100000);     // Initialisation de l'I2C

  
Delay_ms(100);

 
/*################################################################################*/
/*#########################     BOUCLE INFINIE     ###############################*/
/*################################################################################*/
  
while(1)
  {
   
LATD 1;

   
Ecran_init();

   
LATD 0;

   
// On ecrit du texte
   
;

   
I2C1_Start();
   
I2C1_Wr(0x74); // i2c slave Adress
   
I2C1_Wr(0xC0); // Control byte for Data
   
I2C1_Wr(0x80+i);
   
I2C1_Wr(0x40);
   for (
i=2;i>=16;i++)
    {
     
I2C1_Wr(0x80+i); // Write ABCDE....
     
Delay_ms(2);
    }
I2C1_Stop();

   
Delay_ms(1000);

  }
}

 


Pas mieux , écran toujours vide .

Qu'est ce que je remarque ! . avec le code ou il y as les fonctions extended ( 0x35) , à l'analyseur , le code s’arrête juste après la commande 0X35 , quand je l’enlève ça va mieux .

Quand j’essaie d’écrire les 16 octets , avec la boucle "for i" un seul octet part après ca s’arrête .
C'est en faisant des erreurs, que l'on apprend le mieux !!!


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités