Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

Непонятная гадость tiny13/winavr

Непрочитано 25.07.2012, 14:15  
whoim
Почётный гражданин KAZUS.RUN
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Непонятная гадость tiny13/winavr

Задача - плавно зажечь 5 пин по очереди, потом также по очереди потушить

Код:
/* ПИНЫ */
#define POT PB5
#define CH1 PB3
#define CH2 PB4
#define CH3 PB0
#define CH4 PB2
#define CH5 PB1

...

//задержки
void delayms(uint16_t _delay) {
	for(;_delay;_delay--)
      _delay_ms(1);
}

void delayus(uint16_t _delay) {
	for(;_delay;_delay--)
      _delay_us(1);
}
//запись в пин
static inline void pinwrite(uint8_t _pin, uint8_t _state) __attribute__((always_inline));
void pinwrite(uint8_t _pin, uint8_t _state) {
	if(_state == 1) PORTB |= (1‹‹(_pin));
	else PORTB &= ~(1‹‹(_pin));
}
....

void fade_on(uint8_t _pin, uint8_t _delay) {
	for (uint8_t step1 = 0; step1 ‹= FADE_CYCLES; step1 ++)
		for (uint8_t step2 = 0; step2 ‹= FADE_CYCLES; step2 ++) {
			if (step1 › step2) pinwrite(_pin, 1);
			else pinwrite(_pin, 0);
			delayus(_delay);
			}
	pinwrite(_pin, 1);
}

void fade_off(uint8_t _pin, uint8_t _delay) {
	for (uint8_t step1 = 0; step1 ‹= FADE_CYCLES; step1 ++)
		for (uint8_t step2 = 0; step2 ‹= FADE_CYCLES; step2 ++) {
			if (step2 › step1) pinwrite(_pin, 1);
			else pinwrite(_pin, 0);
			delayus(_delay);
			}
	pinwrite(_pin, 0);
}

....

главное тело
	//работа эффектов
	switch (select) {
	
		case 0: //эффект бегущего огня
			..
			break;
		
		case 1: //нарастание-угасание
			//зажечь
			switch (_temp) {
				//зажечь
				case 1: fade_on(CH1, speed); break;
				case 2: fade_on(CH2, speed); break;
				case 3: fade_on(CH3, speed); break;
				case 4: fade_on(CH4, speed); break;
				case 5: fade_on(CH5, speed); break;
				//потушить
				case 6: fade_off(CH1, speed); break;
				case 7: fade_off(CH2, speed); break;
				case 8: fade_off(CH3, speed); break;
				case 9: fade_off(CH4, speed); break;
				case 10: fade_off(CH5, speed); break;
			}
			_temp++;
			if(_temp › 10) _temp = 1;
			delayms(speed);
			break;
		
		case 2: //плавное мигание всеми пинами
			..		
			break;
	}
  }
код не весь, но основное. Глюк в эффекте switch (select) / case 1

Должно в соответствии с шагом в _temp зажигать либо тушить пин по очереди. Вроде все просто.

В реале - загорается CH1, секунда, тухнет, одновременно загораются оставшиеся и уже потом оставшиеся корректно гасятся по очереди.

Чо за на?
Реклама:
whoim вне форума  
Сказали "Спасибо" whoim
warel (29.06.2019)
Непрочитано 25.07.2012, 14:28  
st__1
Заблокирован
 
Регистрация: 31.12.2011
Сообщений: 726
Сказал спасибо: 32
Сказали Спасибо 223 раз(а) в 162 сообщении(ях)
st__1 на пути к лучшему
По умолчанию Re: непонятная гадость tiny13/winavr

А если _temp объявить как volatile ???
st__1 вне форума  
Сказали "Спасибо" st__1
warel (29.06.2019)
Непрочитано 25.07.2012, 16:10  
Sinthez
Прописка
 
Регистрация: 23.09.2008
Сообщений: 158
Сказал спасибо: 24
Сказали Спасибо 24 раз(а) в 24 сообщении(ях)
Sinthez на пути к лучшему
По умолчанию Re: Непонятная гадость tiny13/winavr

Это не поможет? В 4 посте есть исходник подобной конструкции.
Sinthez вне форума  
Сказали "Спасибо" Sinthez
warel (29.06.2019)
Непрочитано 25.07.2012, 16:13  
whoim
Почётный гражданин KAZUS.RUN
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: Непонятная гадость tiny13/winavr

Сообщение от st__1 Посмотреть сообщение
А если _temp объявить как volatile ???
так и объявлено

дело было не в бобине.. почему то если включался первый мосфет, другим нехватало чего то включаться. P-мосфеты, через npn BCR533 с подтяжкой к плюсу.

Почистил плату, прошелся припоем по дорогам, потыкал паяльником повезде в общем - завелось. Как то так)

Три часа на поиск глюка не там..
whoim вне форума  
Сказали "Спасибо" whoim
warel (29.06.2019)
Непрочитано 25.07.2012, 21:24  
whoim
Почётный гражданин KAZUS.RUN
 
Аватар для whoim
 
Регистрация: 26.11.2011
Адрес: Анапа
Сообщений: 1,618
Сказал спасибо: 284
Сказали Спасибо 129 раз(а) в 111 сообщении(ях)
whoim на пути к лучшему
По умолчанию Re: Непонятная гадость tiny13/winavr

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

то есть проблемы вообще не было со стороны платы
whoim вне форума  
Сказали "Спасибо" whoim
warel (29.06.2019)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Светодиод + Tiny13 putmannn Микроконтроллеры, АЦП, память и т.д 7 19.12.2011 14:06
Детектор нуля и Tiny13 pve70 Микроконтроллеры, АЦП, память и т.д 111 11.04.2010 19:32
tiny13 и powerdown -wired- Электроника - это просто 1 31.03.2010 18:54
VmLab и tiny13 alevladel Микроконтроллеры, АЦП, память и т.д 2 03.02.2010 09:57
TINY13 280959 Микроконтроллеры, АЦП, память и т.д 10 16.10.2009 10:53


Часовой пояс GMT +4, время: 00:06.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.