Вопрос такой. Для одного из проектов понадобились два 7-сегментных индикатора, они у меня были, используя туториал с сайта, соединил микросхемы-драйвера и индикаторы. В качестве теста скопировал программу из туториала. И тут начались странности. Я много раз перепроверял соединения - все верно, распиновка соблюдена. Но почему-то а) Некоторые цифры отображаются странно (см. фото) б) Отсчет идет от 60 вверх, до 09 (или так и должно было быть?), затем по-новой, но почему-то в первый раз после 63 идет сразу 65 В чем может быть дело? Заранее спасибо.
@sempol451 Проблема точно в подключении, в неправильной распиновке. Кропотливо, но ничего не поделаешь — нужно искать @Mitrandir — вы читер Будет работать, но в зависимости от количества подожжённых сегментов, их яркость будет разной. Чем больше, тем тусклее. Это «болезнь» всех дешёвых китайских часов.
Я так же собирал это по уроку с вики амперки. Сперва собрал с 1 индикатором чтобы детально разобраться в принципе работы, ведь когда один "щелкает" нормально второй подключить уже не проблема. Посему могу порекомендовать сперва аккуратно собрать с 1 индикатором. Так же порекомендую с увеличительным стеклом рассмотреть все резисторы, какие то могут задевать ножками в такой мешанине что тоже может сказаться. Вот моя схема, только я reset не подключал так как собирал просто ради понять как работает а не для дела Все "щелкало" отлично.
Спасибо всем! Проблема, конечно же, оказалась на моей стороне. Первый индикатор был подключен совершенно правильно, а вот на втором я умудрился перепутать порядок перехода с 5 на 6 - то есть 6-м контактом у меня чудесным образом оказался не крайний правый, а крайний левый, так что все контакты верхнего ряда были подключены наоборот. Впредь постараюсь быть повнимательнее
Подскажите, вот пытаюсь подружить ардуину с таким led дисплеем: сбоку написано: CC56-12GWA Тут получается так. Контакты 4 для цифр одинаковые, а земли для каждой цифры разные. В итоге при помощи драйвера CD4026 получилось задействовать только одну цифру, либо если земли объединить везде показываются одни и те же цифры. Попробовал подключить к разным землям два драйвера, но так как контакты сегментов общие, получилась каша , так как земли снова объединились. Может посоветуете способ включения при помощи 4х CD4026 или наверняка есть какой другой драйвер...
Если не жалко пинов, можно и вовсе без драйвера обойтись, а если их просто нет свободных, тогда через расширитель I/O на I2C.
Мне не жалко пинов, но вот проблема в том что я не могу заставить показывать разные цифры из-за одинаковых контактов к сегментам... По поводу I/O на I2C пока незнакомые для меня выражения. Буду изучать.
Сегменты нужно включать по очереди. Выключили текущий сегмент - набрали новую цифру - включили следующий сегмент - подождали - повторили сначала.
Теоретически, да, но если переключать достаточно быстро, но глаз этого не будет замечать. На инерционности глаза держится вся динамическая индикация. Мы ежедневно наблюдаем ее вокруг и даже не догадываемся.
Хорошо. Спасибо, буду пробовать... Я так понимаю, это захватит громадное процессорное время ну чтож сначала надо сделать, что бы хотя бы заработало!
расширитель портов на шинах типа spi и i2c интересное дело но для использования их для семисегментных индикаторов довольно дорогое удовольствие, стоит обратить внимание на микросхемы сдвиговых регистров (например типа нс164 или нс595 последняя еще умеет в третьем состоянии быть)сэкономите ноги мк +выходы микросхем более "мощные"чем выводы микроконтроллера которые можно "поджечь" даже индикаторами как у вас в схеме если не ограничивать ток протекающий через ногу мк.Управлять этим добром непросто легко а очень легко эти микра есть и дип корпусах...воткнуть в макетку без проблем + легко купить и стоят ведро 5 копеек...про схемы подключения прогуглите и всё найдёте народ их юзает давно и много + гуглподсказка для прочтения про динамическую индикацию вам будет весьма полезна...(еще посоветую посмотреть вам с сторону программы PROTEUS это симулятор электронных схем причем он неплохо симулирует мк всякие авр который торчит у вас в ардуинке так же тама есть ети шифт регистры каторые я советовал вам + есть и различные индикаторы,семисегментных там куча.Набросав там схему и подцепив к мк программу вы уже сможете не делая физически схему примерно посмотреть и оценить как это у вас будет работать. Естественно собранная в железе схема это круто но перед этим не мешает посмотреть на неё в симуляторе на стадии проектирования и отладки именно логики работы программы мк, сама программа тоже очень известна хелпы и даже на русском много почерпнете много полезного из неё)
На всякий случай напомню, что лицензия на Proteus стоит от $480 до $6600, в зависимости от варианта, и работает всё это добро исключительно под Windows.
Сегодня я понял что если в пин записать LOW, то это будет "-", а если записать HIGH, то это будет "+". Раньше думал что если записать LOW то там вообще не будет никакого сигнала. Сегодня реализовал при помощи драйвера CD4026 и переключения "-" отображение нескольких цифр на этом LED дисплее: Посмотреть вложение 628 Посмотреть вложение 629 Всё получилось! Но тёмные сегменты начинают светиться при больших числах. У меня в коде надо как то выводить необходимый разряд числа. Подскажите? А то слишком много лишних холостых переключений посылается на драйвер... Код (C): #define CLOCK_PIN 52 #define RESET_PIN 50 #define a_PIN 39 #define b_PIN 37 #define c_PIN 35 #define d_PIN 33 int i = 1; int j = 1; /* * Функция resetNumber обнуляет текущее значение * на счётчике */ void resetNumber() { // Для сброса на мгновение ставим контакт // reset в HIGH и возвращаем обратно в LOW digitalWrite(RESET_PIN, HIGH); digitalWrite(RESET_PIN, LOW); } /* * Функция showNumber устанавливает показания индикаторов * в заданное неотрицательное число `n` вне зависимости * от предыдущего значения */ void showNumber(int n) { // Первым делом обнуляем текущее значение resetNumber(); // Далее быстро «прокликиваем» счётчик до нужного // значения while (n--) { digitalWrite(CLOCK_PIN, HIGH); digitalWrite(CLOCK_PIN, LOW); } } void setup() { pinMode(RESET_PIN, OUTPUT); pinMode(CLOCK_PIN, OUTPUT); pinMode(a_PIN, OUTPUT); pinMode(b_PIN, OUTPUT); pinMode(c_PIN, OUTPUT); pinMode(d_PIN, OUTPUT); // Обнуляем счётчик при старте, чтобы он не оказался // в случайном состоянии resetNumber(); } void loop() { for (j = 0; j <= 500; j++) { digitalWrite(c_PIN, LOW); showNumber(i); delay(2); digitalWrite(c_PIN, HIGH); digitalWrite(b_PIN, LOW); showNumber(i/10); delay(2); digitalWrite(b_PIN, HIGH); digitalWrite(a_PIN, LOW); showNumber(i/100); delay(2); digitalWrite(a_PIN, HIGH); } i++; }
Поменяйте местами переключение разряда и набор цифры так, чтобы функция ShowNumber() вызывалась при выключенном разряде. Код (C): digitalWrite(c_PIN, HIGH); showNumber(i); digitalWrite(c_PIN, LOW); delay(2); digitalWrite(c_PIN, HIGH); }
Сейчас попробую, однако вот так сделал, и сейчас сколь угодно большое число показывается одинаково. Код (C): for (j = 0; j <= 10; j++) { digitalWrite(c_PIN, LOW); showNumber(i%10); delay(4); digitalWrite(c_PIN, HIGH); digitalWrite(b_PIN, LOW); showNumber(i/10%10); delay(4); digitalWrite(b_PIN, HIGH); digitalWrite(a_PIN, LOW); showNumber(i/100%10); delay(4); digitalWrite(a_PIN, HIGH); } А вот конечный вариант вывода. Большое спасибо! Сейчас вообще всё чётко получилось! Код (C): for (j = 0; j <= 100; j++) { digitalWrite(c_PIN, HIGH); showNumber(i%10); digitalWrite(c_PIN, LOW); delay(2); digitalWrite(c_PIN, HIGH); digitalWrite(b_PIN, HIGH); showNumber(i/10%10); digitalWrite(b_PIN, LOW); delay(2); digitalWrite(b_PIN, HIGH); digitalWrite(a_PIN, HIGH); showNumber(i/100%10); digitalWrite(a_PIN, LOW); delay(2); digitalWrite(a_PIN, HIGH); }
А я, когда делал подключение 7-сегментного индикатора по статье Вики - чуть вывих мозга не получил. Подключаю правильно - пропадает питание на ардуинке. ДООООЛГО искал - где КЗ. Оказалось - амперка прислала бракованную макетку! В нижнем ряду шина (-) и шина (+) - коротили. Пока я это выяснял - смог заставить работать этот индикатор по другой схеме включения. Хотел уже писать в Амперку, чтобы правили статью в вики, и нашел у себя глюк. А кто бы подумал! КЗ на макетке изначально! ))))