total descendants::2 total children::1 4 ❤️ |
Dostal sa mi do ruk ethernet modul s cipom enc28j60, objednany z ebayu za <5$. Tak som ho podla tutorialu pripojil k mojej improvizovanej DPS ktoru programujem pomocou USB ASP, nejde o standardny arduino shield ale o malu dosku ktora sa da niekam prisrobovat a ma 10 kolikov s 2.54mm roztecou rozlozenych v 2 radach. ![]() Kniznicu som pouzil z archivu s nazvom: ethershield_v1.1_for_arduino_v1.0.zip stiahnut sa da napr. tu Pouzil som kod z examples prilozenych ku kniznici. Priklad bol na LED on/off a obsahoval nastavenie pevnej IP adresy a webserver ktory posielal velmi jednoduchy html kod po tom co browser klienta odoslal GET poziadavku a headers... obsah samozrejme ignorovany, to na co kniznica reaguje su parametre za znakom ?, tie kod dostane v bufferi, kto chce si moze napisat parser na viac parametrov ale tutorial iba na pevno porovnaval retazce ?led=on a ?led=off na ktore reagoval bud rozsvietenim LED alebo jej zhasnutim. Kniznica implementuje ping takze sa da pristroj pingnut, pokial kod nezamrzol. Kod zaberal nieco pod 5kB z mojej 8kB ROM. Pri kazdej komnunikacii ethernet doska blika co je uzitocne pri ladeni. obrazok dosiek tu Chcel som spravit krok dalej a pridal som tlacitko read ADC ktore spusti ADC prevod z pinu A0 a vrati webstranku so zmeranym cislom. Rozhodol som sa setrit pamatou a pouzil som hlavicku progmem.h a PROGMEM makro aby som presunul dlhe retazce s html kodom cisto do programovej pamate aby sa nemirrorovali v RAM... nakoniec by sa ten 1kB SRAM v atmega8 vycerpal. Napriklad: prog_char retazec[] PROGMEM = "abcdef....."; A teraz moja chyba... v kode som nadalej pouzival pole retazec ako obycajnu premennu v SRAM co sposobilo ze moj kod zamrzal alebo sa uplne menila jeho logika a spustali sa vetvy v programe ktore nemali. LED sa podarilo cez web zhasnut ale okamzite sa rozsvietila, nemala dovod, tiez webserver bezal ovela pomalsie ako spociatku. Dovod chyby bol v tom ze som nepristupoval k datam ulozenym k ROM spravne cez progmem funkcie, napriklad strcpy_P(ciel_v_RAM, zdroj_v_ROM). Ta je priamo urcena na skopirovanie zdrojoveho retazca v ROM do buffera v RAM. Akonahle som kod prepisal tak aby pouzival docasny buffer a kopirovanie ROM retazcov do neho, zahadne chyby zmizli. |
| |||||||||||||||||||||||||