I met with Tyler tonight for a round of burgers and beer. Over dinner we chatted about the work I had been doing with the 328P-PU chips and reflashing the bootloaders to have them run on 3.3 V and 8 Mhz. One issue with the 328P chip is that we limited to 32K of memory for loading the library and code files. Just doing a quick calculation for all of the libraries that we will need to include for the IMU, GPS, GSM, temp sensors ect. we were well above that 32k memory limit. So, what is better than using one 328P chip….. running two together!
To get around the memory problem Tyler suggested that we run two chips on the same board and share the work between the two. BRILLIANT! We have not worked out all of the ideas yet but are planning to have one chip designated for polling the sensors and writing the data to the SD. While we could use external memory modules, this dual core idea lends itself to a neat way of breaking up the task with the first chip reading all the sensors, and second chip taking care of all the communication stuff. The second chip would then be in sleep mode most of the time and wait for an interrupt signal from chip1 when it would then wake up, read the latest data from the SD card and then activate the GSM and push the data to a website.
Several features of this idea that we like. With two cores, we can now accommodate all the needed library files without having to go back and rewrite them. This also means that we would essentially program the second core and only have it preform am operation once it gets a signal from chip1, so it would not require that much more energy to run. Additionally, Neither chip will have read/write access, one will only be able to write while the other will only be able to read, thus reducing the change of a read/write error.
Lastly, by separating the tasks between the two chips it may be possible to keep them completely separate from each other beside the interrupt signal essentially making it user friendly for hacking and tinkering since essentially it will be like programming two independent arduino boards. We figure we can also include jumper pins that when connected will allow for serial communication between the two boards, but hopefully we will not need this functionality. This is still an idea, but as the prototype develops we will be looking to try out new ideas for this dual core data aquasistion system.