Перейти к содержанию
    

Выбор драйверов и схемы для управления семисегментным индикатором (возможно FAQ)

Вопрос, вот понравился мне TM1638, хочу подключить десять семисегментных индикаторов (10 разрядов). TM1638 тянет 8 по стандартной схеме подключения, где сегменты цепляются на SEG выходы, а разрядные общие точки (кстати обычно эта схема для общего катода, если правильно понял) цепляются на GRID. Если с точки зрения программы вроде как проблем больших не вижу, регистры вот так представлены:

1638.png.b695c4010c0d2419c5e39bef5b98c94d.png

Да надо перерабатывать каждый байт данных и раскидывать побитно в разные регистры для каждого разряда исходных данных, но в принципе реально. Смущает другое...

Во первых давайте разберемся, что пишут даташиты: 

Segment output, P pipe open-drain output, если перевести на русский я так понял это P-канальный полевик, правда пишут что с "открытым коллектором" или стоком, если брать терминологию полевиков, но если вспомнить, что изначально TM1638 идут для общего катода, то SEG выходы получается должны иметь "открытый исток", то есть выдают вытекающий ток.

Grid output, N pipe open-drain output, тут вроде понятно - N-канальный полевик. цепляется на общий катод "открытым истоком" (коллектором, кому как понятнее), должен выдерживать достаточную токовую нагрузку, тк ток с сегментов суммируется.

Вот выдержка из их даташита для общего анода.

TM1638.thumb.png.edb854d765bfc3a40e1b432e239dd6d5.png

Первое что смутило - токи, для выходов типа SEG указан максимальный ток -50 mA, для выходов типа GRID +200 mA, даже знаком показали вытекающий ток. Так вот вопрос к тем, кто работал с TM1638 - хватает ли этого тока, чтобы запитать целый индикатор? Ведь TM1638 используется без ограничительных резисторов и как он там подбирает ток мне не понятно, может требуется изначально занизить яркость?

Второй момент - питания, драйвер может работать и с 3,3В, но по даташиту всячески намекают брать питание 5В, может ему проще работается так...но для светодиодов типа синих, у которых напряжение включения больше других, говорят может не хватить 3,3В питания, ведь часть потеряется на ключе, плюс для разных светодиодов это значение может быть и побольше...в общем прошу отписаться тех, кто работал например с синими на низком напряжении - стоит или нет оставаться на 3,3В. Почему такой вопрос, потому как если использовать 5В, надо думать про согласование уровня, а это уже следующий вопрос, по нему ниже.

В третьем вопросе хочется обсудить выбор напряжения и схему согласования, в том числе по шине SPI.

Стандартно предлагается подтянуть к питанию ножки STB (chip select), CLK (clock), DIO (объединенная slave input/output) резистором 10кОм (от 1кОм до 10, но рекомендуют 10) и поставить фильтр-конденсатор на 100pF, если с DIO все понятно - там выход открытый коллектор (открытый сток), то по остальным ножкам не понятно зачем. Вопрос: а если я не буду этого делать, какие могут быть ньюансы? Пока это я обсуждаю вариант, если питание одинаковое и у МК и у драйвера. Если брать вариант, где питания МК 3,3В, а у драйвера 5В, начинается веселье: допустим ножки процессора толерантны к 5В (хотя даже если не торлерантны, но имеют защитные диоды, ограничивающие вход/выход питанием+-0,5В) имея подтяжку 10кОм ток будет незначительным и не должен диод вывести из строя, но напряжение на линии не поднимется до 5В, тк максимальное напряжение будет 3,3В за счет схемы с диодом. Что вход что выход, а напряжения включения на входах драйвера 1638 (который кстати тоже имеет защитные диоды судя по диапазону напряжения Logic input voltage -0.5 ~ VDD + 0.5 из даташита)  составляет 0.7 VDD минимум и 0.3 VDD максимум (тут я боюсь опечатка, думаю 0.3 VDD минимум, иначе они не гарантируют вообще выключение, как и включение если брать там максимум - тоже опечатались).

Короче кто работал с TM1638 (может 1637 или аналогичными от этого производителя) как решили вопрос с согласованием напряжения.

Отдельно стоит поговорить о том, как организуется подключение SPI, точнее согласование объединенного DIO и резделных MOSI и MISO?

Стандартно многие предлагают использовать такие схемы для объединения стандартной SPI и трехпроводной (с объединенным I/O):

https://arduino.stackexchange.com/questions/23684/stpm10-using-arduino-spi-communication

enter image description here

https://microdigisoft.com/tm1638-8-bit-button-digital-led-seven-segment-display-module/

TM1638 8-Bit Button Digital LED- Seven Segment Display Module

а так же https://web.archive.org/web/20230418064003/https://os.mbed.com/components/TM1638-LED-controller-80-LEDs-max-Keyboa/ и некоторые ныне недоступные в свободном доступе типа Texas Instr

SPI.png.b3d2215354ce78080a67aa34327781b3.png3_wire_SPI.thumb.jpg.70c196cb52666b902796afc773a6b68d.jpg

Вопрос: что нам дает этот резистор/резисторы? Тем более что у нас на входе DIO будет стоять подтягивающий резистор 10кОм. Есть какие-то особенности работы ножки MOSI в режиме полудуплекса, раз ее так отсекают? Разве она не должна переходить в высокий импеданс?

Изменено пользователем auric

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, auric сказал:

десять семисегментных индикаторов

Ночник, в чёрной-чёрной комнате? 80 мА / ( 10 · 8 ) = 1 мА на сегмент.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Там вроде перебор по сегментам, а не по индикаторам, поэтому скважность около 8 и у катодов (GRID 1...8) допустимый ток раз в 5 больше чем у анодов (SEG 1...10)

TM1637 применял, судя по описанию TM1638 отличается большим количеством индикаторов и наличием входа выбора. Программа была ногодрыг в конечном автомате в обработчике прерывания таймера, работает нормально в комнатных условиях.

Изменено пользователем vov4ick

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только что, vov4ick сказал:

Там вроде перебор по сегментам, а не по индикаторам, поэтому скважность около 8 и у катодов (GRID 1...8) допустимый ток раз в 5 больше чем у анодов (SEG 1...10)

Все верно, но у них же предложена альтернативная схема для 10 индикаторов с общим анодом. Вот с ней не все так просто, потому обсуждаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

23 минуты назад, vov4ick сказал:

перебор по сегментам ... ток раз в 5 больше

20 мА / ( 10 · 8 ) = 250 мкА на сегмент.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, согласен, если все индикаторы зажечь в одном сегменте, будет еле коптить, ещё и яркость будет меняться. И биты по байтам перекладывать неудобно для получения кодов. Проще на том же али купить подходящие индикаторы.

Изменено пользователем vov4ick

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если что так чисто для рассуждений...5 вольт питания на TM1638 попробовал на макетке - работает даже с МК на 3,3В, да в конечном итоге на ножках вместо 5В при высоком уровне 3,4-3,5В, видимо этого достаточно чтобы на границе возможностей связь по SPI шла (5В*0,7=3,5В). Но интересно было и с 3,3 Вольта питания на TM1638 - тоже отработала (причем не заметил уменьшения яркости по сравнению с 5В), правда индикатор зеленый (который новомодный Pure) да красный, синего нет, наверное с ним бы не прокатило. По току пока не готов анализ проводить, тем более он в импульсном режиме, но ничего пока не сгорело )) и режим яркости был на полной.

Схема согласования полнопроводной SPI и трехпроводной с объединенной MOSI/MISO с 1К резистором как указано выше работает, ну видимо как раз защищает резистор от высокого уровня сигнала на MOSI во время приема от Slave. Отработало даже не смотря на то, что выходы slave открытый коллектор с подтяжкой к питанию резисторами 10К.

Особенно мне мозг конечно заколебала особенность 1638 - требует дрыгать ножкой STB как бы синхронизируя команды, то есть перед и после каждой команды, хотя все как бы есть в документации - даже графики и требования по командам, все было, просто это не акцентировано, хотелось попроще, микруха команды жрет, но выдает символы как у "Хищника" на руке были в фильме со Шварцем )), пока не сделал как надо не заработало. Я почему-то думал, что будет достаточно один раз в начале выбрать и в конце отключить CS. Ну и с библиотеками из тырнета чет нифига не совпало, ну это как обычно...

Оставшиеся вопросы:

  • Как обычно организуется выходы Slave Output устройств на шине SPI? Если как открытый коллектор, то требуется подтяжка, не всегда вижу (судя по EEPROM), если занимают высокоимпедансное состояние, то тоже не совсем понятно, а есть ли на входах защитные диоды, короче если кто б накидал свои наблюдения практические, было б может полезно многим, потому как иногда вот рассуждения заходят в сторону согласования питаний итп (ведь MISO сидят все на одной шине) и в итоге как бы хочется учесть особенности всех slave устройств, а не всегда есть понимание, даже несмотря на то, что есть даташит.
  • Кто как согласует линии 5В и 3,3? транзисторами (биполярники или полевики)? С инверсией? Делителями, если с высокой стороны? Или есть более лаконичное решение?
Спойлер

ПыСы: если кому-то ленивому пригодится код для конвертации символов для схемы с 10 разрядами на TM1638...

		for (u8 num=0; num<10; num++)
		{
			if (num < 8)
			{
				for (u8 i=0;i<8;i++)
				{
					if ((symb_data[num] & (1 << i)) != 0)
						disp_data[i*2]|=(1 << num);
					else
						disp_data[i*2]&=~(1 << num);
				}
			}else{
				for (u8 i=0;i<8;i++)
				{
					if ((symb_data[num] & (1 << i)) != 0)
						disp_data[i*2+1]|=(1 << (num-8));
					else
						disp_data[i*2+1]&=~(1 << (num-8));
				}
			}
		}

 

 

Изменено пользователем auric

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 10.12.2023 в 00:57, auric сказал:

Как обычно организуется выходы Slave Output устройств на шине SPI? 

Push-Pull. На ведомых устройствах это всегда вход, так что можно не бояться выставлять на нём любой логический уровень.

 

В 10.12.2023 в 00:57, auric сказал:

Кто как согласует линии 5В и 3,3? транзисторами (биполярники или полевики)?

Если вниз (5 -> 3.3) - резисторный делитель 1к/2к

Если вверх (3.3 -> 5) - Mosfet (тот же N7002) и пара резисторов.

bidirect-mosfet.png

Эпизодически, когда лень заморачиваться с количеством резисторов, ставлю с инверсией:

mosfet-voltageshift.png

В особо замороченых случаях, когда требуется сделать более "силовой" плюс - ставлю пару N + P. N-канальный тянет затвор P-канального к нулю, P-канальный подключает сток к питанию. Из минусов - требуется резистор подтяжка уже для P-канального.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 14.12.2023 в 05:42, AlanDrakes сказал:

В особо замороченых случаях, когда требуется сделать более "силовой" плюс - ставлю пару N + P. N-канальный тянет затвор P-канального к нулю, P-канальный подключает сток к питанию. Из минусов - требуется резистор подтяжка уже для P-канального.

Кажется в таком случае уже сильно проще ставить интегральное решение сот23-6

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, mitya1698 сказал:

Кажется в таком случае уже сильно проще ставить интегральное решение сот23-6

Не, лучше в sot23-5 - 74VHC1GT50

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 минут назад, mitya1698 сказал:

RS0101

Не, этот хуже. С одной стороны это просто проходной полевик, а с другой - более дорогая редкость которую потом хрен найдешь. 74VHC1GT50 можно и по центу найти(по цене транзистора).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Интересное наблюдение за TM1638, команда описанная как "DispMode" код 0x40 видимо у них в даташите лишняя в описании под диаграммами запросов-ответов (хотя может такой даташит попался, в другой уже не было этой строки), короче следом должна идти "Data instruction", если адрес фиксированный шлем команду 0х44, если инкремент - 0x40, что собственно повторяет DispMode (кстати нормально он работает прибавляет ровно 1 к адресу, то есть если работать по регистрам, отвечающим за GRID - разряд/символ, которых 8 штук, то придется не забыть заполнить данные и для нечетных адресов 9,10 сегменты SEG, тк они тоже будут заполняться в перемешку с четными адресами сегментов 1-8, но в моем случае все наоборот было, мне все равно надо было заполнять все адреса, тк у меня сегменты управлялись с GRID, а разряды с SEG для охвата большего числа разрядов - 10).

"Display control command" тоже оказалась не обязательным элементом в цикле, один раз конечно ее надо запустить в начале, но потом в работе, если не менять в процессе работы яркость (не использовать команду "Display control command"), то данные можно вообще упрощенно отправлять одним пакетом "Data instruction" и CS переключать всего один раз в начале и один раз в конце пакета, то есть полностью положиться на DMA. Очень удобно и просто и не затратно практически - не то что делать это "ногодрыгом". Вот такая недокументированная особенность.

Изменено пользователем auric

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...