Tijekom pandemije COVID-19, e-radionica.com nastavlja s normalnim radom. Sve mjere opreza se redovno poduzimaju te su naručeni paketi sigurni. Opcija dostave uslugama Hrvatske Pošte i osobno preuzimanje privremeno su onemogućeni iz sigurnosnih razloga.

LCD I2C debug

Uvod

 
Za one koji su imali porbleme upogoniti LCD s I2C adapetrom pokazati ćemo jednostavan debug. Iskoristiti ćemo prostor na ovom tutorialu da proširimo znanje o LCD libraryu i mogućnostima koje pruža. Krenimo pa ćemo vidjeti gdje će nas odvesti...
 
I2C LCD library pronađite ovdje.
 
LCD IIC

I2C adresa

 
I2C adapter će nam uvelike pomoći pri spajanju LCD na Croduino. Problem nastaje kada moramo zadati postavke u softwareu. Taj dio koda izgleda otprilike ovako:

// Postavke pinove koje I2C adapter koristi za LCD konekciju:
// addr,en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

Pinout je kod svakog kontrolera jednak. Ono što vrlo vjerovatno izaziva problem u vašem kodu je addr dio, tj. I2C adresa. Srećom, postoji vrlo jednostavno rješenje - Wire library dolazi s Arduino IDE softwareu i omogućuje nam da skeniramo sve I2C uređaje prikljućenje na Arduino s kojim komuniciramo odnosno njihove adrese. Evo ga:

#include "Wire.h"
void setup() {
Serial.begin (115200);
Serial.println ("I2C tragač. Tražim ...");
byte count = 0;
Wire.begin();
for (byte i = 8; i < 120; i++)
{
Wire.beginTransmission (i);
if (Wire.endTransmission () == 0)
{
Serial.print ("Pronađena adresa: ");
Serial.print (i, DEC);
Serial.print (" (0x");
Serial.print (i, HEX);
Serial.println (")");
count++;
delay (1);
}
}
Serial.print ("Pronađen ");
Serial.print (count, DEC);
Serial.println (" uređaj(a).");
}
void loop() {}

Klik na Serial Monitor i evo magije:
 
I2C skener
Pronađen je 1 uređaj s adresom 0x3F, u postavkama mijenjam adrr u 0x3F:

// Postavke pinove koje I2C adapter koristi za LCD konekciju:
// addr,en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

Zapravo, idemo odmah zapisati nešto na LCD:

#include "Wire.h"
#include "LiquidCrystal_I2C.h"
// Postavke pinove koje I2C adapter koristi za LCD konekciju:
// addr,en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
void setup()
{
lcd.begin(20,4); // koristimo lcd s 20 x 4
lcd.backlight(); // palimo pozadinsko osvjetljenje
lcd.setCursor(0,0); // postavimo kursor na prvi red i prvi stupac
lcd.print("Bok Croduino!"); // i, nravno, pozdravna poruka
}
void loop()
{ }

Mijenjanje I2C adrese

 
Prvi bajt I2C je zadužen za start i adresu, odnosno 1 bit kojim signaliziramo početak i 7bitova za adresu. Ukupno 128 mogućih adresa. Ako ipak nekih slučajem imamo dvije iste adrese na Croduinu nećemo moći komunicirati s oba uređaja, pa moramo promjeniti adresu jednom. Neki LCD I2C adapteri imaju mogućnost mijenjanja adrese, pogledaj sliku:
 
I2C adresa
Spajanjem ovih padova mijenjati ćemo adresu uređaja, prema datasheetu adrese su (0 - spojeni padovi, 1 nema kontakta):
 
Promjene I2C adresa
Drugi način je korištenjem I2C muliplexera, o čemu nekom drugom zgodom.

Leave a Reply