Вт июл 17, 2018 10:43:02
a328p_1MHz.bootloader.tool=avrdude
a328p_1MHz.bootloader.low_fuses=0x62
a328p_1MHz.bootloader.high_fuses=0xde
a328p_1MHz.bootloader.extended_fuses=0xFF
power_usart0_enable();
power_timer0_enable();
for (byte i = 0; i <= A5; i++)
{
pinMode (i, OUTPUT); // changed as per below
digitalWrite (i, LOW); // ditto
}
#include "Test3.h"
#include <avr/io.h>
#include <avr/interrupt.h> // работа с прерываниями
#include <avr/sleep.h>
#include <avr/wdt.h>
#include <avr/power.h>
volatile byte watchdogCounter = 0;
void setup_watchdog(byte sleep_time)
{
cli();
wdt_enable(sleep_time);
MCUSR &= ~_BV(WDRF);
WDTCSR |= _BV(WDCE) & ~_BV(WDE);
WDTCSR |= _BV(WDIE);
sei();
}
void arduino_sleep()
{
cli();
power_all_disable();
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sei();
sleep_mode();
}
void savePower( ) {
power_all_disable();
for (byte i = 0; i <= A5; i++)
{
pinMode (i, OUTPUT); // changed as per below
digitalWrite (i, LOW); // ditto
}
DIDR1 |= _BV(AIN1D) | _BV(AIN0D);
MCUCR = bit (BODS) | bit (BODSE);
MCUCR = bit (BODS);
}
void setup()
{
Serial.begin(9600);
Serial.println("Wait 5 sec..");
delay(5000); // Задержка, чтобы было время перепрошить устройство в случае bootloop
savePower();
setup_watchdog(WDTO_8S);
}
ISR (WDT_vect)
{
WDTCSR |= _BV(WDIE);
watchdogCounter++;
}
void doSomething() {
Serial.print("Hello world!!! Uptime : ");
Serial.print(millis());
Serial.print(" _ ");
for( int i=0; i<100; i++ ) {
Serial.print(".");
delay(50);
}
Serial.println("");
}
void loop()
{
power_usart0_enable();
power_timer0_enable();
delay(5);
doSomething();
Serial.println("Go to sleep....");
delay(100);
while (watchdogCounter < 2) //wait for watchdog counter reached the limit, WDTO_8S * 4 = 32sec.
{
arduino_sleep();
}
Serial.println("Wake up....");
watchdogCounter = 0; //reset counter
}
Вт июл 17, 2018 15:21:34
Вт июл 17, 2018 16:44:22
Вт июл 17, 2018 16:47:54
Вт июл 17, 2018 17:10:11
Вт июл 17, 2018 19:52:18
Ср июл 18, 2018 10:17:32
#include <avr/sleep.h>
#include <util/delay.h>
int main(void){
for(int i=0; i<10000; i++) {
_delay_us(500);
}
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_mode();
while(1);
}
#include <avr/io.h>
#include <avr/delay.h>
#include <avr/wdt.h>
#include <avr/sleep.h>
#include <avr/interrupt.h>
ISR (WDT_vect) {
WDTCSR |= _BV(WDIE);
}
int main(void) {
for(int i=0; i<10000; i++) {
_delay_us(500);
}
wdt_reset();
wdt_enable(WDTO_1S);
WDTCSR |= _BV(WDIE);
sei();
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
while(1) {
sleep_enable();
sleep_cpu();
}
}
Ср июл 18, 2018 10:49:55
и в чем проблема? что с тех пор поменялось?Foxhound писал(а):Смотрел на связку Eclipse + AVR plugin но похоже он с 2012 года не обновлялся....
Ср июл 18, 2018 14:51:17
Контроллер тактируется от внутреннего генератора 8 МГц с делителем на 8.
Напряжение питания снижено до 2.7В. Меньше не стал, т.к. датчики которые потом будут работать с контроллером меньше не могут.
Ср июл 18, 2018 15:17:54
Ср июл 18, 2018 21:06:12
Чт июл 19, 2018 21:05:13
#include <avr/delay.h>
#include <avr/io.h>
#include <avr/wdt.h>
#include <avr/sleep.h>
#include <avr/interrupt.h>
volatile int interruptCount=0;
ISR (WDT_vect) {
WDTCSR |= _BV(WDIE);
interruptCount++;
}
void doSomething() {
for(int i=0; i<10000; i++) _delay_us(500);
}
void sleep() {
interruptCount=0;
while(interruptCount<5) {
sleep_cpu();
wdt_reset();
}
}
void setup() {
wdt_reset();
wdt_enable(WDTO_1S);
WDTCSR |= _BV(WDIE);
sei();
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
}
int main(void) {
setup();
while(1) {
doSomething();
sleep();
}
}
Пт июл 20, 2018 00:05:45
Пт июл 20, 2018 06:00:40
Пт июл 20, 2018 15:18:11
Сб июл 21, 2018 03:48:24
Сб июл 21, 2018 04:42:02
Сб июл 21, 2018 05:19:36
Вс июл 22, 2018 01:35:42
Пн июл 23, 2018 03:15:04