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

 
 
 
Reply to this topicStart new topic
> Медленно выводится информация на LCD, Attiny2313 + LCD Nokia 1100
BeginnerAVR
сообщение Oct 27 2011, 08:58
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 26-10-11
Пользователь №: 67 972



Здравствуйте!
Прошу проконсультировать и помочь в следующем вопросе.

Доброго времени суток!
Подключил LCD NOKIA 1100 к attinу2313.
Все работает. Только очень медленно выводится текст и очищается экран.
Если сравнивать скорость вывода информации с тем, что на телефоне - просто зловеще медленно.
чтобы устранить делалось следующее:
Менял частоту тактирования - от 10 Мгц до 50 кГц
Занижал delay_ms или полностью убирал строку в следующей процедуре

CODE
void Lcd_Write(char cd,unsigned char c){
char i;
cs = 0;
sclk = 0;
sda = cd;
sclk = 1;

for(i=0;i<8;i++){
sclk = 0;
if(c & 0x80)
sda = 1;
else
sda = 0;
sclk = 1;
c <<= 1;
delay_ms(20);
}
cs = 1;
}



Бесполезно.
Кто сможет посоветовать, буду благодарен
Go to the top of the page
 
+Quote Post
SortoVaritu
сообщение Oct 27 2011, 09:49
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 4-11-10
Пользователь №: 60 647



Цитата(BeginnerAVR @ Oct 27 2011, 11:58) *
Здравствуйте!
Прошу проконсультировать и помочь в следующем вопросе.

Доброго времени суток!
Подключил LCD NOKIA 1100 к attinу2313.
Все работает. Только очень медленно выводится текст и очищается экран.
Если сравнивать скорость вывода информации с тем, что на телефоне - просто зловеще медленно.
чтобы устранить делалось следующее:
Менял частоту тактирования - от 10 Мгц до 50 кГц
Занижал delay_ms или полностью убирал строку в следующей процедуре

CODE
void Lcd_Write(char cd,unsigned char c){
char i;
cs = 0;
sclk = 0;
sda = cd;
sclk = 1;

for(i=0;i<8;i++){
sclk = 0;
if(c & 0x80)
sda = 1;
else
sda = 0;
sclk = 1;
c <<= 1;
delay_ms(20);
}
cs = 1;
}



Бесполезно.
Кто сможет посоветовать, буду благодарен


Я пока вижу проблему в delay_ms(20). задержка в 20 мс это очень много
Что происходит если ее убираете? что меняется?
Go to the top of the page
 
+Quote Post
BeginnerAVR
сообщение Oct 27 2011, 10:12
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 26-10-11
Пользователь №: 67 972



Цитата(SortoVaritu @ Oct 27 2011, 13:49) *
Я пока вижу проблему в delay_ms(20). задержка в 20 мс это очень много
Что происходит если ее убираете? что меняется?


Доброго дня!
Менял на 1 мс. (побыстрее чуточку)
Экран очищается от "мусора" за 40(!!!) секунд. Только что измерил время.

Пробовал ставить вместо задержки вычисление произведения.

Ничего, что давало бы положительный результат.
Go to the top of the page
 
+Quote Post
SortoVaritu
сообщение Oct 27 2011, 10:20
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 4-11-10
Пользователь №: 60 647



Хммм... нужно глядет код где вызывается процедура.

А вот это что такое?

if(c & 0x80)
sda = 1;

с & 0x80 может быть либо 0 либо 0х80


......... не заметил c <<= 1; теперь понятно

Сообщение отредактировал SortoVaritu - Oct 27 2011, 10:52
Go to the top of the page
 
+Quote Post
BeginnerAVR
сообщение Oct 27 2011, 10:54
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 26-10-11
Пользователь №: 67 972



Цитата(SortoVaritu @ Oct 27 2011, 14:20) *
Хммм... нужно глядет код где вызывается процедура.

А вот это что такое?

if(c & 0x80)
sda = 1;

с & 0x80 может быть либо 0 либо 0х80



Исходник был взят здесь
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=84534&start=0&postdays=0&postorder=asc&highlight=&sid=751fd3a996d49589b5c1871c68fadc57

Я "вожусь" с микроконтроллерами первую неделю и много чего не знаю, что получается гуглю, где гугл молчит - спрашиваю.
Go to the top of the page
 
+Quote Post
XVR
сообщение Oct 27 2011, 11:39
Сообщение #6


Гуру
******

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



Уберите задержку вообще. Еще лучше перейти на аппаратный SPI (если он есть в вашей attinу2313). Программный SPI - вещь дюже медленная wink.gif
Go to the top of the page
 
+Quote Post
SortoVaritu
сообщение Oct 27 2011, 11:53
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 4-11-10
Пользователь №: 60 647



Насколько я понял из донорского кода там задержка Delay10TCYx(20) = 200 тактам; Если убрать delay_ms(20) - самый быстрый вариант.
Их схема работает на 1MHz

SPI вроде есть в 2313

Сообщение отредактировал SortoVaritu - Oct 27 2011, 11:55
Go to the top of the page
 
+Quote Post
BeginnerAVR
сообщение Oct 27 2011, 12:24
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 26-10-11
Пользователь №: 67 972



Цитата(SortoVaritu @ Oct 27 2011, 15:53) *
Насколько я понял из донорского кода там задержка Delay10TCYx(20) = 200 тактам; Если убрать delay_ms(20) - самый быстрый вариант.
Их схема работает на 1MHz

SPI вроде есть в 2313



Если полностью убрать delay - тишина. Не происходит ничего вообще (вне зависимости от такт. частоты)

И именно поэтому я появился на форуме, так как перепробовал практически все из того, что знал
Go to the top of the page
 
+Quote Post
SortoVaritu
сообщение Oct 27 2011, 12:39
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 4-11-10
Пользователь №: 60 647



в том и проблема, что вы делаете слишком большую задержку - милисекунды. Вам же нужно делать микросекунды

Если
Delay10KTCYx(100); // 1 Sec delay

то сколько будет ?
Delay10TCYx(20);

Надо посчитать.

Непонятно вот это:
Код
Delay10KTCYx(100);                // 1/2 Sec delay
Lcd_Write(CMD,0xa6); // normal display (non inverted)
Delay10KTCYx(100);                // 1 Sec delay


Как в первом случае задержка на 0.5 секунды а во втором задержка на 1 секунду.
Go to the top of the page
 
+Quote Post

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

 


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


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