AlexKeisy 0 19 декабря, 2021 Опубликовано 19 декабря, 2021 · Жалоба Для выдачи команды на дисплей, нужно притянуть ножку D/C (Data/command) к нулю, отправить байт, отпустить ногу, потом отправить четыре байта данных, потом снова притянуть D/C отправить байт отпустить и снова четыре байта...хотелось бы данные отправлять по SPI (DMA) ну и заодно как-то по счетчикам от CLCK или по каким то эвентам SPI или DMA дергалась нога D/CДисплей по даташиту проверяет ногу D/C во время приема восьмого бита.можно ли как-то это доверить таймерами, счетчикам STM32 или аппаратно, на микросхемах ваять?Если на микросхемах, то какие серии микросхем стандартной логики стабильно работают до 100МГц (это я уж немного слихачил на запас, реально 50МГц) при 3.3V.?Как там вообще эти микросхемы подбираются? Есть какой толковый справочник? (я конечно понимаю, что сейчас это моветон интересоваться микросхемами стандартной логики ЧИп STM32F407VG если это важно, но хотелось бы чтобы решение как-то ложилось и на другие контроллеры STM32.Спасибо заранее! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 134 19 декабря, 2021 Опубликовано 19 декабря, 2021 · Жалоба 52 минуты назад, AlexKeisy сказал: Для выдачи команды на дисплей, нужно притянуть ножку D/C (Data/command) к нулю, отправить байт, отпустить ногу, потом отправить четыре байта данных, потом снова притянуть D/C отправить байт отпустить и снова четыре байта... Вы уверены, что правильно поняли описание? Обычно контроллер дисплея проверяет ногу D/C в конце приема первого байта и дальше не обращает на нее внимания до первого байта следующей посылки, ибо все байты этой посылки являются командой или данными. Таким образом ее можно держать притянутой к нулю во время всей посылки команды, то есть выставлять в нужное состояние перед выставлением CS в ноль и дальше не трогать до выставления CS в ноль на следующей посылке. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexKeisy 0 19 декабря, 2021 Опубликовано 19 декабря, 2021 · Жалоба Мдааа... оказалось время фиксации D\C у разных дисплеев разное. ST7735 проверяет при первом бите. SSD1306 по последнему биту. Остается одно: для отправки байта команды точно должно быть включено, после отправки байта, до отправки следующего точно должно быть выключено. Возможно есть и такие дисплеи что поступают как указал Сергей Борщ. но чипселект тоже не хотелось бы дергать при каждой команде, это проблем не снимает, а только переносит на другую ногу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexKeisy 0 19 декабря, 2021 Опубликовано 19 декабря, 2021 · Жалоба Но пойду проверю на чипах, может это что-то даст... Проверил ST7735, к следующему байту надо D/C снимать иначе следующий байт тоже считает командой а ждет данные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 42 19 декабря, 2021 Опубликовано 19 декабря, 2021 · Жалоба 1 час назад, AlexKeisy сказал: Для выдачи команды на дисплей, нужно притянуть ножку D/C (Data/command) к нулю, отправить байт, отпустить ногу, потом отправить четыре байта данных, потом снова притянуть D/C отправить байт отпустить и снова четыре байта... Если обмен данными по SPI организован вами с тактированием слейва по ChipSelect (а иначе случайный пропуск единственного бита приведет к смещению форматного окна), то вы можете эту же линию CS завести на счетный вход одного из таймеров, запрограммировав его считать до 5-ти (ARR=5) и выдавать меандр со скважностью 1:4 (CCR1=4). Тогда на выходе этого таймера в течение 4-х байт будет низкий уровень, а на 5-ом высокий. Это у меня идея такая, а конкретно с нужными вам тактами разбирайтесь сами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexKeisy 0 19 декабря, 2021 Опубликовано 19 декабря, 2021 · Жалоба Спасибо! Все верно, только наверное оговорочка не CS а CLCK. Это один из возможных вариантов наверное, но придется пробрасывать физ линию между SPI.CLCK до ETR таймера. А нельзя евент от SPI или DMA как то логически пробросить на вход таймера? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 42 19 декабря, 2021 Опубликовано 19 декабря, 2021 · Жалоба 10 минут назад, AlexKeisy сказал: Все верно, только наверное оговорочка не CS а CLCK. Нет, не оговорка. CS тактирует байты, а CLCK - биты. Но можно было бы и к битам счетчик привязать, т.к. их число четко привязано к байтам в отношении 8:1. Я же хотела байты таймером считать, а не биты. 10 минут назад, AlexKeisy сказал: А нельзя евент от SPI или DMA как то логически пробросить на вход таймера? На STM32 нельзя - его таймеры логические события не воспринимают - только внешние сигналы. А вот на ATxmega такое можно было бы сделать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexKeisy 0 19 декабря, 2021 Опубликовано 19 декабря, 2021 · Жалоба CS выбирает для работы нужный чип из всех кто сидит на SPI. по каждому байту его дергать не стоит... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 42 19 декабря, 2021 Опубликовано 19 декабря, 2021 · Жалоба 12 минут назад, AlexKeisy сказал: CS выбирает для работы нужный чип из всех кто сидит на SPI. по каждому байту его дергать не стоит... Положено на каждый байт дергать :). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 231 19 декабря, 2021 Опубликовано 19 декабря, 2021 · Жалоба 3 часа назад, AlexKeisy сказал: ЧИп STM32F407VG если это важно, но хотелось бы чтобы решение как-то ложилось и на другие контроллеры STM32. Какой МК - не особо важно, а вот какой контроллер LCD - важно. Забыли указать. Вообще выглядит сомнительным такой алгоритм, как описали. Может не правильно поняли? 56 минут назад, Xenia сказал: Положено на каждый байт дергать :). Бывает по-разному. Но чаще как правило - CS активен весь передаваемый по SPI кадр. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 42 19 декабря, 2021 Опубликовано 19 декабря, 2021 · Жалоба 4 минуты назад, jcxz сказал: 1 час назад, Xenia сказал: Положено на каждый байт дергать :). Бывает по-разному. Но чаще как правило - CS активен весь передаваемый по SPI кадр. Так это же очевидно! А между кадрами? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexKeisy 0 19 декабря, 2021 Опубликовано 19 декабря, 2021 · Жалоба 20 минут назад, jcxz сказал: Какой МК - не особо важно, а вот какой контроллер LCD - важно. Забыли указать. Вообще выглядит сомнительным такой алгоритм, как описали. Может не правильно поняли? Бывает по-разному. Но чаще как правило - CS активен весь передаваемый по SPI кадр. Алгоритм точно рабочий, работающий, хочется сделать быстрее и проще в программировании. У конечного автомата количество состояний хочется оптимизировать, чтобы снизить накладные расходы. Потому и не назвал дисплей, потому что знаю точно, что нужно отправить по SPI и как при этом дергать ногу D/C (хотя тут тоже как оказалось есть непринципиальные нюансы). И эта последовательность работает для трех разных дисплеев точно. Интересует как в контроллере сделать то, что требуется. Желательно как то eventы SPi переправить на таймер, может есть костыль какой? Пока прорисовывается вариант с физическим пробросом SPI.CLCK->TIMER.ETR. костыль конечно, но лучше чем микрухи еще городить при таком жирном проце. Но с микрухами появляется возможность в дисплеи заливать по параллельному интерфейсу, что быстрее (те что у меня дисплеи могут по SPI работать 36МГц, а по параллельной шине 16 бит 18МГц, что существенно быстрее) и можно для больших дисплеев или меньших камней рассматривать. Но тут я столкнулся с тем, что не нашел микруху-счетчик/делитель который работает выше 25МГц. Соседние по индексу микросхемы защелки с последовательным входом параллельным выходом есть(74hc595d к примеру), всякие разные есть, а счетчиков/делителей нет. нипанимаю :), опыта в этом ноль, один интузиазизм. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 20 декабря, 2021 Опубликовано 20 декабря, 2021 · Жалоба 13 hours ago, AlexKeisy said: Но тут я столкнулся с тем, что не нашел микруху-счетчик/делитель который работает выше 25МГц. Для 100MHz серия 74HC не подходит. Попробуйте например 74LVC (74LVC161) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexKeisy 0 20 декабря, 2021 Опубликовано 20 декабря, 2021 (изменено) · Жалоба О Спасибо! теперь бы еще найти где купить :))), чет для любителей кроме чип и дип поштучно никто не предлагает или доставка по конским ценам... Поискал по каталогам Lv серию, вообще отбили желание :))) Изменено 20 декабря, 2021 пользователем AlexKeisy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 23 декабря, 2021 Опубликовано 23 декабря, 2021 · Жалоба On 12/20/2021 at 9:59 PM, AlexKeisy said: О Спасибо! теперь бы еще найти где купить https://www.electronshik.ru Около 130р в розницу Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться