MySensors on ATTINY85
-
Good night to everybody, I managed to run MySensor in an ATTiny 85 micro.
Unfortunately, i don't know too much about Arduino Bootloader and how this work,
then I miss space in program memory...
Now I can only make a Themperature sensor and I/O device but I miss space for
configuration program.
If somebody can help me...
Thanks and sorry for my bad eglish. -
Good night to everybody, I managed to run MySensor in an ATTiny 85 micro.
Unfortunately, i don't know too much about Arduino Bootloader and how this work,
then I miss space in program memory...
Now I can only make a Themperature sensor and I/O device but I miss space for
configuration program.
If somebody can help me...
Thanks and sorry for my bad eglish.@vtento can you explain in other words what kind of problem do you have?
you could avoid using bootloader and this will save space.
you also can switch off debugging in Mysensors and save spacebut do not expect too much with Mysensors on 8K FLASH
it is recommended to have 32k for a sensorwhy you choose atmega85? it is about the same retail price as atmega328
-
I choose ATTINY85 becaus I would like develop a sensor Network small, cheap and easy to make.
But using an Attiny micro I meet a lot of problem with memory space ....
For example when I using a DS12B20 temperature sensor I should send value
without conver in Celsius degrees (I can't divide by 16).
I would like undestaind how many space use the Arduino bootloader in an Attiny chip
Thanks
-
I have already taken done to cut any library where possible (serial debug, utility / LowPower) I have already rewrite interrup WDT for sleep mode and pin change...
Now I can only hope to take some byte from the arduino bootloader, but I don't know how? -
I have already taken done to cut any library where possible (serial debug, utility / LowPower) I have already rewrite interrup WDT for sleep mode and pin change...
Now I can only hope to take some byte from the arduino bootloader, but I don't know how? -
I share MOSI with 1-WIRE bus, I put in sleep mode the radio, then I read the sensor and after I send the value...
Unfortunately I can't use only 3 pin for the radio module because I work with a botton battery (I can't swith off) and I need TX and RX -
I share MOSI with 1-WIRE bus, I put in sleep mode the radio, then I read the sensor and after I send the value...
Unfortunately I can't use only 3 pin for the radio module because I work with a botton battery (I can't swith off) and I need TX and RX@vtento cool work!
make sure to avoid floating numbers. also try to not use 32 bit numbers and limit usage of 16 bit numbers
division by 16 is better to do by >> right shiftDS18B20 code can be shrinked up to 400-500 bytes while some in examples it is eating 1-2k
-
I have already taken done to cut any library where possible (serial debug, utility / LowPower) I have already rewrite interrup WDT for sleep mode and pin change...
Now I can only hope to take some byte from the arduino bootloader, but I don't know how?@vtento said:
I have already taken done to cut any library where possible (serial debug, utility / LowPower) I have already rewrite interrup WDT for sleep mode and pin change...
Now I can only hope to take some byte from the arduino bootloader, but I don't know how?Due to space constraints, I would omit the booloader and use the entire space for the sketch. However, the smallest bootloader is 0.5kb (Optiboot) and if OTA updates are important, then MYSBootloader (2kb). That said, it all depends how much you manage to squeeze the library code.
-
Hi, can you share any of the source code you got running on the ATTiny85? I've got 5 ATTiny85s & 5 ATTiny84s. I've been running the TMRH20 RF24, Network, and Mesh on them, but I wanted to see if I can use the MySensor stuff. Thanks!
-
Hi, can you share any of the source code you got running on the ATTiny85? I've got 5 ATTiny85s & 5 ATTiny84s. I've been running the TMRH20 RF24, Network, and Mesh on them, but I wanted to see if I can use the MySensor stuff. Thanks!
-
Hi, can you share any of the source code you got running on the ATTiny85? I've got 5 ATTiny85s & 5 ATTiny84s. I've been running the TMRH20 RF24, Network, and Mesh on them, but I wanted to see if I can use the MySensor stuff. Thanks!
- @Joseph-Macaulay Hi, this is the sketch that I use for Themp sensor
-
Oitzu and I (testing :P) are currently working on the Attiny support. To test you can download this library (the same as the original one except that it includes the attiny).
Its working so far.
Bugs:
Your node id is the same as child id (if you set a different child id, somehow the attiny ignores it and makes it the same as your node id).
Sleep is working with interrupt but it does the setup again after wake.
Sleep / timer is not yet working.library: https://github.com/Oitzu/Arduino/tree/master/libraries/MySensors (You can replace it with your existing mysensors library)
example sketch thats working: http://pastebin.com/xRu2JNQ9wiring:
+-\/-+ 1|o |8 VCC/CE RED/ORANGE YELLOW CSN 2| |7 SCK GREEN - SENSOR 3| |6 MOSI BLUE BLACK GND 4| |5 MISO VIOLET +----+ -
Not yet. Maybe next week. To much work at school right now ^^. But when it works i'll post it here.
@Sweebee Got it working last night (I hope!), I haven't measured the power consumption yet.
It doesn't have the resolution of ms. To save battery the attiny85 will sleep for 8 seconds, then wake up and go to sleep again. So if you call gw.deep_sleep(7), it will sleep fox 7x8=56 seconds. It is possible to get a more precise timer by calculating the best combination of sleep timers. For example if you want to sleep a minute, sleep 7x8s=56s and then an additional 1x4s=4, total 60s.
It needs some cleaning up and correct naming/commenting/testing e.t.c.
void MySensor::deep_sleep(int time) { // Sleep alternatives: // 0=16ms, 1=32ms,2=64ms,3=128ms,4=250ms,5=500ms, 6=1 sec,7=2 sec, 8=4 sec, 9= 8sec int ii = 9; // sleep 8 seconds at a time. byte bb; int ww; if (ii > 9 ) ii=9; bb=ii & 7; if (ii > 7) bb|= (1<<5); bb|= (1<<WDCE); ww=bb; MCUSR &= ~(1<<WDRF); // start timed sequence WDTCR |= (1<<WDCE) | (1<<WDE); // set new watchdog timeout value WDTCR = bb; WDTCR |= _BV(WDIE); // Count some sheeps. for(int i=0;i<time;i++) { RF24::powerDown(); cbi(ADCSRA,ADEN); // switch Analog to Digitalconverter OFF set_sleep_mode(SLEEP_MODE_PWR_DOWN); // sleep mode is set here sleep_enable(); sleep_mode(); // System actually sleeps here sleep_disable(); // System continues execution here when watchdog timed out sbi(ADCSRA,ADEN); // switch Analog to Digitalconverter ON } } -
has someone tested digispark? That would be to test a lot easier.

