onsdag 27 mars 2013

Strömförbrukning ATtiny85, MSP430 och ATtiny84A

Tanken med ATtiny85 kretsen är att använda den i små sensornoder som drivs med batteri. Därför är det viktigt att strömförbrukningen är så låg som möjligt. En typ av sensornod är en trådlös temperatursensor baserat på en DS18B20 samt en 433 MHz radiosändarmodul. Denna typ av nod kan vara i stand-by läge den mesta delen av tiden och bara vakna t.ex. var femte minut för att göra en temperaturavläsning som skickas via radio. Sedan kan noden gå ned i stand-by läge igen för att spara ström.

För att testa detta skapades ett litet testprogram som sätter MCUn i sleep_mode_pwr_down äge och som sedan väcks av WDT var åttonde sekund. När noden väckts tänds en led i en sekund och så går noden ner i power down läge.

För att mäta strömförbrukningen kopplade jag en multimeter inställd på strömmätning i serie med strömkällan (ett 3.7V, 2400 mAh, 18650 batteri, vilket var laddat till 4.13V).

Strömförbrukning i vaket tillstånd med LED tänd: 4.64 mA
Strömförburkning i vaket tillstånd med LED urkopplad: 1.073 mA
Strömförbrukning sleep_mode_pwr_down: 6 uA

Vissa sensorer kan kräva 5V spänningsmating. I dessa fall kan en step-up modul användas. För att se hur den påverkar strömförbrukningen gjordes samma experiment med en krets som tar 3.7 V från batteriet som input och lämnar ut 5V.

Strömförbrukning i vaket tillstånd med LED tänd: 11 mA
Strömförburkning i vaket tillstånd med LED urkopplad: 2.4 mA
Strömförbrukning sleep_mode_pwr_down: 0.3 mA = 300 uA

En stooor försämring!

Som sista experiment slogs BOD (Brown Out Detection) av vid power_down, det gjorde följande med strömförbrukningen:



Strömförbrukning i sleep_mode_pwr_down: 4-5 uA.

Med en strömförbrukning på 4 uA den mesta delen av tiden borde ett batteri kunna räcka rätt länge. För att veta exakt kan man använda kalkylatorn på: http://oregonembedded.com/batterycalc.htm

Om man i batterikalkylatorn använder ovanstående värden tillsammans med 18650 batteriet (2400 mAh) och väcker MCUn under en sekund 12 ggr i timmen skulle batterierna räcka i 5.39 år!

Test med 3.21V matning (2 x AAA).
Strömförbrukning i vaket tillstånd med LED tänd: 1.503 mA
Strömförburkning i vaket tillstånd med LED urkopplad: 0.748 mA
Strömförbrukning sleep_mode_pwr_down: 3 uA

Test med 3.3V matning.
Strömförbrukning i vaket tillstånd med LED tänd: 1.876 mA
Strömförburkning i vaket tillstånd med LED urkopplad: 0.804 mA
Strömförbrukning sleep_mode_pwr_down: 4 uA


Test med 5V matning.
Strömförbrukning i vaket tillstånd med LED tänd: 6.45  mA
Strömförburkning i vaket tillstånd med LED urkopplad: 1.293 mA
Strömförbrukning sleep_mode_pwr_down: 5 uA

Nästa steg blir att göra samma test med en TI MSP430-G2553 och se hur den står sig med ATtiny85. Kommer även att utvärdera ATtiny84A med ATMELs picopower teknologi.

Uppdattering: MSP430-G2553 med 3.3V störmförsöjning från en Arduino Uno
Strömförbrukning i vaket tillstånd med LED tänd: 1.57 mA
Strömförbrukning i sovande tillstånd med LED tänd: 1.29 mA
Strömförburkning i vaket tillstånd med LED urkopplad: 355 uA
Strömförbrukning LPM3 (Timerinterupt): 1 uA (minsta värde multimetern kan mäta)

Om man i batterikalkylatorn använder dessa värden tillsammans med två AA batterier (1200 mAh) och väcker MCUn under en sekund 12 ggr i timmen skulle batterierna räcka i 10.44 år!

Med två AAA batterier på 3.21 V

Strömförbrukning i vaket tillstånd med LED tänd: 1.411 mA
Strömförbrukning i sovande tillstånd med LED tänd: 1.144 mA
Strömförburkning i vaket tillstånd med LED urkopplad: 345 uA
Strömförbrukning LPM3 (Timerinterupt): 1 uA (minsta värde multimetern kan mäta)

Det verkar som om MSP430 verkligen rockar när det gäller low power! Ska bli kul att se om ATMELs picopower kan rå på TI:s MSP430.

Både 5.39 och 10.44 år är väldigt mycket och det finns anledning att tro att batteriernas självurladdning är det som påverkar tiden mest.

ATtiny84A

För att mäta strömförbrukningen kopplade jag en multimeter inställd på strömmätning i serie med strömkällan (ett 3.7V, 2400 mAh, 18650 batteri, vilket var laddat till 4.13V).
Strömförbrukning i vaket tillstånd med LED tänd: 4.18 mA
Strömförburkning i vaket tillstånd med LED urkopplad: 717 uA
Strömförbrukning sleep_mode_pwr_down: 4 uA


Med två AAA batterier på 3.21 V

Strömförbrukning i vaket tillstånd med LED tänd: 1.5 mA
Strömförburkning i vaket tillstånd med LED urkopplad: 500 uA
Strömförbrukning sleep_mode_pwr_down: 4 uA

Med sleep bod disabled och två AAA batterier:

Strömförbrukning sleep_mode_pwr_down: 3 uA

Sammanfattning

Det verkar som om Atmels picopower inte riktigt rår på TI:s MSP430 serie. Även om ATtiny drar 3 gånger så mycket som MSP430 i standby så är de väldigt strömsnåla. Dock är MSP430 king of low power.


Programmera ATtiny85 och ATtiny84A med AVR Dragon

Detta är en guide till hur man programmerar en ATtiny85 och ATtiny84A med hjälp av en AVR Dragon programmerare och AVR Studio 5.1.

ATtiny85

Jag kommer använda ISP (In System Programming) metoden (som nyttjar SPI protokollet). För att se hur man skall koppla in draken går man lämpligtvis till denna länk. Där finns följande bild.
SPI programming and debugWIRE debugging

Detta är egentligen allt som behövs. Jag kopplade upp ovanstående på en breadboard med jumper wires.
Inkoppling av AVR Dragon för att programmera ATtiny85. Vid programmeringsläge ansluts tinyn till pin 10-13 på breadboard.
När inkopplingen är gjort är det mycket viktigt att ställa hastigheten i programmeringshanteraren i AVR Studio till 125 kHz. Om man försöker med defaultvärdet på 1 MHz funkar det inte alls.

ATtiny84A

Jag kommer använda ISP (In System Programming) metoden även för ATtiny84A:an. För att se hur man skall koppla in draken går man lämpligtvis till denna länk:

Där finns följande bild: 

VCC

6
B
nc
5
4
G
nc
3
2
nc
nc
1

HV_PROG

20
nc
nc
19
18
nc
nc
17
16
nc
nc
15
14
nc
nc
13
12
nc
nc
11
10
nc
nc
9
8
nc
nc
7
6
nc
nc
5
4
nc
nc
3
2
nc
nc
1

ISP

6
F
E
5
4
D
C
3
2
B
A
1

JTAG

10
nc
nc
9
8
nc
nc
7
6
nc
nc
5
4
nc
nc
3
2
nc
nc
1

DEVICE


nc
nc


nc
nc


nc
nc


nc
nc


nc
nc


nc
nc


nc
nc


nc
nc


nc
nc


nc
nc


nc
nc


nc
nc


nc
nc

8
A
D
7
9
C
nc
6
10
nc
nc
5
11
nc
E
4
12
nc
nc
3
13
nc
nc
2
14
F
G
1

söndag 17 mars 2013

Rainbow Cylon project

Detta projektet går ut på att undersöka hur RGB-LEDar fungerar och hur man driver/styr dem. För att göra detta kommer effekten i ögonen hos robot-versionen av Cylons i Battlestar Galactica simuleras (ser ut som Kitt från Knight Riders röda lampor i fram). Förutom att använda färgen röd kommer även alla regnbågens färger användas.

Material
Arduino Uno
10 st RGB LEDs (Länk)
2 st TLC5940 drivkretsar, seriell ingång och 16 PWM utångar (Länk).
Breadboard
Kablar

Progress:
Har kopplat in en TLC5940 och driver den röda dioden i 10 stycken RGB-leds. Kör Cylon-svepet.
Skulle ladda upp en video men det verkar inte funka. :(

Nästa steg blir att koppla in alla tre led:arna och de andra TLC5940 kretsen. Då kommer 30 av de 32 PWM-kanalerna behöva användas. Många (10x4) jumpercables blir det...


lördag 16 mars 2013

Nattlampa med Colorduino

Detta projekt går ut på att bygga en nattlampa som visar solens och månens upp och nedgång på de tider som dottern bör sova. Det innebär att när det är läggdags går solen ner och månen kommer fram. När det är dags att gå upp går månen ner och solen upp. På så sätt vet hon när det är dags att gå upp (hindrar säkert inte henne från att gå upp och leka mitt i natten men ändå).

Basen i projektet är en Colorduino med en 8x8 RGB LED matris. En Colorduino är en Arduino-kompatibel enhet med en Atmel Atmega328, LED drivkretsar (24 st PWM ut) samt Darlingtontransitorer för att strömförsörja alla LEDar. Själva matrisen är av typen "common anode", dvs den har totalt 32 pinnar, 8 st common anode och sedan 8 stycken för respektive färg (Röd, Grön, Blå).

Tanken är att göra ett antal "bilder/animationer":
* Solen går upp och månen ned, snygga röda färger för att simulera soluppgång.
* Solen går ned och månen upp, samma som ovan med åt andra hållet.
* Månen är uppe på en stjärnhimmel med blinkande stjärnor.
* Solen är uppe, kanske vandrar den över himlen beroende på tid på dagen.

Enheten konfigureras med de tider som gäller på veckodagarna respektive helgen. T.ex. på veckodagar går solen upp klockan 07.00 och ned 19.00. På helgerna går solen kanske inte upp förrän 08.30 men ned 19.00.

Hela matrisen byggs sedan in i en lämplig fotoram för att vara snygg att se på.

Material
Colorduino (Länk)
8x8 RGB LED matrix (Länk)

Progress:
Nu har sakerna kommit och en första programmering är gjort med hjälp av en FTDI-adapter och Arduino-utvecklingsmiljön.

lördag 9 mars 2013

Detaljerad loggning av elförbrukning

I dagsläget använder jag 1-wire räknare för att logga elförbrukningen från tre olika elmätare (huvudmätare, bergvärmepump och FTX-system). 1-wire räknarna läses av varannan minut och data sparas i en databas. Detta fungerar bra för att se total förbrukning per dygn eller månad men dåligt för att se momentan förbrukning. I dagsläget blir de momentana förbrukningen samma som medelförbrukningen under två minuter vilket inte är tillräckligt för att kunna se individuella förbrukare.

Tanken är att utöka systemet med en Arduino Uno med Ethernet-shield som räknar pulser från huvudmätare och bergvärmemätare och sedan skickar dessa till en port på en server där en applikation tar emot datan och lagrar i en databas.

Progress:
* Ethernet-shielden är testad genom ett program som läser av en 1-wire temperatursensor och sedan skickar temperaturen till en socket på en PC.

Automatisk loggning av vattenförbrukning

Loggning av vattenförbrukning är en av de funktioner som saknas i mitt "system". Tyvärr saknar min vattenmätare någon form av elektrisk pulsutgång så lösningen blir en optisk avläsning.

Planen är att montera en gammal mobiltelefon med kamera och "blixt" som får ta bilder på vattenmätaren med jämna mellanrum. Telefonen är kopplad till mitt WIFI-nät och laddar automatiskt upp alla bilder på en ftp-server. Sedan körs ett analysprogram på servern som genom bildbehandling extraherar nuvarande mätarställning. Det är två typer av bildbehandling som behövs, först bör räkneverket OCR:as och sedan bör de fyra röda mätarna läsas av med lämplig metod. När all information är avläst lagras den i en Mysql databas .

Exempel på hur en vattenmätare kan se ut.
Tanken är att utgå från Python-sciptet på den här sidan.

Trådlös blomövervakning

Detta projektet går ut på att bygga små trådlösa noder med en jordfuktighetssensor. Dessa skall regelbudet rapportera fuktigheten i jorden till ett överordnat system. Det överordnade systemet kan vara en Raspberry Pi med en Tellstick Duo eller en Arduino med 433 MHz mottagare.
Det överordnade systemet kan sedan larma personen ansvarig för blombevattning.