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

 
 
 
Reply to this topicStart new topic
> Неверное время задержки, Atmega16
Scanner
сообщение Oct 11 2009, 13:12
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 355
Регистрация: 23-07-08
Из: Пензенская область
Пользователь №: 39 157



Пытаюсь вывести на экран 16х2 Мигающую надпись Attention. Частота мигания -1с. Вот код:
CODE
lcd_init(16);
lcd_gotoxy(0,0);

while (1)
{

lcd_putsf("Attention"); // Надпись
delay_ms(1000); // Задержка 1с.
lcd_clear(); // Очищаем экран
delay_ms(1000); // Задержка 1с.

};


В итоге выходит задержка около 12 сек.

Среда CVAVR, кварц 12 МГц. В чём может быть проблема?
Go to the top of the page
 
+Quote Post
Xenia
сообщение Oct 11 2009, 13:42
Сообщение #2


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Scanner @ Oct 11 2009, 17:12) *
В чём может быть проблема?

Дело может быть в том, что функции cd_putsf("Attention") и lcd_clear() сами по себе долго работают.
Для такого рода дел лучше не тянуть волнынку с помощью delay_ms(), а организовать прерывания от таймера с 1 секундным периодом, который раз в секунду в процедуре прерывания будет взводить вам флаг (не вздумайте вызывать cd_putsf("Attention") и lcd_clear() в прерывании!), а основная программа должна ходить в бесконечном замкнутом цикле, проверяя флаги, установленные в прерываниях и при взведеном флаге выполнить то, что флаг требует, а после выполнения флаг сбросить.

Такая организация дел, хоть не гарантирует мгновенной реакции на прерывание, зато устойчиво держит заданную частоту. И кроме того, позволяет попутно делать много разных дел, вместо того, чтобы висеть на дурацкой работе, которой ее нагружает delay_ms().
Go to the top of the page
 
+Quote Post
Scanner
сообщение Oct 11 2009, 13:55
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 355
Регистрация: 23-07-08
Из: Пензенская область
Пользователь №: 39 157



Цитата(Xenia @ Oct 11 2009, 17:42) *
а организовать прерывания от таймера с 1 секундным периодом, который раз в секунду в процедуре прерывания будет взводить вам флаг

Можете показать пример?
Go to the top of the page
 
+Quote Post
Goodefine
сообщение Oct 11 2009, 15:54
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 6-08-07
Из: Приднестровье, Тирасполь
Пользователь №: 29 581



Цитата(Scanner @ Oct 11 2009, 16:12) *
Среда CVAVR, кварц 12 МГц. В чём может быть проблема?

Проверяете в симуляторе или в реальном устройстве? Если в симуляторе - поставьте правильно частоту. Если в реале - прошейте соответствующие фьюзы. Сейчас мега работает у Вас на 1Мгц...


--------------------
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 17:29
Рейтинг@Mail.ru


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