Купил для своего Ардуино, думал то же самое что стандартный сегментный. Но только дома заметил, что у него на две цифровые панели все те же 10 ног. И никакой маркировки. Как им пользоваться? Как найти описание?
Вот и весь фокус: Сначала проверить он с общим анодом или общим катодом, а потом прочитать про динамическую индикацию
Надо вбить в поисковике "<буковки на корпусе> Datasheet", тк распиновка может отличаться от приведенной мною. Если не найдется, то вызванивать тестером в режиме проверки диода. Когда "угадаете", у Вас загорится сегмент.
Этот способ мне знаком, проблема в том, что маркировки нет вообще никакой. Распиновка совсем не такая как на схеме, нашел ноги методом научного тыка. Теперь главный вопрос: как на подобном индикаторе создать независимое отображение цифр, если первый и второй разряд отличается только землей. То есть сейчас я могу сделать работу первого или второго разряда или синхронную работу обоих, а независимо как?
Если общая у каждого разряда там "земля", то подавать на общий контакт активного разряда низкий уровень, на общий контакт другого - высокий. Выставлять на остальные контакты уровни в соответствии с ожидаемым состоянием (вкл/выкл) сегментов разряда индикатора, подержать сколько-то микросекунд. Потом все на низкий уровень, и быстро поменять уровни на общих контактах разрядов, после чего выставить уровни для сегментов второго разряда, подержать сколько-то микросекунд и опять все на низкий уровень. И так быстро по кругу. Для глаза сегменты не будут успевать погаснуть, в результате будет устойчивая индикация. Конкретнее смотреть в сети. Например, тут http://malatok.at.ua/forum/36-50-1 Только, насколько я понимаю, токоограничивающие резисторы лучше не на общий контакт, как на схеме по ссылке, а на контакты сегментов.
Спасибо, принцип понял, попробую сделать счетчик от 0 до 99. Даже не знаю что проще, так или два независимых индикатора со сдиговыми регистрами, например. Но идея сама по себе интересная.
На основе примера "Секундомер" со штатным индикатором сделал секундомер с двухразрядным от 0 до 99 при помощи динамической индикации. Задержка в изображении 8мс, при бОльшей цифры трясет, но фантомные свечения сегментов в соседних разрядах видны при любом значении. В принципе использовать можно, правда большой экономии в пинах при таком методе нет, используется 10 штук если вместе с точкой.
Сейчас вижу, что через регистры было бы проще и быстрее. Код (Text): #define FIRST_SEGMENT_PIN 2 #define SEGMENT_COUNT 7 #define DOT_PIN 10 #define DIG_1 12 #define DIG_2 11 byte numberSegments[10] = { 0b00111111, 0b00001010, 0b01011101, 0b01011110, 0b01101010, 0b01110110, 0b01110111, 0b00011010, 0b01111111, 0b01111110, }; void setup() { for (int i = 0; i < SEGMENT_COUNT; ++i) pinMode(i + FIRST_SEGMENT_PIN, OUTPUT); pinMode(DOT_PIN, OUTPUT); pinMode(DIG_1, OUTPUT); pinMode(DIG_2, OUTPUT); digitalWrite(DIG_1, 1); digitalWrite(DIG_2, 1); } void loop() { int number2 = (millis() / 1000) % 10; int number1 = (millis() / 10000) % 10; int dot = (millis() / 500) % 2; digitalWrite(DOT_PIN, dot); digitalWrite(DIG_1, 0); digitalWrite(DIG_2, 1); indication (number2); delay (8); digitalWrite(DIG_1, 1); digitalWrite(DIG_2, 0); indication(number1); delay (8); } // вывод цифры на индикатор void indication (int number) { int mask = numberSegments[number]; for (int i = 0; i < SEGMENT_COUNT; ++i) { boolean enableSegment = bitRead(mask, i); digitalWrite(i + FIRST_SEGMENT_PIN, enableSegment); } }