Alatke za graditelje
Da biste pravili elektronske uređaje, potreban vam je odgovarajući alat. Zašto i taj alat ne biste sami napravili? Kupovina gotovih instrumenata bi za veštog hardveraša bila isto što bi i za vrhunskog krojača bio odlazak u kineski butik kad mu zatrebaju nove pantalone
Opisaćemo dva jednostavna uređaja, koji se često koriste u digitalnoj razvojnoj laboratoriji. Prvi je logička sonda, koja je u stanju da detektuje ne samo nizak i visok logički nivo, nego i da ga razlikuje od „otvorenog“ ulaza, kao i da detektuje kratke impulse i prikaže ih kao vidljive svetlosne bljeskove.
Logička sonda
Sonda se napaja iz vlastite litijumske baterije napona 3 V, a sve funkcije obavlja 8‑pinski mikrokontroler PIC12F1572. On služi kao bafer signala, koji daje dovoljnu struju za napajanje SMD LED‑ova, detektuje otvoren ulaz i produžava kratke impulse, koji bi za naše oko bili nevidljivi. Osim toga, mikrokontroler meri vreme rada od 10 minuta, posle čega automatski prelazi u Sleep režim, tako da se umesto prekidača OFF‑ON koristi samo taster za uključenje, a isključenje je automatsko. Ako su svi LED‑ovi ugašeni, potrošnja struje u režimu ON iznosi samo 1 mA, tako da će u jednoj bateriji CR2032 biti dovoljno struje za preko 1000 uključenja od po 10 minuta. Potrošnja u Sleep režimu je zanemarljiva.
Način detekcije otvorenog ulaza je, blago rečeno, neobičan. Na izlazu A0 se tokom rada sonde neprekidno generiše brza „četvrtka“, a ulaz A1 poredi stanje sa ovim izlazom. Ako su signali jednaki ulaz je otvoren, pa će svi LED‑ovi biti ugašeni. Pošto se četvrtka dovodi preko otpornika od 330 kilooma, visoka impedansa izlaza neće remetiti rad logičkih signala na ciljnom sistemu (uređaju koji se testira). Ovo ne samo da nije nedostatak sonde, nego čak može da posluži i za detekciju otvorenih ulaza, koji su inače nepoželjni u svim digitalnim sklopovima. Kada vrhom sonde dodirnemo neki od otvorenih CMOS ulaza na ciljnom uređaju, povorka impulsa će verovatno poremetiti rad celog kola, što će nam pomoći da lociramo ulaz koji je greškom ostao otvoren.
Detekcija kratkih impulsa se obavlja na hardverskom nivou, jer se za to koristi periferal koji se zove Interrupt‑On‑Change. Ovaj periferal se softverski neprekidno rekonfiguriše, tako da povorka impulsa ne izaziva lažnu detekciju kratkih impulsa.
Sonda će detektovati logičke nivoe koji odgovaraju TTL standardu, kao i CMOS standardu u opsegu napajanja od 3 do 5 V. Na prednjoj strani sonde postoje tri LED‑a: plavi je za nizak logički nivo, crveni za visoki, a žuti krakim bljeskom od oko 150 milisekundi reaguje na svaku promenu logičkog nivoa, pa time i na vrlo kratke impulse.
Sonda je sagrađena na jednoslojnoj pločici dimenzija 90×24 mm, sa istim takvim komadom pleksiglasa debljine 2 mm, koji je odvojen od ploče distancerima M2,5×5 mm. Sve komponente su SMD – na donjoj strani ploče nema električnih kontakata, pa izolacija sa donje strane nije potrebna. Otpornici su iz klase 0805, a LED‑ovi su nešto veći, iz klase 1206. Postoji kabl sa štipaljkom za spajanje sa masom ciljnog uređaja, a kao vrh sonde koristi se debela igla za šivenje. Iznenadićete se kad vidite kako se takva igla lako lemi na štampanu ploču, a spoj je veoma pouzdan.
Memorijski damper
Tokom razvoja firmvera, koriste se razni softverski alati koji pomažu programeru da locira bagove i da se uveri da firmver radi onako kako je zamišljeno. Za to su razvijeni razni simulatori i debageri, koji obično rade tako što, kada se ostvari definisani uslov (obično prolazak kroz neku tačku u programu koja nosi naziv Breakpoint), zaustavi rad procesora i prikaže stanje sistemskih registara na ekranu računara. Oba ova načina su pogodna, ali imaju nedostatak da zaustavljaju rad sistema i da ne omogućavaju posmatranje promena unutar mikrokontrolera u realnom vremenu, dok sistem nesmetano radi.
Taj problem ne postoji u memorijskom damperu, koji je drugi razvojni uređaj o kome će ovde biti reči. Čini ga niz od osam 8‑bitnih pomeračkih (shift) registara sa LED‑ovima na svim izlazima, u koji mikrokontroler može da upiše proizvoljni sadržaj. Zadatak programera je da, kada je damper priključen, napiše kratak kod (najbolje u asembleru) koji će u željenom trenutku, verovatno u glavnoj petlji programa, upisivati sadržaje nekih memorijskih lokacija ili sistemskih registara u registre dampera. Tako ćemo moći da posmatramo sadržinu dela RAM‑a ili nekih sistemskih registara, potpuno transparentno tokom normalnog rada uređaja, dakle u realnom vremenu.
Da bi damper radio potreban je i softver. To je jedini nezgodan detalj, a svi drugi detalji predstavljaju „dobre vesti“. Najvažnija je ta da se za komunikaciju sa damperom koristi ista serijska komunikaciona linija koja služi i za programator, pa nije potrebno ništa praviti od početka – jednostavno se isključi programator (Pickit3, ICD2 ili neki treći) i umesto njega uključi damper. Kroz isti kabl se napaja damper, a pride postoji i RESET taster, kojim se ciljni sistem može ručno resetovati.
Ako softverska podrška radi kako treba, damper funkcioniše isto kao da ste otvorili plastično kućište mikrokontrolera („dekapirali“ ga, što se radi u postupku razbijanja neke zaštite) i pod mikroskopom spojili 64 mikrosonde na izlaze sistemskih registara ili bajtova memorije. Sadržaje tih registara tokom rada možete slobodno da posmatrate na LED‑ovima u binarnom kodu, što je velika pomoć, a može se reći i pravo zadovoljstvo, u postupku provere sistema i traganja za bagovima. Registre koje ćete prikazivati na LED matrici birate direktno u firmveru, u rutini koja podržava rad dampera. To može da bude niz od osam bajtova u internoj memoriji, ili nasumičnih bajtova preko reda, proizvoljno kombinovanih sa sistemskim registrima.
Hardver uređaja
Ako izuzmemo 16‑bitne pomeračke registre i LED‑ove, na damperu nema mnogo komponenata. Postoje ulazni baferi, koje čine šestostruki invertori 74HC04, i od kojih je sačinjen sklop za produžavanje impulsa, tako da posebni, 65. LED bljesne na oko 60 milisekundi svaki put kada je izvršen upis u damper, zapravo kad je ciljni sistem prošao kroz adresu sa koje se poziva specijalna sabrutina. Ovaj podatak može da bude od pomoći kada postoji novi upis, u slučaju da u sadržaju prikazanih bajtova nema promene.
Pomerački registri SCT2024 su veoma pogodni za sve primene u kojima treba upravljati velikim brojem LED‑ova kroz sinhroni serijski port. Ovo kolo ima jake bafere sa regulacijom izlazne struje, tako da nije potreban niz otpornika u seriji sa LED‑ovima. Umesto 16 otpornika, postoji samo jedan (na šemi obeležen kao Rext) kojim se reguliše struja svakog izlaza.
Kao što je uobičajeno kod većine integrisanih kola sa pomeračkim registrima, SCT2024 ima i jedan 16‑bitni paralelni registar, koji sve podatke koji su seriski upisani u pomerački registar, jednim impulsom iskopira u paralelni. Ova pogodnost se ovde ne koristi, jer bi za to bio potreban i treći bit porta sa mikrokontrolera, a na standardnom portu za ICSP (In Circuit Serial Programming) postoje samo dva. Umesto toga, ulaz za okidanje paralelnog registra LAT (Latch) je spojen sa CLK (Clock), pa se paralelni prenos obavlja posle svakog Clock impulsa. Posledica je da se pri svakom upisu standardnog paketa od 64 bita događa „vizuelno razmazivanje“ podataka na LED‑ovima, što će biti jedva primetno jer se obavlja vrlo brzo, ali može da smeta ako se upis obavlja u prekratkim intervalima. Ovo svakako treba imati u vidu kad se bira u kom delu programa će se nalaziti poziv specijalne sabrutine za upis podataka u damper.
Kabl koji olakšava rad
Jedan od problema u radu sa ovim uređajem jeste taj što svaki put treba iskopčati konektor sa programatora, pa ga priključiti na damper. Posle toga, kad želimo da probamo izmenjenu verziju firmvera, treba uraditi isto, ali u suprotnom smeru. Pošto je za razvoj firmvera prosečne složenosti potrebno nekoliko desetina, pa čak i stotina međuverzija programa, jasno je da bi trebalo potražiti rešenje koje će u eksploataciji zahtevati manje angažovanja.
Mada bi sa nekim programatorima, kakav je Pickit3, bilo moguće paralelno povezati programator i damper, korektnije rešenje je da se napravi specijalni 5‑žilni kabl koji bi, uz pomoć preklopnika, birao kontakte programatora ili dampera. Nije neophodno preklapati sve kontakte, nego samo serijski Data i serijski Clock.
Na slici je rešenje sa dva tastera koji su mehanički spregnuti, tako da čine jedan taster u DPDT topologiji (to je taster koji ima dva mirna i dva radna kontakta). Kad je taster otpušten, sa ciljnim sistemom je povezan damper, a kad je pritisnut, povezan je programator. To znači da svaki put kad se programira mikrokontroler ciljnog sistema, treba držati pritisnut taster, jer će u suprotnom softver programatora prijaviti grešku. To je svakako udobnije nego isključivati i uključivati konektor svaki put. Alternativa ovome bi bila da se napravi sklop koji će to uraditi automatski, recimo sa nekim analognim selektorima (DG444 ili slično), ali ćemo to ostaviti za neku drugu priliku.
Firmver za podršku
U izvorni kod firmvera koji testirate treba da unesete potprogram za slanje sadržine osam bajtova na sinhroni serijski port koji vodi ka damperu. To je, naravno, isti port koji služi za programiranje i debagiranje mikrokontrolera, ali nije moguće koristiti već postojeći sklop u mikrokontroleru, nego treba napraviti niz instrukcija koji radi isto to. Kod nekih mikrokontrolera, recimo onih iz 16‑bitne serije PIC24, moguće je koristiti postojeći periferal za sinhroniserijsku komunikaciju, naravno uz remapiranje ulaza i izlaza (za ovo treba proučiti opciju PPS, Peripheral Pin Select), ali je to komplikovano i nepotrebno. Lakše je napraviti potprogram koji će uraditi to isto, iako uz utrošak nešto više procesorskog vremena.
Sledeći potprogram radi upravo to (barem za 8‑bitnu seriju PIC18), uz napomenu da kod nekih procesora treba izmeniti portove B6 i B7, jer se ovi portovi ne koriste baš kod svih mikrokontrolera za serijsku vezu sa programatorom. Ovde je korišćen asemblerski kod, koji je moguće koristiti i iz programa pisanog u jeziku C:
Kada imamo ovaj potprogram u izvornom kodu programa, lako je pozvati ga sa bilo kog mesta u programu, što će verovatno biti negde u glavnoj petlji. Treba upisati samo:
Potprogram ne koristi internu memoriju niti sistemske registre, pa ni akumulator W, a verovali ili ne – ne menja ni sistemske flegove. Jedini izuzetak je 16‑bitni registar FSR1, koji se koristi kao memorijski pointer, za određivanje 8‑bajtnog bloka RAM‑a koji će biti prikazivan u realnom vremenu na LED matrici dampera.
Ako se FSR1 ipak koristi u programu i ne sme da se menja, lako je izmeniti potprogram tako da koristi FSR0 ili FSR2, a ako se sve tri već koriste, onda nema druge nego da se pre poziva sadržaj sačuva u memoriji, pa posle povratka iz potprograma ponovo vrati u FSR1.
Čitav postupak traje 354 instrukcijska ciklusa, zajedno sa definisanjem pointera FSR1, kao i pozivima i povratcima. Uz takt od 40 MHz, to je 35,4 mikrosekundi – u ogromnoj većini slučajeva proći će potpuno neprimećeno. Ako je tajming kritičan, možemo da prikazujemo stanje samo jednog registra, što će se izvršavati oko osam puta brže. U tom slučaju, umesto CALL DUMP8 treba pozvati CALL DUMP1, a sadržinu registra ćemo videti u donjem redu, pri čemu ćemo u prethodnim redovima videti istoriju promene istog registra u prethodnih sedam ciklusa.
U praksi se pokazalo da je ovaj uređaj nezamenljiv u testu programa i lociranju teških bagova. Veoma je korisno posmatrati stanje memorije ili registara mikrokontrolera dok on radi, a najčešći rezultat je da je već na prvi pogled jasno gde je koren baga u programu. Damper je vrlo koristan i za vizualizaciju rada mikrokontrolera tokom učenja programiranja i za upoznavanje sa arhitekturama procesora, kao i za analizu tuđih programa.
Izvorni kod programa i projekte štampanih ploča (u programu Protel 98) možete da preuzmete sa pc.pcpress.rs/download/pc235alat.zip
Voja Antonić