Operácie

LCD displej s radičom HD44780: Rozdiel medzi revíziami

Z SensorWiki

(Pripojenie)
Riadok 22: Riadok 22:
 
<source lang="arduino">
 
<source lang="arduino">
 
#include <LiquidCrystal.h>
 
#include <LiquidCrystal.h>
LiquidCrystal lcd (2,3,4,9,10,11,12);
+
// connection      RS R/W E D4 D5 D6 D7
 
+
LiquidCrystal lcd ( 2, 3,4, 9,10,11,12);
// make some custom characters:
 
byte heart[8] = {
 
  0b00000,
 
  0b01010,
 
  0b11111,
 
  0b11111,
 
  0b11111,
 
  0b01110,
 
  0b00100,
 
  0b00000
 
};
 
  
 +
// define some user characters
 
byte smiley[8] = {
 
byte smiley[8] = {
 
   0b00000,
 
   0b00000,
Riadok 44: Riadok 34:
 
   0b10001,
 
   0b10001,
 
   0b01110,
 
   0b01110,
   0b00000
+
   0b00000 };
};
 
  
byte frownie[8] = {
+
byte step1[8] = {
   0b00000,
+
   0b01100,
   0b00000,
+
   0b01100,
  0b01010,
 
  0b00000,
 
  0b00000,
 
 
   0b00000,
 
   0b00000,
 
   0b01110,
 
   0b01110,
   0b10001
+
   0b11100,
};
+
  0b01100,
 +
  0b11010,
 +
  0b10011};
  
byte armsDown[8] = {
+
byte step2[8] = {
    B01100,
+
  0b01100,
    B01100,
+
  0b01100,
    B00000,
+
  0b00000,
    B01110,
+
  0b01100,
    B11100,
+
  0b01100,
    B01100,
+
  0b01100,
    B11010,
+
  0b1100,
    B10011
+
  0b01110};
};
 
 
 
byte armsUp[8] = {
 
 
 
    // Run position 2
 
    B01100,
 
    B01100,
 
    B00000,
 
    B01100,
 
    B01100,
 
    B01100,
 
    B01100,
 
    B01110};
 
  
 
void setup() {
 
void setup() {
   // initialize LCD and set up the number of columns and rows:
+
   lcd.begin(16, 2);    // init LCD + set number of columns and rows
  lcd.begin(16, 2);
 
  
  // create a new character
+
   lcd.createChar(1, smiley);   // create a new characters
  lcd.createChar(0, heart);
+
   lcd.createChar(3, step1);
  // create a new character
+
   lcd.createChar(4, step2);
   lcd.createChar(1, smiley);
 
  // create a new character
 
  lcd.createChar(2, frownie);
 
  // create a new character
 
   lcd.createChar(3, armsDown);
 
  // create a new character
 
   lcd.createChar(4, armsUp);
 
  
  // set the cursor to the top left
+
   lcd.setCursor(0, 0);         // set the cursor to the top left
   lcd.setCursor(0, 0);
 
 
 
  // Print a message to the lcd.
 
  lcd.write(byte(1)); // when calling lcd.write() '0' must be cast as a byte
 
  lcd.print(" UAMT FEI STU ");
 
  lcd.write((byte)1);
 
  
 +
  lcd.write(byte(1));          // smiley
 +
  lcd.print(" UAMT FEI STU ");  // normal text
 +
  lcd.write((byte)1);          // smiley
 
}
 
}
  
 
void loop() {
 
void loop() {
  lcd.setCursor(2, 1);
+
    lcd.setCursor(2, 1);         // set curspr to line 2 col 3
  // print the number of seconds since reset:
+
     lcd.print("time: ");         // print the number of seconds since reset:
     lcd.print("time: ");
 
 
     lcd.print(millis() / 1000);
 
     lcd.print(millis() / 1000);
  // read the potentiometer on A0:
+
    lcd.setCursor(12, 1);
  int sensorReading = analogRead(A0);
+
    lcd.write(3);               // draw the little man
  // map the result to 200 - 1000:
+
    delay(delayTime);
  int delayTime = 350; //map(sensorReading, 0, 1023, 200, 1000);
+
    lcd.setCursor(12, 1);
  // set the cursor to the bottom row, 5th position:
+
    lcd.write(4);
  lcd.setCursor(12, 1);
+
    delay(delayTime);
  // draw the little man, arms down:
+
}
  lcd.write(3);
+
</source></tab>
  delay(delayTime);
 
  lcd.setCursor(12, 1);
 
  // draw him arms up:
 
  lcd.write(4);
 
  delay(delayTime);
 
 
}</source></tab>
 
 
<tab  name="AVR C"><source lang="cpp">
 
<tab  name="AVR C"><source lang="cpp">
  

Verzia zo dňa a času 13:46, 29. január 2021

Pripojenie

Schéma zapojenia

MIPS lcdDemoSchema01.png
Schéma pripojenia LCD displeja k procesoru.

Pokúste sa najprv pripojiť displej len podľa schémy zapojenia. Ak sa vám to nepodarí, alebo si chcete byť naistom, skontrolujte si zapojenie aj podľa zapojovacej schémy.

MIPS lcdDemoSchema02.png
Schéma pripojenia vodoočov LCD displeja k procesoru.


To, či máte displej pripojený správne si môžete vyskúšať týmto demo programom, ktorý preložíte a nahráte z prostredia Arduino.

#include <LiquidCrystal.h>
// connection      RS R/W E D4 D5 D6 D7
LiquidCrystal lcd ( 2,  3,4, 9,10,11,12);

// define some user characters
byte smiley[8] = {
  0b00000,
  0b00000,
  0b01010,
  0b00000,
  0b00000,
  0b10001,
  0b01110,
  0b00000 };

byte step1[8] = {
  0b01100,
  0b01100,
  0b00000,
  0b01110,
  0b11100,
  0b01100,
  0b11010,
  0b10011};

byte step2[8] = {
  0b01100,
  0b01100,
  0b00000,
  0b01100,
  0b01100,
  0b01100,
  0b1100,
  0b01110};

void setup() {
  lcd.begin(16, 2);    // init LCD + set number of columns and rows

  lcd.createChar(1, smiley);    // create a new characters
  lcd.createChar(3, step1);
  lcd.createChar(4, step2);

  lcd.setCursor(0, 0);          // set the cursor to the top left

  lcd.write(byte(1));           // smiley
  lcd.print(" UAMT FEI STU ");  // normal text
  lcd.write((byte)1);           // smiley 
}

void loop() {
    lcd.setCursor(2, 1);         // set curspr to line 2 col 3
    lcd.print("time: ");         // print the number of seconds since reset:
    lcd.print(millis() / 1000);
    lcd.setCursor(12, 1);
    lcd.write(3);                // draw the little man
    delay(delayTime);
    lcd.setCursor(12, 1);
    lcd.write(4);
    delay(delayTime);
}
ToDo

Na displeji by sa vám mal zobraziť text, počítadlo a jednoduchá animácia ako na obrázku

MIPS lcdDemoFoto.jpg
Schéma pripojenia vodoočov LCD displeja k procesoru.


Q: Čo s nepoužitými vstupmi?

A1: pripojiť na definovanú úroveň, najlepšie cez pull-up/pull-down rezistor.

A2: Keďže podľa datasheetu[REF 1] má riadiaci obvod Hitachi HD44780 zapojené pull-upy interne, tak nie sú potrebné.

A3: Keďže však nevieme, aký riadiaci čip je v skutočnosti použitý, pre istotu ich môžeme zapojiť.


Vysvetlivky, prečo sú nezapojené vstupy nebezpečné:

Nezapojené (plávajúce) vstupy sú oveľa citlivejšie na ESD (elektrostatický výboj) a taktiež zvyšujú zbytočne spotrebu obvodu. Odporúča sa pripojenie cez tzv. pull-up odpor priamo na zem, prípadne aj bez odporu. Druhá možnosť, pripojenie na kladné napájacie napätie je tiež možná, ale v tomto prípade sa vynechanie pull-up rezistora neodporúča.

Toto je jeden z príkladov mnohých takýchto odporúčaní[REF 2] priamo od firmy NxP:

5.3 Line Termination and Pullup/Pulldown Resistors
  • Line termination and pullup/pulldown resistors may be required to guarantee voltage levels at high impedance or unused pins (do not tie directly to VDD/VSS)
  • Floating input pins may store intermediate voltage levels that would cause current drain on internal logic gates
  • Floating pins are also prone to pick up noise and suffer electrostatic discharge stress (ESD)


Literatúra

  1. Hitachi HD44780U Dot Matrix Liquid Crystal Display Controller/Driver. ADE-207-272(Z), Japan, 1999.
  2. Murray Stewart: AN3393: MC9RS08KA Application Hints. NxP/Freescale Semiconductor Application Note, 2007.