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

 
 
> Не моргает светодиод.
Kassi
сообщение Nov 29 2008, 18:23
Сообщение #1





Группа: Участник
Сообщений: 13
Регистрация: 22-11-08
Пользователь №: 41 867



Прикрепленный файл  _____________.doc ( 23.5 килобайт ) Кол-во скачиваний: 232
Доброго времени суток.
Учусь по книге, где есть готовые примеры на С (программирую на STK500 всё-OK). Решил сделать что то своё.
Имеется ATtiny2313 вход (0) порта D коммутируется кнопкой на землю.
На выходе PORTB включен светодиод на Vcc.
Алгоритм на словах прост:
-при подаче питания LED не светится;
-замыкаем кнопку на землю-LED зажигается на 3 сек. и гаснет;
-отпускаем кнопку -LED вновь зажигается на 3 сек. и гаснет:
-LED потушен, пока кнопка снова не переключится.
Проще говоря, при переключении по фронту и по спаду LED должен зажечься на 3 сек. и погаснуть.
Пробовал по разному - LED моргает, но не так как надо.
Видимо фантазии не хватает образно мыслить.
Подтолкните в нужном направлении.

Сообщение отредактировал Kassi - Nov 29 2008, 18:27
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 8)
drovik
сообщение Nov 29 2008, 18:33
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 47
Регистрация: 7-05-07
Пользователь №: 27 573



Цитата(Kassi @ Nov 29 2008, 21:23) *
Прикрепленный файл  _____________.doc ( 23.5 килобайт ) Кол-во скачиваний: 232
Доброго времени суток.
Учусь по книге, где есть готовые примеры на С (программирую на STK500 всё-OK). Решил сделать что то своё.
Имеется ATtiny2313 вход (0) порта D коммутируется кнопкой на землю.
На выходе PORTB включен светодиод на Vcc.
Алгоритм на словах прост:
-при подаче питания LED не светится;
-замыкаем кнопку на землю-LED зажигается на 3 сек. и гаснет;
-отпускаем кнопку -LED вновь зажигается на 3 сек. и гаснет:
-LED потушен, пока кнопка снова не переключится.
Проще говоря, при переключении по фронту и по спаду LED должен зажечься на 3 сек. и погаснуть.
Пробовал по разному - LED моргает, но не так как надо.
Видимо фантазии не хватает образно мыслить.
Подтолкните в нужном направлении.


Что-то в исходнике с фигурными скобками напутано... Много их в блоках if. Да и код одинаковый при любом условии выполняется, даже если их правильно расставить. А внешние прерывания у него есть ?

Сообщение отредактировал drovik - Nov 29 2008, 18:44
Go to the top of the page
 
+Quote Post
Paulina
сообщение Nov 29 2008, 19:12
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 35
Регистрация: 18-05-08
Пользователь №: 37 607



Код
while (1)
   {
   while (PIND.0==1) {}          // Проверка нажатия кнопки
   if (PINB.0==1)
     { PORTB.0=0; }                 // Зажигаем светодиод
     delay_ms (3000);                   // Задержка 3 сек.
     { PORTB.0=1; }                      // Тушим светодиод
   else
     { PORTB.0=0; }            // Зажигаем светодиод
     delay_ms (3000);           // Задержка 3 сек.
     { PORTB.0=1; }                      // Тушим светодиод
  while (PIND.0==0) {}
  };
}

согласна с drovik, какой смысл в if-else если куски кода после них одинаковые?
сделайте лучше так:
Код
while(1)
{
  if(PIND.0==1) //если не нажата,  
  {
    while(PIND.0==1); //ждем нажатия
    PORTB.0=0;
    delay_ms(3000);
    PORTB.0=1;
  }
  if(PIND.0==0) //если нажата,
  {
    while(PIND.0==0); //ждем отпускания
    PORTB.0=0;
    delay_ms(3000);
    PORTB.0=1;
  }
}

или используйте прерывания

Сообщение отредактировал Paulina - Nov 29 2008, 19:38
Go to the top of the page
 
+Quote Post
Kassi
сообщение Nov 29 2008, 20:04
Сообщение #4





Группа: Участник
Сообщений: 13
Регистрация: 22-11-08
Пользователь №: 41 867



Ура, заработала!!!!
Буду разбираться, как это у Вас красиво получается.
Прерываний нет, я пока о них даже думать боюсь.
Спасибо большое.

Сообщение отредактировал Kassi - Nov 29 2008, 20:06
Go to the top of the page
 
+Quote Post
Kassi
сообщение Nov 30 2008, 14:53
Сообщение #5





Группа: Участник
Сообщений: 13
Регистрация: 22-11-08
Пользователь №: 41 867



Эээ, тут нюансик пробежал.
Вчера, на радостях что заработало, решил ещё код помучить в (CVAVR).
Изменил задержку во втором цикле.
Проверил - ошибок нет, жму Project-Make-OK и тут выскакивает маленький, жёлтый транспарантик с каким -то предупреждением, я его проигнорировал - потом буду разбираться.
Запрограммировал, включил, работает на первый взгляд, как и хотел: при нажатии горит 3 сек., при отпускании 0,5сек.
Вроде всё хорошо, но вспомнил сообщение:
Paulina: "... согласна с drovik, какой смысл в if-else если куски кода после них одинаковые?..."
Вот и закралось сомнение, если я изменил задержку, то куски уже не одинаковы?
Сделал всё заново и так и этак и на следующий день, но предупреждение больше не появлялось.
Подскажите, корректно ли я изменил код или надо было писать if-else.
Хотя, как бы всё работает, но...
Go to the top of the page
 
+Quote Post
drovik
сообщение Nov 30 2008, 16:10
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 47
Регистрация: 7-05-07
Пользователь №: 27 573



Цитата(Kassi @ Nov 30 2008, 17:53) *
Эээ, тут нюансик пробежал.
Вчера, на радостях что заработало, решил ещё код помучить в (CVAVR).
Изменил задержку во втором цикле.
Проверил - ошибок нет, жму Project-Make-OK и тут выскакивает маленький, жёлтый транспарантик с каким -то предупреждением, я его проигнорировал - потом буду разбираться.
Запрограммировал, включил, работает на первый взгляд, как и хотел: при нажатии горит 3 сек., при отпускании 0,5сек.
Вроде всё хорошо, но вспомнил сообщение:
Paulina: "... согласна с drovik, какой смысл в if-else если куски кода после них одинаковые?..."
Вот и закралось сомнение, если я изменил задержку, то куски уже не одинаковы?
Сделал всё заново и так и этак и на следующий день, но предупреждение больше не появлялось.
Подскажите, корректно ли я изменил код или надо было писать if-else.
Хотя, как бы всё работает, но...


Усе нормально изменил, а вообще-то лучше текст предупреждения писать. (А еще лучше читать, переводить и делать выводы). Обычно предупреждения не опасны, но могут помочь выявить логическую ошибку в программе.
Go to the top of the page
 
+Quote Post
Kassi
сообщение Nov 30 2008, 20:14
Сообщение #7





Группа: Участник
Сообщений: 13
Регистрация: 22-11-08
Пользователь №: 41 867



Вчера очень хотелось кнопки понажимать.
Понадеялся, что потом верну всё назад и разберусь, а оно (предупреждение) больше не появилось.
Теперь переживаю, что это было?
Go to the top of the page
 
+Quote Post
XVR
сообщение Dec 1 2008, 09:57
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Цитата(Kassi @ Nov 30 2008, 23:14) *
Вчера очень хотелось кнопки понажимать.
Понадеялся, что потом верну всё назад и разберусь, а оно (предупреждение) больше не появилось.
Теперь переживаю, что это было?
Телевизор смотрел? Землетрясения в Тимбукуту не случилось? Наводнения на Северном Полюсе? Пожара на Южном? Нет? Значит ни о чем опасном не предупреждали smile.gif Но на будущее - желтенькие транспорантики лучше читать сразу, т.к. предупреждения, касающиеся компилируемых исходников обычно пишутся в логи компиляции, а все выскакивающее, всплывающее и выпригивающее обычно касается чего то другого (например, кончилась память на компьютере, или банально забыл сохранить файл с исходником перед компиляцией). Так что они могут больше и не появится (а могут и появится), и это скорее всего никак с исходниками связано не будет biggrin.gif
Go to the top of the page
 
+Quote Post
Kassi
сообщение Dec 2 2008, 10:04
Сообщение #9





Группа: Участник
Сообщений: 13
Регистрация: 22-11-08
Пользователь №: 41 867



Спасибо, что не прошли мимо сообщения.
Беру себя в руки, приготовил ручку и блокнот - буду записывать (аккуратно).
Go to the top of the page
 
+Quote Post

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

 


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


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