Экран подключен по 8-ми битной шине, потому для COM_ADR и DAT_ADR нужно (uint16_t*) заменить на (volatile uint8_t*). Кроме того в таком случае адрес 0x60080000 превратится в 0x60040000. Функции обращения к экрану там простейшие, должно быть как-то так: Спойлер
Инициализацию можешь для начала свою проверить, после нее можно попробовать прочесть ID...
ps. Касательно адресов... Когда пишем по адресу 0x60040000, то активируется линия A18 идущая на RS, в противном случае там 0. В документации это колонка D/CX, в ней всегда, если речь о идет записи, 0 для команды и 1 для данных. Это если я правильно понял причину твоих затруднений...
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
Функции обращения к экрану там простейшие, должно быть как-то так:
Я не понимаю что именно надо заводить в аргумент reg. Какой адрес? Ведь в документации указана только data, то есть то, что выводить на шину D0-D7. Вот например функция
Я не понимаю что именно надо заводить в аргумент reg. Какой адрес? Ведь в документации указана только data, то есть то, что выводить на шину D0-D7.
Вот эти данные туда и заводишь, но писать их нужно по адресу который будет означать запись именно команды. В таблице колонка D/CX для любой команды изначально в 0, т.е. первый раз мы пишем по адресу 0x60000000, при этом на входе RS будет 0, а дополнительные данные, если таковые имеются, уже пишутся по адресу 0x60040000. Если у команды нет аргументов, то будет просто:
Код:
writeReg(reg);
Где reg(или cmd) - SWRESET(0x01), например. Если аргумента два, то получается:
Я правильно понимаю, смещение адреса команд на 1 влево актуально только для 16 битного интерфейса, а для 8 битного 18 бит так и останется на своем месте(0x60040000)? Дисплей пока не хочет работать. Хочу прочитать ID. Делаю так:
LCD_Write_Com(0x04); //RDDID data = COM_ADR; //Dummy read data = COM_ADR; //ID1 read data = COM_ADR; //ID2 read data = COM_ADR; //ID3 read
Но data не меняется и равно 0x55; Еще пробовала с помощью команд RDID1-RDID3,но все так же. Нужно несколько раз вызывать команду LCD_Write_Com(0x04); //RDDID? При попытке прочтения статуса, тоже выскакивает 0х55; Алгоритм (во вложении) говорит, что вроде бы надо читать подряд. Я неправильно читаю? Может быть читать надо не из COM_ADR, а из DAT_ADR?
Добавлено after 45 minutes 21 second: Если отключить инициализацию FSMC, то значение так и остается 0. Значит ли это, что FSMC работает исправно, просто я неправильно обращаюсь к дисплею?
Добавлено after 1 hour 50 minutes 46 seconds: Дисплей ожил наконец! Проблема была в инициализации. Вот моя инициализация для ST7735R:
По большому счету осталось задать окно(0x2A/0x2B), после чего 0x2C и гонишь сырые байты цветов. У меня вообще унифицированная либа, там все через установку окна делается, потому что дисплеи очень разные, где-то можно задать только координату внутри окна, что быстрее, но на одних дисплеях можно менять одну из координат, на других обязательно обе сразу, на третьих таких команд нет вообще и если хочешь начать вывод в другом месте, то задается окно и отрисовка идет с его левого верхний угла. Еще одна из возможных проблем - это направление вывода при разных ориентациях, для ST7735 это можно настроить через MADCTL, при этом больше ничего делать не придется, что встречается не так и часто. И да, если вдруг будут проблемы с цветами, то возможно придется заполнять LUT(2Dh)...
Есть у меня один проект, который на GCC и IAR собирается. Между ними разница вообще мизер. Даже стартап общий с парой ифдефов получился. Дай, думаю, ещё и Кейл прикручу. Будет, типа полигон для экспериментов. Ага, блин.
1. Притворяется __GNUC__, самозванец чёртов. Ладно, есть дефайны которых нет в GCC, обходим двойной проверкой.
2. Какой-то абсурдный стартап. Зачем он занимается распределением стека и кучи? Это дело линкера. Да ещё с бредовым колбэком из библиотеки, который не даёт переписать его с асма на С.
Да ёлы палы, специально создал чистый проект. Найдите в нём упоминание про __GNUC__. Заодно может кто-то уговорит его мой шаблон прилинковать? Код примера упростил до минимума, смысла в нём не ищите особого, оставил только эффект с которым хотелось бы разобраться.
Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения