Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Kontrast kod LCD sa I2C

[es] :: Elektronika :: Mikrokontroleri :: Kontrast kod LCD sa I2C

Strane: 1 2

[ Pregleda: 3396 | Odgovora: 21 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

DSL
Sweden

Član broj: 47290
Poruke: 1874
*.bredband.comhem.se.



+162 Profil

icon Kontrast kod LCD sa I2C29.08.2020. u 09:23 - pre 43 meseci
Pozdrav drustvo.

Testiram jedan alfanumericki I2C LCD iz subjecta. Dirty code ali komunikacija tece uredno.
Okruzenje Seeeduino Xiao+Arduino IDE.
Datasheet je ocajan i ne nudi mnogo informacija, uglavnom referise na datasheet kontrolera.
Elem, library koji koristim nudi mogucnost kontrole kontrasta ali ne vidim da sam u stanju da promenim kontrast, ni u kom smeru. Smanjio bih ga malo jer je ovako LCD jedva citljiv.
Ima li neko iskustva sa pomenutim displejem...? Nije navedeno da se nesto moze uraditi sa promenom kapacitivnosti kondenzatora na LCD drajvu...

(tema jeste vise za MCU podforum ali vidim da je aktivnost tamo malo redukovana...)
 
Odgovor na temu

scoolptor

Član broj: 305514
Poruke: 1620



+585 Profil

icon Re: Kontrast kod LCD sa I2C29.08.2020. u 09:49 - pre 43 meseci
Stavi FON na 1, i igraj se sa C0..C5 i RAB 0..2.
 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Vanuatu

Član broj: 288510
Poruke: 4542

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+529 Profil

icon Re: Kontrast kod LCD sa I2C29.08.2020. u 10:16 - pre 43 meseci
Jesi li pročitao ta pdf što si prikačio?
Sve ti tamo piše:


--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
Prikačeni fajlovi
 
Odgovor na temu

DSL
Sweden

Član broj: 47290
Poruke: 1874
*.bredband.comhem.se.



+162 Profil

icon Re: Kontrast kod LCD sa I2C29.08.2020. u 11:13 - pre 43 meseci
Kewl.
Prvi put radim sa lcd kod koga se kontrast setuje njakanjem registara... neam iskustva pa ne znam ni da dekodiram kvalitetno informacije iz shita...
Hvala. Ponudio bih nekog alkohola ali sam već pritisnuo Send
 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Vanuatu

Član broj: 288510
Poruke: 4542

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+529 Profil

icon Re: Kontrast kod LCD sa I2C29.08.2020. u 11:31 - pre 43 meseci
Fala lepo, alkohol ne trošimo
Čim ti je I2C, ondak sve softverski odrađuješ.
--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
 
Odgovor na temu

DSL
Sweden

Član broj: 47290
Poruke: 1874
*.bredband.comhem.se.



+162 Profil

icon Re: Kontrast kod LCD sa I2C29.08.2020. u 12:01 - pre 43 meseci
O lebe... pa šta trošite ondak??

Sad sam probao igranje sa ovim registrima... ili ovo nije pas ptičar ili ga ja ne bacam dovoljno visoko???
Igraču se još malo kasnije ali ostajem bez ideja trenutno...
Inače, ovde kod mene je sad bio pljusak od dva sata, sad je jedno 24 vani... 500km južnije id Stokholma
 
Odgovor na temu

DSL
Sweden

Član broj: 47290
Poruke: 1874
*.bredband.comhem.se.



+162 Profil

icon Re: Kontrast kod LCD sa I2C29.08.2020. u 16:31 - pre 43 meseci
Ipak ovo nije pas pticar...

Elem, samaram svasta nesto usmereno ka displeju ali nesto ne ide... negde gresim, evidentno...

U setup rutini je smesten pokusaj da se poigram sa kontrastom. Posto ne ide, jer displej evidentno ne reaguje na ove komande, pokusao sam i sa igranjem komandama koje bi trebale da urade clear ili return home, ili da ugase displej, ali bez uspeha...
Negde sistematski gresim, ali od alkohola koji vi necete, jelte, sad ne mogu mutne glave da mislim...a i sve sto sam smislio, nije dalo efekta...

Evo na sta sam sveo kod pokusavajuci samo da naucim kako da se obracam displeju ali, sipak...nesto ipak tu ne stima... Prikaz na displeju se odvija bez problema i to je sve sto ne skripi.

Moze jos malo pomoci??

Code:
#include <Arduino.h>
#include "ST7036.h"
#include <Wire.h>
ST7036 lcd = ST7036 ( 2, 20, 0x78 ); //adresa displeja je 0x78

void setup ()
{
  lcd.init ();
//lcd.setContrast(0);
Wire.begin();                 // Initialise I2C communication as MASTER
Wire.beginTransmission(0x78); // Start I2C Transmission
Wire.write ( 0b01011100 );    // ICON disp on, Booster on, Contrast high byte (2)  
Wire.write ( 0b01101000 );    // Follower circuit internal ON, Amplifier follower ratio 
Wire.write ( 0b01110000 );    // Contrast low byte (6) 
Wire.endTransmission();

}

void loop ()
{
lcd.print ("A");
delay(1000);
}
 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Vanuatu

Član broj: 288510
Poruke: 4542

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+529 Profil

icon Re: Kontrast kod LCD sa I2C29.08.2020. u 17:33 - pre 43 meseci
Aj probaj ovo:

Code:
#include <Arduino.h>
//#include "ST7036.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//ST7036 lcd = ST7036 ( 2, 20, 0x78 ); //adresa displeja je 0x78
LiquidCrystal_I2C lcd(2, 20, 0x78);
byte ContrastL, ContrastH;

#define ICONC      0b01011100
#define Folower    0b01101000
#define ContrastC  0b01110000

void setup ()
{
  lcd.init ();
  //lcd.setContrast(0);
  Wire.begin();                 // Initialise I2C communication as MASTER
  Wire.beginTransmission(0x78); // Start I2C Transmission
  Wire.write (ICONC);    // ICON disp on, Booster on, Contrast high byte (2)
  Wire.write (Folower);    // Follower circuit internal ON, Amplifier follower ratio
  Wire.write (ContrastC);    // Contrast low byte (6)
  Wire.endTransmission();

}

void loop ()
{
  byte i, j, ICON, Contrast, Kontrast;
  ICON = ICONC;
  Contrast = ContrastC;
  Kontrast = 0;
  for (j=0; j<2; j++)
  {
    ICON = ICON + j;
    for (i=0; i<16; i++)
    {
      lcd.clear();
      lcd.setCursor (0, 0);
      lcd.print ("Kontrast: ");
      lcd.print (Kontrast, DEC);
      Kontrast++;
      delay (2000);
    }
    Contrast = ContrastC;
  }
  
  
//  lcd.print ("A");
  delay(2000);
}


Naravno zakomentariši šta je potrebno i odkomentariši ...
--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
 
Odgovor na temu

DSL
Sweden

Član broj: 47290
Poruke: 1874
*.bredband.comhem.se.



+162 Profil

icon Re: Kontrast kod LCD sa I2C29.08.2020. u 17:55 - pre 43 meseci
Hvala za pomoc!
Pokusao sam i sam prvo sa ovom LiquidCrystal_I2C bibliotekom ali stvar nije proradila apsolutno nikako. Kao ni sada ovaj kod. Displej ne daje znake zivota.

Zbog ovog upozorenja sam na kraju potrazio ima li neko gotovo resenje biblioteke za konkretan kontroler i nasao ono sto sam i nabacio u kodu medjutim, kontrola kontrasta, a posle ce se ispostaviti i ostalo, ne funkcionise.
WARNING: library LCD_I2C-master claims to run on avr architecture(s) and may be incompatible with your current board which runs on samd architecture(s).


Kada sam vratio deo koda iskoristivsi staru biblioteku, kod se uredno izvrsava i tekst je vidljiv na displeju ali se promena kontrasta ne vidi.. bar bi se videla promena kod tranzicije sa 31 na 0 ali ...tjah.
Code:


#include <Arduino.h>
#include "ST7036.h"
#include <Wire.h>
//#include <LiquidCrystal_I2C.h>
ST7036 lcd = ST7036 ( 2, 20, 0x78 ); //adresa displeja je 0x78
//LiquidCrystal_I2C lcd(2, 20, 0x78);
byte ContrastL, ContrastH;

#define ICONC      0b01011100
#define Folower    0b01101000
#define ContrastC  0b01110000

void setup ()
{
  lcd.init ();
  //lcd.setContrast(10);
  Wire.begin();   
  Serial.begin (9600);          // Initialise I2C communication as MASTER
  Wire.beginTransmission(0x78); // Start I2C Transmission
  Wire.write (ICONC);           // ICON disp on, Booster on, Contrast high byte (2)
  Wire.write (Folower);         // Follower circuit internal ON, Amplifier follower ratio
  Wire.write (ContrastC);       // Contrast low byte (6)
  Wire.endTransmission();

}

void loop ()
{
  byte i, j, ICON, Contrast, Kontrast;
  ICON = ICONC;
  Contrast = ContrastC;
  Kontrast = 0;
  for (j=0; j<2; j++)
  {
    ICON = ICON + j;
    for (i=0; i<16; i++)
    {
      lcd.clear();
      lcd.setCursor (0, 0);
      lcd.print ("Kontrast: ");
      lcd.print (Kontrast, DEC);
      Serial.print ("Kontrast: ");
      Serial.println (Kontrast, DEC);
      Kontrast++;
      delay (500);
    }
    Contrast = ContrastC;
  }
  
  
//lcd.print ("A");
  delay(500);
}


[Ovu poruku je menjao DSL dana 29.08.2020. u 20:43 GMT+1]
 
Odgovor na temu

DSL
Sweden

Član broj: 47290
Poruke: 1874
*.bredband.comhem.se.



+162 Profil

icon Re: Kontrast kod LCD sa I2C30.08.2020. u 12:13 - pre 43 meseci
Interesantno mi je i da se displej odaziva na 0x78C adresu, kako je data u datasheetu, iako skener vidi 0x3C a ne vidi 0x78..
 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Vanuatu

Član broj: 288510
Poruke: 4542

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+529 Profil

icon Re: Kontrast kod LCD sa I2C30.08.2020. u 14:36 - pre 43 meseci
Pa probaj onda umesto 0x78 da staviš 0c3C
--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
 
Odgovor na temu

DSL
Sweden

Član broj: 47290
Poruke: 1874
*.bredband.comhem.se.



+162 Profil

icon Re: Kontrast kod LCD sa I2C30.08.2020. u 15:05 - pre 43 meseci
Probao sam, naravno i gle čuda, ne odgovara na komande. Ispis se pojavljuje samo kad šaljem na 0x78.
Manje više adresa, jako me kopka zašto ne reaguje na komande...
 
Odgovor na temu

jozimir
Sustar Jozef
Zajecar

Član broj: 19546
Poruke: 64
212.237.189.*



+7 Profil

icon Re: Kontrast kod LCD sa I2C30.08.2020. u 22:08 - pre 43 meseci
Verujem da će ovaj izvod iz datasheet kontrolera malo pomoći i razjasniti stvari.


The sequence is initiated with a START condition (S) from the I2C Interface master, which is followed by the slave address.

.....

After acknowledgement, one or more command words follow which define the status of the addressed slaves.

A command word consists of a control byte, which defines Co and RS, plus a data byte.

The last control byte is tagged with a cleared most significant bit (i.e. the continuation bit Co).

After a control byte with a cleared Co bit, only data bytes will follow.

The state of the RS bit defines whether the data byte is interpreted as a command or as RAM data.





Mislim da je ovo sporno:

Code:
void setup ()
{
  lcd.init ();
  //lcd.setContrast(0);
  Wire.begin();                 // Initialise I2C communication as MASTER
  Wire.beginTransmission(0x78); // Start I2C Transmission
  Wire.write ( 0b01011100 );    // ICON disp on, Booster on, Contrast high byte (2)
                 |
                 '----  0 znači da je poslednja komanda u nizu i da se sledeći bajt 
                         tretira kao karakter koji treba prikazati a NE kao komanda. 
  
  Wire.write ( 0b01101000 );    // Follower circuit internal ON, Amplifier follower ratio 
  Wire.write ( 0b01110000 );    // Contrast low byte (6) 
  Wire.endTransmission();


i da bi trebalo da stoji ovako:

Code:
void setup ()
{
  lcd.init ();
  //lcd.setContrast(0);
  Wire.begin();                 // Initialise I2C communication as MASTER
  Wire.beginTransmission(0x78); // Start I2C Transmission
  Wire.write ( 0b11011100 );    // ICON disp on, Booster on, Contrast high byte (2)  
  Wire.write ( 0b11101000 );    // Follower circuit internal ON, Amplifier follower ratio 
  Wire.write ( 0b01110000 );    // Contrast low byte (6) 
  Wire.endTransmission();
}
 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Vanuatu

Član broj: 288510
Poruke: 4542

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+529 Profil

icon Re: Kontrast kod LCD sa I2C30.08.2020. u 22:54 - pre 43 meseci
Vi'š kumitj, neko umesto tebe čita datasheet s' razumevanjem

李元芝娜
i druga varijanta
李恩中國
--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
 
Odgovor na temu

DSL
Sweden

Član broj: 47290
Poruke: 1874
*.esss.lu.se.



+162 Profil

icon Re: Kontrast kod LCD sa I2C31.08.2020. u 06:44 - pre 43 meseci
Citat:
jozimir:
Verujem da će ovaj izvod iz datasheet kontrolera malo pomoći i razjasniti stvari.

The sequence is initiated with a START condition (S) from the I2C Interface master, which is followed by the slave address.
.....
After acknowledgement, one or more command words follow which define the status of the addressed slaves.
A command word consists of a control byte, which defines Co and RS, plus a data byte.
The last control byte is tagged with a cleared most significant bit (i.e. the continuation bit Co).
After a control byte with a cleared Co bit, only data bytes will follow.
The state of the RS bit defines whether the data byte is interpreted as a command or as RAM data.


Mislim da je ovo sporno:
Code:

.
.
.



i da bi trebalo da stoji ovako:

Code:
void setup ()
{
  lcd.init ();
  //lcd.setContrast(0);
  Wire.begin();                 // Initialise I2C communication as MASTER
  Wire.beginTransmission(0x78); // Start I2C Transmission
  Wire.write ( 0b11011100 );    // ICON disp on, Booster on, Contrast high byte (2)  
  Wire.write ( 0b11101000 );    // Follower circuit internal ON, Amplifier follower ratio 
  Wire.write ( 0b01110000 );    // Contrast low byte (6) 
  Wire.endTransmission();
}


Dobro jutro i hvala na korisnoj sugestiji (Scepo, ne mislim na tebe :-P )
Nazalost, ni ovo nije pokazalo neki vidljiv efekat. Evo testiranog koda. Ubacena je i linija koja je trebalo da ugasi displej ali bez efekta.

Code:


#include <Arduino.h>
#include "ST7036.h"
#include <Wire.h>
ST7036 lcd = ST7036 ( 2, 20, 0x78 ); //adresa displeja je 0x78

void setup ()
{
  lcd.init ();
//lcd.setContrast(0);
Wire.begin();                 // Initialise I2C communication as MASTER
Wire.beginTransmission(0x78); // Start I2C Transmission
Wire.write ( 0b11011100 );    // ICON disp on, Booster on, Contrast high byte (2)  
Wire.write ( 0b11011100 );    // ICON disp on, Booster on, Contrast high byte (2)  
Wire.write ( 0b11101000 );    // Follower circuit internal ON, Amplifier follower ratio 
Wire.write ( 0b10001000 );    // Display off **************************************
Wire.write ( 0b01110000 );    // Contrast low byte (6) 
Wire.endTransmission();

}

void loop ()
{
lcd.print ("8");
Serial.print ("A");
delay(500);
}




Probacu, kad stignem, da usnifam ziv saobracaj i vidim sta se desava kod lcd.init komande, i sta displej detektuje kao validnu komandu, posto ovde ocigledno ignorise ovo sto je dodato... Sudeci prema ST7036.cpp, inicijalizacija se ne razlikuje mnogo od onog sto sam/smo dodali, osim u ovim Func_set_tbl0/1 upisima.

Code:

const uint8_t FUNC_SET_TBL0  = 0x38; // Function set - 8 bit, 2 line display 5x8, inst table 0
const uint8_t FUNC_SET_TBL1  = 0x39; // Function set - 8 bit, 2 line display 5x8, inst table 1




Code:

void ST7036::init () 
{
   size_t retVal; 
   // Initialise the Wire library.
   Wire.begin();
   
   Wire.beginTransmission ( _i2cAddress );
   Wire.write ( (byte)0x0 );   // Send command to the display
   Wire.write ( FUNC_SET_TBL0 );
   delay (10);
   Wire.write ( FUNC_SET_TBL1 );
   delay (10);
   Wire.write ( 0x14 );  // Set BIAS - 1/5
   Wire.write ( 0x73 );  // Set contrast low byte
   Wire.write ( 0x5E );  // ICON disp on, Booster on, Contrast high byte 
   Wire.write ( 0x6D );  // Follower circuit (internal), amp ratio (6)
   Wire.write ( 0x0C );  // Display on
   Wire.write ( 0x01 );  // Clear display
   Wire.write ( 0x06 );  // Entry mode set - increment
   _status = Wire.endTransmission ();
   
   if ( _status == 0 )
   {
      _initialised = true;
   }
}


Ono sto primecujem je da je, npr kod komande (a i kod svih ostalih)

Code:

Wire.write ( 0x6D );  // Follower circuit (internal), amp ratio (6)


MSB bit i dalje 0, a ne jedinica, kako ste sugerisali. (0b01101101)

U svakom slucaju, hvala za ulozeni trud i dobru volju.



[Ovu poruku je menjao DSL dana 31.08.2020. u 07:59 GMT+1]
 
Odgovor na temu

jozimir
Sustar Jozef
Zajecar

Član broj: 19546
Poruke: 64
212.237.189.*



+7 Profil

icon Re: Kontrast kod LCD sa I2C31.08.2020. u 09:20 - pre 43 meseci

Vidim i ja da je u primerima MSB = 0, mada se u tekstu kod slanja niza komandi sugeriše MSB = 1.
Sve je prilično nejasno.

Posmatrajući vaš kod i primer dat u datasheet-u primećujem da u okviru inicijalizacije šaljete

Wire.write ( 0x73 ); // Set contrast low byte

odgovarajući kod u primeru bi bio

I2C_out(0x78);

komanda za kontrast je oblika 0x7X, odnosno ide od 0x70 do 0x7F.

Probajte da tu promenite kontrast.
 
Odgovor na temu

goran_68

Član broj: 89012
Poruke: 932
*.dynamic.isp.telekom.rs.



+81 Profil

icon Re: Kontrast kod LCD sa I2C31.08.2020. u 09:42 - pre 43 meseci
Probaj da nakon poslednje u nizu komandi pošalješ:


Code:

Wire.endTransmission(stop);



Dakle, ovako bi išao setup

Code:

void setup ()
{
  lcd.init ();
//lcd.setContrast(0);
Wire.begin();                 // Initialise I2C communication as MASTER
Wire.beginTransmission(0x78); // Start I2C Transmission
Wire.write ( 0b11011100 );    // ICON disp on, Booster on, Contrast high byte (2)  
Wire.write ( 0b11011100 );    // ICON disp on, Booster on, Contrast high byte (2)  
Wire.write ( 0b11101000 );    // Follower circuit internal ON, Amplifier follower ratio 
Wire.write ( 0b10001000 );    // Display off **************************************
Wire.write ( 0b01110000 );    // Contrast low byte (6) 
Wire.endTransmission(stop);

}

gorankg
 
Odgovor na temu

DSL
Sweden

Član broj: 47290
Poruke: 1874
*.esss.lu.se.



+162 Profil

icon Re: Kontrast kod LCD sa I2C31.08.2020. u 14:27 - pre 43 meseci
Citat:
jozimir:

Vidim i ja da je u primerima MSB = 0, mada se u tekstu kod slanja niza komandi sugeriše MSB = 1.
Sve je prilično nejasno.

Posmatrajući vaš kod i primer dat u datasheet-u primećujem da u okviru inicijalizacije šaljete
Wire.write ( 0x73 ); // Set contrast low byte
odgovarajući kod u primeru bi bio
I2C_out(0x78);
komanda za kontrast je oblika 0x7X, odnosno ide od 0x70 do 0x7F.

Probajte da tu promenite kontrast.


Probao. Kao sto se da videti iz koda koji mi je Scepa dao, sav opseg ovih nivoa kontrasta je "propitivan". Niti ceprkanje kontrasta niti ostale komande ne prolaze...

Citat:
goran_68:
Probaj da nakon poslednje u nizu komandi pošalješ:


Code:

Wire.endTransmission(stop);



Dakle, ovako bi išao setup

Code:

void setup ()
{
  lcd.init ();
//lcd.setContrast(0);
Wire.begin();                 // Initialise I2C communication as MASTER
Wire.beginTransmission(0x78); // Start I2C Transmission
Wire.write ( 0b11011100 );    // ICON disp on, Booster on, Contrast high byte (2)  
Wire.write ( 0b11011100 );    // ICON disp on, Booster on, Contrast high byte (2)  
Wire.write ( 0b11101000 );    // Follower circuit internal ON, Amplifier follower ratio 
Wire.write ( 0b10001000 );    // Display off **************************************
Wire.write ( 0b01110000 );    // Contrast low byte (6) 
Wire.endTransmission(stop);

}


Komanda sa (stop) kao parametrom, ne prolazi.
Code:

stop was not declared in this scope



 
Odgovor na temu

DSL
Sweden

Član broj: 47290
Poruke: 1874
*.bredband.comhem.se.



+162 Profil

icon Re: Kontrast kod LCD sa I2C31.08.2020. u 22:15 - pre 43 meseci
Mali update...

Nakacio sam Bus pirate i sa njim uspešno njakam displej, sve komande prolaze, palim gasim displej i kursor, kontrolišem kontrast...
Sa MCU ovo is nekog razloga ne prolazi. Sta je razlog, ne razaznajem.
Pokusao sam sa BP da snimam sta se dešava na I2C busu ali cenim da je BP prespor da uprati komunikaciju obzirom da mi za jednu te istu sekvencu puštenu sa MCU daje nekonzistentne rezultate capture-inga.
Imam negde logic analyser, moram njega isukati...Nea mi druge...
 
Odgovor na temu

jozimir
Sustar Jozef
Zajecar

Član broj: 19546
Poruke: 64
212.237.189.*



+7 Profil

icon Re: Kontrast kod LCD sa I2C31.08.2020. u 23:49 - pre 43 meseci
U uputstvu za inicijalizaciju kontrolera za I2C komunikaciju data su i vremena koja je potrebno ispoštovati.
Moguće da je tako nešto u pitanju.

Pogledaj priloženu sliku.

Inače interesantno je da se proces inicijalizacije malo razlikuje u zavisnosti od načina komunikacije.
Prikačeni fajlovi
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: Kontrast kod LCD sa I2C

Strane: 1 2

[ Pregleda: 3396 | Odgovora: 21 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.