Отговори на тема  [ 35 мнения ]  Отиди на страница 1, 2, 3  Следваща
Управление на LCD контролер по SPI. 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 10:49 pm
Мнения: 4379
Местоположение: София
Мнение Управление на LCD контролер по SPI.
Здравейте!

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

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

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

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

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

Изображение

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

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

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


Пон Апр 03, 2017 10:40 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Яну 01, 2012 7:04 pm
Мнения: 2581
Местоположение: Велико Търново / София
Мнение Re: Управление на LCD контролер по SPI.
Не мисля. Клока и да спре и да продължи не се бърка. Ако има нарисувано Wait там трябва да се изчака определено време. Въпроса е времената ти да не са по-малки от допустимите. Т.е. посочени са минималните времена, ти винаги трябва да работиш с малко по-високи или където няма пауза жулиш постоянно (ако можеш).

_________________
https://github.com/slav4ocom/


Пон Апр 03, 2017 10:53 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 10:49 pm
Мнения: 4379
Местоположение: София
Мнение Re: Управление на LCD контролер по SPI.
Утре ще постна една осцилограма да видите за какво иде реч, но грубо казано, колкото е дълъг всеки байт, толкова е и паузата между отделните байтове. А иначе времената за изчакване ги имам впредвид и няма да ги нарушавам.


Пон Апр 03, 2017 10:57 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Яну 01, 2012 7:04 pm
Мнения: 2581
Местоположение: Велико Търново / София
Мнение Re: Управление на LCD контролер по SPI.
Е щом има осцилограма е добре. Ще стане работата... Ами сигурно се работи по друг начин с SPI модула. Досега не съм работил, но предполагам има някакви регистри да може да се буферират повече байтове. Но мисля, има значение само за скоростта. А иначе този дисплей не проработи явно ?

_________________
https://github.com/slav4ocom/


Пон Апр 03, 2017 11:01 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Авг 23, 2005 11:02 am
Мнения: 3070
Местоположение: София
Мнение Re: Управление на LCD контролер по SPI.
Това на картинката е минималното. Можеш свободно да си слагаш паузи мжеду всеки байт, прото това върху снимката е минималното, което трябва да спазиш. Тоест освен паузите на снимката може да имаш и паузи мецду start байта, както и между всеки следващ байт.

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

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


Вто Апр 04, 2017 12:28 am
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 10:49 pm
Мнения: 4379
Местоположение: София
Мнение Re: Управление на LCD контролер по SPI.
Благодаря Ви за насоките. Това за паузите силно ме притесняваше, но след като вече знам, че те не са проблем, нататък мисля, че ще се справя. :)

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

PS:

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

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

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


Вто Апр 04, 2017 12:44 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Фев 26, 2006 5:52 pm
Мнения: 10356
Местоположение: Добрич
Мнение Re: Управление на LCD контролер по SPI.
1. Препоръчително е да не го бодваш. Представи си че влезе едно пикче в клока и от там нататък цялата комуникация ще се измести с един бит.
2. Не е задължително да четеш, но е препоръчително да запазиш възможността. Китайците имат един навик да сменят LCD контролерите без да предупреждават и в следващата партида може да се окаже различен. Ако може да четеш ще видиш модела и съответно софтуерно ще покриеш разликите.


Вто Апр 04, 2017 7:45 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 03, 2005 1:21 am
Мнения: 10573
Местоположение: София
Мнение Re: Управление на LCD контролер по SPI.
lcr написа:
...2 - В момента не се сещам, какво трябва да му чета на LCD контролера. Трябва ли да обособявам и комуникацията в обратната посока - към pic - а?

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


Вто Апр 04, 2017 9:00 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 10:49 pm
Мнения: 4379
Местоположение: София
Мнение Re: Управление на LCD контролер по SPI.
Въпросната осцилограма:

Изображение

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

Изображение

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

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

:prayer:


Вто Апр 04, 2017 3:20 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 10:49 pm
Мнения: 4379
Местоположение: София
Мнение 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


Сря Апр 05, 2017 7:40 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Авг 23, 2005 11:02 am
Мнения: 3070
Местоположение: София
Мнение Re: Управление на LCD контролер по SPI.
uint8 a, b;
a = (b = number) & 0x0F;
b >>= 4;

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


Сря Апр 05, 2017 7:47 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 10:49 pm
Мнения: 4379
Местоположение: София
Мнение Re: Управление на LCD контролер по SPI.
sparkybg написа:
uint8 a, b;
a = (b = number) & 0x0F;
b >>= 4;

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


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

:prayer:


Сря Апр 05, 2017 7:50 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Юли 11, 2007 9:16 am
Мнения: 1705
Мнение Re: Управление на LCD контролер по SPI.
Гледам и се чудя - питащият ли пита грешно или отговарящият отговаря грешно. Ако обаче това е решило проблема, заначи питащият е питал грешно :)


Сря Апр 05, 2017 8:05 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Май 12, 2014 10:49 pm
Мнения: 4379
Местоположение: София
Мнение Re: Управление на LCD контролер по SPI.
michev написа:
Гледам и се чудя - питащият ли пита грешно или отговарящият отговаря грешно. Ако обаче това е решило проблема, заначи питащият е питал грешно :)


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


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

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

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

Например:

0b11101100

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

0b00110000

и

0b01110000


Сря Апр 05, 2017 8:13 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Сря Юли 11, 2007 9:16 am
Мнения: 1705
Мнение 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;

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


Сря Апр 05, 2017 8:36 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 35 мнения ]  Отиди на страница 1, 2, 3  Следваща

Кой е на линия

Потребители разглеждащи този форум: TheHungry и 4 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни