Uživatelské nástroje

Nástroje pro tento web


arduino-lcdxpl

Toto je starší verze dokumentu!


Arduino LCD pro X-Plane

Zapojení LCD

  • na ebay jsem koupil za kilo LCD Winstar 2004A
    • 20 znaků, 4 rádky
    • response time: 200ms Rise, 200ms Fall (celkem tedy odezva 400ms - pomalé překreslování!!)
    • pozorovací úhly V/H 20/60
  • připojuje se přes standardních 16 vývodů:
    • VSS - napájení obvodu (GND)
    • VD0 - napájení obvodu (+5V)
    • V0 - napájení pixelů (kontrast)
    • RS - výběr registru, do kterého se bude zapisovat
    • R/W - výběr režimu čtení/zápis
    • E - signalizace zápisu do registru
    • D0-D7 - datové linky, primárně pro předávání kódu znaku
    • A,K - ovládání podsvícení (+anoda, -katoda)
  • existuje i verze s i2c rozhraním (na vývody napojen další čip)
  • rozdíl mezi 4 bit (D4-D7) a 8 bit (D0-D7) režimem by měl být v rychlosti
  • pokud se ale předávají celé znaky (ne custom symboly), tak je to prý zanedbatelné
  • prováděné instrukce (kurzívou jsou označeny instrukce navíc v 4 bit režimu):
    • put the data in a register
    • output the upper four bits of datadata
    • pulse the enable line
    • (IMPORTANT: no delay is needed here)
    • shift or otherwise manipulate the data
    • output the data
    • pulse the enable line
    • wait until the controller is ready for the next byte of information

kód pro LCD

  • s využitím LiquidCrystal knihovny je to velice snadné
  • konstruktor LiquidCrystal má několik variant
    • LiquidCrystal(rs, enable, d4, d5, d6, d7)
    • LiquidCrystal(rs, rw, enable, d4, d5, d6, d7)
    • LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7)
    • LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7)
  • jako číslo pinu se dává označení z destičky plošných spojů. Lze použít i analogové piny A1-A6.
LiquidCrystal lcd(2, 3, 4, 6, 8, 9);
 
void setup()
{
  lcd.begin(20,4);
  lcd.print("    Hello   ");
  lcd.setCursor(0,1);
  lcd.print("   World!!  ");
}
 
void loop() {}

Sériová linka

  • arduino se připojuje k PC přes USB, které v sobě obsahuje rovnou sériovou linku
  • hardwarové není tedy potřeba nic přepojovat
  • práce se sériovou linkou je hodně intuitivní
void setup()
{
  Serial.begin(9600); 
}
 
void loop() {
 
  if(Serial.available() > 0) {
    char c = Serial.read();
    Serial.write("Received: ");
    Serial.write(c);
    Serial.write('\n');
  }
}
  • sériová linka má vyrovnávací paměť cca 70 znaků
  • funkce available kontrolu obsah tohoto bufferu
  • existují i funkce pro čtení více znaků najednou
  • lepší je ale možná číst znaky postupně do nějakého svého bufferu, aby se dlouho nečekalo
  • pro zápis existuje i funkce print nebo println. Podporuje více datových typů než obyčejný write.

Rotační enkodéry

  • zkusil jsem použit knihovnu Encoder
  • je k dispozici ve správci knihoven v Arduino IDE
  • použití je velice jednoduché, vesměs pouze tři příkazy
    • Encoder myEnc(pin1, pin2) - vytvoření objektu, enkodérů může být víc.
    • myEnc.read() - přečtení hodnoty čítače - tj. počet otáček doprava (+) nebo doleva (-)
    • myEnc.write(newPosition) - nastavení hodnoty, například po přečtení hodnoty
  • doporučuje se oba piny připojit na digitální vstup s interrept
    • u leonarda (pro micro) to jsou prý piny 0 (TX), 1 (RX), 2 (SDA), 3 (SDL), 7
  • knihovna je velice chytrá a sama pozná, zda zadané piny jsou interrupt ready :)
  • čítač počítá všechny přechody,
    • tzn. že jedno lupnutí odpovídá vlastně číslu 4
    • abych eliminoval chyby, tak číslo 4 beru jako jednu otáčku
    • u AVR ATmega8 jsem používal jen jeden přechod, ten nejlepší
  • k interrupt pinu mám připojen jen jeden rotační enkodér, jedním drátem, a chová se to fakt lépe
  • na druhém jsem měl připojeny kondenzátory a mám pocit, že to bez nich funguje lépe (u ATmega8 to bylo naopak)
arduino-lcdxpl.1457271435.txt.gz · Poslední úprava: (upraveno mimo DokuWiki)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki