Fórum témák
» Több friss téma |
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.
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.
![]()
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 ![]() ![]() A hozzászólás módosítva: 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.
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ő. ![]()
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
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 ?
Azért van, mert több éle karakterkészlettel készülnek ezek a kütyük.
Link.
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.
Mindkettőnél tudsz tölteni karaktereket a CGRAM-ba. Amelyik karakterkészletébe nincsen, oda töltsél.
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
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).
Tudom használni. A 16x2-esen jó is csak a 40x2-esen krix krax az á-betű
"("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...
Megnézted a google első találatát? "lcd.write(byte(0));".
Nem 1 karaktert akarok kiíratni hanem egy szöveget.
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.
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.
É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...
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 (?????);
![]() ![]() ![]() És ez az egyszerű megoldás? Ez kb 6szor bonyolultabb (átláthatatlanabb) de működik ![]() A hozzászólás módosítva: Márc 10, 2021
Nem tudom, én csak leirtam amit kértél
OK. Köszi szépen.
Igazából Kovidivi szerint ez egyszerűbb (háát nekem nem)
Huuuuuuuh. 40x2-esen az á betű még igy is krix-krax
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
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).
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?
Most így.
A szöveg Világitás akar lenni |
Bejelentkezés
Hirdetés |