Fórum témák

» Több friss téma
Fórum » Karakteres LCD-k meghajtása, vezérlése
Lapozás: OK   15 / 17
(#) Skori válasza Pethical hozzászólására (») Márc 6, 2021 / 1
 
Kivéve ugye, ha az a 6 (vagy éppen 10) láb 3 különböző portra van bekötve... Bár akkor is meg lehet sokkal gyorsabbra írni. Valami olyasmit sejtek a háttérben, hogy mondjuk az arduino saját könyvtára is a digitalWrite() függvényt használja, ami ugyan processzorfüggetlen, és sokmindent lekezel, de cserébe lassú. Ez a megoldás esetleg futási időben ellenőriz sokmindent, míg a portok közvetlen írásánál ez elmarad, ezért sokkal gyorsabb lesz, de cserébe minden processszor esetén kicsit másképp kell megoldani.
(#) Pethical válasza Skori hozzászólására (») Márc 6, 2021 /
 
Igen, ez szerintem is így van. Aztán mivel karakteres LCD-n ritkán játszunk le arduinoval full hd filmeket és az RPG játékokhoz sem terjedt el igazán ez a megjelenítő, így szerintem nem okozhat gondot. Normál használat mellett tök mindegy, hogy arduino, direkt írás, vagy bármi, ahhoz mindig elég lesz a sebesség.
(#) Skori válasza Pethical hozzászólására (») Márc 7, 2021 /
 
Van benne valami. A direkt meghajtáshoz, és az i2c-hez van arduino könyvtár, viszont a léptetőregiszteres megoldáshoz nincs, ezért meg kellett írni hozzá.
De ezek után le fogom mérni pontosan a sebességét, és közzéteszem itt. A végén esetleg kiderül, hogy még azzal lesz a leggyorsabb , (vagy az, hogy mégsem )
A hozzászólás módosítva: Márc 7, 2021
(#) Pethical válasza Skori hozzászólására (») Márc 7, 2021 /
 
Nem gondolnám, hogy lassítani rajta. A shift regiszter nagyon hasonló az i2c-hez, hiszen mind a kettő soros kommunikáció, órajellel, így szerintem a shift regiszteres meghajtás egy teljesen jó, olcsó és egyszerű alternatíva lehet erre. Én kifejezetten szeretem használni a shift regiszter amikor lábakat akarok megsprlórolni.
(#) Kovidivi válasza Skori hozzászólására (») Márc 7, 2021 /
 
A digitalwrite annyira azért nem csigalassú. Sok része még fordítási időben lefordul (ha megnézed, csomó ifdef-fel van tele), néhány dolgot ellenőriz csak le, hogy PWM-e a láb, meg talán, hogy kimenet-e. Ez csak néhány órajel pluszban, annyira nem para szerintem. Le lehet mérni, mekkora frekvenciát tud egy
digitalwrite(3,HIGH); digitalwrite(3,LOW); magából kipréselni, meg egy direkt portírás mit tud. De gondolom ezt már mások megtették.
Bővebben: Link
Azt írja, 4-5us (3.4us-ot is találtam már) ideig jelenik meg a low és a high jel is a kimeneten. Tehát a periódusidő 8-10us, ami 100-125kHz-nek felel meg, 16MHz mellett.
Direct port access-szel is legalább 2 órajelig tart a port írása, szóval 16MHz mellett ez 2x0.0625us, vagyis a periódusidő: 0.125us, ez 8MHz lenne, nem tudom, hogy ez lehetséges-e... Timerrel gondolom megoldható, de sima portírással? Le kellene tesztelni... 1MHz tuti menne, mondjuk az is kb. 8-10x gyorsabb, mint a digitalwrite() fv. Mondjuk ekkora sebességnél már a megszakítások miatt lesznek hosszabb magas vagy alacsony részek, szóval megkérdőjelezhető a létjogosultsága az ilyen gyors portírásnak, mikor nem mindig garantálható ez a sebesség (a millis() megszakítása mindig fut!).

Én próbálgattam, hogy az LCD-t gyorsan frissítettem, a folyadékkristály nem tudja követni ezt a gyors változást! Vegül arra jutunk, hogy se nem a kommunikáció típusa, se nem az LCD meghajtója a lassú, hanem a folyadékkristály megjelenési ideje a korlátozó tényező.
(#) Skori válasza Kovidivi hozzászólására (») Márc 7, 2021 /
 
Pár éve mértem ilyeneket, aztán találtam egy oldalt,amin sokféle processzor esetében megmérték, mekkora sebességkülönbség van a direkt port elérés, és a digitalwrite között. emlékeim szerint: a legnagyobb sebesség különbség ATMEL procik esetén (Arduino nano) volt méghozzá kb. 20x-os, Arduino DUE esetében mértem kb 10x-es sebesség különbséget, a legkisebb különbség pedig ESP8266 esetén volt (a pontos értékre sajna nem emlékszem).

A saját méréseim, amit írsz, és amit erről a neten találtam, nagyjából egybevágnak. A léptetőregiszteres (két vezetékes) megoldásnál kb. 1µs-os időállandót használok az adat/órajel "szétválasztásához", ezért szükség van rá, hogy ennél sokkal keskenyebb impulzust is ki tudjon adni az MCU. Ez azt jelenti, hogy a digitalWrite(), a néhány µs válaszideje miatt nem alkalmas a feladatra, közvetlen port írással viszont könnyedén megoldható. A keskeny impulzusok ellenére, még hosszú vezetékeket használva is üzembiztos, és jól működik ez a megoldás.

Az időnek akkor van (esetleg) jelentősége, ha nem megszakításosan kezeljük a kijelzőt, mert akkor nem mindegy mennyi processzoridőt vesz el. Bár ha úgy nézzük, akkor esetleg a megszakításban eltöltött idő sem közömbös.

A 3 vezetékes megoldás esetén nincs feltétlenül szükség ilyen gyors vezérlése, ez esetben a digitalWrite() használata "csak" annyi hátránnyal jár, hogy 10x lassúbb lesz. Nyilván van amikor ennyi belefér, és van amikor nem.
A hozzászólás módosítva: Márc 7, 2021
(#) Jonni hozzászólása Márc 10, 2021 /
 
Van 2 db lcd-m az egyik ilyen 16x2-es a másik valami ilyesmi 40x2-es. Azt akartam , hogy magyarul írjanak de csak a 16x2-es tökéletes. A 40x2-is jó lenne de az á betű helyett krixkraxot ír a többi ékezetes betű ennél is jó. Miért van ez ?
(#) mateatek válasza Jonni hozzászólására (») Márc 10, 2021 /
 
Azért van, mert több éle karakterkészlettel készülnek ezek a kütyük.
Link.
(#) Jonni válasza mateatek hozzászólására (») Márc 10, 2021 /
 
Köszi. Akkor szerinted mondjak le az á betűről? Vagy valami hexadecimális kódot kell megadni?
Pont a 40x2-es be van építve még a számát sem tudom megnézni.
(#) mateatek válasza Jonni hozzászólására (») Márc 10, 2021 /
 
Mindkettőnél tudsz tölteni karaktereket a CGRAM-ba. Amelyik karakterkészletébe nincsen, oda töltsél.
(#) Jonni válasza mateatek hozzászólására (») Márc 10, 2021 /
 
Ezt sejtettem de honnan tudom hol van üres hely? 40x2esnél próbáltam 0, 1, 2, 8 helyeket de mind krix krax ha á-t akarok írni. Most megnézem más betűvel
(#) Kovidivi válasza Jonni hozzászólására (») Márc 10, 2021 /
 
Ne az üres helyeket keresgéld, hanem nézz meg egy tutorialt, hogyan kell az egyéni karaktereket használni, mert látom, hogy nem tudod. Kiírásnál nem az á betűt írod ki, hanem csak a sorszámát! Á betűt nem is látsz sem a szövegben, sem a programodban (maximum ha te beleírod mint saját komment).
(#) Jonni válasza Kovidivi hozzászólására (») Márc 10, 2021 /
 
Tudom használni. A 16x2-esen jó is csak a 40x2-esen krix krax az á-betű
(#) Jonni válasza Kovidivi hozzászólására (») Márc 10, 2021 /
 
  1. [code=c]
  2. #include <LiquidCrystal.h>  
  3. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
  4.   byte a1[8] = {B10, B100, B1110, B1, B1111, B10001, B1111}; //á
  5.   byte e1[8] = {B10, B100, B1110, B10001, B11111, B10000, B1110}; //é
  6.   byte i1[8] = {B10, B100, B0, B1110, B100, B100, B1110}; //í
  7.   byte o1[8] = {B100, B100, B0, B1110, B10001, B10001, B1110}; //ó
  8.   byte o2[8] = {B1010, B0, B1110, B10001, B10001, B10001, B1110}; //ö
  9.   byte o3[8] = {B1010, B1010, B0000, B1110, B10001, B10001, B1110}; //ő
  10.   byte u1[8] = {B0010, B0100, B10001, B10001, B10001, B10011, B1101};//ú
  11.   byte u2[8] = {B1010, B0, B0, B10001, B10001, B10011, B1101}; //ü
  12.   byte u3[8] = {B1010, B1010, B0, B10001, B10001, B10011, B1101}; //ű
  13.  
  14. void setup() {
  15.   lcd.begin(40, 2);                
  16.   lcd.createChar(2, a1); //á
  17.   lcd.createChar(7, e1); //é
  18.   lcd.createChar(5, o2); //ö
  19.   lcd.createChar(3, o1); //ó
  20.   lcd.createChar(1, o3); //ő
  21.   //lcd.createChar(5, u1); //ú
  22.   lcd.createChar(6, u2); //ü
  23. // lcd.createChar(7, u3); //ű
  24.    lcd.setCursor(10, 1);                         // kurzor pozició
  25.   lcd.print("V\003g\007ll\002s \005 \001 \006");  // vógéll(krix)s ö ő ü
  26.  
  27. }
  28.  
  29. void loop() {
  30.  
  31. }
[/code]
(#) Kovidivi válasza Jonni hozzászólására (») Márc 10, 2021 /
 
"("V\003g\007ll\002s \005 \001 \006")" - ez elég katyvasz, szerintem te sem tudod, mi akar lenni.
Helyette használhatnád az egyszerű, szép, szokásos lcd.write(1); parancsot, ahol a szám a karakter sorszámát jelenti...
(#) Jonni válasza Kovidivi hozzászólására (») Márc 10, 2021 /
 
Pontosabban... hogy is?
(#) Kovidivi válasza Jonni hozzászólására (») Márc 10, 2021 /
 
Megnézted a google első találatát? "lcd.write(byte(0));".
(#) Jonni válasza Kovidivi hozzászólására (») Márc 10, 2021 /
 
Nem 1 karaktert akarok kiíratni hanem egy szöveget.
(#) majkimester válasza Jonni hozzászólására (») Márc 10, 2021 /
 
Elméletben amit csinálnod kellene:
Létrehozni egy saját LiquidCrystal osztályt, mondjuk MyLiquidCrystal néven, ami a LiquidCrystal-ból származna, és ebben override-olni a write függvényt. Beletenni egy switch-case-t ami átváltaná az ékezetes karaktereket a megfelelő kódra, és azzal felhívná a szülő osztály write függvényét.
A programodban a LiquidCrystal helyett a MyLiquidCrystal-t kellene használni, és akkor menne a lcd.print("árvíztűrő tükörfúrógép") is.

Átváltásra én például ezt használom (natív c-ben), persze az LCD karakterkészletének megfelelően van többféle átváltási táblázatom. Az English-Japanese karakter készlet a leggyakoribb.

  1. char LCD_map_char (char ch)
  2. {
  3.   switch(ch) {
  4.     // English-Japanese set
  5.     case 'á' : return 0x01;
  6.     case 'é' : return 0x02;
  7.     case 'í' : return 'i';
  8.     case 'ó' : return 0x03;
  9.     case 'ö' : return 0xEF;
  10.     case 'ő' : return 0x04;
  11.     case 'ú' : return 0x05;
  12.     case 'ü' : return 0xF5;
  13.     case 'ű' : return 0xF5;
  14.     case 'Á' : return 'A';
  15.     case 'É' : return 'E';
  16.     case 'Í' : return 'I';
  17.     case 'Ó' : return 'O';
  18.     case 'Ö' : return 'O';
  19.     case 'Ő' : return 'O';
  20.     case 'Ú' : return 'U';
  21.     case 'Ü' : return 'U';
  22.     case 'Ű' : return 'U';
  23.     case '°' : return 0xDF;  // fok
  24.   }
  25.   return ch;
  26. }



A LiquidCrystal-ból leszármaztatásra egy hasonló példa, csak más osztállyal:
Példa

A szülő osztályból a write felhívása meg ha minden igaz LiquidCrystal::write(ch) módon megy.
(#) Kovidivi válasza Jonni hozzászólására (») Márc 10, 2021 /
 
És ha több karaktert egymás után írsz ki (irónia). Gondold át egy kicsit ezt az egészet. Szeretnélek a jó útra terelni, de ez így nagyon fárasztó.
Kiírod: "sz" utána az ö betűt, aztán "veg". Ennyi. Megkapod a kijelzőre a "szöveg" szót...
(#) Jonni válasza Kovidivi hozzászólására (») Márc 10, 2021 1 /
 
Itván itt az 5-ös lapon azt írja
lcd.write(karakterkód) – egy karakter kiíratása
lcd.print(”szöveg”) – szöveg kiíratása

Sehogy se jó.
Fárasztó vagyok?
Kipróbálva le tudnád írni?
Sehogy nem fogadja el a fordító
Pontosan mi van a zárójelbe?
lcd.write (?????);
(#) Pethical válasza Jonni hozzászólására (») Márc 10, 2021 / 1
 
  1. lcd.print("Na ne m");
  2. lcd.write(1); // á
  3. lcd.print("r");
(#) Jonni válasza Pethical hozzászólására (») Márc 10, 2021 /
 


És ez az egyszerű megoldás?
Ez kb 6szor bonyolultabb (átláthatatlanabb)
de működik (eddig még csak a 16x2-esen )
A hozzászólás módosítva: Márc 10, 2021
(#) Pethical válasza Jonni hozzászólására (») Márc 10, 2021 /
 
Nem tudom, én csak leirtam amit kértél
(#) Jonni válasza Pethical hozzászólására (») Márc 10, 2021 /
 
OK. Köszi szépen.
Igazából Kovidivi szerint ez egyszerűbb (háát nekem nem)
(#) Jonni válasza Jonni hozzászólására (») Márc 10, 2021 /
 
Huuuuuuuh. 40x2-esen az á betű még igy is krix-krax
  1. lcd.print("Na ne m");
  2. lcd.write(1); // á
  3. lcd.print("r");
(#) Kovidivi válasza Jonni hozzászólására (») Márc 10, 2021 /
 
Nem vagy fárasztó, csak én türelmetlen. Meg picit zavaró, hogy nem olvasol utána egyáltalán. De ezen kívül nincs semmi, nekem sem kötelező, hogy írjak, úgyhogy te se vedd magadra amit írtam. Egyszerű sosem lesz, azt az utat ne is keresd (max., ha kifizeted valakinek)! Ezt el kell fogadnod.
A hozzászólás módosítva: Márc 10, 2021
(#) Jonni válasza Kovidivi hozzászólására (») Márc 10, 2021 /
 
Kicsit azt érzem , hogy nem segítesz szívesen. De azért köszi neked is. És utánaolvastam Debreceni Megtestesülés Plébánia pdf fájljában itt írtam nem kértem , hogy 100 soros kódot írjál nekem csak, hogy írd le hogy hogyan gondolod.
Idézet:
„(max., ha kifizeted valakinek)”

Én pl szívesen segítek ingyen (ha épp tudok).
(#) Pethical válasza Jonni hozzászólására (») Márc 10, 2021 /
 
Arra gondolt a kolléga, hogy szívesen segít mindenki, de segítséggel sem könnyű mindig. A legegyszerűbb és legkönnyebb út, ha valaki megcsinálja helyettünk, pénzért.

Hogy néz ki az a krix krax ami az á helyett jelenik meg?
(#) Jonni válasza Pethical hozzászólására (») Márc 10, 2021 /
 
Most így.

A szöveg Világitás akar lenni
Következő: »»   15 / 17
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem