These times it seems like everybody does his PCBs at home and posts about his process. So do I. I bought me a used face tanner in order to use it as UV lamp for my PCBs. There is also nothing new to what many others did before. The face tanner also had a time switch that (I thought) would make it a perfect UV lamp without the need of modifications. But the time steps were too coarse. So I modified it to have a finer time control. This is what this post is about.
During my minimalistic solar powered datalogging project (here, here and here) I was at the point where I had more data than could be stored in my 32KB EEPROM. It was time to have more! As I already had the 24AA256 (32KB) from Microchip because of the wide supply voltage range and the low power consumption I looked for the biggest one of this series: The 24AA1025 is a 128KB EEPROM! It’s pins A0 and A1 can be used to address more than one chip. So there is a maximum of four chips giving you a total of 512KB EEPROM for your ATmega328P. This post describes the hardware setup (easy) and the software side. In the end we have a 512KB EEPROM memory with linear address range. Continue reading
Now that we walked through all the steps of reducing power consumption from the start through first tests, reducing consumption, optimized tests and adding a RTC including the problems of waking up from sleep via interrupt, adding a 24AA256 EEPROM as external memory. and using it in page mode it’s time to make a more useable system from what we have.
The first steps are increasing the datalogging interval and then using a supercapacitor.
The arduino TimerOne library described at http://playground.arduino.cc/Code/Timer1 is the starting point for this lib. In the original library that can be found at http://code.google.com/p/arduino-timerone/downloads/list the pwm pins are (sort of) hard-coded to fit to the ATmega168P / 328P (the chip of the Uno R3 board). I simply changed them to the pin settings of the ATmega1284P using maniacbug’s pinout. Then I doubled the code and adapted it to timer3 of the ATmega1284P and it’s pins. Continue reading
This is the next step forward In my “minimalistic standalone ATmega328 powered by a capacitor”. In this project I was walking from the start through first tests, reducing consumption, optimized tests and adding a RTC including the problems of waking up from sleep via interrupt. Then I added a 24AA256 EEPROM as external memory. EEPROMs are good for data storage as they keep data even when supply voltage has gone down. But they are slow, especially in write mode. This means that a lot of time is spent by simply writing two bytes of data into this memory and thus, energy is consumed during this time. Now with the 24AA256 it is possible to write up to 64 bytes at once. This is called “block mode”. Let’s look if we can reduce energy consumption furthermore by using this feature. Continue reading
In my “minimalistic standalone ATmega328 powered by a capacitor” project I was walking from the start through first tests, reducing consumption, optimized tests and adding a RTC. The RTC has let me learn a lot about waking up from sleep via interrupt.
Now one more component is due to come: external EEPROM to extend data memory. As I’m hoping to extend total uptime more I probably will run out of EEPROM memory when keeping the basic example (reading one ADC channel once a second and writing data to EEPROM). Furthermore, when it comes to practical use of the system, internal EEPROM is too small also.
There are already some posts about my testsystem, Arduino powered by a capacitor: The start, first tests, reducing consumption and optimized tests. With different power saving techniques power consumption could be reduced by a factor of around 300. Now let’s look how we can go further and come step by step to a system that can be used in real life.
The basic idea is a microcontroller system e. g. for datalogging of slowly changing signals like room temperature or solar irradiation. In these applications the controller is up for a very short time and then sleeps until the next event. In the basic tests with a standalone ATmega328P timing between two logging events was done by the internal watchdog timer. Now let’s try to improve this…
In my project “Arduino powered by a capacitor” (start, first tests, reducing consumption, optimized tests) I want to use an extermal timer like the DS1337 to generate periodic interrupts for my ATmega328P that will wake it up from sleep to do datalogging or whatever is the desire.
Using a real time clock (RTC) has the advantage of higher timing accuracy but also brings in a new problem that is described and solved in this post. Continue reading
The library <avr/power.h> makes it easy to shut down all unneeded hardware of an ATmega controller.
The documentation of this library shows all available instructions and also on which controllers they are working. As I didn’t find this very readable I copied the table and deleted everything that doesn’t apply to the ATmega328P. Continue reading