Зарегистрирован: Пн апр 25, 2016 15:43:23 Сообщений: 197 Откуда: Россия , Воронеж
Рейтинг сообщения:0
Доброе время , есть у кого датащит на SSD1306 128X32 , в интернете нахожу только на 128X64. И хоть Коды на них совместимы , изображение всегда уже в 2 раза. К примеру попробывал эту статью http://radiokot.ru/articles/77/ кот в 2 раза уже вышел , но с той же длинной . 3-ка вообще похожа на 8.
Не знаю, как у Вас, а у меня на данном экране (да и на любых экранах) изображение вначале пишется в экранный буфер, а перед выводом кадра даю команды сброса указателей. После этого не имею проблем с картинкой. Максимум - на протяжении одного битого кадра (выскочило неожиданное прерывание, затребовавшее SPI себе или ещё что). Попробуйте так же очищать буфер кадра и / или выводить данные в два прохода - заливать экран нулями, сбрасывать указатели, заливать уже правильные данные. По фото - либо картинка съехала, либо не была дописана до конца. Либо что-то где-то ещё в коде.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Не стал плодить темы, пишу сюда. Нарисовалась у меня проблемка с модулем 128х32 I2C. Колупаюсь второй день. Вначале думал проблема в моём коде, но по факту пришел к выводу, что проблема в самом модуле. Итак, по-порядку... МК - ATtiny45. Драйвер USI_TWI интерфейса взят из AN AVR310. Начальные строчки в хидере выглядят так (полный код во-вложении) Спойлер
//USI_TWI messages and flags and bit masks //#define SUCCESS 7 //#define MSG 0
Проблема в следующем. При подаче питания МК стартует и работает, согласно кода. Но при этом на дисплее ничего не отображается. Если произвести внешний сброс микроконтроллера, то все отлично выводится на дисплей. Цепь сброса МК содержит подтягивающий резистор 10 кОм, конденсатор 1 мкФ (установлен на случай медленно поднимающегося питания) и диода. Все согласно даташита. Инициализация дисплея ориентирована именно на индикатор 128х32. Я эти нюансы знаю и даташит имеется. При этом, если подключаю модуль 128х64, то все прекрасно работает. При чем что в режиме 128х32, что в режиме 128х64. Только в режиме 128х32 изображение выводится через строчку и поэтому выглядит растянутым по вертикали. У меня только два соображения: 1) либо схема включения отличается и нет какого-то "важного" элемента на модуле 128х32; 2) либо модуль дефектный сам по себе. Но почему тогда он адекватно и стабильно запускается при внешнем сбросе МК без снятия питания, а при подаче питания, наоборот, не запускается?
Модуль бренда DM с маркировкой OLED-091 Есть адрес http://www.diymore.cc Но инфы я там не нашел. Только ценники на товар.
Предвидя вопросы, добавлю инициализацию для 128х32 Спойлер
Код:
0xAE, // Выключить дисплей
0xD5, // Настройка частоты обновления дисплея 0x80, ///+----- делитель 0-F/ 0 - деление на 1 //+------ частота генератора. по умочанию 0x80 0xA8, // Установить multiplex ratio 0x1F, // 1/64 duty (значение по умолчанию), 0x1F - 128x32, 0x3F - 128x64
0xD3, // Смещение дисплея (offset) 0x00, // Нет смещения
0x40, // Начала строки начала разверки 0x40 с начала RAM
0x20, // Режим автоматической адресации 0x00, // 0-по горизонтали с переходом на новую страницу (строку) // 1 - по вертикали с переходом на новую строку // 2 - только по выбранной странице без перехода
0xA1, // Режим разверки по странице (по X) // A1 - нормальный режим (слева/направо) A0 - обратный (справа/налево)
0xC8, // Режим сканирования озу дисплея // для изменения системы координат // С0 - снизу/верх (начало нижний левый угол) // С8 - сверху/вниз (начало верний левый угол) 0xDA, // Аппаратная конфигурация COM 0x02, // 0x02 - 128x32, 0x12 - 128x64
0x81, // Установка яркости дисплея 0xСF, // 0x8F..0xCF
_________________ "Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Сегодня удалось взять у кума такой же дисплей 128х32. Мой выполнен на плате с черной маской и маркировкой OLED-091, у кума модуль на синей платке. Ну и самое интересное, дисплей на синей плате работает как надо. Все-таки проблема в железяке
_________________ "Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
После включения питания,перед инитом надо подождать...
Сколько ждать то?
у меня так: 1) подаём питание. 2) контроллер инициализируется +64 мс 3) далее инициализация шины USI (для ATtiny45) c медленной скоростью дабы не было нареканий по таймингам. 4) далее инициализация SSD1306 + очистка дисплея. 5) вывод текста ( не принципиально какого)
Так вот, если между пунктами 3 и 4 поставить задержку хоть 1 секунду, то один фиг дисплей ничего не отобразит.
PS. Я не фанат ардуины, но у меня есть китайская UNO чисто для проверки всяких модулей. Я использовал пример из библиотеки Adafruit. Мне повезло, подобный дисплей 128*32 нашелся у кума. Его вариант выполнен на синей плате, мой на чёрной с маркировкой DM. При подключении дисплеев к UNO поведение такое. Дисплей, взятый у кума, после подачи питания на плату UNO сразу выводит картинку. Мой же дисплей в момент подключения питания ничего не отображает. На плате UNO есть светодиод "L" При подаче питания он мигает и вот когда он тухнет, а потом загорается постоянно, то в этот момент мой дисплей начинает отображать картинку. Я не знаю за что отвечает этот светодиод. Но может кому-то из опытных ардуинщиков такое поведение дисплея на плате UNO что-то подскажет?
_________________ "Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
L - обычный светик, подключенный анодом к 13му пину (тот, который 13 на плате ардуины отмечен, а не у МК). Следовательно светится при выводе выского уровня на этот пин. У вас диспл к дуине к каким пинам как подключается? EDIT: Пишут что в новых унах этот пин не напрямую подключен, а через ОУ. Если пин 13 будет болтаться в HIGH-Z (как он и есть по-умолчанию на INPUT), будет светик мигать. Добавьте в setup() строки:
У вас диспл к дуине к каким пинам как подключается?
SDA, SCL, +5V, GND. Я не знаю какие конкретно порты в этой UNO присвоены к SDA, SCL, не разбирался. У меня на китайской плате колодка отдельная разведена для I2C.
NStorm писал(а):
Если пин 13 будет болтаться в HIGH-Z (как он и есть по-умолчанию на INPUT), будет светик мигать.
Да уж больно он целенаправленно мигает. Явно идет какой-то вывод информации. Трогать не буду, мне он не мешает.
Заодно хочу уточнить, кто знает. Что делает этот код?
Хочу понять, каким образом можно сделать RESET контроллера дисплея, если он подключен по шине I2C и вывод RES# подключен к питанию?
_________________ "Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
serg_svd, код адафруктов вроде умеет софтовый I2C, на любых пинах, поэтому и спрашивал. Но по инициализации ниже понятно, что вы используете конструктор для железного i2c.
Цитата:
Трогать не буду, мне он не мешает.
Так сложно 2 строчки для проверки что изменится прописать?
Цитата:
Хочу понять, каким образом можно сделать RESET контроллера дисплея, если он подключен по шине I2C и вывод RES# подключен к питанию?
Ответ в доке к либе или в сырцах можно посмотреть описание конструктора:
Код:
/*! @brief DEPRECATED constructor for I2C SSD1306 displays. Provided for older code to maintain compatibility with the current library. Screen size is determined by enabling one of the SSD1306_* size defines in Adafruit_SSD1306.h. New code should NOT use this. Only the primary I2C bus is supported. @param rst_pin Reset pin (using Arduino pin numbering), or -1 if not used (some displays might be wired to share the microcontroller's reset pin). @return Adafruit_SSD1306 object. @note Call the object's begin() function before use -- buffer allocation is performed there! */ Adafruit_SSD1306::Adafruit_SSD1306(int8_t rst_pin) : Adafruit_GFX(SSD1306_LCDWIDTH, SSD1306_LCDHEIGHT), spi(NULL), wire(&Wire), buffer(NULL), mosiPin(-1), clkPin(-1), dcPin(-1), csPin(-1), rstPin(rst_pin) { }
Видимо для дисплов, где RES# выведен отдельно. Можно смело -1 указать, если его не использовать. Там есть более продвинутый конструктор, можете его попробовать:
Код:
/*! @brief Constructor for I2C-interfaced SSD1306 displays. @param w Display width in pixels @param h Display height in pixels @param twi Pointer to an existing TwoWire instance (e.g. &Wire, the microcontroller's primary I2C bus). @param rst_pin Reset pin (using Arduino pin numbering), or -1 if not used (some displays might be wired to share the microcontroller's reset pin). @param clkDuring Speed (in Hz) for Wire transmissions in SSD1306 library calls. Defaults to 400000 (400 KHz), a known 'safe' value for most microcontrollers, and meets the SSD1306 datasheet spec. Some systems can operate I2C faster (800 KHz for ESP32, 1 MHz for many other 32-bit MCUs), and some (perhaps not all) SSD1306's can work with this -- so it's optionally be specified here and is not a default behavior. (Ignored if using pre-1.5.7 Arduino software, which operates I2C at a fixed 100 KHz.) @param clkAfter Speed (in Hz) for Wire transmissions following SSD1306 library calls. Defaults to 100000 (100 KHz), the default Arduino Wire speed. This is done rather than leaving it at the 'during' speed because other devices on the I2C bus might not be compatible with the faster rate. (Ignored if using pre-1.5.7 Arduino software, which operates I2C at a fixed 100 KHz.) @return Adafruit_SSD1306 object. @note Call the object's begin() function before use -- buffer allocation is performed there! */ Adafruit_SSD1306::Adafruit_SSD1306(uint8_t w, uint8_t h, TwoWire *twi, int8_t rst_pin, uint32_t clkDuring, uint32_t clkAfter) : Adafruit_GFX(w, h), spi(NULL), wire(twi ? twi : &Wire), buffer(NULL), mosiPin(-1), clkPin(-1), dcPin(-1), csPin(-1), rstPin(rst_pin), wireClk(clkDuring), restoreClk(clkAfter) { }
Народ! Спасибо за участие, конечно! Но порой случается невероятное, и код рабочий. Вот так-то! Проблема, как я сразу и написал в пункте 2, была железнячная. Короче! Кто купит подобную плату с маркировкой DM и она у вас не взлетит, то я Вам подскажу решение. Производителем на плате тупо на плате поменяны местами 2 резистора. Один по ноге RES#, второй по IREF. В итоге при подаче питание напряжение на RES# через резистор 560 кОм ну очень долго зяряжает конденсатор и, соответственно, слишком вяло нарастает. Осциллографом не смотрел, но и по тестеру это секунды 3-4 точно. Так что вот так! Перепаял, дисплей заработал как надо
_________________ "Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа." Ро́берт Ше́кли Я правильных ответов знаю мало, поэтому не стесняюсь и много спрашиваю.
Спасибо, статья интересная, но в ней ничего не говорят о 128х32 с 14 pin шлейфом. Описанные модули имеют 30 pin шлейф, который позволяет выбирать интерфейс его распайкой, но вопрос с моим не освещён. скорее всего он только IIC.
CSOND, понятно, я вопрос не так понял. Думал спрашивается бывают ли они SPI версии. Судя по распиновке на 14-пиновом шлейфе не выведен CS#, а значит SPI режим включить нельзя.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения