Přepínání dvou podprogramů tlačítkem

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Uživatelský avatar
gilhad
Příspěvky: 778
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Přepínání dvou podprogramů tlačítkem

Příspěvek od gilhad » 10 říj 2018, 11:25

Tak zase "Arduino za 2$" dokaze (kdyz se k nemu prida RAMka a par odporu) emulovat takove Spektrum v realnem case, vcetne generovani grafiky (ktere samo zabere tak 3/4 casu), takze to zas takova plecka neni. Ale chte to umet ho doopravdy vyuzit.

To, co Arduino IDE a bezny pristup nabizi je zamereno na zacatecniky, "co si chteji jen tak blikat diodou a nic se neucit, nicemu nemuset rozumet" - a jejich potreby to pokryva v pohode, ale ten hardware ma vyrazne na vic a vetsina vykonu prijde vnivec, stejne jako vetsina jeho HW moznosti.

Delay je (krome trivialnich prikladu) fakt peklo, to, ze se preruseni prakticky nepouziva casto vede k drbani levou nohou za pravym uchem a tak by se dalo pokracovat hodne dlouho. Jako jo, pro neplavce si vzit hruh, zachrannou vestu a kridelka je zpusob, jak se neutopit v bazenu pri prvni navsteve, ale nemuze cekat, ze optimalizaci kridelek a aerdynamictejsim kruhem se priblizi tomu, co ve stejnem bazenu tropi ti, co umi plavat. Zakladni Arduino prostredi je fakt ten kruh+kridelka+zachranna vesta pri pouziti toho HW za 2$. Ale ten HW (bazen) toho umoznuje vyrazne vic, treba vodni polo, nebo vystoupeni akvabel.

Koupil jsem si pred casem 4 sedmisegmentovky rizene dvema draty a k tomu byla nejaka originalni knihovna od vyrobce HW, ktera na tom dokazala cosi nejak zobrazit. Problikavalo to tak 10x za sekundu na plny vykon, v cislech byly "duchove" - polorozsvicene segmenty patrici vedlejsim cislum a tak podobne, delay na nekolika mistech. Rozhrani na hranici pouzitelnosti. Zasekana loop(), pokud tam je cokoli jineho, zobrazeni je jeste prisernejsi.

Prosel jsem si, co je v tom display za obvod - dva normalni posuvne registry za sebou, jeden pro vyber sedmisegmentovky, druhy pro vyber segmentu. Takze jsem vzal k ruce datasheet, napsal knihovnu podle sebe a pri vytizeni procesoru pod hranici meritelnosti mam refresh 100x za sekundu, zadny duchove, krasne stabilni a ciste cislice. V loop si muze bezet co chce a display stiha levou zadni.

Pouzito: interrupt casovace pro odeslani stavu kazdych 0.0025s (stridave 4 cislice), komunikace s chipem podle datasheetu vyrobce chipu (takze adresace chipu, zapis dat plnou rychlosti, bez opakovani adresace po kazdem bitu, az pak prekopirovani dat na vystupy jednim signalem), funkce na zobrazeni 4 znaku, funkce na zobrazeni jednoho znaku na dane pozici - obe pristupuji ke globalni volatile promenne 4byte, kam daji uz dekodovane segmenty, takze se nepocitaji pri kazdem pruchodu znova. Celkovy kod knihovny podstatne kratsi jak na radky, tak na zabranou pamet programu i RAM, porad jeste psano "v Arduinu". Kdybych to chtel jeste vylepsit, prepisu to do strojaku, je to jen par instrukci. Rozhrani trivialne pouzitelne.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 19 hostů