В доках Атмела X-bus - название шины(интерфейс) для "External Memory Interface" , позволяет расширять внутреннюю SRAM извне до 64 килобайт напрямую (как родную, прозрачно для компиляторов) и больше "с извращениями". Есть примеры наращивания SRAM до 512кбайт. :)
Далеко не каждый камень имеет этот интерфейс у Атмела, поэтому он "малоизвестен"..
О, пасибки. Это и хотел узнать. Камни Атмела с шиной расширения внутренней SRAM: ATmega2560 и все её клоны 640, 1280 .. 2561 и т.д. + ATmega128a аналогично. За остальные не скажу, есть ещё какие-то, но уже не помню. На сайте Атмела, при выборе камня по параметрам этот интерфейс тоже назван X-bus .. какой стандарт имеете Вы ввиду (с чем путается) - я не в курсях. То что I2C ещё называют по-разному - читал, таже абревиатура TWI от Атмела .. Есть некий X-bee, а вот за такой алиас для I2C - не сталкивался ни разу, тем более в среде ардуинщиков.
Вобщем-то я хотел понять можно ли активируя шину расширения SRAM назначить в ней некий адрес порту контроллера дисплея и тупо присваивать ему значения в программе, типа так:
Ну, так вот и хочу посадить дисплей с этим параллельным интерфейсом на шину расширения памяти: использовать свою уже готовую плату расширения памяти - на ней есть защелка младшей части адреса и обвес сигналов выборки/записи. Тупо на полную шину адреса (после защелки) повесить "монтажное И" на некоторую выделенную пару адресов, например 0xF00(0/1) - без сигнала А0, сигнал А0 с платы расширения памяти завести на сигнал D/C дисплея и тупо разрешать шину дисплея при обращениях по этой паре адресов. Микросхема памяти при подаче адреса ВНЕ её зоны адресов - запрещается сама и переходит в Z. Дисплей тоже имеет сигнал разрешения, который и подавать со схемы монтажного "И" .. сигналы чтения/записи вообще можно напрямую кинуть. И потом обращаться к дисплею из программы как показал выше - по указателю на эту выделенную пару адресов... что мешает?
В итоге можно получить частоту работы с дисплеем (запись/чтение) вплоть до менее 10 тактов МК .. или около 2 мегабайта в секунду. Меня такое очень даже устроит..
В итоге планирую иметь И расширенную память И дисплей на одной шине. :)
Нет, так будет медленнее: чтобы вывести точку потребуется выводить в три порта по байту и ещё дрыгать ногой "запись" отдельно .. 4 отдельные команды. Если оставить интерфейс 8 бит, то все равно 2. А так - одна. :)
Куда деть выводы - у меня есть. Просто они используются по большей части аппаратно, а не программной эмуляцией ногодрыгами "воткни куда понравилось, будем жить медленно и пичально".
Писал уже, даже цельный тест.. запись в расширенную SRAM ровно ничем не отличается от записи во внутреннюю: *ptr = data -- ровно 1 команда ассемблера. :)
Вы путаете команды и такты процессора, так что Ваш совет, позволю себе переадресовать Вам :)
Да, во внутреннюю память команда записи ST пишет за ДВА ТАКТА и от 3 до 6 тактов во внешнюю. Настраивается в регистрах работы XRAM. Но, все-таки это ОДНА команда, а не 2. Аналогично, все остальные команды работы в памятью читают и пишут оперативу за 2 такта. Вызов/возврат процедур тоже и даже по 2 раза, ибо работают со словом - складывают/получают 2 байта в или со стека.
"Буду на пальцах. Для xram. Сначала нужно выставить в порт адрес. Затем выставить во второй порт данные. Затем дать команду на запись."
Не надо, смешно выходит.. этим всем занимается ЦПУ, когда работает с памятью. Программно пишется крайне просто (уже писал): "Var = data;" В ряде случаев это компилируется ровно в 1 команду: "ST var, immediate", например. Компилятор полноценно и без прикрас легко адресует 64 килобайта оперативы. Её внутренней столько нет у Мег, поэтому ему выставляют принудительно предельный размер имеющегося ОЗУ в настройках плат. Можно исправить, делов-то: завести ещё одну плату.
"А так как у дисплея данные и адрес это один и тот же порт, то xram прикрутить не получается."
?!? Почему у вас все так грустно? Вполне получается, я же написал "как": вешаем ногу дисплея D/C на адрес памяти и .. получаем 2 ячейки: одну для данных и вторую для команд. Не? Что мешает? :)
Я веду речь за достижение скорости записи в дисплей в районе пары мегабайт в сек. - это потоковая запись больших блоков. Команда выставляется 1 раз на весь блок, нефатально. Попиксельно "куда-попало", конечно же потребуется что-то иное.
Поточно, типа такого:
// пока едут дисплеи, это примерно то, что уже начал рисовать и
// эти адреса уже выделил под свои дисплеи в своей SRAM:
#define DISPLAY_COMMAND 0x7FFE
#define DISPLAY_DATA 0x7FFF
// глобальные неизменяемые указатели:
const uint8_t * dispCmd = DISPLAY_COMMAND;
const uint8_t * dispData = DISPLAY_DATA;
/**
* Запись блока в RAM дисплея с заданного адреса в т.ч. во FLASH
*/
void displayDraw( const uint8_t * from, uint8_t * to, uint8_t len){
displaySetAddress(to); // подаем команду по адресу команд
while( len-- != 0 ){
*dispData = *from++;
// пишем данные в дисплей силами 2-х указателей (regX, regY), asm типа такого (не помню точно как они пишутся):
// repeat:
// st r0,(X)+
// ld (Y),r0
// add %len,-1
// brne .repeat
}
}
Ну вот .. типа так. На цикл выделяется три команды: считать байт с автоинкрементом указателя, записать байт в ОЗУ дисплея по его адресу, декрементировать счетчик и повторить если ещё есть что отправить. Итого, ориентировочно 2+3+1+2 = 8 тактов или 2 мегабайта в секунду.
:)
P.S. подправил: для байтового счетчика пакета отправки. По 3 байт на точку = 256/3 = 85 точек. Для больших пакетов будет 1.78Мб/сек, что мне тоже кажется очень нефигово.
P.P.S. Мне кажется несколько глупым отказываться от самой быстрой шины камня, если она есть.. :)
2 такта в ОЗУ - только для внутреннего ОЗУ, на внешнее миниум 3 такта. :)
Для байтового интерфейса надо отправить 2 команды в порт: записать байт данных И дернуть ногой WR на каждый байт. А тут одна операция, но "по 3 такта". :) А кроме этого, Порт и ещё одна нога (WR) занимается целиком и полностью и "насовсем".
А тут совмещение полезного с приятным, которое особенно интересно, если внешнего ЗУ много: можно катать по 32 килобайта за операцию в моей версии или почти по 56кб в той, что по вашей ссылке (-8200байт внутреннего ЗУ Мега2560 на каждый сегмент по 64кб). Переключение страничек внешнего ЗУ - на общем фоне затрат - "мелочь" :)
В отличии от исходного варианта у меня НЕ занимаются никакие добавочные ноги камня, от слова "совсем", что тоже полезно.
Волнует только один вопрос: дисплей потянет такое насилие над собой или нет? Запись по прямому интерфейсу типа i8080 проходит на таких скоростях?
Все команды в нем описаны 2х байтными, например, SWRESET(0100h), но он поддерживает 8ми битный режим, да и половина команд на всех экранах одинаковая и до этого они были 1 байтными. Далее по тексту мы видим, что они и есть однобайтные, страница 49 даташита, понятно нарисована, что команды и их параметры 8 бит. Однако на команды 8 бит экран вообще не отзывается, но если ему послать SLPOUT (1100h): Sleep Out, то он просыпается и начинает реагировать за запись в память и чтение из нее(тоже на команды в старшем байте), причем это все, что он делает, показывать он не показывает, чтение состояния всегда говорит, что он выключен, включаться не желает, я просто задолбался с ним. Китаезы ничего не шарят, говорят, что они не инженеры, шлют всякую фигню вообще с других контроллеров. Хотя в отзывах есть чуваки, которые его смогли включить и поставили 5 звезд.
Ножки звонятся на + и на -(не напрямую, а через диод защитный), т.е. контакт с контроллером есть, обрывов нет, соединение верное, при чтении можно считать 0xFFFF, т.е. все выводы контачат, что ему нужно и что за замут с командами в старшем байте? Настроен он на 16 битный интерфейс при помощи перемычек на плате. Экран кошерный с емкосным тачем, тач работает, правда кроме того, что он дает прерывание от касания, ничего не проверял, без экрана это проблематично. Но мне совершенно не понятно, почему он не подает признаков жизни и еще на запрос ID он отвечает 0x0011, а по даташиту должен: 1й "фигня", второй 0x0000, третий 0x0080, четвертый 0x0000.
Судя по даташиту в 16 битном режиме команды в него пишутся побайтно (D0-D7). А вывод изображения в 16 битном режиме (D0-D16).
Только какой байт команды пишется первым, не нашол. Начни со старшего.
Чтение id тоже D0-D7.
Да это так, только он не работает. Вернее он не включается, память пишется и читается. Вот его настройка китайцами. Я пришел к выводу, что он сломан, а там ХЗ. Обычные экраны включаются после 2х команд, выход из сна и включение, показывают абы как, но хоть что-то. А этому вроде все дали, но на команду включения 0 эмоций.
т.е. после инициализации светится белым, пишите картинку, а он не реагирует, а данные из памяти читаются?
В даташите есть команда 22h и 23h попробуй.
Попробуй вначале инициализации влючить дисплей, затем писать регистры.
Да, память пишется, но дисплей не отображает ничего, только он не белый, а черный, что свидейтельствует о том, что он дейтвительно IPS. Включать я его пробовал и до и после и раз 100 в цикле, ему хоть бы хны, но из сна он просыпается по команде, то что без команды выхода из сна память не пишется, а как проснется начинает. 22h и 23h сейчас проверю.
Но мне совершенно не понятно, почему он не подает признаков жизни и еще на запрос ID он отвечает 0x0011, а по даташиту должен: 1й "фигня", второй 0x0000, третий 0x0080, четвертый 0x0000.
так что он выдает по всем регистрам? это примерно соответствует таблице содержанию данных в регистрах при его сбросе? не все регистры разрешены для чтения , записи/чтения , записи - это тож указано в этой таблице.
GFX, вы хотите на нем осциллограф сделать? http://radiokot.ru/forum/viewtopic.php?f=59&p=3118468 . мож тогда взять наиболее распространенные типы контроллеров. подобные IPS с емкостным тачем есть тож от 4" . много уже времени убили на него, мож он не рабочий?
Разве что из принципа хотите его добить? как я понял, подключали его только к stm32 , поэтому врятли его сожгли 5в уровнями.
не сильно вдавался в даташит и разводку на плате. замечу:
0. самое главное - переключите его на 8бит и подключите через резисторы 10к к ардуине и прогоните читалкой v5.2 из comment-264976 , полученный лог выложите здесь (в окошке размещения кода , во вкладке доп. , поставьте галку свернуть код.
1. если применить ногодрыганье шины управления, (к примеру читалку) и шину данных не подключать / подключать , просто полазить по ней светодиодом (будут видны четкие лог.0 / лог.1 ) , то можно узнать не ошиблись ли при разводке с IM0... . т.е. убедиться в правильной размерности шины.
2. попробовать подключить питания диспа VCC и VCIO через резистор 50-100 ом , после команды просыпания (если она действительно его) , он должен больше потреблять , т.е. на резисторе должно осесть 50-500мв . Или отключить подсветку и мерить ток потребления шилда , должна быть заметна разница по потреблению сна/не сна
3. возможно дело в нужной правильной адресации при 8/16 бит. Т.е. попробовать его запустить на 8 бит. // для arduino UTFT как то попался на этом , пришлось либу на скорую руку допилить на 16 бит адресацию регистров comment-90767 и для некоторых 8ми бит не спроста существует тож переделка стандартной UTFT (turbo_8bit) , ибо просто тупо выставив в либе адресацию 8 бит - такой метод с некоторыми контроллерами не работает)
4. снять аккуратно дисп и промерить на его кондерах напряжения , после просыпания, должно появляться на них высокое положительное и отрицательное напряжение около 5в. если нет , то дисп не жилец. Заодно глянуть что у него на шлейфе написано.
5. по поводу ID , странно что он не вычитывается , возможно там другой контроллер, попробуйте подключить к ардуине через резисторы и прогнать читалку v5.2 на 8 и 16битном режиме диспа. неиспользуемые пины шины данных диспа - через резистокы 10к на GND . (учесть что у некоторых контроллеров при режиме 8 бит , они могут переходить и в старшие разряды DB8-DB15 железно или по желанию - по пину IM.. ) Т.е. попробовать считать регистры при режиме 8 бит диспа - подключиться к DB0-7 , потом DB8-15 . И в режиме 16бит к DB0-8 . Т.о. хорошо бы глянуть 3 лога .
6. по даташиту неиспользуемые пины на минус. но на время опытов лучше через 10ком.
8-bit interface: D[7:0] are used, D[23:8] should be connected to VSSI
16-bit interface: D[15:0] are used, D[23:16] should be connected to VSSI
7. чтот с маркировкой адресов у производителя странно , на стр. 142 в даташите RM68120 указано что ID должен быть по адресам 0400h~0402h
The 1st parameter (ID1): the module’s manufacture ID
The 2nd parameter (ID2): the module/driver version ID
The 3rd parameter (ID3): the module/driver ID
Note: Commands RDID1/2/3 (DAh/DBh/DCh) read data correspond to the parameter 1, 2, 3 of
а на стр 137 указана нормальная адресация
8. Command
8.1. Command List
Operational
Code (Hex) Command Command(C)
/Read(R) /Write(W)
Number Of
Parameter
00h nop C 0
01h soft_reset C 0
04h get_display_ID R 3
....
DAh read_ID1 R 1
DBh read_ID2 R 1
DCh read_ID3 R 1
значит всё-же у него не 16бит обращение к регистрам , а 8бит . т.е. старшие биты д.б.= 0 . значит когда производитель пишет 0400h~0402h , они имеют ввиду 0004h~0004h но 3 параметра последовательно в нем ! а но и правильней и быстрее , ведь быстрее пульнуть № регистра а потом последовательно его парамерты , чем каждый раз пулять 16ти битный адрес регистра и каждый подпараметр чтобы закинуть все параметры относящиеся к его области .
по стр.47 не много не догнал в особенностях передачи, но можете сравнить с даташитами распространенных ili9488 ssd1963 ,...
но на стр.50 для 16бит ясно изображено, что старший байт=0 , и команда и данные для нее нередаются только нижним байтом. Исключение , только если вы передаете цвет - там используется все 16бит .
значит вывод из п.7 , переписывайте инит как он у обычных контроллеров (00xxh затем последовательно параметры) и пробуйте совместно режимы 16 и 8 бит дисплея и библиотеки.
по стр.47 не много не догнал в особенностях передачи, но можете сравнить с даташитами распространенных ili9488 ssd1963 ,...
но на стр.50 для 16бит ясно изображено, что старший байт=0 , и команда и данные для нее нередаются только нижним байтом. Исключение , только если вы передаете цвет - там используется все 16бит .
значит вывод из п.7 , переписывайте инит как он у обычных контроллеров (00xxh затем последовательно параметры) и пробуйте совместно режимы 16 и 8 бит дисплея и библиотеки.
В режиме 8 бит еще поковыряю его, но он даже из сна не выходил в таком режиме от команды 0x11, в 16битном выходит именно от 16 биной команды. Почему в даташите так напутано все непонятно.
//SLEEP OUT
WriteComm(0x1100);
LCD_delay(120);
Как я понимаю, что он просыпается: пишу память и считываю ее, если не давать команду выход из сна, то она не пишется и не считывается, если он просыпается, то пишется и считывается, правда путано все как-то, но оно и понятно, пишет он по умолчанию в режиме 18 бит на цвет, а считывает 24 бита и все пересмешивается. Попробую считать все регистры и записать на флешку, там у него особо нет разнообразия в ответах, то нули, 0х8000 то 0х0011, то память читается - там да разнообразие. причем он считывает когда младший байт то старший не трогает, то наоборот старший, т.е. считали что-то было 0х8000, потом считали 0х0011, в итоге считывается 0х8011.
Свободные выводы и заземлял и так оставлял, на них так и так нули.
Что касается осциллографа, на нем его делалать не оптимально, он дорогой слишком, я сделал на дешевом экране. Но этот купил просто поиграться с емкосным сенсором, ну и для себя осциллограф переделать под более качественный экран, но что-то не задалось с ним...
Считал во всех вариантах переключателей интерфейсов, работает только 16 и 18 бит, ну как работает, считывается там не особо густо что или 0 или 0x0800. https://yadi.sk/d/K3JtYzku3Jx4Ag
Имею дисплей от сотика Айфона китайского на шлейфе надпись hs3536hvns37-00 3.5 дюйма 320х480 37 пин. По распиновке не совсем догнал на сколько он бит 8 или 16 вот фото и как переключить на 8bit?
Имею дисплей от сотика Айфона китайского на шлейфе надпись hs3536hvns37-00 3.5 дюйма 320х480 37 пин. По распиновке не совсем догнал на сколько он бит 8 или 16 вот фото....
16 точно, и с большой вероятностью с возможностью переключения на 8 бит - прослеживайте дорожки и распиновку.
смотрите также по дорожкам IM0... из стекла . просмотрите тему , выкладывали уже фото и разъяснения как и что бывает.
а зачем именно 8 ?
можно и 16 использовать , для mega128 , mega2560 это не проблема. для mega328 - остануться несколько свободных пинов их хватит для мелко проектов. Можно и параллельно к шине данных подрубаться (смотря что, фотки тестера акб выкладывал ) . а крупные проекты на 480x320 в память atmega328 не влезут, так что 16битность не проблема.
mungkin itu ili9488 relatif. menggunakannya untuk menginisialisasi. Jadi dapat itu dan menggunakannya.
Untuk mencari tahu persis apa jenis kontroler Anda di layar, hubungkan ke mode 8 bit (atau mode apapun). Tapi menghubungkan DB0-7 8bit pertama yang Arduino Uno, dan membaca ID-nya. eReader 5.2 di sini comment-264976.
Jika Anda menggunakan browser Chrome dari Google. Anda dapat mengklik tombol kanan mouse dan pilih Terjemahkan ke Indonesia.
mungkin itu ili9488 relatif. menggunakannya untuk menginisialisasi. Jadi dapat itu dan menggunakannya.
Untuk mencari tahu persis apa jenis kontroler Anda di layar, hubungkan ke mode 8 bit (atau mode apapun). Tapi menghubungkan DB0-7 8bit pertama yang Arduino Uno, dan membaca ID-nya. eReader 5.2 di sini comment-264976.
Jika Anda menggunakan browser Chrome dari Google. Anda dapat mengklik tombol kanan mouse dan pilih Terjemahkan ke Indonesia.
Tanks slider for reply with translated rusian language to indonesian... you are the first person was do this for me on the net hehehehe.
Ii use eReader 5.2 for read id, but because pin RS,CS,WR,RD,RST is unknown right position.. its always fail.
I try one by one combination of rs,cs,wr,rd,rst and databit position from any source for 44 lcd pinmap but until now it not works.
But i will try your suggest combination, because im not ever try that hahahaha.
This my lcd collection was need to reverse engineer :), most of them from nokia phone, but many more not in the photo, lcd from china phones that usualy more easy to use them.
А что по твоему X-bus
Понятно. :)
В доках Атмела X-bus - название шины(интерфейс) для "External Memory Interface" , позволяет расширять внутреннюю SRAM извне до 64 килобайт напрямую (как родную, прозрачно для компиляторов) и больше "с извращениями". Есть примеры наращивания SRAM до 512кбайт. :)
Далеко не каждый камень имеет этот интерфейс у Атмела, поэтому он "малоизвестен"..
В контроллере дисплея шина 18 битная. Но выведена на разъемы 8 битная. А вот есть ли на шлейфе выводы для
переключения шины ???.
Насчет X-bus. Это шина, по стандарту i2c. Они аналогичны. И по этой шине работает внешняя память, поддерживающая
ее. Просьба назвать пару кирпичей с шиной X-bus. Почитаю.
Насчет прямой записи в контроллер дисплея в видеоозу, не проблема. А вот адресовать конкретный адрес, только через
регистры контроллера дисплея.
О, пасибки. Это и хотел узнать. Камни Атмела с шиной расширения внутренней SRAM: ATmega2560 и все её клоны 640, 1280 .. 2561 и т.д. + ATmega128a аналогично. За остальные не скажу, есть ещё какие-то, но уже не помню. На сайте Атмела, при выборе камня по параметрам этот интерфейс тоже назван X-bus .. какой стандарт имеете Вы ввиду (с чем путается) - я не в курсях. То что I2C ещё называют по-разному - читал, таже абревиатура TWI от Атмела .. Есть некий X-bee, а вот за такой алиас для I2C - не сталкивался ни разу, тем более в среде ардуинщиков.
Вобщем-то я хотел понять можно ли активируя шину расширения SRAM назначить в ней некий адрес порту контроллера дисплея и тупо присваивать ему значения в программе, типа так:
Не особо силен в английском. Но судя по даташиту, засылаешь в дисплей в 20 регистр адрес по Х,
затем в 21 регистр адрес по Y, потом в 22 регистр данные. Автоинкремент адреса есть.
Только у контроллера дисплея нет шины i2c. Есть из последовательных только SPI.
Поэтому к этому дисплею X-bus не прикрутишь.
Я уже пытался разъяснить разницу между АРМ-овским понятием xBUS (I2C) и Атмеловским X-bus (Extra RAM bus) .. планирую прикрутить X-bus, а не xBUS. :)
По какой шине работает Атмеловская X-bus, последовательной или параллельной?
Может ты имеешь ввиду XRAM?
Угу, её родимую... давно уже нравится.
XRAM это для параллельной памяти. Это не X-bus. К дисплею ее напрямую не привязать. Да и не зачем.
В контроллере дисплея есть память, но адресация к ней идет через его регистры, плюс данные и команды
идут по общей шине. А атмеловский XRAM подразумевает раздельную шину, расчитанную на параллельную
память. Как то так.
Объясни толком, что ты хочешь в итоге получить?
Ну, так вот и хочу посадить дисплей с этим параллельным интерфейсом на шину расширения памяти: использовать свою уже готовую плату расширения памяти - на ней есть защелка младшей части адреса и обвес сигналов выборки/записи. Тупо на полную шину адреса (после защелки) повесить "монтажное И" на некоторую выделенную пару адресов, например 0xF00(0/1) - без сигнала А0, сигнал А0 с платы расширения памяти завести на сигнал D/C дисплея и тупо разрешать шину дисплея при обращениях по этой паре адресов. Микросхема памяти при подаче адреса ВНЕ её зоны адресов - запрещается сама и переходит в Z. Дисплей тоже имеет сигнал разрешения, который и подавать со схемы монтажного "И" .. сигналы чтения/записи вообще можно напрямую кинуть. И потом обращаться к дисплею из программы как показал выше - по указателю на эту выделенную пару адресов... что мешает?
В итоге можно получить частоту работы с дисплеем (запись/чтение) вплоть до менее 10 тактов МК .. или около 2 мегабайта в секунду. Меня такое очень даже устроит..
В итоге планирую иметь И расширенную память И дисплей на одной шине. :)
Как я понял, тебе некуда деть лишние порты микроконтроллера. Тогда бери дисп. с возможностью вывода
по 18 битной шине и гони в него с максимальной скоростью. Без всяких посредников, в виде защелок и т. п.
Это максимальная скорость для твоего контроллера. Если нужно еще быстрее возьми более шустрый МК.
Нет, так будет медленнее: чтобы вывести точку потребуется выводить в три порта по байту и ещё дрыгать ногой "запись" отдельно .. 4 отдельные команды. Если оставить интерфейс 8 бит, то все равно 2. А так - одна. :)
Куда деть выводы - у меня есть. Просто они используются по большей части аппаратно, а не программной эмуляцией ногодрыгами "воткни куда понравилось, будем жить медленно и пичально".
Команда одна, а ты листинг выполнения этой команды смотрел. Команда для компилятора, а для
микроконтроллера то, что выдаст компилятор.
Напиши прогу записи в XRAM и посмотри ассемблеровский листинг. Тогда все иллюзии испарятся.
Писал уже, даже цельный тест.. запись в расширенную SRAM ровно ничем не отличается от записи во внутреннюю: *ptr = data -- ровно 1 команда ассемблера. :)
Тогда перечитай матчасть. Даже во внутреннюю память за одну команду не записать.
Буду на пальцах. Для xram. Сначала нужно выставить в порт адрес. Затем выставить во второй
порт данные. Затем дать команду на запись. А так как у дисплея данные и адрес это один и тот же
порт, то xram прикрутить не получается.
Для дисплея. Выставить в порт адрес (команду), дать команду на запись. Выставить в порт данные и дать
команду на запись. Естественно переключая D/C.
При выводе потоковых данных, выставлять их в порт и давать команду на запись.
Это то о чем ты говоришь?
http://www.rlocman.ru/shem/schematics.html?id=71093
Да, примерно за это. У меня своя разводка такой платы на 512кб, у которой НЕ используется ни одна лишняя нога камня. У меня нет "лишних". :)
Разводка второго варианта (не паял, щас завершаю улучшенный) приведена тут: http://arduino.ru/forum/proekty/lego-kirpich-iz-mega2560?page=3 , пост №172. А принципиальная схема первого тут: http://arduino.ru/forum/obshchii/atmega-128a-au-vneshnyaya-sram-62256-74... , пост №100.
Вы путаете команды и такты процессора, так что Ваш совет, позволю себе переадресовать Вам :)
Да, во внутреннюю память команда записи ST пишет за ДВА ТАКТА и от 3 до 6 тактов во внешнюю. Настраивается в регистрах работы XRAM. Но, все-таки это ОДНА команда, а не 2. Аналогично, все остальные команды работы в памятью читают и пишут оперативу за 2 такта. Вызов/возврат процедур тоже и даже по 2 раза, ибо работают со словом - складывают/получают 2 байта в или со стека.
"Буду на пальцах. Для xram. Сначала нужно выставить в порт адрес. Затем выставить во второй порт данные. Затем дать команду на запись."
Не надо, смешно выходит.. этим всем занимается ЦПУ, когда работает с памятью. Программно пишется крайне просто (уже писал): "Var = data;" В ряде случаев это компилируется ровно в 1 команду: "ST var, immediate", например. Компилятор полноценно и без прикрас легко адресует 64 килобайта оперативы. Её внутренней столько нет у Мег, поэтому ему выставляют принудительно предельный размер имеющегося ОЗУ в настройках плат. Можно исправить, делов-то: завести ещё одну плату.
"А так как у дисплея данные и адрес это один и тот же порт, то xram прикрутить не получается."
?!? Почему у вас все так грустно? Вполне получается, я же написал "как": вешаем ногу дисплея D/C на адрес памяти и .. получаем 2 ячейки: одну для данных и вторую для команд. Не? Что мешает? :)
А процессор сам определяет куда писать?
А время считается по командам или по тактам? Как двумя тактами выставить и адрес и данные на общую
шину дисплея?
Конечно, силами кумпилятора :)
Я веду речь за достижение скорости записи в дисплей в районе пары мегабайт в сек. - это потоковая запись больших блоков. Команда выставляется 1 раз на весь блок, нефатально. Попиксельно "куда-попало", конечно же потребуется что-то иное.
Поточно, типа такого:
Ну вот .. типа так. На цикл выделяется три команды: считать байт с автоинкрементом указателя, записать байт в ОЗУ дисплея по его адресу, декрементировать счетчик и повторить если ещё есть что отправить. Итого, ориентировочно 2+3+1+2 = 8 тактов или 2 мегабайта в секунду.
:)
P.S. подправил: для байтового счетчика пакета отправки. По 3 байт на точку = 256/3 = 85 точек. Для больших пакетов будет 1.78Мб/сек, что мне тоже кажется очень нефигово.
P.P.S. Мне кажется несколько глупым отказываться от самой быстрой шины камня, если она есть.. :)
Отправить байт в озу занимает 2 такта.
Отправить байт в порт тоже 2.
Какая разница?
2 такта в ОЗУ - только для внутреннего ОЗУ, на внешнее миниум 3 такта. :)
Для байтового интерфейса надо отправить 2 команды в порт: записать байт данных И дернуть ногой WR на каждый байт. А тут одна операция, но "по 3 такта". :) А кроме этого, Порт и ещё одна нога (WR) занимается целиком и полностью и "насовсем".
А тут совмещение полезного с приятным, которое особенно интересно, если внешнего ЗУ много: можно катать по 32 килобайта за операцию в моей версии или почти по 56кб в той, что по вашей ссылке (-8200байт внутреннего ЗУ Мега2560 на каждый сегмент по 64кб). Переключение страничек внешнего ЗУ - на общем фоне затрат - "мелочь" :)
В отличии от исходного варианта у меня НЕ занимаются никакие добавочные ноги камня, от слова "совсем", что тоже полезно.
Волнует только один вопрос: дисплей потянет такое насилие над собой или нет? Запись по прямому интерфейсу типа i8080 проходит на таких скоростях?
Нарисуй схему подключения контроллера к дисплею по шине xram
Чутка попозжа. Как только подниму свою Xram полноценно.
Есть кто шарит в экранах и их настройке? Что-то я не могу запустить экран на контроллере RM68120 который день. Вот этот, https://ru.aliexpress.com/item/4-3inch- ... 75630.html
Вот на него документация. https://yadi.sk/d/sm_p0N0Z3JfhiC
Все команды в нем описаны 2х байтными, например, SWRESET(0100h), но он поддерживает 8ми битный режим, да и половина команд на всех экранах одинаковая и до этого они были 1 байтными. Далее по тексту мы видим, что они и есть однобайтные, страница 49 даташита, понятно нарисована, что команды и их параметры 8 бит. Однако на команды 8 бит экран вообще не отзывается, но если ему послать SLPOUT (1100h): Sleep Out, то он просыпается и начинает реагировать за запись в память и чтение из нее(тоже на команды в старшем байте), причем это все, что он делает, показывать он не показывает, чтение состояния всегда говорит, что он выключен, включаться не желает, я просто задолбался с ним. Китаезы ничего не шарят, говорят, что они не инженеры, шлют всякую фигню вообще с других контроллеров. Хотя в отзывах есть чуваки, которые его смогли включить и поставили 5 звезд.
Ножки звонятся на + и на -(не напрямую, а через диод защитный), т.е. контакт с контроллером есть, обрывов нет, соединение верное, при чтении можно считать 0xFFFF, т.е. все выводы контачат, что ему нужно и что за замут с командами в старшем байте? Настроен он на 16 битный интерфейс при помощи перемычек на плате. Экран кошерный с емкосным тачем, тач работает, правда кроме того, что он дает прерывание от касания, ничего не проверял, без экрана это проблематично. Но мне совершенно не понятно, почему он не подает признаков жизни и еще на запрос ID он отвечает 0x0011, а по даташиту должен: 1й "фигня", второй 0x0000, третий 0x0080, четвертый 0x0000.
Судя по даташиту в 16 битном режиме команды в него пишутся побайтно (D0-D7). А вывод изображения в 16 битном режиме (D0-D16).
Только какой байт команды пишется первым, не нашол. Начни со старшего.
Чтение id тоже D0-D7.
Нашел и поднл свою тему http://arduino.ru/forum/apparatnye-voprosy/samodelnaya-mega2560-128a-s-p..., всё постепенно выложу в ней, в т.ч. и что получится с дисплеями и прямым доступом по этому интерфейсу.
Судя по даташиту в 16 битном режиме команды в него пишутся побайтно (D0-D7). А вывод изображения в 16 битном режиме (D0-D16).
Только какой байт команды пишется первым, не нашол. Начни со старшего.
Чтение id тоже D0-D7.
т.е. после инициализации светится белым, пишите картинку, а он не реагирует, а данные из памяти читаются?
В даташите есть команда 22h и 23h попробуй.
Попробуй вначале инициализации влючить дисплей, затем писать регистры.
т.е. после инициализации светится белым, пишите картинку, а он не реагирует, а данные из памяти читаются?
В даташите есть команда 22h и 23h попробуй.
Попробуй вначале инициализации влючить дисплей, затем писать регистры.
да, не работает по прежнему. Я вот не пойму откуда это, вроде нет такого в даташите
https://github.com/luckasfb/lcm_drivers/blob/master/baoxue_mytqt_yywi/lc...
https://github.com/luckasfb/lcm_drivers/blob/master/acer_e350_simcom75/l...
Посмотри, сравни.
Насчет недокументированных регистров понятно. Возможно, что полный даташит дают только оптовым покупателям.
А инициализацию народ слизывает с прошивок готовых изделий. Китайцы не исключение.
Но мне совершенно не понятно, почему он не подает признаков жизни и еще на запрос ID он отвечает 0x0011, а по даташиту должен: 1й "фигня", второй 0x0000, третий 0x0080, четвертый 0x0000.
так что он выдает по всем регистрам? это примерно соответствует таблице содержанию данных в регистрах при его сбросе? не все регистры разрешены для чтения , записи/чтения , записи - это тож указано в этой таблице.
GFX, вы хотите на нем осциллограф сделать? http://radiokot.ru/forum/viewtopic.php?f=59&p=3118468 . мож тогда взять наиболее распространенные типы контроллеров. подобные IPS с емкостным тачем есть тож от 4" . много уже времени убили на него, мож он не рабочий?
Разве что из принципа хотите его добить? как я понял, подключали его только к stm32 , поэтому врятли его сожгли 5в уровнями.
не сильно вдавался в даташит и разводку на плате. замечу:
0. самое главное - переключите его на 8бит и подключите через резисторы 10к к ардуине и прогоните читалкой v5.2 из comment-264976 , полученный лог выложите здесь (в окошке размещения кода , во вкладке доп. , поставьте галку свернуть код.
1. если применить ногодрыганье шины управления, (к примеру читалку) и шину данных не подключать / подключать , просто полазить по ней светодиодом (будут видны четкие лог.0 / лог.1 ) , то можно узнать не ошиблись ли при разводке с IM0... . т.е. убедиться в правильной размерности шины.
2. попробовать подключить питания диспа VCC и VCIO через резистор 50-100 ом , после команды просыпания (если она действительно его) , он должен больше потреблять , т.е. на резисторе должно осесть 50-500мв . Или отключить подсветку и мерить ток потребления шилда , должна быть заметна разница по потреблению сна/не сна
3. возможно дело в нужной правильной адресации при 8/16 бит. Т.е. попробовать его запустить на 8 бит. // для arduino UTFT как то попался на этом , пришлось либу на скорую руку допилить на 16 бит адресацию регистров comment-90767 и для некоторых 8ми бит не спроста существует тож переделка стандартной UTFT (turbo_8bit) , ибо просто тупо выставив в либе адресацию 8 бит - такой метод с некоторыми контроллерами не работает)
4. снять аккуратно дисп и промерить на его кондерах напряжения , после просыпания, должно появляться на них высокое положительное и отрицательное напряжение около 5в. если нет , то дисп не жилец. Заодно глянуть что у него на шлейфе написано.
5. по поводу ID , странно что он не вычитывается , возможно там другой контроллер, попробуйте подключить к ардуине через резисторы и прогнать читалку v5.2 на 8 и 16битном режиме диспа. неиспользуемые пины шины данных диспа - через резистокы 10к на GND . (учесть что у некоторых контроллеров при режиме 8 бит , они могут переходить и в старшие разряды DB8-DB15 железно или по желанию - по пину IM.. ) Т.е. попробовать считать регистры при режиме 8 бит диспа - подключиться к DB0-7 , потом DB8-15 . И в режиме 16бит к DB0-8 . Т.о. хорошо бы глянуть 3 лога .
6. по даташиту неиспользуемые пины на минус. но на время опытов лучше через 10ком.
8-bit interface: D[7:0] are used, D[23:8] should be connected to VSSI
16-bit interface: D[15:0] are used, D[23:16] should be connected to VSSI
7. чтот с маркировкой адресов у производителя странно , на стр. 142 в даташите RM68120 указано что ID должен быть по адресам 0400h~0402h
RDDID(0400h~0402h) : Read Display ID
Считал во всех вариантах переключателей интерфейсов, работает только 16 и 18 бит, ну как работает, считывается там не особо густо что или 0 или 0x0800. https://yadi.sk/d/K3JtYzku3Jx4Ag
Вот на всякий случай, как считывал
Ну и ФСМЦ, максимум медлительности настроено, но от скорости ничего не меняется.
Имею дисплей от сотика Айфона китайского на шлейфе надпись hs3536hvns37-00 3.5 дюйма 320х480 37 пин. По распиновке не совсем догнал на сколько он бит 8 или 16 вот фото и как переключить на 8bit?
Имею дисплей от сотика Айфона китайского на шлейфе надпись hs3536hvns37-00 3.5 дюйма 320х480 37 пин. По распиновке не совсем догнал на сколько он бит 8 или 16 вот фото....
16 точно, и с большой вероятностью с возможностью переключения на 8 бит - прослеживайте дорожки и распиновку.
в распиновке переключения не нашел.
в распиновке переключения не нашел.
Хочу его подключить к ардуино нано Атмега328
смотрите также по дорожкам IM0... из стекла . просмотрите тему , выкладывали уже фото и разъяснения как и что бывает.
а зачем именно 8 ?
можно и 16 использовать , для mega128 , mega2560 это не проблема. для mega328 - остануться несколько свободных пинов их хватит для мелко проектов. Можно и параллельно к шине данных подрубаться (смотря что, фотки тестера акб выкладывал ) . а крупные проекты на 480x320 в память atmega328 не влезут, так что 16битность не проблема.
Спасибо. А подключение 16 бит как в библе UTFT?
Спасибо. А подключение 16 бит как в библе UTFT?
естественно, в даташите в ее файлах все описано. ( но можно как угодно , покопав её. )
Hello .... i come from indonesia. Sorry for my bad english, because i cant write to rusian language.
Just share my experiment I use TFT8K4238FPC, 44 pin, 16bit, 320x480. Use ILI9481 Chip
PIN CONFIG IS
This lcd works with UTFT with 16bit mode, IMO/pin 36 to GND,
Or works with modified adafruitTFTLcd 8bit mode, IMO/pin 36 to +3.3v
Sorry i cant upload image or code because im use android for write this, and dont know how to upload.
Pinout from net. http://images.vfl.ru/ii/1462888683/68765689/12608082.jpg Similar lcd type http://vrtp.ru/uploads/post-57-1462860954.png
I hope this can use for reference
No probs, you're welcome. Glad that everything alright :) Probably, this info will be useful for someone playing with this kind of display.
Does anyone know this chip and pin map for this lcd.
HSNB03-S320A.
Resolution likes 320x480, use 44 pin, taken from china clone nokia x8
Does anyone know this chip and pin map for this lcd.
HSNB03-S320A.
Resolution likes 320x480, use 44 pin, taken from china clone nokia x8 ....
Hello. bahasa Anda Indonesia?
melihat google untuk "TFT lcd 44pin" tab - gambar. di comment-258248
mirip dengan yang satu ini? pinouts - http://g04.s.alicdn.com/kf/HT1cS09FLBaXXagOFbXH/206109602/HT1cS09FLBaXXagOFbXH.jpg https://world.taobao.com/item/532543054487.htm
mungkin itu ili9488 relatif. menggunakannya untuk menginisialisasi. Jadi dapat itu dan menggunakannya.
Hello. bahasa Anda Indonesia?
melihat google untuk "TFT lcd 44pin" tab - gambar. di comment-258248
mirip dengan yang satu ini? pinouts - http://g04.s.alicdn.com/kf/HT1cS09FLBaXXagOFbXH/206109602/HT1cS09FLBaXXa... https://world.taobao.com/item/532543054487.htm
mungkin itu ili9488 relatif. menggunakannya untuk menginisialisasi. Jadi dapat itu dan menggunakannya.
Untuk mencari tahu persis apa jenis kontroler Anda di layar, hubungkan ke mode 8 bit (atau mode apapun). Tapi menghubungkan DB0-7 8bit pertama yang Arduino Uno, dan membaca ID-nya. eReader 5.2 di sini comment-264976.
Jika Anda menggunakan browser Chrome dari Google. Anda dapat mengklik tombol kanan mouse dan pilih Terjemahkan ke Indonesia.
Bagi kita, Anda dapat mencoba menggunakan terjemahan Rusia https://translate.google.com https://translate.google.co.id/?hl=id&tab=wT Indonesia -> Rusia .
Tanks slider for reply with translated rusian language to indonesian... you are the first person was do this for me on the net hehehehe.
Ii use eReader 5.2 for read id, but because pin RS,CS,WR,RD,RST is unknown right position.. its always fail.
I try one by one combination of rs,cs,wr,rd,rst and databit position from any source for 44 lcd pinmap but until now it not works.
But i will try your suggest combination, because im not ever try that hahahaha.
This my lcd collection was need to reverse engineer :), most of them from nokia phone, but many more not in the photo, lcd from china phones that usualy more easy to use them.
Вот фото шлейфа 37pin со стеклом , не совсем понятно где im0-im2, и судя по распиновке контроллер ili9486/9488/9481
https://cloud.mail.ru/public/353E/r359Qs4m9
И обратная сторона https://cloud.mail.ru/public/2PFc/fjvbJsEoB
Подскажите пож-та как перевести на 8 bit
На фотке сдвинь сигналы IM вправо, а на месте IM2 скорее всего reset.
Он сейчас у тебя на 16 бит подключен. Считай какой контроллер. Если подтвердится что
контроллеры 88, 86 или 81, то резать IM0 (он сейчас на земле) и подавать на него 1.
Будет 8 бит.
Думаю про это ты уже в даташите прочитал.
Удачи.