Fórum témák

» Több friss téma
Fórum » Folyamatábrás mikrokontroller programozás Flowcode-dal
Lapozás: OK   335 / 360
(#) Bakman válasza Kovabe hozzászólására (») Szept 29, 2020 / 1
 
A HMi programját írd át úgy, hogy minden gombnyomásra "A0", "A1" ... "A9", "B0", "B1", "B2" stb. adatot küldjön, semmi mást.
  1. print "A0"
Azt masszívan összekevertem, hogy melyik gombra mit csináljon de majd kibogozod, miután átprogramoztad a kijelzőt. A nem szükséges részeket majd töröld, az RX makróból is. Biztos-ami-biztos alapon 30 gomb kezelését raktam a programba.

Az RX makrót is átírtam a mellékletben látható komoly veszély miatt. Megszakításban nem szabad a gyári vételi makrót használni, van benne késletetés.
(#) Kovabe válasza Bakman hozzászólására (») Szept 29, 2020 /
 
Köszönöm, ma már nem de holnap nekiugrok és megfaragom a programot, hogy megfelelő legyen. 9 gombom van összesen, és 5 darab kijelzésem, a többit mint számítás, hmi ikonok cseréje már a PIC része lesz.

Hálás köszönet és igazán nagy elismerés, hogy a gordiuszi Kovács csomót is kibogoztad.
(#) Kovabe válasza Bakman hozzászólására (») Szept 29, 2020 /
 
Mondjuk azt hogy értem a programot, de a vett adatok feldolgozása nem tiszta.
  1. hmi_int = hmi_b0 - 38
  2.  
  3. //pl.: "0" = 48 (ASCII kód)
  4. // 48 - 38 = 10
  5. //pl.: "7" = 55 (ASCII kód)
  6. // 55 - 38 = 17


Ez mit csinál nekem az adatok vételével?
(#) Bakman válasza Kovabe hozzászólására (») Szept 30, 2020 / 1
 
Amikor érkezik egy bájt a kijelzőtől, lefut a megszakítási makró, az érkezett bájtokat két változóban tárolja a program: hmi_b1 és hmi_b0. Kezdetben mindkét változó nulla. Jön egy bájt (pl. "A"), b0 értéke átkerül b1-be, az érkezett bájt bekerül b0-ba.

b1=0
b0=65 (az A betű ASCII kódja)

Jön a következő bájt, pl. "4". b0 érétke bekerül b1-be, b0-ba bekerül az új jövevény.

b1=65
b0=48 ("0" ASCII kódja)

A többirányú elágazás a hmi_b1 változót vizsgálja. Ha a b1-ben 65 ("A" betű) vagy 66 ("B") vagy 67 ("C") van, akkor a b0 értékéből levon 38-at, 28-at vagy 18-at.

Nézzük a "B" (66) ágat. Ha a másodikként érkezett bájtból kivonsz 28-at, ami normál esetben 48-tól 57-ig terjed ("0" - "9" ASCII kódjai), akkor a kapott eredmény két számjegyű. A számban az egyes helyiérték adja a 0-9 megfelelőjét, itt konkrétan 0-9 -ig, a tizes helyiérték pedig a betű értékét, ami a programban 1, 2 vagy 3 lehet. A hmi_int változó értéke a kapott adattól függően 10 - 39 lehet.

"A0" - "A9" --> 10 - 19
"B0" - "B9" --> 20 - 29
"C0" - "C9" --> 30 - 39

A hmi_int nevű változó mutaja, milyen adat érkezett a kijelzőtől, a főprogramban már elég csak ezt az egy változót vizsgálni akkkor, amikor van rá idő. Akkor van rá idő, amikor a hőmérőszenzorral nem beszélgetsz. Ez okoz némi késést a reagálásban de szemmel nem nagyon látható a dolog.
(#) Kovabe válasza Bakman hozzászólására (») Szept 30, 2020 /
 
Köszönöm a kimerítő választ.
Még két három alkalommal el kell olvasnom de volt amit már elsőre felfogtam
(#) Bakman válasza Kovabe hozzászólására (») Szept 30, 2020 / 1
 


Nézd a folyamatábrát és gondolatban küldj a rednszerbe egy bájtot (pl. "A"). Végigmész a lépéseken. Aztán küldj még egy bájtot, pl. "3", ismét végigmész a lépéseken. Az a fontos, hogy mindig a kapott karater ASCII kódjával számolj.
(#) Kovabe válasza Bakman hozzászólására (») Szept 30, 2020 /
 
Feldolgoztam nagyvonalakban az infót.
Viszont egy kérdés merűl fel, több infót szeretnék adni a HMI-nek, ezt hogy érdemes megvalósítani? Gombnyomás után különböző RS232 adás makrót csináljak vagy csak a makrón belül legyen egy számlálás és a szerint több irányú elágazás?
(#) Bakman válasza Kovabe hozzászólására (») Szept 30, 2020 /
 
Küldd akkor az infót, amikor kell/rendelkezésre áll. Ha gombnyomásra valaminek változnia kell a kijelzőn, akkor a gombnyomás érzékelése után azonnal. Ha a hőmérsékletre kell reagálni, pl. bekapcsolni a fűtést, akkor onnan küldd a parancsot, valamint az infót a kijelző felé, ahol rendelkezésre áll a hőmérsékleti adat.

Ha csak egy-két ikon kell, akkor én nem szoktam külön makrót csinálni neki, egyébként igen, különben teljesen átláthatatlan lesz a program.

Tudsz spórólni a programmemóriával, ha a többször használt dolgokat makróba rakod, pl. a parancslezáró három 255-ös karakter biztos, hogy többször fog kelleni.
(#) Kovabe válasza Bakman hozzászólására (») Szept 30, 2020 /
 
Megcsináltam de nem azt csinálja amit akarok.
Mi mellett megyek el?
A hozzászólás módosítva: Szept 30, 2020
(#) mnyugger hozzászólása Szept 30, 2020 /
 
Melyik Flowcode verziót használjátok? Melyik az aktuális és jól használható?
(#) kaqkk válasza mnyugger hozzászólására (») Okt 1, 2020 /
 
Az 5 öt használjuk ,de már kijött a 6- és a 8 is ...
(#) Bakman válasza Kovabe hozzászólására (») Okt 1, 2020 /
 
Melyik része nem csinálja azt, amit akarsz? Egy-két kis hibától eltekintve jónak tűnik a program.

A Main makróban a hmi_int változó vizsgálatánál a többirányú elágazásokban kétszer szerepel a 20. C0 - C9 érkezésekor a hmi_int változó tartalma 30 - 39 lesz.
Bekapcsoláskor a 'kivant' változó értéke 0. Ha ilyenkor egyel csökkented, a változó értéke 255 lesz.
A hőmérséklet kiolvasása le van tiltva a t=1 időpontban.
(#) Kovabe válasza Bakman hozzászólására (») Okt 1, 2020 /
 
Szia

Igazából semmit nem csinál a gombnyomásokra, kéne értéket visszaküldeni a t7-nek de csak a t6-nak küldi a hőmérsékletet, most persze a 255-öt.
Az RX makoróban nem kell a többirányúnál a számokat is megadni?
A hozzászólás módosítva: Okt 1, 2020
(#) Bakman válasza Kovabe hozzászólására (») Okt 1, 2020 /
 
Ha nem titkos, töltsd fel a kijelző programját is, úgy tudom élőben tesztelni.
(#) Kovabe válasza Bakman hozzászólására (») Okt 1, 2020 / 1
 
Nem titkos, nem fogok erről cikket készíteni pedig lehet érdemes lenne.

szauna.HMI
    
(#) mnyugger válasza kaqkk hozzászólására (») Okt 1, 2020 /
 
Köszi. Azért kérdem, mert láttam a 6-ot és a 7-et. Na azokhoz már pilóta vizsga kell.
(#) Bakman válasza Kovabe hozzászólására (») Okt 1, 2020 / 1
 
Megvan a nyavajás. Az a baj, hogy a kijelző bekapcsoláskor 10-11 bájnyi adatot kilök magából és ha a kontroller (vagy ami a kijelzőhöz van csatlakoztatva) nincs erre felkészítve, dobhat egy hátast, mint a mellékelt ábra is mutatja. Igazábol az UART modul vevő része fut hibára, mivel a program elején még nincs kezelve a vétel. Amíg a hiba nincs elhárítva, nem hajlandó működni. Workaround:

Flowcode-ban RSR232 modul -> Egyedi kód -> Initialization. Itt egy sort kell beiktatni:
  1. delay_ms(100);
Közvetlen az RX megszakítás bekapcsolása után ezt kell bepötyögni C kódba:
  1. FCV_HMI_B0=rcreg;
  2. rcsta.CREN=0;
  3. rcsta.CREN=1;
Azt már csak halkan jegyzem meg, hogy a régebbi Nextion Editor ilyet nem művelt a kijelzőkkel. Ezt azért tudom biztosan, mert a kedvedért telepítettem a legújabb verziót, ezért is húzodott el a megoldás (virtuális gép, Windows XP). Érdekes tanulság volt nekem is. A megoldást jegyezd meg, ki tudja mikor fogják kijavítani, már ha fogják egyáltalán...
(#) Kovabe válasza Bakman hozzászólására (») Okt 1, 2020 /
 
Köszönöm
Hamarosan tesztelem és jelentkezem a fejleményekkel. Mire jó a frissités ha csak elcseszik a dolgokat? Mindegy is, de lassan jobb ha megtanulom a C nyelvet forgatni mert a flowcode már csak egy kezelő felület lesz.
(#) Kovabe válasza Bakman hozzászólására (») Okt 1, 2020 /
 
nem javult a helyzet, viszont a HMI A-nak 0x41 et küld, míg a 3-as 0x33.
Nekem így nem jün ki a matek, hogy az A 68.
(#) Bakman válasza Kovabe hozzászólására (») Okt 1, 2020 /
 
0x41 = 65

Az egyenlőség bal oldalán hexadecimális, a jobb oldalon decimális szám áll. A PIC program decimális számokkal operál.
A hozzászólás módosítva: Okt 1, 2020
(#) Kovabe válasza Bakman hozzászólására (») Okt 1, 2020 /
 
Akkor valami más lesz.
Próbálom rábírni, hogy küldjön más adatot is de nem tesz semmit a PIC csak a hőmérsékeltet küldi.
(#) Bakman válasza Kovabe hozzászólására (») Okt 1, 2020 /
 
A program kezdődjön így:
  1. delay_ms(100);
  2. osccon=0b01110000;
  3. anselh=0;
  4. ansel=0;
Biztos ami biztos alapon. Az RB5 (RX) lábon van 10 kΩ felhúzóellenállás? Ha nincs, rakj oda egyet.
(#) Kovabe válasza Bakman hozzászólására (») Okt 1, 2020 /
 
Módosítottam, 10k elhelyezve, de semmi változás.
(#) Bakman válasza Kovabe hozzászólására (») Okt 1, 2020 /
 
Most van baj, mert nálam működik. A 70, 80, 90 és 100 feliratú gombok akkor küldenek adatot, ha előtte a középső gombbal bekapcsolod a fűtést(?). Nekem a "Szauna" alatti mezőbe a mérés hiánya miatt 512-t ír a kontroller programja. Ha neked nem ennyit, ellenőzid, milyen senességgel küld adatot a HMI. A PIC programban 9600 Baud van beállítva.

Találkoztam már olyannal, hogy a HMI alapból nem 9600-ra volt állítva, hanem valami másra. Ezt a lehetséges hibát ki lehet küszöbölni, ha a kijelzőt eleve ennyire állítod be már induláskor.
  1. baud=9600
(#) Kovabe válasza Bakman hozzászólására (») Okt 1, 2020 /
 
Az az érdekes, hogy nekem is 512-őt mutat, de most rátettem a hőmérőt és megfelelően mutatja is.
Lehet visszalépek 3-at és megpróbálom a HMI adatokat direktbe figyelni mint az alap programban.
A HMI jól küldi azu adatokat, és a PIC is.
Az analizátor szerint mind a két vonal 9600.
A hozzászólás módosítva: Okt 1, 2020
(#) mhatalyak válasza Kovabe hozzászólására (») Okt 2, 2020 /
 
Tényleg érdemes lenne, mert én végig követtem a beszélgetést, meg a programokat is átnéztem. Én sokat tanultam belőle... a kmmunikácó ezen a platformon eddig soha nem ment, meg sme próbáltam, de már van egy alap, ahol elindulhatok kommunikáció téren!
(#) mhatalyak válasza Bakman hozzászólására (») Okt 2, 2020 /
 
Ha már itt vagyok feltenném én is a kérdésem!

Egy motorvezérlőről lenne szó, gyújtást nem változtatja, csak az injektor befecskendezési idejét, viszont elég sűrűn kihagy.. a leválasztás tökéletes, ha fordulatszámmérőt írok rá, akkor hibátlan. Esetleg valami erre lenne valami ötlet? A hiba ott van, hogy lassabban fut a program, mint ahogy jön a jel..
(#) Bakman válasza mhatalyak hozzászólására (») Okt 2, 2020 /
 
Látatlanban nem nagyon tudok mit mondani erre. Talán túl sok időt tölt a program a megszakításban, nem megszakításban van kezelve a start jel, nem jól van kezelve stb.
(#) Kovabe válasza Bakman hozzászólására (») Okt 3, 2020 /
 
Szia

Még mindig a baj áll fen. Esetleg a te HEX file-dat át tudnád küldeni!
Lehet hogy én vagy a flowcode csesz el valamit.
(#) Bakman válasza Kovabe hozzászólására (») Okt 3, 2020 / 1
 
Parancsolj, mellékletek. ...K50 helyett én ...K22-t hazsnáltam, az van kéznél. Az USB modul kivételével egyezik a két kontroller. A program elején lévő
  1. anselh=0;
  2. ansel=0;
valószínűleg neked (és másnak sem) nem fog kelleni. Modding miatt nekem ezt nem csinálja meg automatikusan a Flowcode.

A program nem tér el semmiben a két kontroller között, csak a PIC típusa van átkapcsolva és konfigurálva. A HMI programján annyit változtattam, hogy alapból 45 °C-t írtam egy txt mezőbe és az elején beállítottam a 9600-as UART sebességet.
Következő: »»   335 / 360
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