Stránka 1 z 1
LCD a I2C - Bílé čtverečky
Napsal: 13 pro 2017, 23:18
od cadej
Zdravím,
po delší době jsem se vrhnul na arduino.
Chci udělat projekt s použitím LCD displaye, ale ouha, nedaří se mi display zprovoznit.
Display je 16x2 a má převodník s čipem PCF8574T.
Podle I2C scaneru má adresu 0x27.
Toto jsem vše nastavil, ale nedaří se mi ani "Hello word".
Display dříve fungoval bez problému.
Vím že jsem měl již před tím problémy tohoto rázu, které se mi podařilo vyřešit jinou knihovnou, ale od té doby proběhla změna počítače, tudíž "funkční" knihovnu již nemám.

Display ovšem mohu ovládat, nemám problém s ním blikat pomocí setBacklight, jen v prvním řádku jsou vidět jen bílé čtverečky...
Neví někdo nějakou radu? Trávím řešením už asi 4 den po práci až do noci a furt nic, nechce se mi věřit, že by arduino přestalo v novějším ide podporovat I2C LCD...Otestoval jsem to i na druhém-totožném displayi a chová se stejně..
Díky moc za radu.

Re: LCD a I2C - Bílé čtverečky
Napsal: 14 pro 2017, 04:07
od AstroMiK
Možná je to blbost, ale podobný problém jsem vyřešil pomocí trimru na displeji, který nastavuje kontrast.
Ale zase je divný, že je to jen v první řádce.
Ten kontrast je závislý na napájecím napětí, takže se může stát, že se bude projevovat i na různých displejích.
Re: LCD a I2C - Bílé čtverečky
Napsal: 14 pro 2017, 12:50
od zbysek
Ten trimr na jas displeje by to měl vyřešit.
Sent from my iPhone using Tapatalk
Re: LCD a I2C - Bílé čtverečky
Napsal: 16 pro 2017, 11:18
od cadej
Trimr už jsem zkoušel a nic.
Co vím, tak mi to dřív fungovalo ve starším IDE, zkusil jsem i nahrát starší projekt, na kterém display fungoval a je to stejné...
Na jednom starším jsem neměl trimr, tak jsem tam dopájel pevný odpor, se kterým to vždy fungovalo, nyní ale nic.

Re: LCD a I2C - Bílé čtverečky
Napsal: 16 pro 2017, 18:40
od martinius96
Kód: Vybrat vše
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27 // Define I2C Address where the PCF8574A is
// Address can be changed by soldering A0, A1, or A2
// Default is 0x27
// map the pin configuration of LCD backpack for the LiquidCristal class
#define BACKLIGHT_PIN 3
#define En_pin 2
#define Rw_pin 1
#define Rs_pin 0
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7
LiquidCrystal_I2C lcd(I2C_ADDR,
En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin,
BACKLIGHT_PIN, POSITIVE);
const int spustacresettlacidlo = 12; //The pin for spustacresettlacidlo
long lastPressedspustacresettlacidlo = 0; //Last millisecond we pressed spustacresettlacidlo
boolean run = false; //Should the system run?
int spustacresettlacidloState = LOW; //The value the spustacresettlacidlo reads
int spustacresettlacidloCurrState = LOW; //The last value of spustacresettlacidlo
long timer = 0; //The timer
int second = 0;
int minute = 0;
int tenth = 0;
void setup() {
lcd.begin(16, 2); // intialise the LCD.
lcd.setBacklight(HIGH); // Turn on backlight, LOW for off
pinMode(spustacresettlacidlo, INPUT);
lcd.setCursor(0,0);
lcd.print("00:00:0 L");
lcd.setCursor(0,1);
lcd.print("00:00:0 P");
}
void tickClock() {
Serial.println(millis() /10);
if((timer - millis()/100) >= 100 || timer == 0) {
tick();
timer = millis()/100;
}
}
void loop() {
tickClock(); //Start ticking the clock
spustacresettlacidloState = digitalRead(spustacresettlacidlo);
checkStart();
}
void checkStart() {
if(spustacresettlacidloState != spustacresettlacidloCurrState) { //Check if the button state has changed
if(spustacresettlacidloState == HIGH && (millis()-lastPressedspustacresettlacidlo) > 100 || lastPressedspustacresettlacidlo == 0) {
lastPressedspustacresettlacidlo = millis();
run = !run; //Switch the running state
}
}
spustacresettlacidloCurrState = spustacresettlacidloState; //Set the current state equals the button state
}
void tick() {
if(run) {
updateLCD();
if(tenth == 9) {
tenth = 0;
if(second == 59) {
second = 0;
minute++;
} else {
second++;
}
} else {
tenth++;
}
}
}
void updateLCD() {
//
lcd.setCursor(0,0);
if(minute < 10) { // If hour does not have 2 digits
lcd.print("0");
}
lcd.print(minute, DEC);
lcd.print(":");
if(second < 10) { // If minute does not have 2 digits
lcd.print("0");
}
lcd.print(second, DEC);
lcd.print(":");
lcd.print(tenth, DEC);
//
lcd.setCursor(0,1);
if(minute < 10) { // If hour does not have 2 digits
lcd.print("0");
}
lcd.print(minute, DEC);
lcd.print(":");
if(second < 10) { // If minute does not have 2 digits
lcd.print("0");
}
lcd.print(second, DEC);
lcd.print(":");
lcd.print(tenth, DEC);
}
Knižnica:
https://github.com/fdebrabander/Arduino ... 2C-library
S knižnicou si nie som istý, či je to tá, ktorú som mal. Keď tak skús ešte niekde pohľadať. Je to niekoľko mesačný sketch a mám preinštalovaný Windows. Sketch robil stopky na desatiny sekundy. Minimálne by ti to malo vykresliť 2 časy pod seba:
00:00:0 L.PRUD
00:00:0 P.PRUD
Re: LCD a I2C - Bílé čtverečky
Napsal: 16 pro 2017, 21:43
od cadej
Tak jsem to našel!
Nakonec jsme našel funkční knihovnu a jede to parádně.
Pro ostatní:
https://github.com/marcoschwartz/LiquidCrystal_I2C