Programmeren Fuse settings v. MiniPro, v UltraLowPower proj.

Hardware geleverd door Arduino
Gebruikers-avatar
Berichten: 229
Geregistreerd: 20 Jan 2013, 12:01

Programmeren Fuse settings v. MiniPro, v UltraLowPower proj.

Berichtdoor astrofrostbyte » 05 Mrt 2016, 18:17

Hallo,

Ik heb een klein mini ultra low power projectje waarbij ik een 433Mhz Kaku frame zend bij een 'reed switch' bekrachtiging.
Na wat getweak 'draait' hij nu in slaap op 18uA :D .
M'n LiIon batterijtje is 240mAh dus dat gaat goed.

Nu zou ik deze ruststroom kunnen terugbrengen naar 1 a 2uA als ik de Brown Out uitzet.
Wat ik zo lees kan ik dit niet in software doen, maar zou ik daarvoor de Fuse bits moeten 'branden' mbv een ISP (programmer)

Vraag: Klopt Dit ?

om dit te kunnen doen heb ik op ebay voor 2Euro zo'n USBBASP gekocht (nog niet ontvangen)

Met behulp van de twee onderstaande links kan ik de default arduino fuses invullen in de fuse calculator, en dan enkel de brownout uitzetten zodat ik de drie nieuwe fuse woorden heb.
http://www.engbedded.com/fusecalc/
http://www.codingwithcody.com/2011/04/a ... -settings/

Vraag: Kan ik enkel de Fuse bits programmeren of moet ik de hele bootloader incl. fuse bits programmeren.


Bedankt.
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Programmeren Fuse settings v. MiniPro, v UltraLowPower p

Berichtdoor nicoverduin » 05 Mrt 2016, 18:39

Ik weet niet welke software je gaat gebruiken om die isp te programmeren? Ik gebruik zelf progisp 1.7.2. En wat je dan moet doen is eerst de chip lezen en de fuses lezen. Je kan namelijk door een verkeerde fuse setting een situatie creeren dat je je bordje "bricked" en als je bordje een SMD 328P heeft kan het wel zeuren worden om de fuses hardware matig te resetten. Houd wel rekening mee dat als je brownout uit zet, er een kans bestaat dat je het programma vernaggelt bij een te lage spanning.

@edit: Hoe/waarmee heb jij de stromen gemeten?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 229
Geregistreerd: 20 Jan 2013, 12:01

Re: Programmeren Fuse settings v. MiniPro, v UltraLowPower p

Berichtdoor astrofrostbyte » 06 Mrt 2016, 00:37

Hey Nico,

Dit is voor mij nieuw terein, en het feit zoals je al aangeeft de fusebits met respect te behandelen is de reden dat ik het wat verder wil uitzoeken alleer ik begin.

Voor het programmeren dacht ik aan avrdude, die lijkt fusebits te kunnen programmeren :
stukje van: http://www.ladyada.net/learn/avr/avrdude.html
Fuse memory is a seperate chunk of flash that is not written to when you update the firmware. Instead, the 3fuses tend to be set once (altho they can be set as many times as you'd like).
To program the fuses, use:

avrdude -c usbtiny -p attiny2313 -U lfuse:w:<0xHH>:m
avrdude -c usbtiny -p attiny2313 -U hfuse:w:<0xHH>:m
avrdude -c usbtiny -p attiny2313 -U efuse:w:<0xHH>:m

ik zal ook eens progisp bekijken.

Houd wel rekening mee dat als je brownout uit zet, er een kans bestaat dat je het programma vernaggelt bij een te lage spanning.

Ik neem aan dat je bedoeld dat het programma kan hangen/crashen?, of bedoel je dat de flash corrupt kan raken?.
Ik zal nog eens goed de datasheet van de 328P bekijken, want ik had ook het idee dat 16Mhz op 3.6V niet betrouwbaar was.
Maar als ik eenmaal die fuses kan programmeren wilde ik toch een iets lagere freq. resonator erop zetten. En tevens lijkt de attiny wel interresant voor m'n projectje.

Ik heb de stroom gemeten met een DMM(fluke) in serie met de batterij.
- ~10mA In normale run mode Vbat=3.6V
- 18.8uA in SLEEP_MODE_PWR_DOWN
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate

Gebruikers-avatar
Berichten: 229
Geregistreerd: 20 Jan 2013, 12:01

Re: Programmeren Fuse settings v. MiniPro, v UltraLowPower p

Berichtdoor astrofrostbyte » 06 Mrt 2016, 00:56

Even terugkomende op m'n eigen vraag, Het is dus blijkbaar mogelijk de BrownOut softwarematig uit te zetten.

Stuk uit de datasheet van de 328P

10.2 BOD Disable
When the Brown-out Detector (BOD) is enabled by BODLEVEL fuses - see Table 28-7 on page 282 and onwards, the BOD is actively monitoring the power supply voltage during a sleep period.
To save power, it is possible to disable the BOD by software for some of the sleep modes, see Table 10-1 on page 39. The sleep mode power consumption will then be at the same level as when BOD is globally disabled by fuses.
If BOD is disabled in software, the BOD function is turned off immediately after entering the sleep mode. Upon wake-up from sleep, BOD is automatically enabled again. This ensures safe operation in case the VCC level has dropped during the sleep period.
When the BOD has been disabled, the wake-up time from sleep mode will be approximately 60 µs to ensure that the BOD is working correctly before the MCU continues executing code.
BOD disable is controlled by bit 6, BODS (BOD Sleep) in the control register MCUCR, see ”MCUCR – MCU Control Register” on page 45. Writing this bit to one turns off the BOD in relevant sleep modes, while a zero in this bit keeps BOD active. Default setting keeps BOD active, i.e. BODS set to zero.
Writing to the BODS bit is controlled by a timed sequence and an enable bit, see ”MCUCR – MCU Control Register” on page 45.
Note: 1. BOD disable only available in picoPower devices ATmega48PA/88PA/168PA/328P
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Programmeren Fuse settings v. MiniPro, v UltraLowPower p

Berichtdoor nicoverduin » 06 Mrt 2016, 11:58

Nou appeltje eitje
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 229
Geregistreerd: 20 Jan 2013, 12:01

Arduino MiniPro (328P) v. Ultra Low Power (0,1uA range)

Berichtdoor astrofrostbyte » 06 Mrt 2016, 13:50

Ja, inderdaad, eitje ;)

Gemeten DMM stroom is nu 000.0uA :shock: , (kan het eigenlijk niet meer meten.)
Ik zal het op het werk even nameten wat het echt is, zal wel enkele 100nA zijn.

Waarschijnlijk heb ik nu meer last van zelfontlading van de Li-ion battery(en z'n protectie circuitje).

Hieronder fototje
Afbeelding

Hieronder (niet gecleande Code)
cpp code
//-------------------------------------------------------------------------------------
//- Project : Doorsensor(reedswitch) ----> 433Mhz Kaku
//- Revision : 1.000
//- Author(s) : AstroFrostbyte
//- Requirements : Arduino Pro Mini with 328P note the 'P'
//- : 433.92MHz transmitter board
//- : Reed switch
//- Description : Transmit RF 433Mhz kaku frame to RFXcom when reedswitch changes
//- Scope Measured kaku pulsewidth 272us both Low & high time, OK
//- Todo : Convert to lower Xtal, 16Mhz is overkill. (16Mhz@3v6 not good)
//- Cleanup of Code, many redundant things
//- Optimize awake time.
//- 05Mrt16 FrostByte : Initial code setup (note: byte rev=5)
//- 06Mrt16 Frostbyte : Added BrownOutDetect Software Disable lines (before sleep)
//- Current usage is ~0.1uA !!! wow rev 6
//-
//-------------------------------------------------------------------------------------
#include <avr/sleep.h>
#include <avr/power.h>
#include <avr/wdt.h>
#include "KaKuTransmitter.h"

//-------------------------------------------------------------------------------------

const int Door_PIN = 2 ;
const int RFdata = 10 ;
const int RFenable = 9 ;
const int LED = 13 ;
const int rev = 6 ; // temp trick to verify uploaded version
KaKuTransmitter kaku(13632769, RFdata); // Kaku object

//-------------------------------------------------------------------------------------
void setup()
{ // -- Power Saving settings --
wdt_disable(); // Disable Watchdog

ADCSRA &= ~(1<<ADEN); // Disable ADC
ACSR = (1<<ACD); // Disable the analog comparator
DIDR0 = 0x3F; // Disable digital input buffers on all ADC0-ADC5 pins
DIDR1 = (1<<AIN1D)|(1<<AIN0D); // Disable digital input buffer on AIN1/0
// DEBUG:above migh not be needed
power_all_disable();
power_timer0_enable();
// -- IO config --

pinMode(LED, OUTPUT); // Onboard LED
pinMode(Door_PIN, INPUT_PULLUP); // Reed switch input pin.
pinMode(RFdata, OUTPUT); // RF data output pin
pinMode(RFenable, OUTPUT); // RF module power enable
digitalWrite(RFdata, LOW ); // make sure RF transmitter datapin is off
digitalWrite(RFenable, LOW ); // Disable RF transmitter

for(byte i=0 ; i<rev ; i++) // DEBUG: signal 'rev' code through LED
{ digitalWrite(LED, HIGH); delay(250); digitalWrite(LED, LOW); delay(250); }

}//setup

//-------------------------------------------------------------------------------------
void wakeUpNow() { } // interrupt handled after wakeup

//-------------------------------------------------------------------------------------
void loop()
{
digitalWrite(RFenable, HIGH); delay(200); // Enable RF transmitter
digitalWrite(LED, HIGH);
kaku.sendUnit(0, true); // === Send Frame ===
digitalWrite(RFenable, LOW); // Disable RF transmitter
digitalWrite(RFdata, LOW); // make sure datapin is low too
digitalWrite(LED, LOW);
delay(500);
// -- prepare for sleep --
attachInterrupt(0,wakeUpNow, CHANGE); // interrupt for reed switch
set_sleep_mode(SLEEP_MODE_PWR_DOWN); //
cli(); // block int, to ensure BOD bitset seq
sleep_enable(); //
uint8_t mcucr1 = MCUCR | _BV(BODS) | _BV(BODSE);
uint8_t mcucr2 = mcucr1 & ~_BV(BODSE);
MCUCR = mcucr1;
MCUCR = mcucr2;
sei(); // ensure interrupts enabled so we can wake up again
sleep_cpu(); // go to sleep
// === IN SLEEP ===
sleep_disable(); // 1st thing after wakeup from sleep
detachInterrupt(0);

}//loop
//-------------------------------------------------------------------------------------
//end


grtz.
Laatst gewijzigd door astrofrostbyte op 06 Mrt 2016, 14:34, in totaal 1 keer gewijzigd.
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Programmeren Fuse settings v. MiniPro, v UltraLowPower p

Berichtdoor nicoverduin » 06 Mrt 2016, 14:14

Denk het ook.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar Arduino hardware

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 20 gasten