Получил индикатор ILI9341, тачскрин (карандаш в комплекте). Разъем 34 штыря. Маркировка выводов такая (питание и общий упускаю). Т_CS, CLK, PEN, F_CS, MISO, MOSI, BL, SDCS, D0…D15, RST, WR,RD, CS, RS. Контактов на переключение СПИ-8-16 бит нет. Кое что вроде понятно, но есть вопросы. Как произвести переключение СПИ-8-16? Или он будет работать только СПИ-16? Какое назначение выводов, напр. Т_CS и др, которых нет в даташит на ILI9341? Спасибо за ответ.
Привет всем, кто нибудь может подсказать как инициализировать этот дисплей? (МК - ATMega8A, дисплей - китайский на плате, SPI)
Сейчас делаю так: вывод CS подтягиваю к земле, LED к питанию (вся схема питается от 3,3 v) 1) Инициализирую SPI микроконтроллера (скопировал из сообщения cgw) Спойлер//7-Разрешение прерывания от SPI SPCR^=(1<<SPIE);// SPIE=0; //6-Включение/выключение SPI SPCR|=(1<<SPE);// SPE=1; //5-Порядок передачи данных SPCR^=(1<<DORD);// DORD=0; //4-Выбор режима работы (Master/Slave) SPCR^=(1<<MSTR);//MSTR=0; //3-Полярность тактового сигнала SPCR^=(1<<CPOL);// CPOL=0; /*Полярность тактового сигнала. 0 —генерируются импульсы положительной полярности, при отсутствии импульсов на выводе присутствует НИЗКИЙ уровень; 1 —генерируются импульсы отрицательной полярности, при отсутствии импульсов на выводе присутствует ВЫСОКИЙ уровень*/
//2-Фаза тактового сигнала SPCR^=(1<<CPHA);// CPHA=0; /* Фаза тактового сигнала. 0 —обработка данных производится по переднему фронту импульсов сигнала SCK (для CPOL =0 —по нарастающему фронту, а для CPOL =1 —по спадающему фронту); 1 —обработка производится по заднему фронту импульсов сигнала SCK(для CPOL =0 —по спадающему фронту, а для CPOL =1 —по нарастающему фронту) */
//1,0-Скорость передачи SPCR^=(1<<SPR1);// SPR1=0 SPCR^=(1<<SPR0);// SPR0=0 2) RST в 0 и обратно в 1, жду 100 мс. 3) отправляю команду 0x11, жду 120 мс. (Sleep OUT) (перед отправкой команд DC устанавливаю в 0) 4) отправляю команду 0x29, жду 120 мс. (Display ON) цикл: 5) отправляю команду 0x2C (Memory Write) 6) отправляю 2 байта данных
На дисплее точек не появляется. Может кто-нибудь помочь?
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
(инициализацию вернул обратно свою SPCR=(1<<SPIE)|(1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0);) Спойлер1) прерывание по завершению передачи данных по SPI разрешено 2) активация интерфейса SPI 3) режим master 4-5) делитель частоты 128 (частота МК 2Mhz)
DDRB=0b11101111; PORTB=0b11111111; все ножки на выход, кроме MISO.
SS не использую, CS дисплея подтягиваю к земле. (если использую SS - результат тот-же)
SS не использую, CS дисплея подтягиваю к земле. (если использую SS - результат тот-же)
возможно, именно тут собака и порылась
дело в следующем:
Цитата:
Если же микроконтроллер находится в режиме «Master» (разряд MSTR регистра SPCR установлен в «1»), направление передачи данных через вывод SSопределяется пользователем. Если вывод сконфигурирован как выход, он работает как линия вывода общего назначения и не влияет на работу мо дуля SPI. Как правило, в этом случае он используется для управления выво дом SSмикроконтроллера, работающего в режиме «Slave». Если же вывод сконфигурирован как вход, то для обеспечения нормаль ной работы модуля SPI, на него должно быть подано напряжение ВЫСОКОГО уровня. Подача на этотвход напряжения НИЗКОГО уровня от какойлибо внешней схемы будет воспринята модулем SPI как выбор данного микроконтроллера в качестве ведомого, и соответственно, начало передачи ему данных.
ozonn, в proteus подключил к мк spi debagger, заметил странную вещь, spi один раз отправляет передаваемый байт + лишний бит, а затем все этот же байт до бесконечности, даже если убрать все задержки и не ждать окончания отправки, он все равно не начнет передавать следующий байт. Спойлерint main(void) { DDRC=0b11111111; PORTC=0b11011111; DDRB=0b11101111; PORTB=0b11111111;
cli(); spi_init(); sei();
ClearBit(PORTB,0); //Макрос, ножка к Reset дисплея в 0 _delay_ms(2); SetBit(PORTB,0); //Макрос, ножка к Reset дисплея в 1 _delay_ms(100);
spic(0x11); //отправка команды _delay_ms(120); spic(0x29); _delay_ms(120);
void spi(char cmd) //Отправка данных { SetBit(PORTB,1); //макрос, ножка к dc дисплея в 1 SPDR = cmd; //отправляем данные по SPI while(!(SPSR&(1<<SPIF))); //ждем окончания отправки }
void spic(char cmd) //Отправка команды { ClearBit(PORTB,1); //макрос, ножка к dc дисплея в 0 SPDR = cmd; //отправляем данные по SPI while(!(SPSR&(1<<SPIF))); //ждем окончания отправки }
Mishany, было бы здорово, у меня и mega 328p есть.
Заработало с библиотекой, очень рад что дисплей рабочий. А со своим кодом остановился на том, что после того как убрал прерывания spi - дисплей стал показывать черно-белые полосы, но рисовать по прежнему отказывался, дальше разбираться не стал. Mishany, можешь подсказать как сделать на основе шрифта 48 шрифт еще большего размера, или в какой программе его можно нарисовать? С функциями понятно, вопрос только в самих шрифтах.
Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Ср окт 19, 2011 08:48:27 Сообщений: 443 Откуда: Мать городов русских
Рейтинг сообщения:0
Народ, кто работал с параллельным 8-бит TFT ILI9341? У меня 2.4" 240x320, пытался прочитать ID - шлёт вроде 0xC0C0C0C0, не могу найти в инете нормального примера подключения и обращения индикатора к МК, почти всё Ардуиновские примеры.
Нашёл пример https://hubstub.ru/display/125-iniciali ... a-avr.html, но там подключение по 16-бит шине, вопрос: насколько я понял, команда (т.е. адрес) и параметры команды передаются по младшим битам 0..7, а уже данные для записи в буфер индикатора используют полную шину?
Ну тогда взял Arduino Uno, запустил среду Arduino IDE, наковырял примеров и раза с 10 скомпилировался скетч, прошил в контроллер, запустился тест индикатора, там было чтение типа контроллера - у меня контроллер отзывается и показывает тест ILI9327, 9341, 9488, ну я оставил ILI9341. Затем прочитал *.hex из контроллера, открыл AVR Stidio, хотел посмотреть как идёт обращение к индикатору - ничего не понял, в коде нет команд sbi/cbi, даже in/out всего несколько, и не к портам. Насколько я понял, компилятор использует lds/sts?
Так, вот вроде как в преферансе - карта слезу любит - поплакался, пришла мысль - раз ID чего-то не читается, можно прочитать статус индикатора (8.2.4. Read Display Status (09h) - чтобы проверить схему и подключение, поскольку юзаю макетку с ATmega8 (переставлю ATmega328), если будет мало памяти.
_________________ Хорошему коту и в декабре - март
Карма: 2
Рейтинг сообщений: 10
Зарегистрирован: Ср окт 19, 2011 08:48:27 Сообщений: 443 Откуда: Мать городов русских
Рейтинг сообщения:0
Короче, полный песец, пока не подключил логический анализатор к Arduino Uno c подключеным TFT 2.4" 240х320 - не мог втыкнуть, как запустить дисплей. Подключил анализатор, посмотрел 4 сигнала управления и 4 бита данных - всё по даташиту - Chip Select дёргать вниз перед командой управления и отпускать вверх после чтения или записи последнего байта. Пробовал читать ID командой 8.3.23. Read ID4 (D3h) - читаются одни нули, зато чтение статуса дисплея совпало с даташитом - 0x00610000, также совпало чтение ещё некоторых команд статуса. Уже замечательно - тип контроллера определил - ILI9341, дисплей проверил, частично отладил прогу и проверил схему.
_________________ Хорошему коту и в декабре - март
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 26
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения