WindWiz

En GSM-uppkopplad vindmätare

Månadsarkiv: juli 2011

Kändis

Ni läser väl skärmflygarnas egna tidning Hypoxia? I senaste upplagan (2011-2) pratas det om Svetlanas och ”hennes” webbplats http://vind.minimum.se/ i ledaren. Pretty cool! Även Skånes Drakflygarklubb har fått upp ögonen för sajten och nyttjar den flitigt. Det är alltid kul när folk faktiskt drar nytta av sånt man sitter hemma och knåpar ihop om kvällarna 🙂

.. För er som är nyfikna på hur arbetet med vindmätaren fortlöper har jag lite nyheter:

  • Stand-alone batteridrift fungerar! Egentligen ingen jättestor ansträngning från min sida, men jag har äntligen fått tummen ur och konstruerat en adapterkabel av ett par kontaktdon från ett gammal DC-nätagg.
  • Batteriladdning verkar OK via USB-port. Detta innebär att jag kan ladda vindmätaren vid datorn och sen bära iväg med den. Med 3 Ah har jag uppskattningsvis flera dygns batteritid på en laddning. Solpanelen kommer senare!

I och med batteridrift har vindmätaren dock fått ett nytt beteende: GSM-modemet startar upp automatiskt. Detta är sker sannolikt pga att laddfunktionaliteten i modemet måste vara aktivt för att undvika Dramatiska bränder; närhelst modemet upptäcker att dess strömkälla är ett batteri startar den upp för att skydda batteriet. Kanon, ur ett säkerhetsperspektiv. Mindre bra om man delar serieporten mellan modemet och omprogrammeringsfunktionen, som jag gör. Plötsligt kan inte programmeraren arbeta ostört vid uppstart, då modemet feltolkar programmeringskommandon på serieporten som AT-kommandon och det blir ett jävla liv. Programmeringen misslyckas och modemet är förvirrad. Inte särskilt ”win-win”.

Som en workaround för denna misär håller jag nu på att flytta programmeringsfunktionen till den andra ”mjukvarudrivna” serieporten som endast används för felutskrifter och debug när vindmätaren väl är uppstartad. Detta innebär att min bootladdare, Magboot, kommer ha möjlighet att ladda mjukvara från den dedikerade serieporten hos Atmega-procssesorn och via en valfritt definierad serieport över 2 godtyckliga I/O-pinnar. Vindmätaren kommer att förlita sig på den senare metod och därmed finns det inte längre någon risk att modem och programmeringsfunktion pratar i mun på varann.

Initialt var jag orolig att implementationen av en sådan mjuk serieport inte skulle få plats i den begränsade lagringsyta som en bootladdare är förvisad till. Motsvarande implementation i vindmätaren upptar (uppskattningsvis) 1 kb flashminne, vilket är på tok för stort. Magboot i sin helhet får plats på ca 600 bytes. Tack och lov finns det mycket funktionalitet i vindmätarens mjuka serieport som inte behövs och som kan skalas bort i magboot. Till exempel finns inget behov av full duplex, dvs, att parterna driver serieporten i båda riktningarna samtidigt. Magboot och dess serieprotokoll är konstruerat på så vis att endast värddatorn är drivande med förfrågningar.

En annan nerbantning är databuffring. Den mjuka serieporten i Magboot drivs ej av interrupt och har inga buffrar. Tecken läses från serieporten ett åt gången. Detta är OK eftersom Magboot inte ägnar sig åt något annat än att vänta på data. Detta hade troligtvis fungerat mkt dåligt i vindmätaren där flera händelser kan inträffa parallellt, t.ex. schemalagda aktiviteter som skall köra, utsändning/mottagning av data till/från modem osv. Eftersom en serieport är asynkron är det viktigt att läsning och skrivning till bussen sker utan störningar. Ännu en gång kan jag glädjas åt Magboots enkelhet!

Häromdan pysslade jag ihop en testversion av Magboot med den nya mjuka serieporten. Filstorleken ökade knappt 100 bytes! Det är en nerbantning med mer än 10x. Jag är mycket nöjd 🙂 Nu återstår bara att rätta buggarna också …

Annonser