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

Управление на LCD контролер по SPI.
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=15172
Страница 1 от 3

Автор:  lcr [ Пон Апр 03, 2017 11:40 pm ]
Заглавие:  Управление на LCD контролер по SPI.

Здравейте!

Опитвам се да подкарам управление на този LCD контролер:

http://pdf.datasheetcatalog.com/datasheets2/94/946059_1.pdf

За целта съм конфигурирал pic 12F1840, като SPI master, колкото да си изясня постановката.

Притеснява ме това, че пращам по един байт на всеки ред от програмата ми (ползвам XC8 компилатор) и така между отделните байтове се получава пауза (спира и клокът).

От друга страна за таймингите от страна на LCD контролера е дадено това (стр. 51 и 52):

Изображение

Както е видно тук паузи между първите 3 байта няма, няма и между двата от всяка следваща двойка.

Тези паузи проблем ли са?

Моля за напътствия и насоки като за индианец :), тъй като съм прохождащ в pic програмирането.

Автор:  slav4o.com [ Пон Апр 03, 2017 11:53 pm ]
Заглавие:  Re: Управление на LCD контролер по SPI.

Не мисля. Клока и да спре и да продължи не се бърка. Ако има нарисувано Wait там трябва да се изчака определено време. Въпроса е времената ти да не са по-малки от допустимите. Т.е. посочени са минималните времена, ти винаги трябва да работиш с малко по-високи или където няма пауза жулиш постоянно (ако можеш).

Автор:  lcr [ Пон Апр 03, 2017 11:57 pm ]
Заглавие:  Re: Управление на LCD контролер по SPI.

Утре ще постна една осцилограма да видите за какво иде реч, но грубо казано, колкото е дълъг всеки байт, толкова е и паузата между отделните байтове. А иначе времената за изчакване ги имам впредвид и няма да ги нарушавам.

Автор:  slav4o.com [ Вто Апр 04, 2017 12:01 am ]
Заглавие:  Re: Управление на LCD контролер по SPI.

Е щом има осцилограма е добре. Ще стане работата... Ами сигурно се работи по друг начин с SPI модула. Досега не съм работил, но предполагам има някакви регистри да може да се буферират повече байтове. Но мисля, има значение само за скоростта. А иначе този дисплей не проработи явно ?

Автор:  sparkybg [ Вто Апр 04, 2017 1:28 am ]
Заглавие:  Re: Управление на LCD контролер по SPI.

Това на картинката е минималното. Можеш свободно да си слагаш паузи мжеду всеки байт, прото това върху снимката е минималното, което трябва да спазиш. Тоест освен паузите на снимката може да имаш и паузи мецду start байта, както и между всеки следващ байт.

При теб паузите ти се появяват защото чакаш да изпрати единия байт и тогава му подаваш другия. Просто показаните на снимката трябва да ги направиш достатъчно големи за да са по-големи от тия по спецификация.

И... ако не гониш цена, по-добре работи с някой по-истински микроконтролер. Не друго, ама е доста по-лесно като ти е широко около врата, именно докато си изясниш нещата. Аз осмичките съм ги забравил почти тотално и ръгам или PIC10-12 за хептем прости неща, или PIC24/33, а най-често PIC32, за всичко останало. С PIC32 се работи значително по-лесно в много отношения - и адресирането е истинско и ти дава свобода да правиш много повече неща, и памет има повече, и откъм скорост имаш запас за доста неща.

Автор:  lcr [ Вто Апр 04, 2017 1:44 am ]
Заглавие:  Re: Управление на LCD контролер по SPI.

Благодаря Ви за насоките. Това за паузите силно ме притесняваше, но след като вече знам, че те не са проблем, нататък мисля, че ще се справя. :)

Ползвам този пик заради единственото съображение, че това контролерче хем предлага голяма част от базовата функционалност на всеки друг, хем е относително лесно за разбиране и разцъкване. Естествено, по-натам ще мина на по-сериозни чипове.

PS:

Още 2 въпроса:

1 - След като имам само един slave, нужно ли е да превключвам CS пина или мога да го бодна да си седи твърдо на 0 ?

2 - В момента не се сещам, какво трябва да му чета на LCD контролера. Трябва ли да обособявам и комуникацията в обратната посока - към pic - а?

Автор:  miro_atc [ Вто Апр 04, 2017 8:45 am ]
Заглавие:  Re: Управление на LCD контролер по SPI.

1. Препоръчително е да не го бодваш. Представи си че влезе едно пикче в клока и от там нататък цялата комуникация ще се измести с един бит.
2. Не е задължително да четеш, но е препоръчително да запазиш възможността. Китайците имат един навик да сменят LCD контролерите без да предупреждават и в следващата партида може да се окаже различен. Ако може да четеш ще видиш модела и съответно софтуерно ще покриеш разликите.

Автор:  itso.t [ Вто Апр 04, 2017 10:00 am ]
Заглавие:  Re: Управление на LCD контролер по SPI.

lcr написа:
...2 - В момента не се сещам, какво трябва да му чета на LCD контролера. Трябва ли да обособявам и комуникацията в обратната посока - към pic - а?

Според документацията му, можеш да четеш дали е зает с негови си задачи или е в готовност за комуникация. Полезно е при комуникация с по-голяма скорост...
А документацията ме изкефи. Преди няколко дена четох някаква такава, на някакъв китайски дисплей. Ами нямат допирни точки. Неграмотни китайци... :D

Автор:  lcr [ Вто Апр 04, 2017 4:20 pm ]
Заглавие:  Re: Управление на LCD контролер по SPI.

Въпросната осцилограма:

Изображение

.....и резултатът:

Изображение

Като цяло, всичко е "ток и жица" :)

Благодарности на всички, които се включиха по темата!

:prayer:

Автор:  lcr [ Сря Апр 05, 2017 8:40 pm ]
Заглавие:  Re: Управление на LCD контролер по SPI.

Ако Х е десетично число в интервала 0 - 255 и двоичният му вид е:

0bD7|D6|D5|D4|D3|D2|D1|D0

как да го запиша в 2 байта, като :

0bD0|D1|D2|D3|0|0|0|0

и

0bD4|D5|D6|D7|0|0|0|0

Автор:  sparkybg [ Сря Апр 05, 2017 8:47 pm ]
Заглавие:  Re: Управление на LCD контролер по SPI.

uint8 a, b;
a = (b = number) & 0x0F;
b >>= 4;

...ама особено втората операция на малък процесор е "скъпа", защото иска 4 инструкции или 4 такта минимум.

Автор:  lcr [ Сря Апр 05, 2017 8:50 pm ]
Заглавие:  Re: Управление на LCD контролер по SPI.

sparkybg написа:
uint8 a, b;
a = (b = number) & 0x0F;
b >>= 4;

...ама особено втората операция на малък процесор е "скъпа", защото иска 4 инструкции или 4 такта минимум.


Благодаря за светкавичния и точен отговор! :)

:prayer:

Автор:  michev [ Сря Апр 05, 2017 9:05 pm ]
Заглавие:  Re: Управление на LCD контролер по SPI.

Гледам и се чудя - питащият ли пита грешно или отговарящият отговаря грешно. Ако обаче това е решило проблема, заначи питащият е питал грешно :)

Автор:  lcr [ Сря Апр 05, 2017 9:13 pm ]
Заглавие:  Re: Управление на LCD контролер по SPI.

michev написа:
Гледам и се чудя - питащият ли пита грешно или отговарящият отговаря грешно. Ако обаче това е решило проблема, заначи питащият е питал грешно :)


Нямам възможността да го тествам сега. Ще сторя това утре и ще докладвам за резултата.


Възможно е да съм формулирал въпроса си неясно.

С други думи - искам да представя 1 байт, като го разделя на 2 отделни и запиша в тях само най-старшите им 4 бита (младшите 4 са нули).

Освен това битовете от оригиналния байт трябва да се обърнат и по старшинство, преди да бъдат записани.

Например:

0b11101100

трябва да се преобразува така че да придобие вида:

0b00110000

и

0b01110000

Автор:  michev [ Сря Апр 05, 2017 9:36 pm ]
Заглавие:  Re: Управление на LCD контролер по SPI.

Значи нещо такова ти трябва -
Код:
uint8_t a, b, number;

b = ((1<<4) & number);
b <<= 1;
b |= ((1<<5) & number)
b <<= 1;
b |= ((1<<6) & number)
b <<= 1;
b |= ((1<<7) & number);
b <<= 4;

a = ((1<<0) & number);
a <<= 1;
a |= ((1<<1) & number)
a <<= 1;
a |= ((1<<2) & number)
a <<= 1;
a |= ((1<<3) & number);
a <<= 4;

Едва ли е оптималното решение, но това ми идва в момента в главата.

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