Добро пожаловать, Гость
Логин: Пароль: Запомнить меня

Разработка программной ШИМ для управления двумя ДПТ на основе статьи "Нисходящее программирование"
(1 чел.) (1) гость
  • Страница:
  • 1
  • 2
  • 3
  • 4

ТЕМА: Разработка программной ШИМ для управления двумя ДПТ на основе статьи "Нисходящее программирование"

Re: Разработка программной ШИМ для управления двумя ДПТ на основе статьи "Нисходящее программирование" 1 мес., 2 нед. назад #46

  • ARV
  • Сейчас на сайте
  • Администратор
  • Постов: 563
  • Репутация: 22
Число, существующее в памяти - это переменная, существующее в некоторый момент - это значение переменной, а просто число - это абстракция, существующая всегда независимо ни от чего.
Не углубляйтесь в дебри.
я не ленивый, я энергосберегающий...

Re: Разработка программной ШИМ для управления двумя ДПТ на основе статьи "Нисходящее программирование" 1 мес., 2 нед. назад #47

  • plis
  • Вне сайта
  • Захожу иногда
  • Постов: 47
  • Репутация: 0
ARV написал:
<...>Для операции определения положения бита в байте по его номеру в avr-gcc даже специальный макрос предусмотрен, _BV(x) - от слов Bit Value.
#define _BV(x)   (1 << (x))
<...>

Если вам нравится работать с "инверсными" битами, то ранее указанная вами запись будет выглядеть так:
#define BTN_1_UP    ~_BV(0)
#define BTN_1_DWN   ~_BV(1) и т.д.

Нет лишних, загромождающих поле зрения единичек, и сразу понятно, о каком именно бите идет речь. Да и в случае чего изменить проще, если номера пинов захочется поменять.

Вы торопите события.)
Я пытаюсь осознать "указатели", а вы уже новую вводную даёте.
Всё-таки, я попробую сначала без специальных макросов...

Re: Разработка программной ШИМ для управления двумя ДПТ на основе статьи "Нисходящее программирование" 1 мес., 2 нед. назад #48

  • plis
  • Вне сайта
  • Захожу иногда
  • Постов: 47
  • Репутация: 0
Пока нет сил объяснить как это получилось...
Соберусь с мыслями - попробую обосновать.)
:pinch: ВНИМАНИЕ: СПОЙЛЕР!


Нет, лучше так:
void change_width_pwm(register unsigned char *_pwm, const int a)

{		
	int pwm = *_pwm;
	switch(a)
	
	{
		case STEP_UP :				
		if(pwm < WIDTH_PWM_MAX){*_pwm = *_pwm + a;}
		else{*_pwm = WIDTH_PWM_MIN;}
		break;
		case STEP_DWN :
		if(pwm > WIDTH_PWM_MIN){*_pwm = *_pwm + a;}
		else{*_pwm = WIDTH_PWM_MAX;}
		break;
	}	 
}
Последнее редактирование: 1 мес., 2 нед. назад от plis.

Re: Разработка программной ШИМ для управления двумя ДПТ на основе статьи "Нисходящее программирование" 1 мес., 2 нед. назад #49

  • plis
  • Вне сайта
  • Захожу иногда
  • Постов: 47
  • Репутация: 0
Не, не совсем так, свежим взглядом посмотрел - всё в кучу свалено...
Для одних и тех же состояний - разные дефайны навыдумывал.
Эх...

Re: Разработка программной ШИМ для управления двумя ДПТ на основе статьи "Нисходящее программирование" 1 мес., 2 нед. назад #50

  • ARV
  • Сейчас на сайте
  • Администратор
  • Постов: 563
  • Репутация: 22
Мда...
я не ленивый, я энергосберегающий...

Re: Разработка программной ШИМ для управления двумя ДПТ на основе статьи "Нисходящее программирование" 1 мес., 2 нед. назад #51

  • plis
  • Вне сайта
  • Захожу иногда
  • Постов: 47
  • Репутация: 0
Это понятно.)))
У меня всё это время ушло, на осознание указателя и с чем его едят.
И то - до конца не осознал.
Подождите ещё не много - всё-таки сам хочу дойти.)

Re: Разработка программной ШИМ для управления двумя ДПТ на основе статьи "Нисходящее программирование" 1 мес., 1 нед. назад #52

  • ARV
  • Сейчас на сайте
  • Администратор
  • Постов: 563
  • Репутация: 22
Да дело ясное, что дело тёмное. Просто изначально у вас было намерение следовать рекомендациям нисходящего программирования, т.е. постепенно шаг за шагом... А в итоге скатились снова к "все и сразу". А все и сразу очень сложно, особенно для начинающего.
я не ленивый, я энергосберегающий...

Re: Разработка программной ШИМ для управления двумя ДПТ на основе статьи "Нисходящее программирование" 1 мес., 1 нед. назад #53

  • plis
  • Вне сайта
  • Захожу иногда
  • Постов: 47
  • Репутация: 0
Именно так.
Когда пытаюсь сформулировать мысль, в голове сразу возникают куски кода, и пошло-поехало - if на if налезает и while'ом погоняет...)
Сейчас с работой завал.
Маловато времени...

Re: Разработка программной ШИМ для управления двумя ДПТ на основе статьи "Нисходящее программирование" 1 мес., 1 нед. назад #54

  • plis
  • Вне сайта
  • Захожу иногда
  • Постов: 47
  • Репутация: 0
ARV написал:
Мда...


Такой удручающий результат - это от того, что мысли - "скакуны".)
Если не использовать "прискакавший" в голову массив, то функция для разных кейсов упрощается до неприличной
#define F_CPU 8000000UL
#define BTN_UP_0 (0b11111110)		//нажата кнопка "+" нулевого канала
#define BTN_DWN_0 (0b11111101)		//нажата кнопка "-" нулевого канала	    
#define BTN_UP_1 (0b11111011)		//нажата кнопка "+" первого канала
#define BTN_DWN_1 (0b11110111)		//нажата кнопка "-" первого канала
#define ENABLE (PINB == 0b11111111)	//все кнопки отпущены
#define UP (10)
#define DWN (-10)

void change_width_pwm(unsigned char *b, const int a)

{				
		*b +=a;
}

Для случаев
	
  register unsigned char Button_state = 0;
register unsigned char counter_Button = 0;		//счётчик состояния кнопок	
            unsigned char width_Pwm_0 = 0;		//ширинa pwm_0
            unsigned char width_Pwm_1 = 0;		//ширинa pwm_1
   register unsigned char counter_Pwm = 0;		//счётчик ширины pwm	  
      unsigned char enable_change_Pwm = 1;

switch(Button_state){
			case BTN_UP_0 : change_width_pwm(&width_Pwm_0, UP);
			break;
			case BTN_DWN_0 : change_width_pwm(&width_Pwm_0, DWN);
			break;
			case BTN_UP_1 : change_width_pwm(&width_Pwm_1, UP);		
			break;					
			case BTN_DWN_1 : change_width_pwm(&width_Pwm_1, DWN);
			break;
}


Так лучше, если конечно я объясню это используя принципы нисходящего программирования?..
Дефолт ещё не использован, но - думаю. Крепко.)

P.S. Одно не могу понять - почему это работает.)))
Точнее - почему оно "по кругу гоняет" ширину импульса...
Не, понял - тоже самое "переполнение" width_Pwm!!!
Последнее редактирование: 1 мес., 1 нед. назад от plis.

Re: Разработка программной ШИМ для управления двумя ДПТ на основе статьи "Нисходящее программирование" 1 мес., 1 нед. назад #55

  • ARV
  • Сейчас на сайте
  • Администратор
  • Постов: 563
  • Репутация: 22
Работает - это хорошо.
По кругу - это см. в функцию change_width_pwm - там следует контролировать границы изменения.

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

Re: Разработка программной ШИМ для управления двумя ДПТ на основе статьи "Нисходящее программирование" 1 мес., 1 нед. назад #56

  • plis
  • Вне сайта
  • Захожу иногда
  • Постов: 47
  • Репутация: 0
ARV написал:
Работает - это хорошо.
По кругу - это см. в функцию change_width_pwm - там следует контролировать границы изменения.
<...>


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

Re: Разработка программной ШИМ для управления двумя ДПТ на основе статьи "Нисходящее программирование" 3 нед., 4 д. назад #57

  • plis
  • Вне сайта
  • Захожу иногда
  • Постов: 47
  • Репутация: 0
Вот такой монстр получился:
:pinch: ВНИМАНИЕ: СПОЙЛЕР!

Добавил третий канал шим и прикрутил индикацию на семисегментных индикаторах.))

Re: Разработка программной ШИМ для управления двумя ДПТ на основе статьи "Нисходящее программирование" 3 нед., 4 д. назад #58

  • ARV
  • Сейчас на сайте
  • Администратор
  • Постов: 563
  • Репутация: 22
А Настя это кто?
я не ленивый, я энергосберегающий...

Re: Разработка программной ШИМ для управления двумя ДПТ на основе статьи "Нисходящее программирование" 3 нед., 4 д. назад #59

  • plis
  • Вне сайта
  • Захожу иногда
  • Постов: 47
  • Репутация: 0
))))))
Или имя компьютера, или имя пользователя.
А на самом деле - имя моей дочери.
Ноутбук её.
А Atmel файл сам подписывает.
А я не меняю.
))))))
  • Страница:
  • 1
  • 2
  • 3
  • 4
Время создания страницы: 0.24 секунд