Двухразрядный суммирующий счетчик схема
Союз Соввтокив Социалистичеокив РеспубликЗависимое от авт. свидетельства1236799/18 влено 25,7.1 присоединением заявкиМПК б 061 1 риоритетОпубликовано 12,Х 1 ата опубликования Комитет по делам изобретений и открытий ори Совете Министров СССРвторы обрете А. А Дроздо Киселев сударствениое союзное конструкторско-технологическое бюро по про ектированию счетных машин вител ЫЙ ДВУХРАЗРЯДНЪЙ СУММАТОР В КОДЕ 2 из 5 Изобретение относится к области вычислительной техники и предназначено для сложения и вычитания чисел, представленных в коде 2 из 5.Известен десятичный одноразрядный сумматор в коде 2 из 5, содержащий преобразователи кодов слагаемых, матрицу сложения размером 5)(5 элементов, схему коррекции результата, схему переносов, Выходы преобразователей кодов слагаемых соединены со входами матрицы сложения и схемы коррекции результата, выходы матрицы сложения соединены со входами схемы коррекции и через схему переносов с преобразователямп кода первого слагаемого, Сложение (вычитание) одного разряда выполняется за четыре такта,Для быстродеиствия в предлагаемом сумматоре схема местного управления соединена с преобразователями кодов младшего разряда первого и второго слагаемых и с преобразователем кода сгаршего разряда второго слагаемого, выходы схемы переноса младшего разряда соединены со входами схем ,выдачи старших разрядов суммы, выходы схемы переноса старшего разряда соединены с управляющими входами преобразователя кода младшего разряда первого слагаемого; кроме того, в качестве элементов матрицы, соответствующих каждому одинаковому результату сложения, использованы многовходовые элементы.Это позволяет выполнять сложение или вычитание в обоих разрядах сумматора за три такта, а также позволяет уменьшить количе.ство элементов в матрице сложения до минимально возможного (до девяти элементов).Схема сумматора изображена на чертеже, Он содержит схему местного управления 1,преобразователи кодов 2 в соответственно младшего разряда первого слагаемого, младшего разряда второго слагаемого, старшего разряда первого слагаемого и старшего разряда второго слагаемого, матрицы сложения б, схемы коррекции 7, схемы переноса 8 и 9 младшего и старшего разрядов, шифратор И и схемы 11 выдачи старшего разряда суммы.Сумматор работает следующим образом.Сигналы, соответствующие командам сложить или вычесть, поступают через схему местного управления на управляющие входы преобразователей кодов 2, 3 и б. Преобразователи 2 — б расшифровывают подаваемые на них слагаемые в код 1 из 10 и посылают их на матрицы сложения б, Одновременно указанные преобразователи посылают сообщения в схемы коррекции 7 о четности или нечетности прошедших через них слагаемых. Матрицы сложения б выполняют суммирование или ЗО вычитание слагаемых, Сигналы с матриц сло.259480 Подписноебретенийв СССРд. 4/5 Типография, пр. Сапунова, 2 жения поступают на схемы коррекции 7 и на схемы, переноса 8, 9. Откорректированный результат суммирования младших разрядов слагаемых поступает из схемы коррекции в шифратор 10, с выходов которого снимается младший разряд суммы. Сигналы со схемы переноса младшего разряда 8 подаются на схемы 11 выдачи старшего разряда суммы. Откорректированный результат суммирования старших разрядов слагаемых поступает из схемы коррекции также в схемы 11 выдачи старшего разряда суммы, Одна из схем 11 зашифровывает старший разряд суммы в код 2 из 5, другая — в код 2 из 5 с добавлением единицы. Сигналы из схемы коррекции 7 старшего, разряда и из схемы 11 старшего разряда суммы поступают на схему переноса 9 старшего разряда. Выходные сигналы последней управляют преобразователем кодов 2. Предмет изобретения 1. Десятичный двухразрядный сумматор вкоде 2 из 5, содержащий схему местного управления, .преобразователи кодов слагаемых, матрицы сложения, схемы коррекции, шифратор, схемы выдачи старших разрядов суммы, схемы переноса младшего и старшего 5 разрядов, отличающийся тем, что, с цельюувеличения быстродействия, схема местного управления соединена с преобразователями кодов младшего разряда первого и второго слагаемых и с преобразователем кода старшего разряда второго слагаемого, выходы схемы переноса младшего разряда соединены со входами схем выдачи старших разрядов суммы, выходы схемы переноса старшего разряда соединены с управляющими входами преобразователя кода младшего разряда первого слагаемого. 2, Сумматор по п. 1, отличающийся тем, что, с целью упрощения матрицы сложения, в качестве элементов матрицы, соответствующих каждому одинаковому результату сложения, использованы многовходовые элементы. Составитель В. В. Игнатущенко актор Андреева Техред 3, Н, Тараненк Корректор С. М. Сигалаказ 855/17 Тираж 480ЦНИИПИ Комитета по делам изи открытий при Совсте МинистрМосква Ж, Раушская наб
Государственное союзное конструкторско технологическое бюро проектированию счетных машин
Г. Н. Киселева, А. В. Дроздов, В. А. Андреев
Как работает электромагнитное реле
Электромагнитные реле состоят из обмотки, якоря и переключателей. При возникновении тока в обмотке, она притягивает к себе якорь, а тот переводит переключатели из одного состояния в другое. На картинке выше показано как выглядят реле, использованные в АЛУ, а на картинке ниже – назначение их контактов.
Эти реле имеют по 4 переключателя. Когда ток по обмотке не течет, переключатели соединяют между собой контакты 1-9, 2-10, 3-11 и 4-12. Если же на обмотку подать напряжение (в моем случае это 24В), то положение переключателей изменится на 5-9, 6-10, 7-11, 8-12.
Для того чтобы рисовать схемы компонентов компьютера, я использовал те же обозначения реле, что и в документации к HPRC :
Здесь нарисован только один из проводников, подведенных к катушке, потому что второй всегда заземлен, а значит обозначать его на схеме нет смысла. Так как я использовал реле со светодиодными индикаторами включения, это однозначно определило то, какой контакт катушки используется как «+», а какой – как «–».
Семисегментный индикатор | Программирование микроконтроллеров
Семисегментный индикатор ввиду своей красочности часто применяется для отображения информации, например значения температуры, величины напряжения либо тока. В этой статье мы продолжаем изучать программирование микроконтроллеров и уже научимся подключать к микроконтроллеру ATmega8 простейший одноразрядный семисегментный индикатор, и будем отображать на нем цифры.
Давайте начнем все по порядку. Для начала рассмотрим, что собою представляет семисегментный индикатор. Внешне он имеет различные размеры. Главным идентификатором служит высота цифры, которая в справочниках приводится в дюймах. Высота цифры имеет стандартный ряд значений, который приводится в дюймах.
По количеству разрядов различают одно-, двух-, трех-, и четырехразрядные индикаторы. Бывает и более разрядов, но они встречаются довольно редко.
Семисегментный индикатор. Принцип работы семисегментного индикатора
Любой семисегментный индикатор обязательно состоит из семи сегментов. Отсюда и происходит его название. Каждый сегмент – это обычный отдельный светодиод. Мощные семисегментники могут содержать в одном сегменте несколько, как правило, последовательно соединенных светодиодов.
Кроме того в корпусе помимо сегментов находится еще и точка или запятая или другой символ.
С помощью семи сегментов можно изобразить десять цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 и некоторые буквы, как латиницы, так и кириллицы.
Светодиоды всех элементов соединяются одноименными выводпми между собой или анодами, или катодами. Поэтому разделяют семисегментные индикаторы с общим анодом и общим катодом.
Вне зависимости от количества разрядов и размеров цифр каждый сегмент имеет название в виде одной из первых букв английского алфавита: a, b, c, d, e, f, g. Точка обозначается dp.
Для того чтобы засветить один из светодиодов семисегментного индикатора с общим анодом следует на общий вывод (анод) подать «+», а на соответствующий отдельный вывод – «-» источника питания.
Если применяется общий катод, – то наоборот – минус подается на общий, а плюс на отдельный вывод.
Чтобы отобразить на индикаторе цифру или букву следует засветить несколько сегментов. Например, для отображения единицы 1 задействуются сегменты b и c. При отображении восьмерки 8 задействуются все символы от a до g. Пятерка получается из таких символов: a, c, d, f, g.
Как подключить семисегментный индикатор к микроконтроллеру
Теперь рассмотрим, как подключить семисегментный индикатор к микроконтроллеру ATmega8. Подключим его к порту D. Данные порт имеет все восемь бит, что очень удобно сочетается с количеством выводов одноразрядного семисегментного индикатора, у которого их также восемь с учетом вывода для точки.
Схемы подключения с общим анодом ОА и общим катодом ОК аналогичны, только общий вывод подключается соответственно к плюсу или минусу источника питания.
Все светодиоды подключаются к выводам микроконтроллера через отдельные резисторы сопротивлением 220…330 Ом.
Не стоит экономить на резисторах и подключать все элементы через один общий резистор. Поскольку в таком случае с изменением числа задействованных сегментов будет изменяться величина тока, протекающего через них. Поэтому цифра 1 будет светиться ярче, чем 8.
Чтобы знать какой из выводов отвечает тому или иному сегменту нам понадобится распиновка семисегментного индикатора. Отсчет выводов, как и у микросхем, начинается с левого нижнего и продолжается против часовой стрелки. При этом лицевая сторона индикатора должна быть направлена вверх, а выводы вниз.
Теперь создадим модель в Протеусе и соберем схему на макетной плате. Далее по мере написания кода будем проверять работу микроконтроллера на модели и на реальном устройстве.
Семисегментный индикатор в Proteus находится в категории (Category) Optoelectronics (Оптоэлектроника). Ниже в подкатегории (Sub-category) следует кликнуть по строке 7-Segment Displays. После этого в окне результатов (Results) выбираем одноразрядный семисегментный индикатор 7SEG-MPX1-CC.
Код для микроконтроллера ATmega8
Теперь пишем код. Сначала настраиваем порт D полностью на выход. Для отображения единицы 1 задействуются сегменты b и c, выводы которых подключены к PD1 и PD2. Поэтому соответствующие биты регистр PORTD нужно установить в единицу.
PORTD = 0b00000110; //1
После компиляции кода и прошивки кода результаты мы видим в Proteus и на макетной плате.
Аналогичным образом формируются все цифры.
Давайте сделаем программу более интересной, так, чтобы цифры изменялись в порядке нарастания от нуля до девяти с паузой 0,3 секунды.
#define F_CPU 1000000L
PORTD = 0b00111111; //0
PORTD = 0b00000110; //1
PORTD = 0b01011011; //2
PORTD = 0b01001111; //3
PORTD = 0b01100110; //4
PORTD = 0b01101101; //5
PORTD = 0b01111101; //6
PORTD = 0b00000111; //7
PORTD = 0b01111111; //8
PORTD = 0b01101111; //9
Данный код можно значительно упорядочить и этим мы займемся в последующих статьях по программированию микроконтроллера ATmega8. На этом заканчиваем наше первое знакомство с семисегментными индикаторами.
Еще статьи по данной теме
Тут такая засада.
На Atiny2323 все работает нормально, на Atmega8 семисегментный индикатор постоянно мерцает. Правда схема такая же как и на Atiny2323 т.е. без кварца. Не подскажите в чем дело?
Дело в том, что по-умолчанию частота работы встроенного генератора (RC-цепочки) Atiny2323 4 МГц, а ATmega8 – 1 МГц, поэтому на меге заметна частота мерцания.
Дмитрий,
Поизучал даташит, правильно понимаю что для установки 4Мгц нужно установить CKSEL3..0 в 0011?
Дмитрий, и еще вопрос в догонку.
Какие кварцы (частоты, типы, кол-во) стоит прикупить для изучения микроконтроллеров?
Сначало зажги светодиод,потом помигай им,потом подключи кнупку,чтоб программа заработал когда нажал кнопку и т.д.кварц для этого не нужен.От простого к сложному.
Автору большое спасибо. После видео уроков на ютубе появился интерес к МК.
Большая просьба автору. Вы собирались сделать материал по динамической индикации –
семи-сегментного индикатора. Возможно, вы бы, могли бы сделать материал, сегменты индикатора к разным портам. Например к двум портам МК.
Andrei, никто не хочет за это дерьмо с разными портами браться, я сам долго искал, у всех подключение к одному порту (так головняка меньше). То что я смог переварить взято с радиокота https://radiokot.ru/forum/viewtopic.php?f=57&t=131489. Да, через анус, но работает.
код:
/*
* M48_dinamind_radiokot.c
*
* Created: 28.11.2018 10:37:52
* Author: Left
*/
#define F_CPU 1000000UL
#include
#include
#include
//—————————————————————
#define SetBit(reg, bit) reg |= (1 29.11.2018 Ответить
Относительно просто динамическую индикацию подключать, применяя оператор switch case.
Да, просто, но как быть с сегментами на разных портах? да еще и так чтоб начинающий смог понять. То что что я видел, с кучей подключаемых библиотек, где хрен разберешь последовательность и что откуда берется, выглядит (как для начинающего) уж очень муторно. Если у Вас будет свободное время, сделайте урок по динамической индикации с сегментами на разных портах, это будет единственное видео на ютубе и единственный урок с комментариями (если будет конечно;) )
Это нужно быть совсем нубом в прерывании тратить время на перебор 13ти кейсов в свитче.
Все делается одним сдвигом N влево в зависимости от размера кейса и джамп на кейс по получившимся смещению после сдвига N. 2 инструкции чтобы попасть в кейс. Но для этого нужно уметь на ассемблере написать.
Еще гасится весь дисплей, потом куча кода проходит до момента отображения сегмента. Все это время дисплей не горит. Лажа полная, а не пример.
У меня даже на убогом нувотоне, где одна инструкция по 3 такта,а не один как у avr обновление дисплея занимает 4.7микросекунды. То есть я могу его обновлять с частотой аж 200 кГц. И каждая нога тоже отдельно дергается, а не просто в порт кинуть. И между моментом когда все гасится и отображается новый сегмент вообще нет пробела, следующей же ассемблерной инструкцией начинает зажигаться.
Так что хочешь сделать быстро и качественно динамическую индикацию без ассемблера не обойтись.
Что-то не весь код с копировался, напиши почту я сброшу.
Преимущества подключения на 3 фазы
Три фазы в частном доме
Устанавливая многотарифный счетчик, владельцы дома или квартиры получают множество выгод:
- экономия – у некоторых моделей есть режимы дневной и ночной тарификации, что позволяет использовать меньше энергии ночью, чем днем;
- универсальность – устройства можно подсоединить со стандартной сети 220 В или новой сети 380 В прямым способом или через трансформатор;
- постоянный контроль – счетчик уравновешивает сетевое напряжение;
- точность – учет затраченной электроэнергии производится с погрешностью от 0,2 до 2,5 %;
- дополнительные функции – счетчики оснащаются журналом событий, электросиловым модемом, фиксацией пользователей, монитором для вывода данных.
Однофазный вариант дает погрешность показаний до 5 %.
4 Управление 7-сегментным индикатором с помощью драйвера CD4511 и Arduino
При подключении двоичного декодера будем руководствоваться следующей таблицей:
Вывод CD4511 | Назначение | Примечание |
---|---|---|
A0. A3 | Входы двоичного преобразователя | Соответствуют разрядам двоичного числа. |
a. g | Выходы на сегменты индикатора | Подключаются через токоограничивающие резисторы к соответствующим сегментам светодиодного индикатора. |
Lamp Test# | Тест индикатора (включает все сегменты) | Подключим к питанию, не использовать его. |
Blanking# | Очистка индикатора (отключает все сегменты) | Подключим к питанию, чтобы не использовать его. |
Latch Enabled# | Выход активен | Будет подключен к земле, чтобы выход был всегда активен. |
VDD | Питание микросхемы и индикатора | От 3 до 15 В. |
GND | Земля | Общая у CD4511, Arduino, 7-сегментного индикатора. |
Желательно также подключить керамический конденсатор ёмкостью примерно 1 мкФ между землёй и питанием микросхемы CD4511.
Подключение 7-сегментного индикатора к Arduino с двоичным декодером CD4511B
Теперь напишем простой скетч, чтобы проверить работоспособность 7-сегментного индикатора 3361AS-1 в связке с двоично-десятичным декодером, а также получить опыт работы с ними. Данный скетч будет поочерёдно перебирать числа от 0 до 9, перемещаясь по циклу от одного разряда индикатора к следующему.
Скетч для управления 7-сегментным индикатором (светится 1 разряд) (разворачивается)
Загрузим скетч в Arduino и посмотрим результат.
В один момент времени светится только один разряд индикатора. Как же задействовать одновременно сразу три разряда индикатора? Это будет немного сложнее. Сложность заключается в том, что нам одновременно нужно управлять тремя разрядами десятичного число, используя только один преобразователь CD4511. Но чисто физически это невозможно. Однако можно добиться иллюзии постоянного свечения всех разрядов светодиодного индикатора. Для этого придётся быстро переключаться между разрядами, постоянно обновляя показание каждого разряда. Мы будем поочерёдно активировать каждый из разрядов индикатора 3361AS, выставлять на нём с помощью двоичного преобразователя CD4511 нужную цифру, а затем переключаться на следующий разряд.
Для человеческого глаза такое переключение между разрядами будет незаметно, но если результат снять на видео, то его можно увидеть.
Также перепишем функцию setNumber() отправки двоичного кода на вход микросхемы преобразователя CD4511. Вместо использования оператора switch, используем массив массивов.
Скетч для управления трёхразрядным 7-сегментным индикатором (разворачивается)
Получится вот такая картина.
Управление трёхразрядным семисегментным индикатором с помощью преобразователя CD4511 и Arduino
В динамике это выглядит так. Тут как раз временами видны мерцания сегментов светодиодного индикатора.
Можно попробовать поиграть значением задержек в функции setDigit(). Если сделать задержки меньше, то мерцание станет меньше заметно. Но начнут сильнее засвечиваться соседние сегменты на выбранном разряде индикатора. Тут необходимо выбрать какое-то компромиссное решение.
Суммирование каждой 2-й, 3-й. N-й ячейки
Постановка задачи
Предположим, что у нас имеется вот такая таблица с данными по выручке и выполнению плана для нескольких городов:
Необходимо просуммировать выручку по всем городам или, что примерно то же самое, подсчитать средний процент выполнения плана по всем городам.
Если решать проблему «в лоб», то придется вводить длинную формулу с перебором всех ячеек, т.к. сразу весь диапазон одним движением выделить не получится:
Если количество городов в таблице больше пары десятков, то такой способ начинает нагонять тоску, да и ошибиться при вводе формулы можно запросто. Как же поступить? Есть способы сделать это изящнее.
Способ 1. Функция СУММЕСЛИ (SUMIF) и ее аналоги для выборочного суммирования по условию
Если в таблице есть столбец с признаком, по которому можно произвести выборочное суммирование (а у нас это столбец В со словами «Выручка» и «План»), то можно использовать функцию СУММЕСЛИ (SUMIF) :
Первый аргумент этой функции — диапазон проверяемых ячеек, второй — критерий отбора (слово «Выручка«), третий — диапазон ячеек с числами для суммирования.
Начиная с версии Excel 2007 в базовом наборе появилась еще и функция СРЗНАЧЕСЛИ (AVERAGEIF) , которая подсчитывает не сумму, а среднее арифметическое по условию. Ее можно использовать, например, для вычисления среднего процента выполнения плана. Подробно про все функции выборочного суммирования можно почитать в этой статье с видеоуроком. Минус этого способа в том, что в таблице должен быть отдельный столбец с признаком, а это бывает не всегда.
Способ 2. Формула массива для суммирования каждой 2-й, 3-й . N-й строки
Если удобного отдельного столбца с признаком для выборочного суммирования нет или значения в нем непостоянные (где-то «Выручка«, а где-то «Revenue» и т.д.), то можно написать формулу, которая будет проверять номер строки для каждой ячейки и суммировать только те из них, где номер четный, т.е. кратен двум:
Давайте подробно разберем формулу в ячейке G2. «Читать» эту формулу лучше из середины наружу:
- Функция СТРОКА (ROW) выдает номер строки для каждой по очереди ячейки из диапазона B2:B15.
- Функция ОСТАТ (MOD) вычисляет остаток от деления каждого полученного номера строки на 2.
- Функция ЕСЛИ (IF) проверяет остаток, и если он равен нулю (т.е. номер строки четный, кратен 2), то выводит содержимое очередной ячейки или, в противном случае, не выводит ничего.
- И, наконец, функция СУММ (SUM) суммирует весь набор значений, которые выдает ЕСЛИ, т.е. суммирует каждое 2-е число в диапазоне.
- Данная формула должна быть введена как формула массива, т.е. после ее набора нужно нажать не Enter, а сочетание Ctrl+Alt+Enter. Фигурные скобки набирать с клавиатуры не нужно, они добавятся к формуле автоматически.
Для ввода, отладки и общего понимания работы подобных формул можно использовать следующий трюк: если выделить фрагмент сложной формулы и нажать клавишу F9, то Excel прямо в строке формул вычислит выделенное и отобразит результат. Например, если выделить функцию СТРОКА(B2:B15) и нажать F9, то мы увидим массив номеров строк для каждой ячейки нашего диапазона:
А если выделить фрагмент ОСТАТ(СТРОКА(B2:B15);2) и нажать на F9, то мы увидим массив результатов работы функции ОСТАТ, т.е. остатки от деления номеров строк на 2:
И, наконец, если выделить фрагмент ЕСЛИ(ОСТАТ(СТРОКА(B2:B15);2)=0;B2:B15) и нажать на F9, то мы увидим что же на самом деле суммирует функция СУММ в нашей формуле:
Значение ЛОЖЬ (FALSE) в данном случае интерпретируются Excel как ноль, так что мы и получаем, в итоге, сумму каждого второго числа в нашем столбце.
Легко сообразить, что вместо функции суммирования в эту конструкцию можно подставить любые другие, например функции МАКС (MAX) или МИН (MIN) для вычисления максимального или минимального значений и т.д.
Если над таблицей могут в будущем появляться новые строки (шапка, красивый заголовок и т.д.), то лучше слегка модернизировать формулу для большей универсальности:
Способ 3. Функция БДСУММ и таблица с условием
Формулы массива из предыдущего способа — штука красивая, но имеют слабое место — быстродействие. Если в вашей таблице несколько тысяч строк, то подобная формула способна заставить ваш Excel «задуматься» на несколько секунд даже на мощном ПК. В этом случае можно воспользоваться еще одной альтернативой — функцией БДСУММ (DSUM) . Перед использованием эта функция требует небольшой доработки, а именно — создания в любом подходящем свободном месте на нашем листе миниатюрной таблицы с условием отбора. Заголовок этой таблицы может быть любым (слово «Условие» в E1), лишь бы он не совпадал с заголовками из таблицы с данными. После ввода условия в ячейку E2 появится слово ИСТИНА (TRUE) или ЛОЖЬ (FALSE) — не обращайте внимания, нам нужна будет сама формула из этой ячейки, выражающая условие, а не ее результат. После создания таблицы с условием можно использовать функцию БДСУММ (DSUM) :
Способ 4. Суммирование каждой 2-й, 3-й. N-й строки
Если нужно просуммировать не отдельные ячейки, а целые строки, то можно это легко реализовать формулой массива, аналогичной способу 2:
Поскольку функция СУММПРОИЗВ (SUMPRODUCT) автоматически преобразует свои аргументы в массивы, то в этом случае нет необходимости даже нажимать Ctrl+Shift+Enter.
Подключение к РМ-2 терморегулятора
Наиболее продвинутый способ управления режимом разгона в РМ-2 — это с помощью терморегулятора (или какого-то другого регулятора — влажности, давления, либо таймера, либо другого устройства автоматики). Он подразумевает, что можно точно выставить необходимую температуру, при которой контакт разомкнется и РМ-2 перейдет из режима разгона в режим регулировки. Терморегулятор при этом должен быть настроен в режиме «охлаждение», то есть реле замыкаться когда температура опускается ниже заданной границы. И самое важное — нужно использовать терморегулятор со свободными (сухими) контактами реле, которые развязаны от остальной электроцепи. Например, ИРТ-120 использовать можно, а вот ИРТ-125Т нельзя, так как в этом случае ток из сети 220В пойдет в РМ-2, что может привести к фатальным последствиям. На практике чаще используется четырехканальный терморегулятор ИРТ-4К или многофункциональный ШИМ-контроллер ШИМ-2.
Подключение терморегулятора к РМ-2
Надеемся, что этот небольшой ликбез поможет корректно подключить кнопку, переключатель или терморегулятор для разгона РМ-2, и не допустить фатальных ошибок.