// Управление семисегментными индикаторами через регистр сдвига 74HC164(ОА)
#include <avr/io.h>
#include <util/delay.h>
// Массив комбинаций сегментов
unsigned char SEGMENTE[] =
{
0x3F, // 0
0x06, // 1
0x5B, // 2
0x4F, // 3
0x66, // 4
0x6D, // 5
0x7D, // 6
0x07, // 7
0x7F, // 8
0x6F // 9
};
unsigned int volt;
// Функция сдвига
void write_byte(unsigned char data)
{
for(unsigned char i = 0; i < 8 ; i++)
{
if((data & 0x80) != 0) // Сравниваем 8-й бит с нулем
PORTB |= (1 << PB0); // DATA 1
else
PORTB &= ~(1 << PB0); // DATA 0
data = data << 1; // Сдвигаем биты
PORTB |= (1 << PB1); // CLK 1
PORTB &= ~(1 << PB1); // CLK 0
}
}
int main(void)
{
DDRB |= (1 << PB3)|(1 << PB1)|(1 << PB0);
PORTB = 0x00;
ACSR |= (1 << ACD); // Выключаем аналаговый компаратор
DIDR0 |= (1 << ADC1D); // Отключаем неиспользуемые цифровые входы
ADMUX |= (1 << MUX0); // Вход ADC1
ADCSRA |= (1 << ADEN) // Разрешение АЦП
|(1 << ADPS2)|(1 << ADPS1); // Предделитель на 64
while(1)
{
// Расчитаем максимальное входное напряжение на делителе
// Umax = Uin*(R1+R2)/R2
// Umax = 5*(100k+10k)/10k = 55V
// Расчитаем коэффициент делителя напряжения
// K = (R1+R2)/R2
// K = (100k + 10k)/10k = 11
// Расчитаем результат преобразования в мВ
// U = (ADC*Uref*K*100)/1024
ADCSRA |= (1 << ADSC); // Начинаем преобразование
while (ADCSRA & (1 << ADSC)){} // Ждем завершения преобразования
volt = ((unsigned long)ADC*5*11*100)/1024;
PORTB |= (1 << PB3); // Выключаем индикатор
write_byte(~SEGMENTE[volt%100/10]); // Выводим 1 разряд
write_byte(~((SEGMENTE[volt%1000/100])|0x80)); // Выводим 2 разряд
write_byte(~SEGMENTE[volt%10000/1000]); // Выводим 3 разряд
PORTB &= ~(1 << PB3); // Включаем индикатор
_delay_ms(100);
}
}
+153 |
1524
79
|
+60 |
4126
87
|
+12 |
1418
43
|
— Да! Как??..
— Потом расскажу..."
;)
ЗЫ: Плюсанул авансом
Или вы с паяльником в одной руке и отвёрткой в другой родились?
Полно курсов робототехники, есть мейкер спейсы, подросток лучше пойдет работать с интересными готовыми модулями и на них уже учится а не собирать мусор с помоек что бы собрать очередное радиао которое никому не нужно.
ну и стоит понимать что это не «поколение» потерянное, а то что людей кому это интересно в целом мало, просто при совках у тебя выбора небыло, ты либо знаешь как прикрутить батарею от машины к магнитофону, либо сидишь без музыки, сейчас же эти знания чуть более чем бесполезны.
Кроме того уровень, в советского старика залить знания о прошивке контроллеров уже тяжело, а молодой человек что собирает роботов, уж очень быстро и просто воспринимает логику работы аналоговых схем.
Кроме того оно и не нужно особо, суть текущего мира в скоростных итерациях продукта, надо быть полным дураком что бы тратить время на то что можно купить в магазине за 3 копейки. Это не глупо, это рационально.
На то они технологии что бы делать все быстро, а не учиться десятками лет узкой ерунде которая устаревает спустя год без активностей.
ps.
Программисты в железо вкатываются как по маслу и такие базовые вещи как собрать что то аналоговое, отрисовать плату, заказать и собрать, зачастую вообще не вызывает проблем, странно преподносить это как какой то дар или опыт зарабатываемый десятилетиями.
С этим у «подрастающего поколения», как в «статусах» — «всё сложно»…
С ULN2003 вроде понятно. Тут им надо было 8 вольт для индикатора, а 74AC вроде как не больше 5-6 может. Да и более универсально если вдруг индикатор будет другим с бОльшим количеством светодиодов в серии с более высоким порогом открытия.
TPIC6B595 вроде как почти аналог 74xx595, но с более высоким напряжением и током. То есть, как раз классно подходит для замены связки 74xx595+ULN2003. Но вроде как TPIC будет слабее когда все каналы нагружены.
Да что там нагрузки? Мелкосхема до 150мА на каждый вывод. А у меня еще и питание на аноды ШИМом.
А так да, ULN помощнее.
китайскийрадиолюбитель. Помотрел, у этой 74AC164 — по каждому выходу 50 мА, можно все 8 диодов сегмента просто в параллель было запитать, тогда и ключи не нужны. Правда на весь корпус тоже ограничение 50 мА, но кого это может остановить… :-)))немецкиекитайские часы с приемником — там большие сегменты были отдельными светодиодами на гетинкасе сделаны и рамочка из пластика с перегородками— Верно ли, что Рабинович выиграл «Волгу» в лотерею? — Все верно. Только не Рабинович, а Иванов. И не «Волгу», а сто рублей. И не в лотерею, а в карты. И не выиграл, а проиграл. ©
А, вообще, не проще ли MAX7219 прикрутить?
А так-то скорость «задвигания» контроллером данных в регистр куда выше минимального времени реакции зрения.
Но лично я, используя эти регистры в схемах с динамической индикацией, не забывал «гасить» индикацию катодными/анодными ключами на время сдвига. Просто на всякий случай и потому что так правильнее... :))
Однако, я практически уверен, что если обозреваемым регистром менять индикацию с помощью реального МК без аппаратного SPI, да еще раз 100 в секунду, какой-то фоновый «шум» определенно будет.
Только здесь индикатор светодиодный, а не электролюминесцентный.
Собственно, отсюда и тривиальный способ «рулить яркостью»: банальный ШИМ, чередуем отправку нужной картинки и «все нули», выбрав требуемые задержки между. Как вариант: отправка через аппаратный SPI, обновление по прерыванию от таймера.
При определенной сноровке метод позволяет рулить яркостью каждого сегмента каждого индикатора независимо.
Вот именно — при сноровке. При сноровке что угодно можно, но лучше был бы самодостаточный компонент, на который можно хоть руками код набить, хоть на 30 МГц. Тут просто на 595 регистр заменить и всё.
Например, в attiny25/45/85 PLL умножителя периферии позволяет тактировать оную аж на 85 МГц. Устанете вглядываться в мерцание. :)
А применение 595 требует дополнительного провода… ну, удачи вам найти лишнюю ногу в вашей 8-ногой тиньке.
Конечно, при сноровке. Вы предлагаете взять устройство, которое позволяет гибко управлять собой — и ухудшить, ограничить его функции… да еще и ценой лишнего контакта на контроллере. Ради чего? Чтобы тем, кому лениво учиться, было комфортнее? :) Сон разума разработчика неизбежно порождает чудовищ.
Будет тупо засветка сегментов. Или ->
-> нога так же будет для гашения задействована.
Вы сейчас что доказываете? Что невозможность применить нормальную статическую индикацию и без стабилизации тока индикаторов есть благо? Искать проблемы и героически их преодолевать? Ну вперёд.
Данные модули были сделаны от безысходности, какие были компоненты, такие и засунули. А не потому, что так круто/хорошо.
Вопрос риторический.
В схеме индикатора есть токоограничивающие резисторы.
О!.. А вот и «подрастающее поколение» подтянулось… :))
Модули были сделаны так, как надо было сделать их разработчикам и заказчикам, в то время и в тех условиях, когда и в каких они разрабатывались. А всё остальное — ваши фантазии и досужий вымысел.
Если бы не было — вы бы придумали теорию, почему это круто и у остальных разработчиков сон разума?
Ясен хрен. Нет деталей — делайте как хотите, вот весь заказ. Или есть, но дороже.
У мальчик закончились все аргументы, кроме личных выпадов? :)
Хотя… их же вроде и не было…
Ничего не могу сказать о вашей (не?)осведомлённости по части хрена, а вот в обсуждаемой теме вы, на мой взгляд, откровенно «плаваете».
Судить о качестве и уровне разработки, ничего не зная о требованиях его заказчика, не представляя себе его целей и мотивов, не понимая, что этой разработке уже десятилетия — и подходя к ней с современными мерками??.. Это попросту безграмотно…
Кто бы говорил про выпады.
Кто судил о качестве разработки? Судят о девайсе (модуле) целиком. Что там с разработкой неизвестно: если их посадили на свалку и сказали «распаяйте что найдёте и сделайте» — то они молодцы. Если у них не было ограничений по элементной базе — то и говорить не о чем.
Регистры с фиксацией тоже не вчера появились
Вот именно. Но вам это не помешало придумать свои «требования и задачи» к этому модулю и осудить их реализацию его разработчиками, исходя из имеющейся сегодня элементной базы и ваших требований… :))
Давайте всё же ближе к теме — о модулях.
У меня тут уже есть один «диагност», не умеющий по существу, зато «знающий», что я вижу или не вижу, чего хочу и что думаю. А я не психотерапевт, да и тематика сайта совсем другая… :)
Итак, вы можете как-то объяснить, что заставляет вас критиковать модули, разработанные очень давно, не вами и не для вас, не под вас и не под ваши задачи, цели и задачи разработки которых вам не известны, за несоответствие их вашим «представлениям о правильном должном» и исходя из доступной сегодня элементной базы?
Отвечать не обязательно — я, в общем-то, это и так уже понимаю из ваших комментариев, только не надо тогда обо мне: это не тема обзора и мнение обо мне местных «экспертов» мне не интересно. Интересно узнать что-то новое, и очень желательно — в контексте тематики обзора, а не «срача в комментах», подменяющего собой доводы и аргументы. :)
Элементная база под них лет 40 как доступна. Какие там ограничения были у разработчиков — меня не волнует, я не их критикую, а модули.
1. Субъективные, ибо существуют только для вас и в вашем воображении. А для заказчика разработки их не было и нет, иначе бы они не выпускались серийно.
2. Их, «недостатков», вообще нет, по уже указанным мной здесь основаниям.
Дайте-ка я «повангую»: от серийного производства и от производства вообще вы довольно таки далеки, верно? Это не «наезд», и даже не ирония, просто вы явно не понимаете, как выбирается элементная база для серийного производства. Как минимум, в числе требований и соображений при её выборе не берётся «самое крутое и самое новое» на момент разработки: это дорого и. как правило, нецелесообразно. Берётся для подобных вещей уже «обкатанное» (это про надёжность и «срок жизни» элементов, и гарантию их доступности в планируемый срок производства разработки), широко распространённое (цена и та же доступность «во времени») и другие подобные соображения.
Вот при разработке этих модулей и выбраны доступные, надёжные и дешёвые последовательно-параллельные регистры сдвига и ключи, которые уже давно выпускались уже тогда, выпускаются сейчас и, думается мне, будут выпускаться ещё не одно десятилетие…
Да, я уже понял, что вам «шашечки». :)
А им надо было «ехать» — и они таки «поехали». Быстро, недорого, надёжно и эффективно — в свете их, а не ваших требований. :)
P.S. Спасибо вам за ваше мнение. Было интересно… :)
Понятно, откуда такая агрессия. Ну ок, бывает.
LOL :))))))))))))
Это не стабилизация, а ограничение. Почувствуйте разницу.
Очевидно здесь только одно: ваши фантазии, беззастенчиво приписываемые другим. Давайте оставим ему право самому толковать свои высказывания…
А вы её чувствуете? Чем именно, если не секрет? ;)
Хотя… С такой-то фантазией — наверняка… :))
Ну, тоже вариант. :))
Не в состоянии возразить, найдя доводы в пользу своего мнения — всегда можно перейти на личности и показать, что вы лучше меня знаете мои мысли и мотивы. :)
Для вас? Очень похоже на то. Но кто с вам виноват-то, что с пониманием у вас «всё сложно», а ваша бурная фантазия, даже в сочетании с переходами на личности, доводов и аргументов заменить не в состоянии?..
А тот самый SPI (который в тиньках USI) тактировать можно извне, программно или от Timer0. При этом, судя по всему, максимально возможная частота передачи составляет менее 8 Mbit.
Итого, обновление 4 цифр — 4-6 мкс. Не так, чтобы и много, но если задача обновлять, например, 100 раз в секунду, неприятное слабое «моргание» выключенных сегментов может быть заметно.
Вопрос с легкостью решается RCD-фильтром сигнала CLK — можно сделать, чтобы сигнал загрузки активировался спустя, например, примерно 100 мкс после последнего импульса сдвига.
Или совсем другой сценарий — выделяем под LOAD отдельный пин, зато на пины DATA и CLK можем еще повесить какие-то функции. Так что тут еще вопрос, что лучше.
И эти модули заявленным требованиям соответствуют на все 100%. Иначе бы они не производились… :))
Но зато вижу описание модулей автором обзора и кучу критиканов, осуждающих сейчас модули, разработанные давно, другими и для других целей, за их сегодняшнее «несоответствие» «потребностям» этих «экспертов». :)
Я же даже не стану и пытаться объяснять разницу между "обсуждать" и осуждать. Разумному — достаточно. Собственно говоря, разумные и не осуждают. Поймёте ли эту разницу вы — мне не особо интересно… :)
Но если первое — обсуждение — вполне нормально и уместно, то второе — осуждение — вызывает недоумение и сомнения как в профессионализме «экспертов», так и, уж простите за прямоту, в уровне их интеллекта.
Это «суждения» того же уровня, как если взять и тоже осудить и раскритиковать семейство Демидовых за технологии выплавки и обработки металла, применявшиеся тогда на их заводах, тыча пальцем в имеющиеся сегодня технологии и оборудование для аналогичных работ…
Это глупо, как минимум.
Только красные светодиоды на зелёные поменял… :)
Судя по всему изделие из разряда «работает — не трогай».
Судя по AT89 этой «разработке» как раз лет 20. С тех пор уже куча копеечных многоканальных LED драйверов со встроенной стабилизацией тока сегмента разработано.
TLC5916/5917
MAX6970
16 каналов
TB62747
TLC59025
Что-то еще было — лень искать. Ну и вроде китайцы какие-то выпускали для своих светодиодных панелей, но это надо искать.
Ну и куча без стабилизации тока — просто ключи на выходе:
BD8378FV-M
BD8388FV-M
NLSF595
зы: висят под телевизором
То же самое от TI: TLC5928
Но гораздо проще в бытовом применении — драйвер матрицы 8х8 светодиодов: MAX7219/MAX7221.
На основе последних продается куча готовых плат на али, среди которых как реально квадратная матрица 8х8, так и 8-разрядный 7-сегментный индикатор. Управляется всё это дело по SPI (3 проводка), легко каскадируется и все сложности динамической индикации и регулировки яркости берет на себя. У себя часто в проектах применяю, ибо очень удобно.
Не 20, больше 30 точно.
У меня в древнем радиометре РГБ07 стоят советские КЛЦ402, там цепочка из двух последовательных СД на сегмент. В отличие от однодиодных АЛС, эти долго не живут, хотя допустимый ток через них не превышен. А поскольку собрано все на дискретных (!) элементах, проще иногда менять сами индикаторы. И аналогов не нашел — раритет, однако. Пробовал уменьшить ток на 30% — все равно дохнут. А больше уже яркость страдает, и так они тускловаты.
Совсем народ обленился!.. :))
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.