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

 
 
> Неверное время задержки, 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
 
Start new topic
Ответов
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



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

 


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


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