WindWiz

En GSM-uppkopplad vindmätare

Månadsarkiv: oktober 2011

Google vs WindWiz 1-0

Visste ni att en tillsynes spartansk hemsida som Google.se har en helt groteskt stor indexsida (filstorlek)? Ialla fall från en stackars liten Arduinos perspektiv. Försök ladda ner och tolka ett HTML-dokument på 10+ KB på en device med 2 KB ram och gör något vettigt med det. I dare you! I double-dare you motherf*cker! .. Jag blev rätt ”ägd” ialla fall.

Veckorna sen senast har varit köriga men några timmar jag ändå hittat till programmering. GSM-prylarna i vindmätaren är nu uppdelad i två modulen, en Telit-modul som innehåller allt hårdvarunära kring den GSM-modul jag använder, och en annan portabel AT-modul som sköter kommunikation enligt AT-standarden (nåväl, nära nog..). Denna separering har gjort det möjligt att bygga mer strukturerade testfall för AT-modulen som nu kan köra precis lika bra på min arbetsstation som i vindmätarhårdvaran. När modulen kör på min arbetsstation tunnlas trafiken över en serieport till modemet medan AVR-processorn hålls i resetläge. När modulen kör på vindmätaren exekverar koden på AVR-processorn och pratar direkt med modemet. I båda fallen är in/ut-data från modemet ”live” och korrekt. Tack vare detta har jag kunnat göra en hel del viktiga buggrättningar och även kunnat utöka funktionalitet utan att störas av tråkig felsökning som lätt uppstår när man jobbar med dessa ettriga småprocessorer.

Status just nu är att jag kan ansluta TCP-sockets och även göra datautbyte av enklare sort (tillståndslöst). T.ex en HTTP-fråga. Mer än så behövs egentligen inte för vindmätaren, den skall koppla upp, skicka sin data och på sin höjd ta emot ett kvitto. Eller om det nu blir ett e-post (se föregående inlägg). Måste nog suga lite mer på den nöten.

Något jag noterat under tiden jag jobbat med modemet via sitt ”tunnel-läge” är att jag hittills inte drabbats av några konstiga resetfel eller ominitieringar. Förvisso är underliggande system på min PC brutalt mycket kraftigare och det vore ganska naivt att jämföra t.ex. timing eller buffertstorlekar mellan en AVR och en PC, men ändå. Inga problem! Vilket tyder på att det antingen finns en bugg i annan del av min kod, eller att det verkligen är ett hårdvarufel. Säkringen på Arduinon kanske slår till? Hur undersöker man sånt?! Jag har labbat lite med avlyssning på RESET-signalen mha mitt sprillans nya PicoScope (USB-oscilliskop) och hittills inte sett några dippar i signalen. Big need på en riktig elektronikingenjör.. Jag i egenskap av kodapa kommer inte långt här.

För tillfället väljer jag att blunda för dessa problem och fortsätta jobba i tunnel-läge och försäkra mig om att kommunikationskoden är korrekt. Nästa steg blir att implementera en modul för sockets, som inkapslar uppkoppling och hantering av TCP-sessioner via AT-modulen på ett snyggt och lätt sätt.