Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Препоръчайте бърз :) AVR GCC (ATMega) LCD драйвер, моля
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=8744
Страница 1 от 1

Автор:  NikB [ Съб Мар 26, 2011 9:55 pm ]
Заглавие:  Препоръчайте бърз :) AVR GCC (ATMega) LCD драйвер, моля

Препоръчайте бърз :) AVR GCC (ATMega) LCD драйвер, моля

Позлвам тоя
http://winavr.scienceprog.com/example-a ... brary.html
но ми се струва бавен.
Не, че съм правил сметки от къде се ограничава скоростта, но така ми се струва.
(Около 4-5 gotoXY и цикли за буквички отнемат около 25мс на 16МХц АТМега128)

(ПП глупостта на демото с progress bar-а не е важна :))

Автор:  ike [ Нед Мар 27, 2011 9:47 am ]
Заглавие: 

Ами просто оправи този драйвер.
Навсякъде говори за 74HC164, а не се ползва.
LCD_RW е сложен само за урашение.
Времената в инициализацията не са верни.

Виж дейташита за твоя диспей и навсякде където е сложил _delay_ms го замени с нопове или луп от нопове.

Автор:  NikB [ Нед Мар 27, 2011 11:46 am ]
Заглавие: 

Благодаря!
Явно познаваш тоя драйвер, та да питам (моите познания по C все още са доста слаби) - дали драйверът е организиран по добър начин:
- предаването на параметри;
- заделянето на локални променливи;
...
Някъде бях видял драйвер направен на asm - като .s файл, но не мога да го намеря - дали не е по-добре целият драйвер на е на asm?
(Такива индикации ползвам от времето, когато 8051 бяха най-популярните микроконтролери :) и не съм се замислял за бързодействие. Но винаги до сега съм писал изцяло на Asm)

Вероятно мога да организирам и по-голяма част от програмата да е по прекъсвания, за да намалят приоритета на LCD обръщенията (в главната програма).
И/или да разпределя писането по LCD в времето, между останалите задачи.
Нали е ясно, че не самата скорост на извеждане ми е проблем, а това, че останалите случки в главна програма се обслужват по-рядко?

Автор:  ike [ Нед Мар 27, 2011 12:25 pm ]
Заглавие: 

1. Не познавам драйвера, днес за първи път го видях.
2. Не знам дали е добре огранизиран. Нека другите колеги си изкажат мнението.
3. Не искам да започвам спора С vs ASM, за това ползвай това което ти е по-удобно.

Автор:  NikB [ Нед Мар 27, 2011 12:40 pm ]
Заглавие: 

При намаляване на delay (за сега - на око; оказа се, че входният му параметър е с плаваща запетая) работата значително се подобри - благодаря ти за ефективната идея.
(Естествено, много далеч съм от каквото и да е сравняване на Asm и C, а за спор въобще и не помислям :), - просто отчитам, че много късно се възползвам от предимствата на C :))

Автор:  Cino [ Нед Мар 27, 2011 12:58 pm ]
Заглавие: 

няма нужда закъснението между Е-високо и Е-ниско да е 1ms
LCP|=1<<LCD_E;
_delay_ms(1);
LCP&=~(1<<LCD_E);

, при мен ги карам с 5us, а сигурно може и няколко нопа закъснение
зависи от дисплея.

След пращането на всяка команда или символ в края има
едно закъснение _delay_ms(1);
То може да се избегне с полиране на BUSY бита на дисплея.
Това още може да намали времето.

Автор:  NikB [ Нед Мар 27, 2011 6:57 pm ]
Заглавие: 

Cino написа:
няма нужда....


Намалих времената до х2 на необходимите граници.
Навсякъде, където е необходимо, се ползват delay (т.е. не е загубено адаптирането спрямо честотата на процесора).
Обработва се BF (Busy flag).

Значително се подобри скоростта.
Разликата във времето между 4 и 8 битовия интерфейс също намаля значително.

Благодаря на всички!

Прикачени файлове:
Коментар на файл: втора версия :)
Все пак се наложи да му сложа NOP (не се отрази забележимо на времената)

L329nb.rar [5.16 KiB]
131 пъти
Коментар на файл: (първа версия)
LCD_Lib.rar [4.78 KiB]
160 пъти

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/