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

 
 
 
Reply to this topicStart new topic
> Прошу помочь оптимизировать код. От жары уже все плавится, трудно соображать
smk
сообщение Jul 18 2011, 15:20
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446




Все работает, только много места занимает. Суть смысл в том, что есть сенсор, которым нужно включать/выключать светодиод и устанавливать яркость светодиода. По задумке короткие касания включают и выключают. Удерживание переводит в режим димирования и происходит он пока удерживается сенсор. Отпущенный сенсор прекращает димирование, а через некоторое время выключает режим настройки. Желательно чтобы яркость менялась от max до min и обратно (это не влезло) ну и в 2-3 раза медленнее. Еще нужно по выходу из настройки писать в EEPROM что настроили и при включении грузить. Не влазит все это. Прошу помочь. Спасибо.

Код
        
unsigned char pwm, pwm2, flag, flag2, on_off, revers;

      if (GET_SENSOR_STATE(0) !=0)
        {
          if(flag==0) {flag2=~flag2; flag=1; pwm=0;}//
          if(pwm>80) {on_off=255; pwm2=0;}
        }
      else
        {
          flag=0;
          if((flag2==0)&(on_off==0)) DDRB &= ~(1u << PORTB2);//
          else {flag2=255;}
          if(pwm2>120) on_off=0;
        }
      if(flag2==255) DDRB |= (1u << PORTB2);
      if(on_off==255)PORTD &= ~(1u << PORTD6);
      else PORTD |= (1u << PORTD6);        
        
#pragma vector=TIMER0_COMPA_vect
__interrupt static void timer0_isr( void )
{
   if (GET_SENSOR_STATE(0) !=0)
     {
       ++pwm;
       if(on_off == 255)
       {
/*      if((revers==0)&(OCR0A != 255)) ++OCR0A;
       else
          {
          revers = 255;
          if(OCR0A !=0) --OCR0A;
          else revers = 0;
          }*/
        ++OCR0A;
       }
     }
   else ++pwm2;
}



--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Jul 18 2011, 17:15
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Использовать биты вместо байтов или если уже используете байты, то хотя-бы с зачатками разума
не:
if(on_off==255)PORTD &= ~(1u << PORTD6);
else PORTD |= (1u << PORTD6);
а в стиле:
PORTD = on_off.

не:
if(on_off == 255)
а:
if(on_off )

И так далее, и так далее....



Сам алгоритм не смотрел, но что-то счетчиков всяких многовато для такой задачи.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
-SANYCH-
сообщение Jul 18 2011, 21:12
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 289
Регистрация: 6-12-05
Пользователь №: 11 864



А зачем вам переменная "revers"?
У Вашем коде она нигде не используется, кроме как в закомментированном куске кода. Вообще то не плохо было бы почистить код перед тем как выкладывать.
Go to the top of the page
 
+Quote Post
smk
сообщение Jul 19 2011, 06:45
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 246
Регистрация: 17-03-05
Из: Украина, Киев
Пользователь №: 3 446



Цитата(zltigo @ Jul 18 2011, 20:15) *
Сам алгоритм не смотрел, но что-то счетчиков всяких многовато для такой задачи.

Вот та же мысль терзает. За советы спасибо. Попробую.

revers используется как признак направления счета.


--------------------
Живи днем так, чтобы ночью ты спал спокойно.
Go to the top of the page
 
+Quote Post
ARV
сообщение Jul 27 2011, 10:40
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



поглядите мой проект http://arv.radioliga.com/content/view/152/44/
я там при помощи одной кнопки кучу функций делал, в том числе регулировал значение параметра в обе стороны. исходники прилагаются, там есть функции работы с кнопкой - возможно, анализ моего варианта вам чем-то поможет.


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post

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

 


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


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