Виж темите без отговор | Виж активните теми
Дата и час: Чет Апр 25, 2024 2:32 pm
Управление на LCD контролер по SPI.
Автор |
Съобщение |
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 8:21 pm Мнения: 28023 Местоположение: София
|
Re: Управление на LCD контролер по SPI.
aaa .. искаш да обърнеш редърт на идианците или аз не разбирам, защото примера който си дал не е това .. аха ... и да ги разделиш, ако е това : 0b01110001 първо медиш индианците 0b10001110 после го делиш на две 0b10000000 0b11100000 Ако е това напиши си цикъл който да ти обърне индианцире, дирекнто побитово работиш, след което ... абе що си губя времето така char reorder(char input) { char i,temp; temp=0; for(i=0;i<7;i++) { if(input&0x01) temp|=0x01; input>>1; temp<<1; } return(temp); } и след това а=temp&0xF0; b=(temp&0x0F)<<4; Но разбира се това може да стане още във функцията за обръщане, като първите 4 пъти въртиш и пълниш А. Вторите 4 пъти въртиш и пълниш В, и след това ги шифтваш по още 4 пъти на ляво и двете. p.s. това горното на asmbeler става още по лесно като изпозлваш кери бита, не знам можеш ли да убедиш С-то да го компилира по същият начин, би трябвлао да можеш ама ....
|
Сря Апр 05, 2017 11:28 pm |
|
|
sparkybg
Ранг: Форумен бог
Регистриран на: Вто Авг 23, 2005 11:02 am Мнения: 3070 Местоположение: София
|
Re: Управление на LCD контролер по SPI.
| | | | lcr написа: Нямам възможността да го тествам сега. Ще сторя това утре и ще докладвам за резултата. Възможно е да съм формулирал въпроса си неясно. С други думи - искам да представя 1 байт, като го разделя на 2 отделни и запиша в тях само най-старшите им 4 бита (младшите 4 са нули). Освен това битовете от оригиналния байт трябва да се обърнат и по старшинство, преди да бъдат записани. Например: 0b11101100 трябва да се преобразува така че да придобие вида: 0b00110000 и 0b01110000 | | | | |
Възможно е да не съм разбрал въпроса първия път. Това което описваш в тоя си пост отговаря на: ПП: Можбе и малко да се оптимизира: А каква е целта на мероприятието? Последно като си играх с такова беше май в някакво Фурие, сигурно преди 20 години. Ако можеш да си го позволиш, най-лесно и бързо става ако си дефинираш таблица с 256 обърнати стойности която направо да четеш.
|
Чет Апр 06, 2017 12:12 am |
|
|
lcr
Ранг: Форумен бог
Регистриран на: Пон Май 12, 2014 10:49 pm Мнения: 4379 Местоположение: София
|
Re: Управление на LCD контролер по SPI.
Благодаря на всички за предложените варианти и особено на @sparkybg за коментарите в кода Ще проиграя всеки един от тях при първа възможност. Упражнението се налага заради комуникацията с дискутирания в темата контролер.
|
Чет Апр 06, 2017 10:22 am |
|
|
ig_ivanov
Ранг: Напреднал
Регистриран на: Съб Май 21, 2016 8:47 pm Мнения: 476 Местоположение: Бургас
|
Re: Управление на LCD контролер по SPI.
Може да си направиш и софтуерен SPI за дисплея- няма да има нужда да дундуркаш битове- предаваш колкото ти е нужно, запълваш с контролните битове и после продължаваш да предаваш втората част (т.е. предаваш винаги състоянието най-младшия бит, след което байта го завърташ надясно). За 24 бита може даже и без цикъл да се мине.
|
Чет Апр 06, 2017 11:26 am |
|
|
sparkybg
Ранг: Форумен бог
Регистриран на: Вто Авг 23, 2005 11:02 am Мнения: 3070 Местоположение: София
|
Re: Управление на LCD контролер по SPI.
Опциите ти са 2 - правиш горното във функция и я викаш само да ти обърне битовете, после ги мяташ към SPI-то. - правиш си прекодираща таблица в която на всяка позиция стои стойността с обърнати битове - правиш си прекодираща таблица в която ня всяка позиция стои uint16 директно с двата байта, дето трябва да пратиш към SPI-то. От първото към последното иска все повече памет, но върви все по-бързо. Ако използваш някой дребен 8-битник може и да нямаш много избор кое от трите да избереш. Може и таблица с 16 стойности с обърнатите и вдигнати битове само за 4 битови стойности, после правиш: Това последното май е най-добрия вариант, ...въпреки това точно с това LCD си е клизма. Предполагам е архаично, за да не може да поеме цял байт, както и с тая подредба на битовете.
|
Чет Апр 06, 2017 12:28 pm |
|
|
lcr
Ранг: Форумен бог
Регистриран на: Пон Май 12, 2014 10:49 pm Мнения: 4379 Местоположение: София
|
Re: Управление на LCD контролер по SPI.
Че дисплеят е дървен, спор няма Подритвам няколко бракувани телефона optipoint 500 и барем дисплеите им могат да свършат работа за нещо.
|
Чет Апр 06, 2017 12:54 pm |
|
|
lcr
Ранг: Форумен бог
Регистриран на: Пон Май 12, 2014 10:49 pm Мнения: 4379 Местоположение: София
|
Re: Управление на LCD контролер по SPI.
| | | | sparkybg написа: Опциите ти са 2 - правиш горното във функция и я викаш само да ти обърне битовете, после ги мяташ към SPI-то. - правиш си прекодираща таблица в която на всяка позиция стои стойността с обърнати битове - правиш си прекодираща таблица в която ня всяка позиция стои uint16 директно с двата байта, дето трябва да пратиш към SPI-то. От първото към последното иска все повече памет, но върви все по-бързо. Ако използваш някой дребен 8-битник може и да нямаш много избор кое от трите да избереш. Може и таблица с 16 стойности с обърнатите и вдигнати битове само за 4 битови стойности, после правиш: Това последното май е най-добрия вариант, ...въпреки това точно с това LCD си е клизма. Предполагам е архаично, за да не може да поеме цял байт, както и с тая подредба на битовете. | | | | |
Схванах идеята в последния вариант, който предлагаш и я намирам за доста добра. Създадох следната таблица: | | | | Код: const uint8_t a[16] = { 0b00000000, //0 0b10000000, //1 0b01000000, //2 0b11000000, //3 0b00100000, //4 0b10100000, //5 0b01100000, //6 0b11100000, //7 0b00010000, //8 0b10010000, //9 0b01010000, //10 0b11010000, //11 0b00110000, //12 0b10110000, //13 0b01110000, //14 0b11110000, //15 }; | | | | |
тествах засега само това, първият байт да се образува от таблицата (вторият го оставих на постоянна стойност): ...и пущината работи Натам, мисля, че ще се справя. Като ги натъкмя съвсем нещата, ще постна кода за рецензия Много ти благодаря за съдействието!
|
Чет Апр 06, 2017 5:31 pm |
|
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 8:21 pm Мнения: 28023 Местоположение: София
|
Re: Управление на LCD контролер по SPI.
Да таблица е най-бързо, естествено, голяма е зор и много памет, виж за 4 битова не ми хрумна но си е много добра опция.
|
Чет Апр 06, 2017 6:01 pm |
|
|
lcr
Ранг: Форумен бог
Регистриран на: Пон Май 12, 2014 10:49 pm Мнения: 4379 Местоположение: София
|
Re: Управление на LCD контролер по SPI.
Окончателно:
|
Пет Апр 07, 2017 11:51 am |
|
|
sparkybg
Ранг: Форумен бог
Регистриран на: Вто Авг 23, 2005 11:02 am Мнения: 3070 Местоположение: София
|
Re: Управление на LCD контролер по SPI.
А съвсем окончателно: 2 променливи и един оператор по-малко. Само не вдявам какво прави SPI_Exchange8bit, при положение че и подаваш вече обърнатите стойности от таблица "а".
|
Пет Апр 07, 2017 12:01 pm |
|
|
lcr
Ранг: Форумен бог
Регистриран на: Пон Май 12, 2014 10:49 pm Мнения: 4379 Местоположение: София
|
Re: Управление на LCD контролер по SPI.
Благодаря! Относно SPI_Exchange8bit, може и аз да съм подходил грешно, но доколкото разбрах от дейташита на контролера (стр. 50) " (1) Write Operation (R/W = 0) After start byte is transferred from MPU to S6A0073, 8-bit data is transferred which is divided into 2 bytes, each byte has 4 bit's real data and 4 bit's partition token data. For example, if real data is "10110001" (D0 - D7), then serially transferred data becomes "1011 0000 0001 0000" where 2nd and 4th 4 bits must be "0000" for safe transfer....." трябва да му се предаде на 2 пъти. А това е, което ми е генерирал MCC (в spi.c):
|
Пет Апр 07, 2017 1:13 pm |
|
|
sparkybg
Ранг: Форумен бог
Регистриран на: Вто Авг 23, 2005 11:02 am Мнения: 3070 Местоположение: София
|
Re: Управление на LCD контролер по SPI.
Ясно. SPI_Exchange8bit 'лъзга един байт по SPI-то и чете отговора. Демек откъм твоя код всичко е както трябва. Аз реших че самата функция SPI_Exchange8bit вътрешно си обръща битовете пак.
|
Пет Апр 07, 2017 2:22 pm |
|
|
lcr
Ранг: Форумен бог
Регистриран на: Пон Май 12, 2014 10:49 pm Мнения: 4379 Местоположение: София
|
Re: Управление на LCD контролер по SPI.
Пуснах един цикъл да върти цялата ASCII таблица да видя всички символи. Добрата новина е, че визуализира и символите от кирилицата. Е - няма ги малките букви на кирилица, но то няма и пълно щастие
|
Пет Апр 07, 2017 2:29 pm |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4723
|
Re: Управление на LCD контролер по SPI.
За пълно щастие май ще ти трябва и прекодираща таблица за кирилицата, щото в повечето подобни дисплеи таблицата с буквите не е Windows-1251
_________________ main[-1u]={1};
|
Пет Апр 07, 2017 5:34 pm |
|
|
TheWizard
Ранг: Форумен бог
Регистриран на: Сря Апр 27, 2005 11:48 am Мнения: 4723
|
Re: Управление на LCD контролер по SPI.
_________________ main[-1u]={1};
|
Пет Апр 07, 2017 5:40 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 6 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|