Fórum témák

» Több friss téma
Fórum » Nextion érintőképernyős HMI, UART kommunikációval
Lapozás: OK   13 / 50
(#) Bakman válasza ativagyok hozzászólására (») Dec 8, 2016 / 1
 
Globális változók: sys0, sys1, sys2
(#) ativagyok válasza Bakman hozzászólására (») Dec 8, 2016 /
 
Szuper...így működik, köszönöm.
Viszont így felvetődik a kérdés, hogy mire való a Toolboxban létrehozott változó vscope paramétere(local/global)?
És egy másik kérdés is: Jól látom, hogy csak 3db globális változó hozható létre? Ez nem kevés a gyakorlatban?
(#) Bakman válasza ativagyok hozzászólására (») Dec 8, 2016 /
 
1: Jó kérdés.
2: Nem. A sys0 - sys2 változók gyári változók, kapod, mint szamár a füleket.
3: Én úgy látom, hogy gyakorlatban az a legjobb megoldás ha mindent a kontroller csinál, a kijelző csak mint egyszerű kijelző szerepel felvértezve az érintésérzékelés tudományával.
(#) tomat5 válasza ativagyok hozzászólására (») Dec 8, 2016 / 1
 
Szia
Pageneve.va0 -al tudsz rá hivatkozni, akkor bárhonnan eléred.
pl.: page2.va0=10
Üdv.
(#) ativagyok válasza tomat5 hozzászólására (») Dec 8, 2016 /
 
Köszönöm, szintén működik.

Bakman:
2. Azt értem, hogy kapom őket...inkább az volt kérdéses számomra, hogy nem-e kevés a 3db. Mert ahogy látom, ebből nincs több.
3.Az a terv nálam is, hogy a lehető legtöbb dolgot a kontroller végezzen. Ez a része majd most következik, gondolom ez lesz a neheze.
(#) Elektro.on válasza ativagyok hozzászólására (») Dec 8, 2016 /
 
Ez így sajnos nem kezeli a változókat. De a vissza gomb megyomásával ellenőrizhted a váltózód értékét. (if..then...) és az értékétől függően oda ugrassz ahová kell.
(#) Lamprologus válasza ativagyok hozzászólására (») Dec 8, 2016 /
 
Egy ideig én is azt a megoldást próbáltam, hogy a "kijelzőn belül" oldottam meg a lapváltásokat ... csak néha eltévedt a PIC, nem tudta épp melyik kijelző az aktuális, vagy csak még nem törtödött be teljesen az adott kijelző, de a PIC már küldte volna rá az adatokat, jött vissza hibaüzenet, hogy hibás parancs ... aztán átalakítottam az egészet, úgy, hogy a gombnyomás elmegy a PIC-nek, az meg visszaküldi hogy melyik lapot töltse be... azóta stabilabb a dolog, nincsenek eltévedések.
(#) Lamprologus válasza ativagyok hozzászólására (») Dec 8, 2016 /
 
Idézet:
„Viszont így felvetődik a kérdés, hogy mire való a Toolboxban létrehozott változó vscope paramétere(local/global)?”

Ha jól tudom akkor globális változónál, ha kilépsz az oldalról akkor megtartja az értékét, és ha visszalépsz az adott lapra akkor nem 0 lesz az adott változó értéke, hanem ami előzőleg volt.
Localis változónál nullázza.
(#) helektro válasza Bakman hozzászólására (») Dec 9, 2016 /
 
"Én úgy látom, hogy gyakorlatban az a legjobb megoldás ha mindent a kontroller csinál, a kijelző csak mint egyszerű kijelző szerepel felvértezve az érintésérzékelés tudományával."

Ne haragudj, de ez egy nagy marhaság.
Éppen az a lényege ennek a kijelzőnek, hogy ez egy intelligens kijelző, egy csomó mindent meg lehet vele csinálni. Én ami feladatot lehet, a kijelzőre bízom (képváltás, gombok teljeskörű kezelése, adatbetöltés-frissítés, billentyűzet, stb.) és a uC a lehető legkevesebb feladatot kapja a kijelző felé. És tökéletesen működik. Az egész programozás kérdése.
Nem mondom, hogy nem hiányzik belőle jónéhány funkció, de már a mostani állapotában is nagyon sok minden megoldható kijelzőn belül.
(#) Bakman válasza helektro hozzászólására (») Dec 9, 2016 /
 
Kinek a pap, kinek a paplan. Mit értesz pl. a "gombok teljeskörű kezelése" alatt?
A hozzászólás módosítva: Dec 9, 2016
(#) Lamprologus válasza helektro hozzászólására (») Dec 9, 2016 /
 
Próbáld megoldani kijelzőről a lapváltás korrekt kezelését, ha pl. belépsz egy grafikont tartalmazó oldalra, a PIC meg elkezdi küldeni a grafikonnak az adatokat ( 4 görbe, görbénként 250 adatpont). Közben Te meg nyomsz egy gombot és a kijelző átlép a következő ablakra. A PIC meg csak tolja az adatokat, de azon az oldalon már nincs ami fogadja... és jönnek vissza a hibajelzések ... amit vagy fel tud dolgozni a PIC idejében és leállítja az adatküldést, vagy nem ... és ha esetleg közben újabb lapváltás jön, válogasd ki a hibajelzések közöl ... túlcsordulhat a puffer, elveszik a lapváltás infó, és a PIC már azt sem tudja mit mutat a kijelző...

Szóval én azt hiszem maradok annál a megoldásnál, hogy intézze a PIC a lapváltásokat!
(#) helektro válasza Lamprologus hozzászólására (») Dec 9, 2016 /
 
Programozás kérdése az egész. Ha úgy működik, ahogy leírtad, az nem feltétlen a képernyő hibája, hanem, hogy rossz a megírt program.
Ha megnyomod a gombot, akkor először el kell küldeni a PIC-nek azt a parancsot, hogy állítsa le az adatküldést, majd attól függően, hogy hogyan van megírva az adatátvitel a PIC-ben, lehet képet váltani a kijelzőn. Nyilván az egész függ a PIC-en megírt programtól is.

De persze mindenki úgy használja a kijelzőt, ahogy akarja. Ha valaki inkább PIC oldalról programoz le olyan dolgokat, ami beépítetten benne van, azzal szívjon ő.
Kicsit olyan ez, mintha lenne egy full extrás autóm, de amikor használni akarom, akkor beülök, de nem használom a beépített "funkciókat", hanem megkérek két embert, hogy toljon már el a sarki boltig.
(#) helektro válasza Bakman hozzászólására (») Dec 9, 2016 /
 
Én mindent, amit lehet a kijelzőn belül oldok meg: képernyőn történő adatbevitel, nyomógombokra történő események kezelése, állapotok eltárolása, lapváltás, adatok mentése, stb.
Van egy kezdeti adatfeltöltésem és ezeket az adatokat globális változókban tárolom (és úgy kezelem ezeket, mint egy struktúrált adatokat tartamazó tömb), míg egy részét a beépített eeprom-ba.

Nekem a kijelzőn 6 olyan egységnek az adatai jelennek meg (nem egyszerre), amely egységek egyenként 4x2 hőmérsékleti adatokat kezelnek, a megadott adatok és a hőmérsékleti adatok alapján szivattyúkat, mágneskapcsolókat kapcsolnak, hiba esetén értesítést küldenek, stb. Ezek és a központ RS422-n kommunikálnak.

A fentebb írt struktúrált tömb kezelés amiatt kell, mert a 6 egység adatainak nagy részét áttöltöm a kijelző memóriába (az adatstruktúra minden egység esetében megegyezik), amit csak akkor frissítek, amikor változás van, így nincs terhelve feleslegesen a PIC, az végezheti a saját feladatait, nem kell még a kijelzővel is foglalkoznia (pl. lapváltás, stb.).
(#) Lamprologus válasza helektro hozzászólására (») Dec 9, 2016 /
 
Idézet:
„Van egy kezdeti adatfeltöltésem és ezeket az adatokat globális változókban tárolom”

Ezt hogyan csinálod? Pl. az 3-as lapon van egy szöveges változód azt globálissá teszed, az 5-ös lapon van egy másik szöveges változód, ami szintén globális, ezeket hogyan töltöd fel, anélkül, hogy az adott lapot kiválasztanád előtte?
Idézet:
„míg egy részét a beépített eeprom-ba.”

Ahhoz hogyan férsz hozzá?
Idézet:
„nagy részét áttöltöm a kijelző memóriába”

Ezt hogy csinálod? Milyen paranccsal?
(#) sonajkniz válasza Lamprologus hozzászólására (») Dec 9, 2016 /
 
Csak óvatosan szeretnék a témához szólni, lévén nem volt még szerencsém ehhez a kijelzőhöz, csak érdekel a téma. Viszont az adott problémával volt már dolgom.
GLCD kijelzők használata esetén a kijelzőt nálam külön PIC kezeli. Minden, a kijelzéssel kapcsolatos adatot ez a PIC tárol. Képernyőket, szöveges változókat, azok pozícióit, számváltozók karakterkészletét, a számváltozók képernyő-pozícióját, a megjelenítéshez szükséges műveletek rutinjait, stb. Valamint lekezeli a hozzá kapcsot billentyűzetet és a gombokat. Viszont maguk a számváltozók nincsenek a programjában. A főáramköri PIC 10msec-enként lekérdezi a billentyűzet és a gombok állapotát. Ez alig néhány byte-nyi információ, tehát hamar megvan. A továbbiakban csak akkor diskurál a kijelzővel, ha a rajta lévő tartalmat változtatni kell. Ezt pedig a következő képen teszi:
Első byte a képernyő sorszáma. A kijelző vezérlőben minden sorszámhoz külön rutin tartozik, ami csak az adott képernyőn megjelenítendő adatokkal foglalkozik. Ha pl. a képernyő tartalmaz 3 db szöveges változót, és kettő db számváltozót, akkor a következő 3 byte a megjelenítendő szövegek sorszámait tartalmazza, majd érkezik újabb 2x3 byte, ami pedig a megjelenítendő 2 db 24 bites számváltozó. Így megint csak csekély mennyiségű adatot kell átküldeni. A többi a kijelzővezérlő dolga. Ugyanakkor a főáramkör mégis mindig tudja, mi van a kijelzőn.
(#) Bakman válasza Lamprologus hozzászólására (») Dec 9, 2016 /
 
Valószínűleg az ügyesebb (enhanced) HMI-t használja.

Nekem sokkal üzembiztosabbnak tűnik az, ha a kijelző csak annyi adatot küld a kontroller felé, amiből meg lehet állípítani, hogy hol történt az érintés. Gombonként két byte is bőven elég. A kontroller pedig az érintésből eldönti, mit küldjön a kijelző felé. Ebben a formában a kontrollerben gyerekjáték kezelni a kijelzőtől érkező adatokat akkor, amikor a kontroller ráér ezzel foglalkozni.
(#) wbt válasza Bakman hozzászólására (») Dec 9, 2016 /
 
Lehet, hogy megköveztek, de egy kicsit én is így gondolom. Most estem bele egy olyan feladatba, ahol 1000 be-kijáratot kell kezelni, sok paraméterrel és időzítésekkel. Igen csak be vagyok csinálva, hogy a sok soros porti adat feldolgozásánál elcsúszok (1. HMI, 2: RS485, 3: külső LEDtábla, 4: tasztatúra, 5: GSM modem meg még ki fognak találni valamit...). ...és amilyen szerencsém lesz, egyszerre összecsúszik a sok adat...de csak néha...
(#) wbt válasza sonajkniz hozzászólására (») Dec 9, 2016 /
 
Ha jól értem, akkor Te megírtál egy HMI-felületet. Anno én is csináltam ilyet, de mondjuk ez főleg bizonyítási kényszerből készült, mert azt mondták, hogy Basicben nem lehet gyors dolgot írni, aztán lett belőle univerzális kijelzővezérlő (az életben nem használtam a cuccot). Ha jól, barátságosan megírtad a felületet, akkor akár árulhatnád is! Nálam is volt átfedéses szöveg meg minden vacak, 3D vonalak stb. Atya Úr Isten, most látom, 4 éve tettem fel és fennmaradt AVR BASIC próbálkozások
Ha nem játszottál még ilyen kijelzővel, én a helyedben rááldoznék pár ezer Ft-ot egy kicsire és kipróbálnám. (és ha van jó ötleted még hozzá beleteszik a fiúk...szerintem ezért írtak ki most ötletpályázatot is) Na, meg meggondolandó, hogy egy sorozat project-be nem olcsóbb lenne egy FTDI-EVE a maga 1400Ft-os árával, mert az sem kutya.
(#) sonajkniz válasza wbt hozzászólására (») Dec 9, 2016 /
 
Idézet:
„Ha jól értem, akkor Te megírtál egy HMI-felületet.”

Azt azért nem mondanám. Jól lehet azt megoldottam, hogy egy GLCD kijelzőre pontonként tudjak rajzoni assemblyben, de a videódban látottakhoz hasonló készítésére asm-ben nem vállalkoznék. Annyi ráérő időm nincs. Ráadásul a GLCD nem képes 10Hz-nél nagyobb frissítési sebességre mint az OLED, és még azon is elmosódik a kép. De végül is a működése hasonló a HMI-hez. Csak a programozása babrásabb, mivel asm-ben készül.
(#) helektro válasza Lamprologus hozzászólására (») Dec 10, 2016 /
 
"Ezt hogyan csinálod? Pl. az 3-as lapon van egy szöveges változód azt globálissá teszed, az 5-ös lapon van egy másik szöveges változód, ami szintén globális, ezeket hogyan töltöd fel, anélkül, hogy az adott lapot kiválasztanád előtte?"

Nem. Van két üres lapom, amin semmilyen grafikai elem sincs, csak a globális változók.
Az egyiken vannak azok az általános globális változók, amelyeket adatátadásra használok pl. két lap között, vagy olyan adat állapotát tárolják, amelyek nem a megjelenítendő adathoz tartoznak. Pl. én egy sátusz sorban megjelenítem minden oldalon, hogy a hangszóró be van-e kapcsolva.
Viszont a többi lapon egyetlen globális változom sincs.

A másik táblán van az adatgyűjtők által begyűjtött stuktúrált adatok azon része, ami ritkán változik (azonosítók, beállítások, stb.).

Pl. legyen a két lap neve 'a' a globális változóknak és 'x' az adattömbnek.

Ha két lap között adatot adok át (pl. megnyomok egy gombot), akkor az egyik globális változóban beállítom a még aktuális lap sorszámát (hogy tudjam, hova kell visszatérni): a.vissza.val=1 és ezután meghívom az oldalt: page új_oldal (van, hogy egyéb változót is beállítok, pl. a billentyűzet egy külön oldalon van, oda az adatot ugyanígy adom át: a.vmi.txt="szöveg"

Tehát ha egy szöveget kell bevinni/módosítani, akkor a gomb megnyomásra az alábbi kód van van írva:
a.vissza.val=1
a.vmi.txt="szöveg"
page bill.

Ezután megváltoztatom a szövege a bill. oldalon, majd ha ott rányomok az 'ok' gombra, akkor a a.vmi.txt változóban berakja az új szöveget a bill. oldalon és a hívó oldalra visszaléptet (a a.vissza.val változóba ugye előtte lementettem a meghívó oldal sorszámát).
És ehhez semmilyen PIC beavatkozásra nincs szükség, mindent a kijelző végez el. És tök felesleges is lenne a PIC, mivel ennek a kijelzőnek pont az a lényege, hogy programozható.

A tömböt ugyanígy hívom meg, de címzéssel.
Összesen 6 különböző külső egységnek tárolom a tömbe az adatait, egységenként 40byte-tot, így az 1. egység adatai az 1. változónál kezdődnek, a 2. egység adatai a 41. változónál, a 3. egység adatai a 81. változónál és így tovább.
Ha meg akarom hívni a 3. egység adatait (pl. hogy kijelezzem), akkor beállítok egy változót 81-re: mutato.val=81
Ha a tömbön belül az 5. adatot kell megjeleníteni, akkor az meg így hívható meg ('x' lapon van a tömb, n0pedig egy szám elem a kijelzőn):
n0.val=x.b[5+mutato.val].val

Így a tömbön belül bármelyik eleme megcímezhető. Csak az a lényeg, hogy a változók azonosítója folyamatos legyen az oldalon.

Én pont egy ilyen kijelzőre vártam már rég óta, hogy ne egy uC-nek, pl. egy PIC-nek kelljen a kijelzőt matatnia, hanem a foglalkozzon azzal, ami a lényeg és a kijelzős dolgokat meg rábízni magára a kiejlzőre. És ez a kijelző ugyan még elég gyerekcípőbe jár, de már most rengeteg dolgot meg lehet csinálni, és az is látszik, hogy elég jó tempóba fejlesztgetik.


És amúgy igen, a fejlettebb verziót használom, abból is a 7"-at.
A hozzászólás módosítva: Dec 10, 2016
(#) Lamprologus válasza helektro hozzászólására (») Dec 10, 2016 /
 
Na, akkor ezt nem tudtam idáig, hogy lehet oldalnével kiegészítve hivatkozni a válltozóra.
Tehát ha az aktuális lapon a "b" de az "a"-n akarok egy változó értékét megváltoztatni akkor az simán megtehetem a a.homerseklet.val=25 formában, és ezt akár a soros porton is küldhetem a HMI-nek?
(#) helektro válasza Lamprologus hozzászólására (») Dec 11, 2016 /
 
Így, és át.
(#) wbt hozzászólása Dec 15, 2016 /
 
A 7"-oson milyen TFT kontroller van a uC mellett? (elméletileg már útban van, de a csigaposta ugye...)
(#) Face hozzászólása Dec 16, 2016 /
 
Sziasztok,
Használja valaki GPIO portot ezen a kijelzőn?
A 0.38-as verziójú editorral nekem szépen működik, de az újabbakkal már nem.
Másnál is van hasonló jelenség?
(#) wbt válasza Face hozzászólására (») Dec 16, 2016 /
 
Amint kezemben lesz a cucc, kipróbálom, segítek, de addig is a legjobb dolog, amit tehetsz, hogy
csinálsz egy "hibás" HMI file-t és azt elküldöd a gyártónak. Ez nekik is sokat segít, mert a "jaj ez nem működik" az több levelezés, de a hibásan működő HMI/TFT file-ból nekik kiderül az igazi hiba. (én is megírtam, hogy vibrál egy dolog, elküldtem a HMI file-t, náluk is vacak volt. Ki is javították.
A fórumuk nagyon jó szerintem. Szóval nyugodtan kérdezd meg, hogy "ez a HMI itt működik, itt meg nem, ki a hunyó". Ahogy elnéztem, a "hogyan törjük fel a programotokat" topic-okra is normálisan válaszoltak.
(#) sanca29 hozzászólása Dec 16, 2016 /
 
Sziasztok!
egy kérdésem lenne a kijelzőn lévő egy már működő HMI fájlt lelehet tölteni a pc-re tehát visszafelé működik a dolog vagy csak rátölteni lehet ?
amúgy mi a külömbség a HMI és a TFT fájl között
A hozzászólás módosítva: Dec 16, 2016
(#) Bakman válasza sanca29 hozzászólására (») Dec 17, 2016 /
 
A HMI a forráskód, a TFT a kijelzőre töltendő program. Tudtommal csak feltölteni lehet a programot, kiolvasni nem.
(#) sanca29 válasza Bakman hozzászólására (») Dec 17, 2016 /
 
Pedig van egy kijelzőm amin van egy jó kis program át kellene tenni többre is ,valahol pedig ott van a memóriába csak kiolvasni akkor nem lehet valami hack nem létezik rá?
(#) wbt hozzászólása Dec 19, 2016 /
 
Normál mintaprogram. Ugyan mi a hiba?
  1. if(b26.txt=="STOP")
  2. {
  3.   b26.txt="START"
  4. }
  5. else if (b26.txt=="START")
  6. {
  7.   b26.txt="PAUSE"
  8. }else
  9. {
  10.   b26.txt="STOP"
  11. }

Üzenet:
Error: Invalid command:else if (b26.txt=="START")( Double click to jump to code)
Error: SYNTAX ERROR: Extra "{":{( Double click to jump to code)
(#) ativagyok válasza wbt hozzászólására (») Dec 19, 2016 /
 
Szia!

  1. else if (b26.txt=="START")

Ebben a sorban töröld a szóközt az if után.
Üdv,
Ati.
A hozzászólás módosítva: Dec 19, 2016
Következő: »»   13 / 50
Bejelentkezés

Belépés

Hirdetés
XDT.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