реклама на сайте
подробности

 
 
> уменьшение потребления AVR, код не оптимально использует AVR
Electronic)
сообщение Nov 22 2008, 13:30
Сообщение #1


Частый гость
**

Группа: Новичок
Сообщений: 97
Регистрация: 15-04-08
Пользователь №: 36 783



Здравствуйте форумчане. Задача стоит в минимализации поребления AVR что бы устройство работало от батарейки годами. Столкнулся с такой проблемой:

для большей ясности использовал только режими idele в котором потребелние составило - 414мка (прерывания запрещены). при запушеной программе и без использования Idle потребление ~ 1000 мка.

в перывание avr входит по таймеру Т2 который работает в асинхронном режиме и по прерыванию с ножки С1.
в main только if(idle==1){idle=0;SMCR=0x01;asm("sleep");} и if(sleep==1){sleep=0;SMCR=0x07;asm("sleep");} .

некоторые тех данные
частота 1Мц. питание 5В (потом будет 3.6)
PRR=0x8f.
компилятор ICC 6.31A с кряком

вся программа довольно не большая и ясная. Потребеление привёл для того что бы можно было оценивать скорость работы кода.

и теперь сама суть:

#pragma interrupt_handler timer2_compa_isr:8
void timer2_compa_isr(void){ OCR2A+=16;idle=1;

if(bit==10){
if(bit==2){OCR2A+=H1;if(START==0){TCCR0A=0x42;st_T0();TCCR0B=0x01;}idle=1;}
if(bit==3){OCR2A+=(12-H1);TCCR0A=0xc0;TCCR0B=0x80;st_T0();bit=0;idle=1;}
if(bit==6){OCR2A+=14;PCIFR=7;PCICR=2;PCMSK1=2;bit=0;idle=1;}
}
потребляемый ток 455мка

а если

#pragma interrupt_handler timer2_compa_isr:8
void timer2_compa_isr(void){ OCR2A+=16;idle=1;

if(bit==10){/*
if(bit==2){OCR2A+=H1;if(START==0){TCCR0A=0x42;st_T0();TCCR0B=0x01;}idle=1;}
if(bit==3){OCR2A+=(12-H1);TCCR0A=0xc0;TCCR0B=0x80;st_T0();bit=0;idle=1;}
if(bit==6){OCR2A+=14;PCIFR=7;PCICR=2;PCMSK1=2;bit=0;idle=1;}*/
}

потребляемый ток 435мка.
это при том что bit=0;

вобщем понятно что что то не так. изменение потребления составило 20мкА от 1000мкА тоесть 3 структуры if исполнялись 2% времени. это 20000 тактов. код повторяется 128 раз в секунду. поэтому 3 структуры if исполняются получается ~ 156 тактов!?

что посоветуете ? может использовать структуру switch c breack, или дргой компилятор ? асемблер учить очень не хотелось бы... как минимум потому что нет времени на это.


--------------------
Самурай без меча - такой же, как самурай с мечом, только без меча
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 12:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01346 секунд с 7
ELECTRONIX ©2004-2016