Avtor: Brian Millier
2019_277_47
Nedolgo nazaj sem prišel do promocijskega materiala za novo razvojno ploščo za Internet stvari podjetja Microchip. Plošča temelji na 8-bitnem mikrokontrolerju in je v bistvu všečna verzija popularnega ATmega328, ki je uporabljen v večini Arduino plošč.
Uporabljal sem Atmel AVR družino mikrokontrolerjev več kot 10 let, ko pa sem pričel delati Wi-Fi projekte, sem pričel uporabljati ESP8266 in ESP32 podjetja Espressif. Čeprav mikrokontrolerji podjetja Espressif niso ARM mikrokontrolerji, je Arduino IDE nedolgo nazaj bil razširjen za delo z njimi. Pred nekaj leti sem se odločil, da začnem uporabljati Arduino IDE zaradi velikega števila perifernih knjižnic, aktivnih uporabniških forumov in dejstva, da so ESP32 in Kinetis ARM MCU-ji, ki jih uporabljam, podprti tudi v Arduino IDE (z uporabo vtičnika Teensyduino).
Ta vsebina je samo za naročnike
V tem članku bom najprej predstavil to novo razvojno ploščo. Razvojna plošča AVR-IoT je namenjena IoT aplikacijam. Večino svojih funkcij je na voljo zaradi štirih namenskih čipov:
- Atmelov ATmega4808 MCU, 8-bitni mikrokontroler z 48 KB Flash pomnilnika in 6 KB SRAM pomnilnika
- Atmelov ATWINC1510 Wi-Fi krmilni čip.
- Atmelov ATECC608A CryptoAuthenication™ čip.
- Microchipov MCP73871 LiPo polnilni čip.
Fotografija 1 kaže to ploščo. Vsak od zgoraj navedenih štirih čipov je jasno ločen in označen na plošči.
Krmilnik za brezžično povezavo ATWINC1510 je nameščen na svoji plošči, ki vsebuje lastno anteno.
Tako kot Arduino plošče ima ta plošča USB vrata (microUSB), ki se uporabljajo za programiranje in serijsko komunikacijo. Standardni AVR ISP konektor za programiranje ni prisoten.
Sprva me je motilo, ko sem videl, da Atmel/Microchip ni vključil konektorja za ISP programiranje. Namesto tega so dodali še en nov Flash programski protokol številnim drugim, ki so jih že uporabili za prejšnje 8-bitne MCU-je. Privlačna značilnost Arduino plošč je, da uporabljajo serijski bootloader, kar odpravlja potrebo po hardverskem programatorju.
Na tej plošči Atmel/Microchip uporablja to, kar imenujejo nEDBG protokol programator/razhroščevalnik. To deluje prek USB-ja in ga upravlja namenski čip ATSAMD21, Atmelov Cortex M0 ARM. Menim, da je nekoliko zabavno, da se Atmel pridruži številnim drugim mikrokontrolerskim podjetjem, ki prodajajo razvojne plošče, kjer je ciljni MCU programiran/razhroščen s strani neodvisnega MCU-ja, ki je veliko močnejši od ciljnega MCU-ja. Na to sem naletel pri 10 US$ vrednih razvojnih ploščah PSoC4200 podjetja Cypress Semiconductor, ki so vsebovale mnogo močnejši PSoC5 programator/razhroščevalnik.
Ker je nEDBG programator/razhroščevalnik na plošči, ni potrebno kupiti drugega programatorja. Dejstvo, da AVR-IOT WG plošča manjka ISP programirni konektor izhaja iz tega, da sam ATmega4808 ne vsebuje ISP programskih priključkov/funkcij. Če pogledamo fotografijo 1 se zdi, da bi lahko programatorski del plošče odlomili zaradi majhnih zarez v tiskanem vezju, ki ga razmejujejo od glavnega dela plošče. Vendar pa to ni možno.
Čip ATSAMD21, ki se uporablja za funkcijo nEDBG, ponuja tudi druge funkcije. Ko priključite to ploščo v USB vrata računalnika, se bo samodejno pojavila kot tri ločene naprave:
- Curiosity Data prehod
- Curiosity Virtual COM port
- Curiosity USB pomnilnik
Mislim, da je bilo ime “Curiosity” uporabljeno v zgodnejši Atmel/Microchip razvojni plošči, saj ni omenjeno v AVR-IOT literaturi. Čip ATSAMD21 verjetno ima to ime ugnezdeno v svoj firmware med svojimi parametri USB vhoda.
Na fotografiji 2 je prikazan zajem zaslona iz apleta Upravljalnika naprav na mojem računalniku, potem ko sem priključil ploščo. To se bo zgodilo brez potrebe po prenosu/namestitvi USB gonilnikov. Podatkovni prehod je podatkovna pot, ki jo uporablja nEDBG razhroščevalnik.
Uporabite lahko virtualna COM vrata za sporočanje sporočil v osebni računalnik z uporabo Serial Terminal aplikacije, kot je tista v Studiu 7 (o čemer pišem kasneje).
Curiosity USB je zanimiva naprava za shranjevanje. Takoj, ko vklopite ploščo v računalnik, se prikaže pojavno okno, ki prikazuje pogon Curiosity, tako kot če bi priključili pogon Flash (če je vaš operacijski sistem nastavljen tako, da omogoča samodejno namestitev zunanjega USB-ja Flash/trdi disk). Datoteko .HEX lahko povlečete/spustite iz računalnika v ta pogon in ta šestnajstiška koda se samodejno sprogramira v ATmega4808 na AVR-IOT WG plošči. V računalniku ali programatorju ni potrebno imeti nobene razvojne programske opreme, če le imate v njem HEX datoteko. To bi bilo na primer priročno, če bi morali posodobiti ugnezdeno programsko opremo na projektu na oddaljeni lokaciji, kjer ste imeli dostop samo do računalnika ali prenosnega računalnika nekoga drugega, ki ni vseboval razvojne programske opreme.
Ta potegni/spusti način programiranja MCU plošče preko USB pomnilniških funkcij ni nova ideja – mbed razvojne plošče (z uporabo NXP MCU-jev) so imele to funkcijo že pred nekaj leti.
Zdaj, ko sem na kratko opisal, kaj se nahaja na plošči, in ko sem podal svoje mnenje o programskih funkcijah, si poglejmo glavno prodajno točko plošče – njene IoT funkcije.
V oblaku v 30 sekundah
Ko kliknete na “CLICK-ME” datoteko, ki je navedena na zgornjem “Curiosity” disku, se bo odprl brskalnik na vašem računalniku in se pomaknil na spletno mesto “avr-iot.com”. Datoteka “CLICK-ME” vsebuje tudi edinstven 18-mestni (Hex) identifikator, ki je vaš ID # in se uporablja za dostop do določenega dela spletne strani avr-iot.com, ki je namenjena vaši plošči.
Na fotografiji 3 je prikazana ta spletna stran – na voljo so 4 ikone, ki prikazujejo različne stopnje napredka pri komuniciranju plošče s storitvijo Google Cloud. Skrajni levi kaže, da je plošča priključena na USB vrata računalnika.
Predvidevam, da mora iskati vnos za Drive Drive Curiosity Nano v upravitelju naprav, da to ve. Če je to izklopljeno, bo spletna stran postavila pogovorno okno, ki vas bo pozvalo, da vnesete poverilnice za Wi-Fi dostopno točko: SSID, geslo in vrsto varnosti omrežja. Te informacije NE bodo prenesene preko interneta, ampak bodo na vašem lokalnem trdem disku ustvarile datoteko z imenom »WIFI.CFG«. Ta datoteka bo v isti mapi, ki jo vaš brskalnik običajno prenese – z mojim brskalnikom Firefox je bila mapa DOWNLOADS v mapi Dokumenti. Nato morate povleči/spustiti to datoteko na »Curiosity« pogon. To dejanje samodejno povzroči, da se te Wi-Fi poverilnice zapišejo v EEPROM ATmega4808. Ko zdaj pogledam imenik pogona »Curiosity«, ne vidim več datoteke WIFI.CFG, zato jo je treba samodejno izbrisati, potem ko je bila zapisana v EEPROM.
Ko so WiFi poverilnice naložene v EEPROM, se bo plošča ponastavila in poskusila vzpostaviti povezavo z WiFi dostopno točko. Če bo to uspešno, bo druga ikona na spletni strani preverjena. Zelo hitro po tretji ikoni bo prikazana kljukica, ki označuje, da je povezana z Googlovim oblakom. Tudi zelo hitro četrta ikona prikaže kljukico, ki kaže, da se podatki iz senzorjev temperature in svetlobe na plošči prenašajo v Google Cloud. Spletna stran bo zdaj prikazala ID naprave za vašo ploščo in prikazala se bosta dva dinamično osvežena grafa svetlobe in temperature, kot je prikazano na fotografiji 3. Poleg tega na plošči AVR-IoT obstajajo 3 LEDice, ki kažejo enak status kot ikone na zgoraj navedeni spletni strani: Wi-Fi povezava, Cloud povezan in prenos podatkov v oblaku.
To je precej impresivno: če hitro tipkate in imate pri roki svoje Wi-Fi poverilnice, mislim, da bi se verjetno lahko v 30 sekundah povezali na oblak, kot trdi Microchip na njihovi spletni strani!
Obstaja del spletne strani, ki omenja “Stay up to Date”, za nadgradnje programske opreme. Ko sem ga preizkusil, sem dobil napako 404, kar pomeni, da še ni bila vzpostavljena takšna spletna stran. Toda, ko sem dobil svojo ploščo, je bilo zelo zgodaj, in pričakujem, da še ni na voljo posodobitev programske opreme.
Dinamično posodobljeni senzorski grafikoni na spletni strani so precej impresivni, še posebej ob upoštevanju dejstva, da osebno niste storili ničesar za avtentikacijo vaše plošče na Google Cloud. Ko AVR-Iot WG plošča zapusti tovarno, je ena od datotek, zapisanih v pogon »Curiosity«, datoteka PUBKEY. Dolga konstanta vsebovana v tej datoteki, skupaj z nekaterimi postopki pred avtorizacijo, ki jih je opravil Microchip, je vse, kar je potrebno, da omogoči vaši plošči, da komunicira s tem, kar Microchip imenuje Google »sandbox« račun v oblaku. Na tej točki sem vedel le to, da so podatki, ki so bili poslani s plošče Googlovemu oblaku, na voljo v realnem času, vendar v Googlovem oblaku ni trajnega shranjevanja teh podatkov. Ko boste vedeli, kako programirati ploščo in imeti določeno aplikacijo v oblaku, lahko kliknete gumb »Graduate« na tej spletni strani, da prekinete povezavo s tem »sandbox« računom in ga povežete s svojim zasebnim Google računom.
Predvidevam, da ta spletna stran vsebuje nekaj javascripta za grafične podatke senzorjev, ki prihajajo iz vaše plošče. Ko sem poskušal dostopati do spletne strani na svojem iPad-u, z URL-jem »avr-iot.com/device/« in dodal ID # plošče, sem dobil »banner« del strani z zgoraj omenjenimi ikonami napredka, toda stran se je potem izpraznila, ko je poskušala narisati grafe. Le redko naletim na primere, ko IOS Safari in Chrome brskalniki ne bodo prikazali spletne strani enako kot namizni računalnik, zato sem bil malce presenečen. Pravzaprav sem se spraševal, če se morda podatki o senzorjih samo berejo iz USB povezave računalnika z računalnikom, in ne iz Googlovega oblaka. Vendar, ko sem izključil ploščo iz USB vmesnika računalnika in jo je napajala LiPo baterije, je nadaljevala s snemanjem grafov, zato je bil moj sum neutemeljen.
Zelo sem bil navdušen nad tem, kako brez problemov je bila vzpostavljena ta povezava z oblakom. Glede na to, da plošča vsebuje ločen Wi-Fi modul z lastnim MCU (ki vsebuje 8 Mb Flash), in ločen Crypto čip, se je zdelo razumno, da bi lahko 8-bitni MCU ATmega4808 izvajal dokaj zapletene aplikacije v oblaku, ne da bi pri tem naletel na meje njegovega 48 KB Flash pomnilnika in 6 KB SRAM-a. Čeprav cenim vse dodatne funkcije, Flash in SRAM, ki jih vsebuje ARM MCU, še vedno cenim enostavnost programiranja z 8-bitno AVR arhitekturo.
Razvojni softver
Vsa opažanja, ki sem jih omenil doslej, so bila opravljena samo z uporabo AVR-IoT WG plošče in mojega računalnika – brez razvojne programske opreme, ki je bila naložena. Nadzorna plošča AVR-IoT WG se ne sme uporabljati s programsko opremo za razvoj AVR, ki jo trenutno uporabljam ali ki sem jo uporabljal v preteklosti:
- Bascom-AVR
- Arduino IDE (z vtičnikom za ESP8266, ESP32, in Teensyduino za Kinetis ARM MCUje)
- Visual Micro. To je brezplačna Visual Studio aplikacija, ki deluje kot sofisticiran IDE z uporabo Arduino verige orodij v ozadju. Visual Micro tudi podpira AVR, ESP8266, ESP32, in Teensy mikrokontrolerje.
Medtem ko sem bil vrsto let zelo zadovoljen z Bascom-AVR prevajalnikom, sem prešel na Arduino okolje in kasneje na Visual Micro. To sem storil zaradi obilja uporabniško ustvarjenih knjižnic Arduino in forumov za podporo, kot tudi zaradi dejstva, da so bili omenjeni zgoraj omenjeni 32-bitni MCU podprti tudi z Arduino IDE. Visual Micro je odličen in omogoča veliko lažji razvoj kode kot Arduino IDE.
Nobeno od teh razvojnih orodij ni vsebovalo podpore za razhroščevanje v čipu. To lahko delno pojasnimo z dejstvom, da v družini AVR MCU v zgodnjih modelih AVR ni bilo razhroščevanja in so se v poznejših modelih razlikovali od naprave do naprave. Poleg tega je bil potreben bolj prefinjen/drag programator poleg AVRISP-mkII, ki sem ga imel.
Da bi nadalje razvijal z AVR-IoT WG ploščo in njegovim ATmega4808 MCU, sem vedel, da bom moral namestiti novo razvojno programsko opremo, saj moja trenutna razvojna programska oprema še ne vsebuje ATmega4808.
V preteklosti sem namestil starejše različice programa Atmel Studio in z njim nisem bil zadovoljen. Zdelo se je zelo napihnjeno in počasno nalaganje. V primerjavi s Bascom-AVR Basic prevajalnikom, ki sem ga bil navajen, se je Studio zdel veliko bolj zapleten za uporabo. Od takrat, ko sem prešel na Arduino IDE, sem postal bolj usposobljen za »C«. Studio 7 se zdaj izvaja v okviru Microsoftove Visual Visual školjke in tudi Visual Micro IDE, ki ga zdaj uporabljam tudi redno. Torej, tokrat sem bil bolj optimističen.
Moj prvi poudarek pri preizkušanju nove družine MCU in/ali razvojne plošče je, da na splošno poskusim sestaviti dobavljeni program in ga nato prenesem na ciljno ploščo. Dokler tega ne morete uspešno opraviti, ne boste imeli veliko priložnosti za pisanje programa in odpravljanje napak v eni od svojih aplikacij. Ko namestite razvojno programsko opremo za družino mikrokontrolerjev, je običajno na voljo več vzorčnih programov, ki jih ponuja prodajalec. Pogosto so to nepomembne aplikacije, vendar služijo zgornjemu omenjenemu namenu.
Po namestitvi programa Studio 7 ne najdem nobenih primerov AVR programov. Namesto tega Atmel ponuja program, imenovan Atmel Start Configurator, ki zavzame mesto vzorčnih programov. Torej, preden raziščete samo Studio 7 aplikacijo, si lahko najprej ogledate spletno aplikacijo Atmel Start Configurator.
Atmel Start Configurator aplikacija
Ta aplikacija ponuja knjižnico osnovnih primerov aplikacij in “čarovnika” za konfiguracijo naprav, vse skupaj v eni spletni aplikaciji. Lahko začnete iz nič in konfigurirate CPU, GPIO in notranje periferne enote AVR. Konfigurator za zagon bo nato ustvaril datoteke za »C« inicializacijo, ki so potrebne za to. Druga možnost je, da lahko izbirate med več dobavljenimi aplikacijami, ki jih izbere MCU in tip razvojne plošče in po želji ureja nastavitve CPE, GPIO in perifernih naprav, da ustrezajo vašim potrebam. V primeru AVR-IoT WG plošče je izvorna koda za tovarniško nameščen program na voljo kot primer v programu Start Configurator. V fotografiji 4 si lahko ogledate 3 primere, ki so na voljo, ko izberete »ATmega4808 AVR IoT WG« v oknu plošče.
Če kliknete na prvi primer in nato izberete »Odpri izbrani primer«, vam bo predstavljen velik zaslon, ki prikazuje, kako je bil program mega4808 MCU konfiguriran za upravljanje tega projekta. Fotografija 5 kaže zgornji del tega zaslona na zavihku Dashboard. Ogledate si lahko vse različne MCU periferne funkcije, ki jih uporabljate. Na voljo so tudi PINMUX in CLOCKS zavihki za urejanje teh nastavitev.
Predvidevajmo, da smo zadovoljni s tem, kako primerni program deluje, tj. ga ne želimo spreminjati. S pomikanjem po zaslonu do nastavitev Toolchain-a vidimo IDE okno, ki vsebuje Atmel Studio. Če kliknete na to, ni drugih možnosti. Sprva sem to razumel, kot da Microchip MPLAB X IDE ni izvedljiv razvojni program za ta MCU/ploščo.
Na vrhu zaslona Start Configurator so trije zavihki:
- (slika spremenjlivka) Ogled kode
- Shrani konfiguracijo
- Izvozi projekt
Nisem poskusil pogledati kode, ker bom kasneje to naredil v Atmel studiu. Ker nisem ničesar spremenil v tovarniško vgrajenem primeru programske opreme AVR-IoT WG, ni bilo treba izbrati niti zavihka Save Configuration. Z izbiro Export Project zavihka se prikaže zaslon, prikazan na fotografiji 6.
Tukaj postane malo zmedeno. Vidite lahko, da je Atmel Studio predhodno izbran, lahko pa izberete tudi MPLAB-X in IAR workbench. Ker sem že namestil MPLAB X na moj primarni računalnik, sem prvič poskusil možnost MPLAB X IDE. S pritiskom na gumb Download Pack dobite datoteko z datoteko .atzip. Ker to datoteko generira gostiteljski računalnik spletnega strežnika, se bo prenesla v isto mapo, kjer brskalnik privzeto prenese prenose. Ker je to posebej oblikovana datoteka ZIP, jo je treba “uvoziti” v MPLAB X s pomočjo menija Datoteka> Uvozi> Začni projekt MPLAB.
Da celotno zgodbo skrajšam, je MPLAB X brez težav uvozil datoteko .atzip, a ko sem poskušal zgraditi projekt. Na koncu procesa sem dobil naslednje napake:
make[1]: *** [.build-conf] Error 2 make: *** [.build-impl] Error 2
MPLAB X sploh ne poznam, in ker je aplikacija Start Configurator sprva prikazala samo Atmel Studio v svojem oknu IDE v razdelku »Nastavitve orodij«, sem to razumel, da bi moral pozabiti na MPLAB X IDE in nadaljevati z namestitvijo programa Studio 7.
Atmel Studio 7
Ker je za mene ključnega pomena, da moja aplikacija Visual Micro še naprej dela za moje druge projekte, sem okleval, da bi namestil Studio 7. Bal sem se namreč, da bi lahko naredil spremembe v moji obstoječi lupini Visual Studio, ki bi lahko »razbila« mojo Visual Micro namestitev. Zato sem se odločil namestiti Studio 7 na drugi računalnik z Windows 7, ki ga imam v svoji pisarni. To je 8-let star Intel Core Duo CPU s 4 GB RAM-a, zato nisem pričakoval, da bi Studio 7 tekel tako hitro kot na glavnem računalniku z Intel i7.
Studio 7 je velika aplikacija: 3,2 GB za Studio 7 in 1,68 GB za Visual Studio Shell. Namestitev je trajala približno 40 minut na starejšem zgoraj omenjenem računalniku. Na računalnik se naloži več kot 45 sekundah, tako kot sem se spomnil iz izkušenj s prejšnjimi različicami. Njegov “splash” zaslon se ne prikaže “pred vsemi” drugimi okni, ki so že prisotna na zaslonu, zato je lahko skrit, zaradi česar se sprašujete, le kaj se dogaja 45 sekund. To je zelo zmogljiv program z zmožnostjo za razhroščevanje na čipu, ki odtehta počasno nalaganja. Studio 7 je shranjen na vašem trdem disku na naslovu:
Program Files(x86)/Atmel/Studio 7
Ko zaženete Studio 7 program, bo preveril prisotnost vseh Atmel razvojnih plošč, ki so priključene na USB vrata računalnika. V zgornjem levem delu zaslona se prikaže “AVR-IoT WG -1507”. “1507” mora biti nekakšna identifikacijska številka plošče in je lahko drugačna od vaše plošče.
Ko sem zagnal Studio 7, sem sledil navodilom v konfiguratorju za zagon in izbral menijski element Datoteka> Uvoz> Začni projekt MPLAB. Ko ste izbrali »AVR-IoT-WG Sensor Node.atzip« datoteko, ki jo je ustvarila aplikacija Start Configurator, je datoteko uvozil brez težav. Medtem ko oba Visual Micro in Studio 7 delita lupino Visual Studio, je uporabniški vmesnik precej drugačen. Pri izbiri Build menija je prikazan meni »Build AVR-IoT-WG Sensor Node«. Ta postopek gradnje je potekal dobro, Build sporočilo se je uspelo prikazati v oknu Output ob spodnjem delu zaslona.
Namesto da bi ugotovili, kako izvajati program v načinu za razhroščevanje, sem se odločil, da naredim nekaj preprostega in samo prenesem program na ploščo AVR-IoT WG z uporabo programatorja nEDBG na sami plošči. V meniju Orodja sem izbral “Device Programmers”. Prikaže se zaslon, prikazan na fotografiji 7.
NEDBG se prikaže v oknu orodja, okna naprave in vmesnika pa so izpolnjena, kot je prikazano. Če želite aktivirati ta način programiranja, morate klikniti “Apply “. Na tej točki lahko preberete podpis naprave in ciljno napetost, da se prepričate, da imate pravilno komunikacijo z AVR-IoT ploščo.
Na tej točki morate klikniti na zavihek “Memories”, ki prikaže zaslon, prikazan na fotografiji 8.
Če pritisnete gumb »Program«, boste prenesli program v Flash pomnilnik čipa Mega4808. Ko se to dogaja, bo utripala zelena LEDica na plošči nEDBG (drugače sveti nepretrgoma, da prikaže Power On). Ker je ta program že tovarniško naložen, vam ni treba skrbeti niti za Fuse ali za Lock bite. Vendar pa boste za lastne programe po meri morda morali vnesti in urediti nastavitve Fuse bitov, če je to potrebno za vašo aplikacijo.
V oknu, obkroženem v rumeno, bi morali videti mesto mape datoteke .elf v programu. Ni vam treba vedeti za to lokacijo mape, če želite programirati cilj s programatorjem nEDBG, vendar je v mapi tudi datoteka .hex. Namesto programiranja čipa preko nEDBG programatorja lahko preprosto povlečete/spustite to .hex datoteko na “Curiosity” diskovni pogon, ki se pojavi v upravitelju datotek, ko prvič priključite AVG-IoT WG ploščo na računalnik. Potem bi samodejno programiral Flash pomnilnik mega4808, kot smo že omenili v članku.
Razhroščevanje AVR-IoT v Studio 7 programu
Programator nEDBG na AVR-IoT plošči je sposoben izvajati tudi razhroščevanje na čipu. To razhroščevanje je lahko tako preprosto ali zapleteno, kot je potrebno, odvisno od tega, kako usposobljeni ste pri uporabi orodja in kako težko je najti vašega »hrošča« v programu. Oglejmo si kratek pregled nekaterih lažjih funkcij, ki jih lahko uporabite.
Ko začnete, je najbolje izbrati funkcije za razhroščevanje z uporabo zavihka Meni Debug na vrhu programa. Tu boste videli vse možnosti razhroščevanja, kot tudi ikone orodne vrstice, ki jih lahko izmenično uporabite za priklic funkcije.
Predpostavljam, da ste uvozili datoteko »AVR-IoT-WG Sensor Node.atzip«. Ne morem se spomniti, ali se katera od programskih kod na začetku prikaže v velikem oknu urejevalnika kode na levi strani zaslona, vendar pa vam bo okno Raziskovalec rešitev na desni pokazalo hierarhični meni vseh rutin, ki se uporabljajo v programu. S klikom na »main.c«, kot je prikazano na fotografiji 9, se prikaže koda, ki se zažene ob zagonu.
Osnovni postopek za razhroščevanje bi bil, da nastavite prelomno točko (break point) – bodisi da vidite, ali program doseže to točko, bodisi da preverite stanje nečesa, ko se to zgodi. Večina funkcionalnosti predstavitvene AVR-IoT programske opreme je vsebovana v številnih definiranih funkcijah. Vendar pa lahko v main.c izberete vrstico
LED_flashYellow () v rutini sendToCloud (void)
in z levo tipko miške kliknite na to vrstico kode v sivi vrstici na skrajni levi strani (ali pritisnite F9).
To bo določilo prelomno točko na tej vrstici v kodi, ki jo označuje rdeča pika. Če kliknete na (ikono 1) , se spremenjena koda (tj. vstavljena prekinitvena točka) se prenese v Flash spomin Mega4808. Napredek tega procesa zapisovanja lahko vidite na samem dnu okna programa Studio 7, v oranžni vrstici stanja Debug. Ta statusna vrstica za razhroščevanje bo nato pokazala, da se program izvaja. Zelena LEDica na nEDBG plošči bo utripala med razhroščevanjem. Ker se podatki pošiljajo v oblak vsako sekundo, se bo program na točki prekinitve ustavil sekundo po vzpostavitvi povezave v oblaku. To bo označeno z rdečo točko točke prekinitve, ki se spremeni iz puščice v piko. Izvajanje programa se vedno ustavi pred izvajanjem kode na samem prelomnem mestu, tako da rumena LEDica, ki običajno utripa po pošiljanju podatkov v oblaku, še ne bo svetila.
Če večkrat izberete Debug>Step Into, boste lahko spremljali, kako program izvaja kodo in ko doseže
VPORTD.OUT &= ~(1<<pin);
se bo rumena LED prižgala.
Če želite nadaljevati z izvajanjem programa od te točke, zgolj pritisnite (ikono 1) še enkrat. Ko končate razhroščevanje spet pritisnite (ikono 2) za ustavitev. Oranžna statusna linija razhroščevanja na dnu zaslona bo izginila. Čeprav na oranžni statusni liniji za rahroščevanje ni prikazano ničesar, preden je ta izginila, je bila točka prekinitve samodejno odstranjena iz kode, saj boste opazili, da se bo demo firmware ponovno zagnal, kot to kaže rumena LEDica, ki utripa vsako sekundo v sinhronizaciji z prenosom podatkov v oblak.
Poleg standardne prekinitvene točke lahko dodate tudi akcijske prekinitvene točke. Namesto da bi zaustavile program, bodo izvedle nekaj dejanj. Običajno bi bilo, da bi vsakič, ko pride do prekinitvene točke, bi lahko poslali nekaj informacij PC-ju. To bi bilo analogno običajni Serial.println () obliki razhroščevanja v Arduino IDE. Ko postavite prekinitveno točko, jo kliknite z desno miškino tipko in nato izberite Actions…. Tam lahko nastavite pogoje, če želite, ali pa samo izpolnite okno, ki določa, katero besedilo želite poslati v okno Output. Vrednost spremenljivke lahko pošljete tudi tako, da vnesete ime spremenljivke v (slika spremenjlivka). Ikona prekinitvene točke se bo zdaj preklopila na (ikona 3). Če iščete izhodno okno, je to eden od zavihkov v spodnjem desnem oknu, zato ga izberite. Imel sem zgolj mešan uspeh s tiskanjem spremenljivk na ta način. Pogosto le natisne, da lokacija ni na voljo. Sumim, da je bila v tem primeru spremenljivka, ki sem jo izbral, lokalna, ali shranjena v skladu ali v registru.
Druga koristna funkcija za razhroščevanje je zmožnost opazovanja in nastavljanja katerega koli od perifernih registrov Mega4808. To je mogoče storiti le, če je zagnan program za razhroščevanje. Nato izberite Debug>Windows>I/O. Fotografija 10 prikazuje to okno.
Izbral sem PORTD ker vem, da so to vrata, ki poganjajo 4 statusne LEDice na AVR-IoT WG plošči (glejte Dodatek B v uporabniškem priročniku za preslikavo vseh pinov, LEDic itd.). Vidite lahko, da so 4 LSB od DIR registra napolnjeni z modro, kar pomeni, da so nastavljeni kot Izhodi. Če kliknete na bit 0 priključka OUT, se bo spremenil v belo, kar pomeni, da so vrata zdaj NIZKEM nivoju. Ker so LEDice povezane s PORTD na Vcc, bo nizek nivo na priključku vklopil LEDico. Med spreminjanjem tega bita lahko vidite, da LED spreminja stanje.
Obstaja veliko naprednejših funkcij za odpravljanje napak, ki jih lahko uporabite, ko se boste naučili, kako delujejo. Edina druga, ki jo bom omenil v tem članku, je Attach to Target funkcija.
Predpostavimo, da se izvaja AVR-IoT projekt in po določenem obdobju (ali pa se je zgodil nek neodločen dogodek), se zdi, da je plošča „obvisela“ – tj. ne izvaja nalog, ki jih pričakujete. Če je plošča priključena na USB vrata računalnika, lahko zaženete Studio 7 in izberete Debug>Attach to Target. Brez resetiranja ali drugačnega motenja teka Mega4808, bo okno urejevalnika kode označilo vrstico v programu, ki jo je CPU izvajal ob zagonu ukaza Attach to Target. To je lahko zelo koristno pri določanju, kaj bi lahko šlo narobe.
Ko ste v razhroščevalnem načinu in ustavite program na prekinitveni točki ali začasno ustavite delovanje, lahko pregledate pomnilnik z uporabo zavihka Memory. Med brskanjem sem v območju USER_SIGNATURES našel SSID in geslo za Wi-Fi v ne šifrirani obliki na lokaciji 0x1400 (glej fotografijo 11).
Ta naslov je začetek notranjega EEPROM-a, kamor se prenesejo podatki o dostopni točki Wi-Fi, potem ko vnesete te podatke na prej omenjeno spletno mesto Microchip. To je lahko varnostna težava za nekatere ljudi: vgrajeni kripto čip ni bil uporabljen, da bi zaščitil te uporabniške podatke.
Ko sem v Arduino IDE delal brez razhroščevanja na čipu, me je zanimalo, ali Studio 7 vsebuje serijski terminal za prikaz razhroščevanja (ali drugih) sporočil, ki prihajajo iz AVR-IoT ali druge ciljne plošče preko COM vrat. Ni bilo takoj očitno, da je. Če pa se pomaknete do možnosti Tools>Data Visualizer, boste videli zaslon, kot ga kaže fotografija 12, razen da bo nadzorna plošča serijskih vrat verjetno zmanjšana.
Če razširite ta razdelek, bi morali videti navidezni Com Port Curiosity plošče (če je AVR-IoT plošča priključena na USB vrata računalnika). Nato označite polje Open Terminal, počistite polje Autodetect protocols. Nato izberite pravilno Baudno hitrost, pariteto, stop bite in kliknite na tipko Connect.
Na fotografiji 12 je prikazan meni ukazov, ki so na voljo v vmesniku ukazne vrstice (CLI) v demo programu AVR-IoT WG. Če želite uporabiti ta CLI, morate potrditi polje add nr, in nato klikniti v ozko črno okno pod velikim Terminal 3 oknom. To ozko črno okno je okno za prenos terminalnega emulatorja, vendar ni označeno kot tako. Če pritisnete tipko ENTER, boste videli seznam razpoložljivih CLI ukazov, ki so prikazani na fotografiji 12. Ta CLI je omenjen v uporabniškem priročniku, vendar sem ga pozabil, dokler nisem šel čez funkcijo CLI () v seznamu kod, kjer so bile njegove funkcije navedene v pripombah.
Zadnji ukaz je ukaz za razhroščevanje. To vam omogoča, da nastavite stopnjo razhroščevanja od 0 (izključeno) do 4. To nima nič opraviti s funkcijami za razhroščevanje na čipu, ki jih lahko nEDBG programator/razhroščevalnik izvede, kot je bilo omenjeno prej v tem razdelku. Namesto tega so na voljo različne vrste izpisov, ki jih je treba izvesti na različnih delih programa, kot odgovor na napake, ki so ujete. Če demo program na AVR-IoT plošči deluje pravilno, tj. je povezana z Googlovim oblakom in pošilja sporočila, ne boste videli nobenega sporočila v terminalskem oknu za ravni razhroščevanja od 0 do 3. Če vnesete debug 4, boste videli natisnjena sporočila za odpravljanje napak ob vsakem pošiljanju sporočila MQTT v Googlov oblak (enkrat na sekundo).
Druga koristna CLI funkcija je wi-fi ukaz, ki vam lahko na primer omogoči, da vnesete nov SSID/geslo, če ponovno namestite ploščo na lokacijo z drugačno wi-fi dostopno točko in ne morete nastaviti plošče z uporabo spletne metode, opisane v Priročniku za začetek.
Delo z AVR-IoT-jevim Cloud demo programom
Odlično je, da je AVR-IoT plošča opremljena z vnaprej nameščenim demo programom v oblaku in izvorno kodo za to. Vendar, če želite narediti lastne projekte, ki omogočajo wi-fi, boste morali biti sposobni bodisi napisati lastno aplikacijo iz nič ali spremeniti sam demo program. V programu Start Configurator je nekaj dodatnih primerov AVR-IoT WG plošče, ki se razširijo na ta demo, če dodate nekatere dodatne plošče podjetja MikroElektronika.
Opravil sem nekaj projektov z uporabo protokola ESP8266 in protokola MQTT. Ti projekti so bili prilagojeni iz Arduino skic, ki so jih napisali drugi. Z Arduino programom lahko preprosto napišete svoje aplikacije, saj obstajajo knjižnice razredov za Wi-Fi in MQTT protokol odjemalca (PubSubClient), pa tudi primeri kode so dosegljivi.
Nekaj časa sem preučeval demo program AVR-IoT WG razvojne plošče. Program ne vsebuje predmetov razreda in ugotovil sem, da mu je težje slediti. V moji Arduino skici bi samo ustvaril primernega WiFi klienta in mu posredoval SSID/geslo, nato pa bi ustvaril primeren MQTT odjemalec in mu posredoval URL mqtt_server in MQTT #. Ko so bila prejeta MQTT sporočila, bi funkcija povratnega klica filtrirala sporočilo po temi in, če bi bilo to primerno, bi zapolnila niz znakov s tem sporočilom. Prepričan sem, da je bilo pri izvajanju teh razredov vpletene veliko kode, vendar so bili pregledni za uporabnika.
Medtem ko sem ugotovil, da je demo kodi težje slediti, z Studio 7 obstajajo funkcije, ki olajšajo navigacijo po kodi. Ko naletite na funkcijo, jo kliknete z desno tipko miške in lahko izberete Go to Implementation. Nato lahko skočite v datoteko .h ali .c, kjer ta funkcija obstaja (odpre se v novem zavihku v oknu urejevalnika).
Zaključek
Upam, da bom ugotovil, kako spremeniti ta demo program tako, da bi pošiljal ali sprejemal sporočila posredniku MQTT, ki deluje na Raspberry Pi v mojem domu.
Atmel trdi, da je možno uvoziti Arduino skice v Studio 7 in da so zagotovili video na to temo. Strogo rečeno je to res. Vendar postopek uvoza vključuje samo knjižnico Arduino jedra. Ko to sem poskusil na skici, je ustvaril sporočila o napakah, da ni mogel najti datoteke Wire.h, niti nekaj Arduino knjižnic Adafruit, ki so bile uporabljene v skici. Tudi potem, ko sem ugotovil, kako dodati te datoteke v projekt, ki ni trivialen, je še vedno generiral napake, takoj ko je naletel na kodo, ki je predstavljala funkcijo razreda. Predvidevam, da se to dogaja, ker je večina Arduino knjižnic napisanih v C ++. Vse knjižnične datoteke, ki sestavljajo demo program AVR-IoT, so .c
datoteke, zato predvidevam, da prevajalnik ni nastavljen za obdelavo C ++. Nisem tako dobro seznanjen s postopkom gradnje, ki se izvaja za te programe – to je eden od razlogov, zakaj sem ugotovil, da je Arduino IDE tako preprost za uporabo, da večino teh podrobnosti obravnava v ozadju brez prevelike intervencije uporabnika.
Upam, da je bil ta članek koristen za vse bralce, ki razmišljajo o tem, da bi preizkusili Microchip AVR-IoT WG razvojno ploščo, in ki morda še niso seznanjeni s Studio 7 programsko opremo.