ATtiny25: веломигалка, вопрос по режиму сна и оптимизации

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
figley
Родился
Сообщения: 14
Зарегистрирован: Вт фев 01, 2011 17:11:00
Контактная информация:

ATtiny25: веломигалка, вопрос по режиму сна и оптимизации

Сообщение figley »

Из магазинной мигалки выбросил внутренности и вставил свои, см. приложенную схему.
Причина переделки - к родной схеме нет подключения тормозов и аж семь ненужных режимов мигания светодиодов - для выключения мигалки надо тыцнуть её кнопку семь раз.

Программа (комментарии на анг. потому как АВРСтудио не сохраняет русские:

Код: Выделить всё

/*
Bike brake and night backlight with attiny25, 5 leds, brakes button and on/off sliding switch
*/
#include <avr\io.h>
#include <avr\interrupt.h>
#include <avr\sleep.h>
#include <avr\power.h>

#define F_CPU 1000000UL  // Int. RC Osc. 8 MHz / CKDIV 8 = 1 000 000 MHz

#define R_LEDS PB4 //right leds	(PIN # 3 on tiny25)	from PB4 to right leds, then via R 56 Ohm to GND
#define L_LEDS PB1 //left leds	(PIN # 6 on tiny25)	from PB1 to left leds, then via R 56 Ohm to GND
#define M_LEDS PB0 //middle led	(PIN # 5 on tiny25)	from PB0 to middle led, then via R 56 Ohm to GND
#define BRAKES PB3 //brakes pin	(PIN # 2 on tiny25)	from PB3 to brakes button, then to GND
#define SWITCH PB2 //on switch	(PIN # 7 on tiny25)	from PB2 to to GND via switch

#define LEDS_ON PORTB |= _BV( R_LEDS ); PORTB |= _BV( L_LEDS ); PORTB |= _BV( M_LEDS );
#define LEDS_OFF PORTB &=~ _BV( R_LEDS ); PORTB &=~ _BV( L_LEDS ); PORTB &=~ _BV( M_LEDS );

uint8_t flag;
uint8_t counter;
uint8_t limit = 0;

// signal handler for timer interrupt TOV0
ISR(TIMER0_OVF_vect) {
	//blinking routine
	if ((PINB & (1 << BRAKES))) {	//if brakes switch is off
		limit = 10;		//blinking pause is longer
	} else {
		limit = 1;			//set pause shorter
	}
	if ((PINB & (1 << SWITCH))) {	//if switch is off
		flag = 0;			//long blinking
	} else {
		flag = 1;			//shorter
	}
	counter++;
	if ((limit == 10 ) && (flag == 0)) {
	    LEDS_OFF
		return;			//if switch is off and brakes is not on - do nothing
	}
	if (counter > limit) {		//switch leds on
		LEDS_ON
		counter = 0;		//and reset counter
	} else {
        LEDS_OFF
	}
}

int main(void) {
					//PortB settings:
	DDRB |= _BV( R_LEDS );		//output
	DDRB |= _BV( L_LEDS );
	DDRB |= _BV( M_LEDS );
	DDRB &=~ _BV( BRAKES );		//input
	DDRB &=~ _BV( SWITCH );
	PORTB |= _BV( BRAKES );		//pull-up resistor is on
	PORTB |= _BV( SWITCH );

	TIMSK |= (1<<TOV0);			//enable timer overflow interrupt

	TCNT0=0x00;				//set timer counter initial value

						//prescaler for timer0
	//TCCR0B |= (1 <<CS00)|(1<<CS02);	//1024
	TCCR0B |= (1<<CS02);			//256
	//TCCR0B |= (1 <<CS00)|(1<<CS01);	//64

	sei();					//enable interrupts 

	flag = 0;					//initial flags
	counter = 0;

	power_all_disable();			//disable all power consumpting modules
	power_timer0_enable();			//except timer0
	set_sleep_mode(SLEEP_MODE_IDLE);
	sleep_enable();

	for (;;) {
		sleep_cpu();
	} 
}
Питание - от двух батареек АА, алгоритм таков:
схема постоянно включена, находимся в режиме ожидания с работающим таймером0, при вызове его прерывания проверяем включен-ли ночной режим (медленное мигание) выключателем SWITCH и нажат-ли концевой выключатель тормоза BRAKES (частое мигание). В зависимости от этого переключаем светодиоды и уходим из прерывания.
Светодиоды разнесены на разные порты для уменьшения тока на них.

Вопрос такой, не много-ли в режиме IDLE потребляет схема (400 мкА - это нормально)?
Он после выхода из прерывания восстанавливается?

Есть идеи по оптимизации схемы или кода?

Шо мыслите, пацаны, я буду крут на раёне? :)
Вложения
BackFlash01.gif
схема
(6.85 КБ) 314 скачиваний
Реклама
figley
Родился
Сообщения: 14
Зарегистрирован: Вт фев 01, 2011 17:11:00
Контактная информация:

Re: ATtiny25: веломигалка, вопрос по режиму сна и оптимизаци

Сообщение figley »

В даташите для ATtiny25V указано:

Low Power Consumption
– Active Mode:
• 1 MHz, 1.8V: 300 μA
– Power-down Mode:
• 0.1 μA at 1.8V

400мкА намерял цифровым показометром
Реклама
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

Re: ATtiny25: веломигалка, вопрос по режиму сна и оптимизаци

Сообщение avreal »

У Вас же не 1.8 В, как в приведенной цитате из документации.
Но всё равно многовато. На 3 В при всём выключенном в IDLE должно быть не больше 300 мкА.
Ну, может, где-то pull-up недовыключен.
Кстати, аналоговый компаратор надо выключить отдельно в его регистре. Он не в PRR и через функции power.h не управляется.

Для приведенной задачи вполне можно уйти на тактирование от WDT-шного генератора (формально 128кГц, реально немного ниже, 115-120).
Только, особенно если не знаете, как у Вашего программатора выставить частоту SPI ниже 4 килогерц, не забудьте стереть CKDIV8.
Уйдёте ниже 100 мкА.
Если же разберётесь, как WDT задействовать как таймер для побудки прерыванием из power down, например, раз 32-64 мс (номинально, реально будет около 35-70) и уже эти тики использовать для опроса тормозов и управленя частотой мигания, то процессор на себя меньше 30мкА возьмёт даже с включенным BOD.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
figley
Родился
Сообщения: 14
Зарегистрирован: Вт фев 01, 2011 17:11:00
Контактная информация:

Re: ATtiny25: веломигалка, вопрос по режиму сна и оптимизаци

Сообщение figley »

avreal писал(а):У Вас же не 1.8 В, как в приведенной цитате из документации.
Но всё равно многовато. На 3 В при всём выключенном в IDLE должно быть не больше 300 мкА.
Ну, может, где-то pull-up недовыключен.
Кстати, аналоговый компаратор надо выключить отдельно в его регистре. Он не в PRR и через функции power.h не управляется.

Для приведенной задачи вполне можно уйти на тактирование от WDT-шного генератора (формально 128кГц, реально немного ниже, 115-120).
Только, особенно если не знаете, как у Вашего программатора выставить частоту SPI ниже 4 килогерц, не забудьте стереть CKDIV8.
Уйдёте ниже 100 мкА.
Если же разберётесь, как WDT задействовать как таймер для побудки прерыванием из power down, например, раз 32-64 мс (номинально, реально будет около 35-70) и уже эти тики использовать для опроса тормозов и управленя частотой мигания, то процессор на себя меньше 30мкА возьмёт даже с включенным BOD.
Спасибо за направление.
И я, кстати, Ваш сосед - из Вишнёвого :)
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Krazy_killer
Мучитель микросхем
Сообщения: 415
Зарегистрирован: Сб апр 22, 2006 15:22:31
Откуда: Киренск[38] / Воронеж[36]
Контактная информация:

Re: ATtiny25: веломигалка, вопрос по режиму сна и оптимизаци

Сообщение Krazy_killer »

круто. давно сдесь небыл.
эту же проблему решил проще.
2 геркона с 3мя контактами по 35руб
2 магнита неодимовых 5мм блинчики (ибо геркон тугой что ппц)
геркон под манетки на термоклей (чтоб лучше сидело в корпусе (суппорте манеток)просверлил 2мм отверстие туда порасплавленнее трмоклей сверху геркон в термоусадке(она липнет клева))
на уголок из жести на изаленту \рермоусадку магнитик, на изоленту к рычагу.

все это рулится 1вт ARL 5050 СВетодиодом и 4мя 10мм яркими красными. (ночной режим 1вт светодиод кормится током 20ма , торможение 50мА +4 * 20мА дополнительных)
вроде нече так получилос . правда разумеется некакогомигания не делал

http://transbaikal-sseb.narod.ru/my_bik ... ails_r.jpg
http://transbaikal-sseb.narod.ru/my_bik ... 9528_r.jpg
http://transbaikal-sseb.narod.ru/my_bik ... resize.JPG
http://transbaikal-sseb.narod.ru/my_bik ... resize.JPG
http://transbaikal-sseb.narod.ru/my_bik ... resize.JPG
http://transbaikal-sseb.narod.ru/my_bik ... resize.JPG
http://transbaikal-sseb.narod.ru/my_bik ... resize.JPG
http://transbaikal-sseb.narod.ru/my_bik ... resize.JPG
http://transbaikal-sseb.narod.ru/my_bik ... resize.JPG
http://transbaikal-sseb.narod.ru/my_bik ... resize.JPG
http://transbaikal-sseb.narod.ru/my_bik ... resize.JPG
http://transbaikal-sseb.narod.ru/my_bik ... resize.JPG
http://transbaikal-sseb.narod.ru/my_bik ... resize.JPG
http://transbaikal-sseb.narod.ru/my_bik ... resize.JPG
http://transbaikal-sseb.narod.ru/my_bik ... resize.JPG
http://transbaikal-sseb.narod.ru/my_bik ... resize.JPG
http://transbaikal-sseb.narod.ru/my_bik ... resize.JPG
http://transbaikal-sseb.narod.ru/my_bik ... resize.JPG
http://transbaikal-sseb.narod.ru/my_bik ... resize.JPG
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»