Kassi 0 29 ноября, 2008 Опубликовано 29 ноября, 2008 (изменено) · Жалоба _____________.doc Доброго времени суток. Учусь по книге, где есть готовые примеры на С (программирую на STK500 всё-OK). Решил сделать что то своё. Имеется ATtiny2313 вход (0) порта D коммутируется кнопкой на землю. На выходе PORTB включен светодиод на Vcc. Алгоритм на словах прост: -при подаче питания LED не светится; -замыкаем кнопку на землю-LED зажигается на 3 сек. и гаснет; -отпускаем кнопку -LED вновь зажигается на 3 сек. и гаснет: -LED потушен, пока кнопка снова не переключится. Проще говоря, при переключении по фронту и по спаду LED должен зажечься на 3 сек. и погаснуть. Пробовал по разному - LED моргает, но не так как надо. Видимо фантазии не хватает образно мыслить. Подтолкните в нужном направлении. Изменено 29 ноября, 2008 пользователем Kassi Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
drovik 0 29 ноября, 2008 Опубликовано 29 ноября, 2008 (изменено) · Жалоба _____________.doc Доброго времени суток. Учусь по книге, где есть готовые примеры на С (программирую на STK500 всё-OK). Решил сделать что то своё. Имеется ATtiny2313 вход (0) порта D коммутируется кнопкой на землю. На выходе PORTB включен светодиод на Vcc. Алгоритм на словах прост: -при подаче питания LED не светится; -замыкаем кнопку на землю-LED зажигается на 3 сек. и гаснет; -отпускаем кнопку -LED вновь зажигается на 3 сек. и гаснет: -LED потушен, пока кнопка снова не переключится. Проще говоря, при переключении по фронту и по спаду LED должен зажечься на 3 сек. и погаснуть. Пробовал по разному - LED моргает, но не так как надо. Видимо фантазии не хватает образно мыслить. Подтолкните в нужном направлении. Что-то в исходнике с фигурными скобками напутано... Много их в блоках if. Да и код одинаковый при любом условии выполняется, даже если их правильно расставить. А внешние прерывания у него есть ? Изменено 29 ноября, 2008 пользователем drovik Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Paulina 0 29 ноября, 2008 Опубликовано 29 ноября, 2008 (изменено) · Жалоба 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; } } или используйте прерывания Изменено 29 ноября, 2008 пользователем Paulina Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kassi 0 29 ноября, 2008 Опубликовано 29 ноября, 2008 (изменено) · Жалоба Ура, заработала!!!! Буду разбираться, как это у Вас красиво получается. Прерываний нет, я пока о них даже думать боюсь. Спасибо большое. Изменено 29 ноября, 2008 пользователем Kassi Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kassi 0 30 ноября, 2008 Опубликовано 30 ноября, 2008 · Жалоба Эээ, тут нюансик пробежал. Вчера, на радостях что заработало, решил ещё код помучить в (CVAVR). Изменил задержку во втором цикле. Проверил - ошибок нет, жму Project-Make-OK и тут выскакивает маленький, жёлтый транспарантик с каким -то предупреждением, я его проигнорировал - потом буду разбираться. Запрограммировал, включил, работает на первый взгляд, как и хотел: при нажатии горит 3 сек., при отпускании 0,5сек. Вроде всё хорошо, но вспомнил сообщение: Paulina: "... согласна с drovik, какой смысл в if-else если куски кода после них одинаковые?..." Вот и закралось сомнение, если я изменил задержку, то куски уже не одинаковы? Сделал всё заново и так и этак и на следующий день, но предупреждение больше не появлялось. Подскажите, корректно ли я изменил код или надо было писать if-else. Хотя, как бы всё работает, но... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
drovik 0 30 ноября, 2008 Опубликовано 30 ноября, 2008 · Жалоба Эээ, тут нюансик пробежал. Вчера, на радостях что заработало, решил ещё код помучить в (CVAVR). Изменил задержку во втором цикле. Проверил - ошибок нет, жму Project-Make-OK и тут выскакивает маленький, жёлтый транспарантик с каким -то предупреждением, я его проигнорировал - потом буду разбираться. Запрограммировал, включил, работает на первый взгляд, как и хотел: при нажатии горит 3 сек., при отпускании 0,5сек. Вроде всё хорошо, но вспомнил сообщение: Paulina: "... согласна с drovik, какой смысл в if-else если куски кода после них одинаковые?..." Вот и закралось сомнение, если я изменил задержку, то куски уже не одинаковы? Сделал всё заново и так и этак и на следующий день, но предупреждение больше не появлялось. Подскажите, корректно ли я изменил код или надо было писать if-else. Хотя, как бы всё работает, но... Усе нормально изменил, а вообще-то лучше текст предупреждения писать. (А еще лучше читать, переводить и делать выводы). Обычно предупреждения не опасны, но могут помочь выявить логическую ошибку в программе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kassi 0 30 ноября, 2008 Опубликовано 30 ноября, 2008 · Жалоба Вчера очень хотелось кнопки понажимать. Понадеялся, что потом верну всё назад и разберусь, а оно (предупреждение) больше не появилось. Теперь переживаю, что это было? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 1 декабря, 2008 Опубликовано 1 декабря, 2008 · Жалоба Вчера очень хотелось кнопки понажимать. Понадеялся, что потом верну всё назад и разберусь, а оно (предупреждение) больше не появилось. Теперь переживаю, что это было? Телевизор смотрел? Землетрясения в Тимбукуту не случилось? Наводнения на Северном Полюсе? Пожара на Южном? Нет? Значит ни о чем опасном не предупреждали :) Но на будущее - желтенькие транспорантики лучше читать сразу, т.к. предупреждения, касающиеся компилируемых исходников обычно пишутся в логи компиляции, а все выскакивающее, всплывающее и выпригивающее обычно касается чего то другого (например, кончилась память на компьютере, или банально забыл сохранить файл с исходником перед компиляцией). Так что они могут больше и не появится (а могут и появится), и это скорее всего никак с исходниками связано не будет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kassi 0 2 декабря, 2008 Опубликовано 2 декабря, 2008 · Жалоба Спасибо, что не прошли мимо сообщения. Беру себя в руки, приготовил ручку и блокнот - буду записывать (аккуратно). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться