Keďže vidím, že s radami sa vrece nepretrhlo, prispejem svojou troškou. Pred časom som sa zaoberal programovaním mikročipov, v podstate zo zaujímavosti, nech mám prehľad lebo profesne sa zaoberám priemyselnou automatizáciou a programovaním. Asi Vám neposkytnem úplný výklad programu, ale Vaša úspešnosť bude do veľkej miery závislá od Vášho odhodlania a záujmu "trošku sa s tým pohrať". V prvom rade neviem akým spôsobom tento hotový program chcete dostať "do" robota, resp. aké máte k tomu komponenty a možnosti na testovanie, alebo či je to otázka len teoretická. Takisto neviem či je možné použiť na tento účel VB.NET (narovinu, zrejme nie), pretože hotový program je potrebné napáliť priamo do mikročipu robota a teda použitý kompilátor musí poznať typ procesora (mikročipu) a jeho inštrukčnú sadu. Na vývoj a napaľovanie programov takýchto mikročipov sa používajú vývojové dosky, ktoré to umožňujú. Vy ale (zrejme) máte možnosť programovať mikročip robota prostredníctvom tej sériovej linky, ktorú spomínate. Takže k veci. Takéto programy väčšinou bežia vo vnútri mikročipu. Dokonca celý program je tam ako sa hovorí "napálený" a môže spolupracovať ešte s množstvom iných mikročipov a takisto s vnútornou pamäťou EEPROM. Celkovú zostavu zrejme nemôžete poznať, lebo predpokladám, že robota ste nerozoberali. Niektoré piny mikročipu sú nazvem ich systémové, do čoho spadá jeho napájanie plus piny súvisiace s prepojením na oscilátor zabezpečujúci oživenie procesora taktovacou frekvenciou. Funkcia všetkých ostatných pinov je programovateľná. Samozrejme existujú rôzne mikročipy s rôznym počtom pinov a ďalej 8, 16 aj 32 bitové. Váš program, ktorý máte k dispozícii by Vám mohol dosť napovedať, keby ste mali aspoň nejaké teoretické znalosti. Priznám sa, ja by som sa s tým určite (zo zaujímavosti) rád pohral. Každý mikročip má v sebe zabudovaných niekoľko, myslím že vždy aspoň 2 porty. Dajme tomu, že máme nejaký jednoduchý mikročip, ktorý má dva porty po 8 bitov. PortA a PortB. Každý bit portov A a B zodpovedá jednému fyzickému pinu (nožičke) mikročipu. Môže ako každý bit nadobúdať hodnoty 0 a 1. Teraz si predstavme, že na PorteA máme pripojených 8 vypínačov, z ktorých každý prepája jeden pin portu A s nulou (napájania). Pokiaľ je vypínač pripojený na nultý pin zapnutý, tak sa bude prejavovať na dotyčnom pine hodnota 0 (úroveň Low), ak vypnutý tak 1 (samozrejme len v tomto konkrétnom zapojení). Čiže v celom bajte portu A sa bude zrkadliť (prejavovať) stav dotyčných 8 vypínačov. Ak by sme prečítali PortA a dostali výsledný bajt 11110000, tak vieme, že prvé štyri vypinače sú zopnuté. Celý vývoj takéhoto programu je úzko spätý s konfiguráciou programovaného zariadenia (koľko potrebuje súčastí na svoju funkčnosť) a tiež s fyzickým pripojením(kde je ktorý vstup či výstup naozaj pripojený). Čiže Váš robot má nejaké motory má nejaké senzory a takisto aj Led svietidlá a spínače. Každá súčasť má svoju charakteristiku z pohľadu smeru toku informácie, čiže sa dajú rozdeliť na vstupy alebo výstupy. Logicky teda tlačítka a senzory (nepoznám ich charakter ale predpokladám)sú vstupy. Led svietidlá sú výstupy, takisto ako aj motory. Je potrebné si uvedomiť, že na začiatku behu programu musíme stanoviť, ktoré piny sú vstupy a ktoré výstupy a tie čo nevyužívame nastavíme tiež ako vstupy. Aby som sa nemusel príliš zaoberať popisom štruktúry mikročipu, poviem len jednoducho, že PortA tak ako aj PortB majú každý k sebe prislúchajúci nastavovací port zvaný Tris (TrisA, TrisB). Ked nastavíme napr. TrisA bajt na 00001111, tak sme prikázali procesoru, aby nastavil prvé štyri piny Portu A ako vstupy a druhé ako výstupy. O tom prečo 0 znamená výstup, inokedy. Všetci dúfam vieme, že bity sa číslujú od 0 z prava (aj ja som si to práve pripomenul). Takže v mojom príklade by sme celý port A nastavili ako vstupy pre zabezpečenie testovania stavu pripojených vypínačov na pinoch. Port B ako výstupy napr. pin 0 - zapnutie/vypnutie motor1, pin 1 - zap/vyp motor2, pin 2 - zap/vyp led1 ... atd. Hneď po nastavení I/O je potrebné zabezpečiť naplnenie výstupov (portu B) hodnotami ale myslím, aspoň podľa Vášho programu, že toto môže byť zabezpečené ešte pred nastavením I/O. Toto nastavenie súvisí hlavne so schémou zapojenia, či sú výstupy orientované smerom na kladný pól napájania alebo záporný. Toto popisujem len pre úplnosť aby Vás nezmiatol fakt, že nastavením portu B na 11111111 sa 8 pripojených výstupných led (kupodivu)zhasne. Ako vidíte, všetka činnosť o ktorej som doteraz hovoril súvisí úzko s daným hardvérom a jeho konkrétnym zapojením. V tejto časti priloženého programu by som Vám nedoporučoval nič meniť. Mohli by ste rozhasiť správne základné nastavenie pre prácu mikročipu. Neviem do akej miery ste zdatný v programovaní, ale najbežnejší jazyk na programovanie takýchto mikročipov je assembler a C. V princípe je to jedno, ale pre procesor je dôležitý až výstupný strojový kód. Čiže naozaj neviem či máte k dispozícii Basicovský kompilátor pre Vášho robota a bez základných znalostí aspoň procedurálneho programovania (v tomto prípade úplne postačuje) nemáte zrejme šancu uspieť. Nič to zato, sám som vyrastal na Comodore 64, a s drvivou väčšinou princípov som sa zaoberal už v rámci toho levelu. Až ma z toho chytá nostalgia (zlaté to časy). Takže všetko podstatné čo sa v programe za jeho behu odohráva začína procedúre Main(). Ked sa na to dobre mrknete nájdete tam "večný" cyklus While 1. To je nikdynekončiaci cyklus, ktorého definícia končí kľúčovým slovom Loop pred koncom procedúry Main. V podobnom cykle bežia všetky programy pre takéto mikročipy. Všetko až po tento cyklus While nechajte tak a pracujte len s kódom vo vnútri While. Tak by ste nemali nič pokaziť. (Program končí až vypnutím napájania mikročipu) Dá sa odraziť od tejto inicializácie 'NASTAVENI IO lata=0xFF ' naplni port A hodnotou 11111111 latb=0 ' naplni port B hodnotou 00000000 latc=0xFF ' naplni port C hodnotou 11111111 trisa=0xF0 ' binárne 11110000 nastavi prve 4 piny ako vystupy trisb=0x3F ' binárne 00111111 prvych 6 pinov ako vstupy trisc=0x9F ' binárne 10011111 toto už nekomentujem Ako vidíte, Váš mikročip má až tri porty A, B a C Prvá inštrukcia v cykle While je buttons = portb 'obraz portuB sa naplní do premennej buttons Presne máte pod tým okomentované čo ktorý bit znamená. Do premennej buttons typu byte sa vlastne naplní hodnota portuB. Čiže získame "obraz" vstupov, ktorý následne testujeme v cykle až do konca cyklu While a podľa indikácie stlačenia niektorého tlačidla a stavu senzorov sa vykonajú príslušné činnosti robota (Spustí či vypne motor rozsvieti led atd). Nechce sa mi presne vŕtať sa v tom dopodrobna, lebo nemám toho robota, ale ako som povedal na začiatku si to niečo od Vás vyžaduje, ale ako zábavka je to dobré odhliadnuc od toho že človek môže získať cenné skúsenosti, pretože veľmi podobným spôsobom (v princípe)sa programujú profesionálne automatizačné systémy. Môžem Vás ešte mierne navigovať, sú tam definované funkcia Receive a procedúra Send Ako vidíte aj podľa komentáru v tele cyklu While, na čo vlastne slúžia sensors = Call receive() 'prijmi stav cidel senzoru Call send(motors) 'vysli jak se maji tocit motory Funkcia send si berie ako parameter premennu "motors" a na jej základe spúšťa motory. lata = leds tento kúsok kódu je z konca cyklu While a presne zabezpečuje to, že naplní bajt portuA premennou leds. Čiže fyzicky rozsvieti všetky potrebné led. A cyklus ide znovu. Z tohoto nám je jasné, že všetky bity portuA sú nastavené ako výstupy a sú pripojené na nejaké svetelné diódy, ktoré môžeme rozsvietiť napr. aj programovo keby ste tam namiesto tohto kódu napísali lata = 0xff 'binarne 11111111 v závislosti od zapojenia schémy, ako som už spomenul, by to mohlo ledky aj vypnúť čiže v tom prípade treba lata = 0 ' snad to nemusim prepisat do binarneho tvaru Myslím, že táto téma príliš nezapadá do kontextu tohto webu, ale niečo je tu povedané a je to k veci a dúfam, že som pomohol. Ak máte všetko potrebné, prajem Vám príjemnú zábavu. Prípadne by ma zaujímalo, či sa Vám s tým podarilo pohnúť. S pozdravom Virus
|