LCD a I2C - Bílé čtverečky

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Odpovědět
cadej
Příspěvky: 7
Registrován: 13 pro 2017, 23:11

LCD a I2C - Bílé čtverečky

Příspěvek od cadej » 13 pro 2017, 23:18

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. :)

AstroMiK
Příspěvky: 649
Registrován: 08 pro 2017, 19:05

Re: LCD a I2C - Bílé čtverečky

Příspěvek od AstroMiK » 14 pro 2017, 04:07

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.

zbysek
Site Admin
Příspěvky: 125
Registrován: 22 úno 2017, 15:18

Re: LCD a I2C - Bílé čtverečky

Příspěvek od zbysek » 14 pro 2017, 12:50

Ten trimr na jas displeje by to měl vyřešit.


Sent from my iPhone using Tapatalk

cadej
Příspěvky: 7
Registrován: 13 pro 2017, 23:11

Re: LCD a I2C - Bílé čtverečky

Příspěvek od cadej » 16 pro 2017, 11:18

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. ;)

martinius96
Příspěvky: 585
Registrován: 01 srp 2017, 19:29
Bydliště: Poprad
Kontaktovat uživatele:

Re: LCD a I2C - Bílé čtverečky

Příspěvek od martinius96 » 16 pro 2017, 18:40

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

cadej
Příspěvky: 7
Registrován: 13 pro 2017, 23:11

Re: LCD a I2C - Bílé čtverečky

Příspěvek od cadej » 16 pro 2017, 21:43

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

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 3 hosti