Вообщем сделал вот такую штуку: http://wiki.amperka.ru/дисплеи-и-индикаторы:7-сегментный-индикатор А индикаторы у меня с общим анодом, горят наоборот(например если нужна 1, горят все сегменты кроме b и c). Есть мысль поставить на каждый сегмент лог. элемент НЕ, но эт бред. Можно ли программно решить?
В чем разница катод или анод? Такое именно программно и решается, причем легко. В первом случае все катоды включены и по одному по очереди выключаются, при этом на анодах выставляются плюсами горящие сегменты, во втором случае все точно наоборот. Я не знаю как у вас в программе все организовано, у меня вот и то и другое записано в виде двоичных чисел, чтобы заменить анод на катод я просто инвертирую их. Причем, если лень переписывать все нули на единицы и наоборот, то можно добавить инвертацию перед забросом в функцию отображения. Опубликуйте скетч, посмотрим что можно сделать.
Спойлер: Скетч Код (C++): #define CLOCK_PIN 2 #define RESET_PIN 3 /* * Функция 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); // Обнуляем счётчик при старте, чтобы он не оказался // в случайном состоянии resetNumber(); } void loop() { // Получаем количество секунд в неполной минуте // с момента старта и выводим его на индикаторы showNumber((millis() / 1000) % 60); delay(1000); }
Это скетч не просто для индикатора, а для драйвера индикатора. Вы его используете? Может есть смысл отказаться от этих костылей и сделать нормальное подключение через регистры например? Как посоветовали в первом же ответе.
Если вы используете CD4026, то программно ничего сделать нельзя. Если бы использовался сдвиговый регистр, то все делалось бы простой инверсией сегментов в программе.
Да можно что угодно сделать. Один драйвер на один разряд (с общим катодом). Часы те же самые запросто. Но проще и правильнее использовать многоразрядные индикаторы. с динамической индикацией.
Если я правильно понял вопрос, то отвечаю: для подключения 4х разрядного индикатора потребуется 7 пинов для цифр и 4 для разрядов, не считая точек и двоеточий если они нужны. То есть минимум 11. Если индикатор имеет больше разрядов или их два например, то считайте сколько еще нужно будет добавить. Не всякий МК столько ног имеет. Для управления через регистр же потребуется всего 3 пина, независимо от кол-ва разрядов. Во всяком случае пока хватит скорости для отображения без дрожания, но это несколько десятков разрядов при правильно написанной программе.
У меня примерно такой же валяется (только без перламутровых пуговиц, двоеточия), всё ни как применение не найду.