Arduino

Genuino. Конечно все относится к Ардуино нано 2016 + с пандао таобао или алиэкспресс , или ибэй. Делают их в Шеньжене вроде как.

Для экспериментов нужен компьютер или ноутбук, лучше примерно 2007-2010 года где есть принтерный порт. Но подойдет и совсем новый, с юсб.

Во вложении пакет программ, проще его загрузить с arduino.cc

Использована китайская плата Arduino nano —

atmega328p ch340g с разъемом Mini Usb, ams1117 на 3v. Откуда они взялись не знаю но эти отличаются только ценой не в
3500 рублей а примерно 230.

В загрузках должен быть драйвер для конвертера usb com , на windows 10 он ставится сам.

Изменения в переархивированных файлах (делал все на винде 10-ке ltsc 2019 полечить систему сначала 360totalsecurity а потом его временно отключить как бы без матерных слов все сборки в интернете чем то заражены и глючат и находятся вирусы трояны. Заказать в личном кабинете Майкрософт если у кого есть или у знакомых и пришлют 2 диска dvd из Америки) —

добавлен avrdude поддерживающий эту плату — в настройках скорость com порта 57600,
old bootloader старый загрузчик atmega 328 как 168, если на плате не прошит загрузчик в чип — в каталоге есть программатор который подключается через параллельный порт lpt. Есть такой на компах сделанных до 2008 года примерно или на ноутбуках.
на крайний случай на Али продается Willem Eprom или более простые программаторы.

На всех 3 провереных ардуинках загрузчик был.
информацию о плате выдаёт:
NB: Неизвестная плата
VID: 1АВ6
PID: 7523
SN: Загрузить любой скетч , для использования (то есть в новой версии Ардуино ошибка что неизвестная плата, но все загружается)

функция считывания программы — если что то при прошивке не напортачили, там в разных версиях фьюзы ставятся чудесато, то есть если не работает то лучше Ардуину заменить.. повторяю под эту плату -b57600 :

D:\arduino>D:\arduino\hardware\tools\avr/bin/avrdude -CD:\arduino\hardware\tools\avr/etc/avrdude.conf -v -patmega328p -carduino -PCOM3 -b57600 -D -Uflash:r:C:\Users\pc-tesla\arduino_rd_135748LCD_may06a.ino.hex:i

соответственно в каталоге пользователя создается файл .hex который можно в другую ардуинку записать такой же командой, только flash:w
(конечно в винде выполнить cmd.exe и набрать там)

вот еще что пишут на форуме (там другая неполадка) . А загрузчик (он же бутлоадер) это собственно маленькая программа на микроконтроллере, общаясь с которой Arduino IDE заливает прошивку. Он обычно прошит уже продавцом, но бывает и нет. Как прошить гуглится по запросу «прошить загрузчик в ардуино». Но понадобится или вторая, рабочая, ардуино, или программатор и вот инструкция https://www.youtube.com/watch?v=9HAnr___gkI

16 Дек 2019
В общем я порылся и починил заргузчик обновил через уно
залил. Офлайн режим настроил в бегущей строке даже
теперь выдает такую ошибку на блютус настройке скетче

#100

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x08

При прошивке надо отключать RX и TX блютуза от Ардуины. .. эта же ошибка при несоответствии скорости 115200 и ли 57600

не провереная инфа (у меня работает и как Nano загружается sketch. — 328p-old bootloader 57600)

Casey L.
4.0 out of 5 stars Works as a duemilanove diecimila in the IDE board setting.
Reviewed in the United States on September 15, 2018
Verified Purchase
The board seems to work fine, however setting the Arduino IDE program to the board setting for ‘nano’ will cause upload errors, after having played with many settings it turns out that you have to go to the board setting and select «Arduino duemilanove or diecimila» under the tools tab. it would have been nice if this board came with some documentation or if it mentioned this on the product description. Hopefully this helps out anyone else who has issues with uploading code to the board.
11 people found this helpful
Helpful
Comment Report abuse
Robert D.
4.0 out of 5 stars It works well. Has older bootloader, though.
Reviewed in the United States on November 17, 2018
Verified Purchase
This works well with the arduino IDE, though I found that you have to select older bootloader option in the GUI. Otherwise, this seems fully compatible with the official Nano.

I really like the Nano as it fits on a breadboard, which makes prototyping very simple and clean.
3 people found this helpful
Helpful
Comment Report abuse
Peter Fox

Arduino без Bootloader'а
Страницы1 2 Вперед
Ответить

#12016-06-28 13:57:52
aleshka2201
Участник

Зарегистрирован: 2016-06-28
Сообщений: 1

Добрый день.
Имеется Arduino Pro Mini 3.3V 8MHz.
Мне нужно убрать загрузчик, тем самым снизить время загрузки до минимума.
Подскажите, может я что не так делаю...
После компиляции скетча, беру .hex файл прошивки из системной папки Temp (тот, что без бутлоадера).
Сторонним программатором загружаю по ICSP прошивку в Arduino. При этом фьюз BOOTRST=1 (убрал), тем самым сделав загрузку после ресета с места начала программы, а не бутлоадера.
Удалось снизить время загрузки с 2-3 секунд до 1 сек. Но это все равно много.
Подскажите, какие должны быть фьюзы в моём случае? Что я не так сделал?
Спасибо.
Offline
Цитировать
#22016-06-29 11:50:05
alex_dol
Участник

Зарегистрирован: 2015-12-28
Сообщений: 190

Даже если не переустановить флаг BOOTRST и записать hex без загрузчика - время старта будет несколько милисек, пока проц "пробежит" область загрузчика, но ни как не 1 сек.
Попробуй создать hex через "Скетч - экспорт бинарного файла"
Offline
Цитировать
#32016-07-22 11:05:34
evgeniy
Участник

Зарегистрирован: 2016-07-19
Сообщений: 3

Ни кто не запрещает программировать плату как обычный МК через SPI интерфейс, на большинстве плат он даже оформлен в виде отдельного разъема. При этом не обязательно разработку делать в Arduino IDE где при компиляции учитывается наличие загрузчика.
Offline
Цитировать
#42016-07-23 09:05:54
Green
Участник

Зарегистрирован: 2015-11-08
Сообщений: 588

Как учитывается?
Offline
Цитировать
#52016-07-24 08:10:02
Nefreemen
Участник

Из Киев
Зарегистрирован: 2015-12-19
Сообщений: 716

alex_dol пишет:
Даже если не переустановить флаг BOOTRST и записать hex без загрузчика - время старта будет несколько милисек, пока проц "пробежит" область загрузчика, но ни как не 1 сек.
Попробуй создать hex через "Скетч - экспорт бинарного файла"
Откройте секрет что это за hex без загрузчика roll . И пока проц где то бегает я стою в лыжи обутый  roll
Offline
Цитировать
#62016-07-24 13:31:55
Green
Участник

Зарегистрирован: 2015-11-08
Сообщений: 588

Не "где-то бегает", а быстренько пробегает.))
Offline
Цитировать
#72016-07-25 09:14:42
alex_dol
Участник

Зарегистрирован: 2015-12-28
Сообщений: 190

Nefreemen пишет:
Откройте секрет что это за hex без загрузчика roll . И пока проц где то бегает я стою в лыжи обутый  roll
Выбираем: 1123.jpg
Получаем: 1122.jpg
Берем файлик без бутлоадера и заливаем любым программатором. Желательно также переустановить флаг старта. Если этого не сделать, программа будет стартовать с области бутлоадера, но так область бутлоадера забита "nop", проц пройдет по nop-ам до конца памяти и начнет сначала. Времени тратится примерно 2К / 16МГц = 0,0001 сек = 0.1 мсек.
Offline
Цитировать
#82016-07-25 15:51:36
Nefreemen
Участник

Из Киев
Зарегистрирован: 2015-12-19
Сообщений: 716

alex_dol пишет:
Nefreemen пишет:
Откройте секрет что это за hex без загрузчика roll . И пока проц где то бегает я стою в лыжи обутый  roll
Выбираем: https://santosha.pro/wordpress/wp-content/uploads/2020/12/1123.jpg
Получаем: https://santosha.pro/wordpress/wp-content/uploads/2020/12/1122.jpg
Берем файлик без бутлоадера и заливаем любым программатором. Желательно также переустановить флаг старта. Если этого не сделать, программа будет стартовать с области бутлоадера, но так область бутлоадера забита "nop", проц пройдет по nop-ам до конца памяти и начнет сначала. Времени тратится примерно 2К / 16МГц = 0,0001 сек = 0.1 мсек.
Вот я блин наивный  big_smile, все время думал что бутлоадер находится во флеш МК и прописывается один раз а фьюзы указывают размер и область бут-ра. При старте сначала стартует бут и потом передает управление программе (если нет команды на "заливку"). А оказывается хекс программы уже содержит бут, капец wink .
Offline
Цитировать
#92016-07-25 18:16:51
Green
Участник

Зарегистрирован: 2015-11-08
Сообщений: 588

Всё плохо. Последнее предположение неверно. И откуда только такие глупости возникают?
Offline
Цитировать
#102016-07-25 20:38:39
Nefreemen
Участник

Из Киев
Зарегистрирован: 2015-12-19
Сообщений: 716

Green пишет:
Всё плохо. Последнее предположение неверно. И откуда только такие глупости возникают?
Вот вот и я о том же  lol  lol
Offline
Цитировать
#112016-07-25 23:31:19
alex_dol
Участник

Зарегистрирован: 2015-12-28
Сообщений: 190

Nefreemen пишет:
Вот я блин наивный  big_smile, все время думал что бутлоадер находится во флеш МК и прописывается один раз а фьюзы указывают размер и область бут-ра. При старте сначала стартует бут и потом передает управление программе (если нет команды на "заливку"). А оказывается хекс программы уже содержит бут, капец wink .
Если прочитать первое сообщение - там как раз и идет речь о заливке hex не содержащего бутлоадер сторонним программатором, а не о стандартных средствах ардуино. Ваши рассуждения относятся к стандартным средствам ардуино, но никто не запрещает работать с платой ардуино через ICSP.
Если использовать программатор, то:
бутлоадер находится во флеш МК - согласен, изначально он там есть, но я вместо него могу записать программатором что хочу.
прописывается один раз а фьюзы указывают размер и область бут-ра - а что мешает переписывать бутлоадер хоть по сто раз на день? В самой IDE есть пункт "записать бутлоадер".
старте сначала стартует бут и потом передает управление программе - опять же если он там есть, я могу его область заполнить "nop"ами или переписать фьюзы на старт с нулевого адреса, а не с бутлоадера.
Для ТС было важно выиграть время, которое бутлоадер тратит на ожидание команды на "заливку". Делал он вроде правильно, но "что-то пошло не так".
Я не вижу смысла развивать дискуссию дальше, мы говорим о разных вещах и похоже ТС тема уже не интересна.
Offline
Цитировать
#122016-07-26 09:01:25
Green
Участник

Зарегистрирован: 2015-11-08
Сообщений: 588

ТС-у нужно показать фьюзы и сетап. Тогда можно будет что то сказать.
Offline
Цитировать
#132016-07-26 15:40:23
Nefreemen
Участник

Из Киев
Зарегистрирован: 2015-12-19
Сообщений: 716

Как работает загрузчик я прекрасно знаю. Вопрос в другом. Для меня стало открытием то что IDE создает два файла один из них содержит загрузчик. Логично понять какой он пишет при стандартной заливке (с загрузчиком или без), и собственно нафиг вообще кекс с загрузчиком если есть отдельная опция записать загрузчик.
alex_dol, но это же Вы написали:
"Даже если не переустановить флаг BOOTRST и записать hex без загрузчика - время старта будет несколько милисек, пока проц "пробежит" область загрузчика, но ни как не 1 сек.
Попробуй создать hex через "Скетч - экспорт бинарного файла""
Вам не кажется что что то не так roll  написано? Слово "даже" поменяло весь смысл Вами написанного. Собственно коротко: МК пофиг с бутом кекс или без все рулит флаг lol .
Offline
Цитировать
#142016-07-26 16:46:33
alex_dol
Участник

Зарегистрирован: 2015-12-28
Сообщений: 190

Этой фразой я хотел сказать, что если программатором залить скетч без бутлоадера и оставить фьюз старта без изменений (старт останется с области бутлоадера), то проц сначала обработает 2К "nop"ов, затем перейдет к основной программе. Время обработки 2К "nop"ов будет намного меньше 1 сек. Сам не раз забывал переустанавливать фьюз старта - что так, что с переустановленым - старт мгновенный.
Offline
Цитировать
#152016-07-26 17:43:37
Green
Участник

Зарегистрирован: 2015-11-08
Сообщений: 588

Nefreemen пишет:
Как работает загрузчик я прекрасно знаю. Вопрос в другом. Для меня стало открытием то что IDE создает два файла один из них содержит загрузчик. Логично понять какой он пишет при стандартной заливке (с загрузчиком или без), и собственно нафиг вообще кекс с загрузчиком если есть отдельная опция записать загрузчик.
Да ну? И откуда ж ему (загрузчику) там взяться? Просветите, коль всё "прекрасно" знаете.
Offline
Цитировать
#162016-07-27 14:56:53
Nefreemen
Участник

Из Киев
Зарегистрирован: 2015-12-19
Сообщений: 716

Green пишет:
Nefreemen пишет:
Как работает загрузчик я прекрасно знаю. Вопрос в другом. Для меня стало открытием то что IDE создает два файла один из них содержит загрузчик. Логично понять какой он пишет при стандартной заливке (с загрузчиком или без), и собственно нафиг вообще кекс с загрузчиком если есть отдельная опция записать загрузчик.
Да ну? И откуда ж ему (загрузчику) там взяться? Просветите, коль всё "прекрасно" знаете.
Извините, где ему взяться (загрузчику) как его записать в том числе как править исходник загрузчика под частоту, конкретный АВР (размер флэша), адреса, события, ожидание вэлкам гугл  big_smile . Мне это уже не интересно. А если Вы считаете что каждый раз при заливке кода в ИДЭ (через сериал) прописывается вместе с кодом загрузчик то это очень глубокое заблуждение.
Редактировался Nefreemen (2016-07-27 15:10:12)
Offline
Цитировать
#172016-07-28 04:50:37
Green
Участник

Зарегистрирован: 2015-11-08
Сообщений: 588

Такое впечатление что кто-то бухает...
Offline
Цитировать
#182016-07-28 12:33:41
NoName
Customer

Из Київ
Зарегистрирован: 2014-07-08
Сообщений: 1,446

"кто то бухает ..." написал Green, в 04:50:37, хвастается наверное )
Offline
Цитировать
#192016-07-28 16:01:04
Green
Участник

Зарегистрирован: 2015-11-08
Сообщений: 588

А разве заметно? Хотя, я подумал о такой логике.))
Offline
Цитировать
#202016-07-28 20:11:01
Nefreemen
Участник

Из Киев
Зарегистрирован: 2015-12-19
Сообщений: 716

Green пишет:
Такое впечатление что кто-то бухает...
roll  big_smile  Соседи наверное.
Offline
Цитировать
#212016-07-28 21:33:20
Green
Участник

Зарегистрирован: 2015-11-08
Сообщений: 588

Ага, ага. Соседи по форуму.))
Offline
Цитировать
#222016-07-28 23:51:33
Nefreemen
Участник

Из Киев
Зарегистрирован: 2015-12-19
Сообщений: 716

Green пишет:
Ага, ага. Соседи по форуму.))
Вы о чем? Если Вы написали "Такое впечатление что кто-то бухает..." относительно моего поста. Тогда ссоры, я не обижаюсь (честно мне пофиг) и я ничего против не имею если Вы считаете что бутлоадер родится вместе с МК и что он переписывается каждый раз при записи скетча это Ваше право lol . Мне просто приснилось наверное кода я правил (под Atmega32) optiboot загрузчик для использования в Arduino IDE и как то ни один скетч его не убил lol .
Offline
Цитировать
#232016-07-29 06:12:13
Green
Участник

Зарегистрирован: 2015-11-08
Сообщений: 588

... если Вы считаете что бутлоадер родится вместе с МК и что он переписывается каждый раз при записи скетча это Ваше право
И где ж я такую ахинею писал?
Мне просто приснилось наверное кода я правил (под Atmega32) optiboot загрузчик для использования в Arduino IDE и как то ни один скетч его не убил lol .
"Да кто ж его посадит, это ж ПАМЯТНИК!"
Да кто ж его убъёт, это ж ЗАГРУЗЧИК!
Он ведь сам скетчи грузит и себя не трогает. А убьёт его только программатор (экзотические варианты не рассматриваем).
В Arduino IDE же скетчи записывать можно и так, и эдак - и через загрузчик, и через программатор (но тогда загручику того-сь). Очевидно же...
"Такая вот фигня, малята."))
А кто рано встаёт, тому... Не так ли, NoName?))
Offline
Цитировать
#242016-07-29 09:01:57
Nefreemen
Участник

Из Киев
Зарегистрирован: 2015-12-19
Сообщений: 716

Green, тогда я не понимаю вокруг чего ломаем копья. Почему после моего  #16 последовал Ваши "намеки" #17 и #21? Ваша фраза :"Он ведь сам скетчи грузит и себя не трогает. А убьёт его только программатор (экзотические варианты не рассматриваем)." , не совсем правильна, загрузчики бывают разные smile . Есть у меня замечательная книга (можно сказать настольная) по которой я учился писать "программки" еще на ASM лет 10 назад.  Открываем книгу А.В. Евстифеева: Микроконтроллеры AVR семейств Tiny и Mega фирмы Atmel, глава  26. Самопрограммирование микроконтроллеров семейства Mega, и читаем (фрагмент) "...Сразу отметим, что загрузчик может изменять содержимое обеих секций (поскольку вырвано с текста, то имеется ввиду секции памяти Application Section и Boot Loader Section) . Это позволяет ему модифицировать собственный код и даже удалять себя из памяти, если надобность в нем отпадет". Вот теперь можно окончательное: "Такая вот фигня, малята."))
Offline
Цитировать
#252016-07-29 15:52:17
Green
Участник

Зарегистрирован: 2015-11-08
Сообщений: 588

ОК.
"Мы по разному видим мир". (С) О.Бендер.
Это позволяет ему модифицировать собственный код и даже удалять себя из памяти, если надобность в нем отпадет".
Вот это, как раз, "экзотические варианты".))

Это я к чему — для часов на 6 штуках ИН-1 и с 2-мя декатронами или с одним надо прошивать микроконтроллер от Arduino подключив программатор, напрямую без загрузчика.

добавлять буду скетч и hex bin для прошивки.

Вот это устройство очень рекомендую сделать самим (можно и в Китае заказать конечно) . платку придумал willem — энтузиаст из Голландии вроде в 1997 году, с того времени она улучшалась и исправлялась несколько раз, первоначально сделана для программирования стираемых ультрафиолетом ПЗУ типа 2716.

Как все avr программируется с адаптером isp willem eprom soft d12c4

Это не так сложно, ноутбук с параллельным портом lpt и ПРЯМО на него разъем от виллема, у меня версия платы 3.1 это который по голландской схеме и уже переделан примерно 2006 года, но можно заказать готовый 5.0f польской компании, он на Али. В Митино не нашел, да их все делают сами, чертежей плат много. Диск у меня есть во вложениях. Настолько универсальный программатор что в списке больше 2000 типов микросхем. Не совсем открытый код, но исправлен на нескольких компаниях, исправлял сам добавляя несколько типов 25 серии от материнок, уже есть в новых версиях.

Не добавляю диск от sivava он есть — поискать в ослике или в shareaza. 2 версии самодельного программатора willem eprom. ( посмотрите на что способна эта платка с несколькими панельками и микросхемами 40 серии, сколько там типов программируемых микросхем поддерживается, одних только переходников уже коробка целая. Нет смысла покупать коммерческий программатор за 1700 долларов, самодельный больше всего прошивает.) https://vfiuchcikicshuusrch.ddns.net/?post=2

на этом варианте нет повышающего до 25 вольт используя mc34063. Многие теперь применяют Моторолу — освоили ее и для понижающих, заменяя линейные стабилизаторы преобразователями напряжения, там чип катушечка конденсаторы и 2 -3 сопротивления. Это вариант Willem Eprom 4.5 под плоский кабель для переходников или EzoFlash
.
плата 3.1 — делал таких 6 штук за несколько лет, парочку подарил. 12 вольт адаптер. (шьет все) Вариант без повышающего преобразователя. Основное применение — прошивка плат от компьютеров и всякий ремонт, часто стираются микросхемки энергонезависимой памяти. Телевизоры, стиральные машины, видеоплаты, телефонная станция, ноутбук — все без этой штуки сложно починить.
adapter Логические элементы по схеме сделают генератор с частотой 8 примерно. на плате willem 3.1 эти сигналы есть на гребенке, смотрим схему программатора. в документах есть адаптер msc51 avr, такой же.

переходник для программирования можно подключать без отпайки. 6 — 12.. 17 и 21

часы и работа с 7-сегментниками (в 1988 вез из Минска десяток цифровых АЛС-324 красные восьмерки светодиодные вроде они потом куда только не ставились — первое применение — регулятор громкости в усилитель 50 ватт . Цифровой на логике, тогда это редкость была. Цифры 2-3 — тихо работает, 49-50 надо затычки на уши, колонки советские Амфитон с тумбочку размером, вполне подойдут для дискотеки или танцевального соревнования. Сейчас 2 платы и десятка 2 логических микросхем заменяет Ардуино, аналоговую часть с точными коммутаторами и операционниками не заменит конечно. Похожее есть в журнале Радио с 1982 -1988. )

ГлавнаяСхемы на Arduino→Часы на Arduino и 4-х разрядном семисегментном индикаторе

Навигация по записям

← Последовательная связь с помощью RS-485 между Raspberry Pi и Arduino UnoОбъезжающий препятствия робот на Arduino →

Часы на Arduino и 4-х разрядном семисегментном индикаторе

Опубликовано автором admin-newhttps://googleads.g.doubleclick.net/pagead/ads?guci=2.2.0.0.2.2.0.0&client=ca-pub-9773002703636166&output=html&h=280&slotname=2467549033&adk=2788265672&adf=3833419269&pi=t.ma~as.2467549033&w=795&fwrn=4&fwrnh=100&lmt=1611740198&rafmt=1&psa=1&format=795×280&url=https%3A%2F%2Fmicrokontroller.ru%2Farduino-projects%2Fchasy-na-arduino-i-semisegmentnyh-displeyah%2F&flash=0&fwr=0&fwrattr=true&rpe=1&resp_fmts=3&wgl=1&adsid=ChAIgLvEgAYQ0vbrhPGIkptFEkwAdUp0syOIYDhDSCUCfKs1MBknhdIA9-BgYMU4-B6Fqcaa_PjrmX5OEYbZrZa5OZQKlj4UXY1T8u4SrA95s4aF-ZBMwc-phnQtLiX8&dt=1611740195369&bpp=9&bdt=8144&idt=3195&shv=r20210120&cbv=r20190131&ptt=9&saldr=aa&abxe=1&cookie=ID%3D9110382969fd88c7-2274cd9ba0b900d1%3AT%3D1611523040%3ART%3D1611523040%3AS%3DALNI_MbmMnN0eBAoRwwEJnKpvJDxShMnTQ&prev_fmts=0x0&nras=1&correlator=2145012158775&frm=20&pv=1&ga_vid=1195319956.1611740199&ga_sid=1611740199&ga_hid=1498706494&ga_fc=0&u_tz=180&u_his=1&u_java=0&u_h=1080&u_w=1920&u_ah=1053&u_aw=1920&u_cd=24&u_nplug=0&u_nmime=0&adx=557&ady=438&biw=1908&bih=979&scr_x=0&scr_y=0&eid=21066922%2C21068769%2C21069720&oid=3&pvsid=1835586822710445&pem=303&ref=https%3A%2F%2Fyandex.ru%2F&rx=0&eae=0&fc=1920&brdim=0%2C27%2C0%2C27%2C1920%2C27%2C1920%2C1053%2C1920%2C979&vis=1&rsz=%7C%7CoeE%7C&abl=CS&pfx=0&fu=8320&bc=31&jar=2021-01-25-22&ifi=1&uci=a!1&fsb=1&xpc=IjRyot5Nhm&p=https%3A//microkontroller.ru&dtd=3615

В настоящее время во встраиваемой электронике (и не только) достаточно широкое применение находят часы на семисегментных дисплеях (индикаторах). Ранее на нашем сайте мы уже рассматривали подключение семисегментного дисплея к плате Arduino Uno, также у нас представлены проекты различных часов на основе Arduino:

Внешний вид часов на Arduino и семисегментных дисплеях

В этой же статье мы рассмотрим создание часов на основе платы Arduino и четырех семисегментных дисплеях. Управление семисегментными дисплеями мы будем осуществлять с помощью технологии мультиплексирования.

Необходимые компоненты

  1. Плата Arduino UNO (купить на AliExpress).
  2. 4-х разрядный семисегментный дисплей (индикатор) (4-Digit 7 Segment Display) (купить на AliExpress).
  3. Микросхема 74HC595 (регистр сдвига) (купить на AliExpress).
  4. Модуль часов реального времени DS3231 (купить на AliExpress).
  5. Макетная плата.
  6. Соединительные провода.

4-х разрядный семисегментный дисплей (4-Digit 7 Segment Display)

Внешний вид 4-х разрядного семисегментного дисплея

4-х разрядный семисегментный дисплей состоит из четырех семисегментных дисплеев, объединенных в единое устройство. Иногда говорят, что эти дисплеи “мультиплексированы вместе”, поэтому для управления ими можно использовать технологию мультиплексирования. Этот дисплей можно использовать для отображения цифр, а также некоторых букв. Дисплей можно использовать в обоих направлениях. 4 символа удобно использовать для изготовления электронных часов или счетчика от 0 до 9999.

Распиновка 4-х разрядного семисегментного дисплея

На следующем рисунке показана внутренняя схема соединений 4-х разрядного семисегментного дисплея.

Внутренняя схема соединений 4-х разрядного семисегментного дисплея

Каждый сегмент дисплея имеет собственный светодиод и им можно индивидуально управлять. Светодиоды таким образом скомпонованы в составе дисплея, что каждый из них освещает только свой сегмент (к которому он относится). Семисегментные дисплеи могут быть с общим катодом и общим анодом, как показано на следующем рисунке.

Внутренние схемы соединений семисегментных дисплеев

В семисегментном дисплее с общим катодом (ОК) отрицательные выводы всех светодиодов соединены вместе и образую общую землю. В схеме с общим анодом (ОА) положительные выводы всех светодиодов соединены вместе и они образуют общий вывод напряжения постоянного тока (VCC).

На нашем сайте есть достаточно подробные статьи про устройство семисегментных дисплеев и их программированию – они написаны для микроконтроллеров семейства AVR, но я думаю провести аналогию с Arduino вам будет не трудно:

Также можно посмотреть статью о подключении семисегментного дисплея к микроконтроллеру AVR ATmega32.

Использование технологии мультиплексирования

Так каким образом мы можем на подобном 4-х символьном семисегментном дисплее отобразить, к примеру, число 1234? Это возможно сделать с использованием технологии мультиплексирования. Смысл этой технологии достаточно прост – в каждый момент времени мы отображаем только один символ (из 4-х возможных) на данном дисплее. Переключение между отображением всех 4-х символов происходит достаточно быстро – поэтому человеческий глаз воспринимает их непрерывно горящими.

Регистр сдвига 74HC595

Микросхема 74HC595 представляет собой 8-битовый регистр сдвига, работающий по принципу Serial IN – Parallel OUT (последовательный вход – параллельный выход). То есть данный регистр сдвига принимает входные данные последовательно и обеспечивает параллельный вывод этих данных на своих 8 контактах. С его помощью можно значительно уменьшить количество используемых контактов микроконтроллера (в нашем случае платы Arduino). Более подробно о подключении регистра сдвига 74HC595 к платы Arduino можно прочитать в этой статье.

Распиновка регистра сдвига 74HC595

Микросхема 74HC595 использует 3 контакта (Clock, Data & Latch) для подключения к микроконтроллеру и позволяет контролировать 8 своих выходных контактов. Контакт Clock используется для непрерывной подачи синхронизирующих импульсов, а контакт Data предназначен для подачи на него необходимых данных. Регистр сдвига 74HC595 работает по интерфейсу SPI, подробную информацию по использованию данного интерфейса в платах Arduino вы можете почерпнуть в этой статье. Назначение контактов микросхемы 74HC595 приведено на следующих двух рисунках.

Назначение контактов микросхемы 74HC595 (часть 1)
Назначение контактов микросхемы 74HC595 (часть 2)

Расшифровка обозначений контактов регистра сдвига74HC595 на русском языке выглядит следующим образом.

Q0-Q7 – восемь параллельных выходов общего назначения. Данные выходы нужны для того, чтобы мы могли как-то воспользоваться пришедшими данными по SPI – подключить линейку светодиодов, либо сегменты какого-то индикатора, либо дешифратор и т.д.

VCC – напряжение питания.

GND – общий провод.

Q7′ – последовательный выход данных. По сути — это MISO.

DS – последовательный вход данных или MOSI.

MR – это master reset. Сбрасывает все выходы в 0. Для нормального функционирования регистра сдвига на нем должна быть логическая 1.

SH_CP – в нашем случае это будет chip select.

ST_CP – это контакт управления регистром хранения, в нашем случае это будет контакт синхронизации, на который необходимо подавать тактовые импульсы. Но Arduino будет делать для нас это автоматически при использовании соответствующей команды.

OE – задействования выхода. При отрицательном значении последовательный выход включен, при положительном – выключен.

Модуль часов реального времени DS3231

Внешний вид данного модуля представлен на следующем рисунке.

Внешний вид модуля часов реального времени DS3231

Модуль предназначен для хранения времени и даты даже когда общее питание схемы выключено – для этой цели в его состав входит элемент питания CR2032. В состав модуля DS3231 входит также датчик температуры, поэтому его можно использовать в различных встраиваемых устройствах, например, в цифровых часах с индикатором температуры и т.д. Модуль работает по интерфейсу I2C. На нашем сайте вы можете посмотреть следующие проекты с использованием данного модуля:

Назначение контактов (распиновка) модуля DS3231 приведена в следующей таблице.

Наименование контактаНазначение контакта
VCCнапряжение питания
GNDобщий провод (земля)
SDAконтакт последовательной передачи данных (I2C)
SCLконтакт синхронизации (тактирования) (I2C)
SQWвыход прямоугольного сигнала (программируемый меандр)
32Kвыход меандра с частотой 32.768кГц

Теперь перейдем непосредственно к схеме нашего проекта.

Схема проекта

Схема часов на Arduino и 4-х разрядном семисегментном индикаторе представлена на следующем рисунке.

Схема часов на Arduino и 4-х разрядном семисегментном индикаторе

В следующей таблице представлены необходимые соединения между модулем часов реального времени и платой Arduino Uno.

DS3231Arduino Uno
VCC5V
GNDGND
SDAA4
SCLA5

В следующей таблице представлены необходимые соединения между регистром сдвига 74HC595 и платой Arduino Uno.

Регистр сдвига 74HC595Arduino Uno
11-SH_CP (SRCLK)6
12-ST_CP (RCLK)5
14-DS (Data)4
13-OE(Latch)GND
8-GNDGND
10-MR(SRCLR)+5V
16-VCC+5V

В следующей таблице представлены необходимые соединения между регистром сдвига 74HC595, 4-х разрядным семисегментным дисплей и платой Arduino Uno.

4-х разрядный семисегментный дисплейРегистр сдвига 74HC595Arduino Uno
AQ0
BQ1
CQ2
DQ3
EQ4
FQ5
GQ6
D110
D211
D312
D49

Внешний вид собранной конструкции проекта показан на следующем рисунке.

Внешний вид собранной конструкции проекта

Объяснение программы для Arduino

Полный код программы и видео, демонстрирующее работу проекта, приведены в конце статьи. Здесь же мы рассмотрим основные фрагменты кода программы.

В программе мы должны считывать время (часы и минуты в 24-часовом формате) с модуля часов реального времени и конвертировать их в формат для отображения на 4-х символьном семисегментном дисплее.

Для подключения модуля часов реального времени DS3231 к плате Arduino используется шина I2C. Для работы с данным модулем (считывания даты, времени, температуры и т.д.) мы в программе будем использовать библиотеку <DS3231.h>. Скачайте ее по следующей ссылке — DS3231 RTC module Arduino Library. Поскольку мы используем интерфейс I2C нам в программе необходимо будет подключить и библиотеку <wire.h>.

В нашем проекте часы и минуты считываются с модуля часов реального времени и они потом объединяются вместе, например, 0930 – это будет 09:30 pm. Затем мы выделяем индивидуальные цифры из этого считанного числа. Далее эти индивидуальные цифры преобразуются в двоичный формат и передаются на регистр сдвига, а с него на семисегментный дисплей. Для отображения всех четырех символов мы используем технологию мультиплексирования – то есть в каждый момент времени мы отображаем только один символ, но переключение между символами происходит с высокой частотой, поэтому человеческий глаз этого не замечает.

Итак, первым делом в программе подключим необходимые библиотеки. #include <Wire.h> #include<DS3231.h>

12#include <Wire.h>   #include<DS3231.h>

Далее инициализируем контакты для управления семисегментным дисплеем с помощью технологии мультиплексирования. #define latchPin 5 #define clockPin 6 #define dataPin 4 #define dot 2

1234#define latchPin 5                      #define clockPin 6#define dataPin 4#define dot 2

Далее объявим необходимые переменные. int h; //Variable declared for hour int m; //Variable declared for minute int thousands; int hundreds; int tens; int unit; bool h24; bool PM;

12345678910int h;               //Variable declared for hourint m;              //Variable declared for minuteint thousands;    int hundreds;int tens;int unit;  bool h24;bool PM;

Затем инициализируем объект RTC класса DS3231 – это упростит дальнейшую работу с модулем часов реального времени. DS3231 RTC;

1DS3231 RTC;

Далее с помощью команды wire.begin() инициализируем связь по протоколу I2C, при этом объекту RTC (модулю часов реального времени) присвоится адрес по умолчанию поскольку у нас в схеме больше нет устройств, использующих шину I2C. Wire.begin();

1Wire.begin();

Зададим режимы работы используемых контактов – на ввод или вывод данных. pinMode(9,OUTPUT); pinMode(10,OUTPUT); pinMode(11,OUTPUT); pinMode(12,OUTPUT); pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); pinMode(dot,OUTPUT);

12345678    pinMode(9,OUTPUT);    pinMode(10,OUTPUT);    pinMode(11,OUTPUT);    pinMode(12,OUTPUT);    pinMode(latchPin, OUTPUT);    pinMode(clockPin, OUTPUT);    pinMode(dataPin, OUTPUT);    pinMode(dot,OUTPUT);

Затем в бесконечном цикле loop мы будем непрерывно считывать время (часы и минуты) с модуля часов реального времени (RTC) DS3231. При этом ‘h24’ будет обозначать 24-часовой формат переменной для хранения времени. int h= RTC.getHour(h24, PM); int m = RTC.getMinute();

12    int h= RTC.getHour(h24, PM);     int m = RTC.getMinute();  

Затем часы и минуты упаковываются в одно число. Например, если число часов равно 10, а число минут равно 60, то результирующее число будет равно 10*100=1000+60 =1060. int number = h*100+m;

1int number = h*100+m;

Затем из этого числа мы будем извлекать индивидуальные цифры. Например, в числе 1060: 1 – тысячи, 0 – сотни, 6 – десятки и 0 – последняя цифра (единицы). Для разделения этих цифр мы будем использовать оператор остатка от деления. К примеру, чтобы выделить число тысяч в нашем примере — 1060/1000=1.06%10=1. Все эти цифры мы будем хранить в отдельных переменных. int thousands = number/1000%10; int hundreds = number/100%10; int tens = number/10%10; int unit = number%10;

1234    int thousands = number/1000%10;    int hundreds = number/100%10;     int tens = number/10%10;           int unit = number%10;

После этого с помощью операторов switch case каждую индивидуальную цифру мы конвертировать в соответствующий (двоичный) формат и передавать с помощью регистра сдвига на семисегментный дисплей. То есть мы каждую цифру преобразуем в такое двоичное число, чтобы при подаче его на семисегментный дисплей загоралась именно эта цифра. К примеру, цифра 1 преобразуется в формат 0000 0110 (число 6). После подачи его на семисегментный дисплей на нем высветится цифра 1 (0 for LOW, 1 for HIGH). switch (t) { case 0: unit = 63; break; case 1: unit = 06; break; case 2: unit =91; break; case 3: unit=79; break; case 4: unit=102; break; case 5: unit = 109; break; case 6: unit =125; case 7: unit = 07; break; case 8: unit = 127; break; case 9: unit =103; break; }

1234567891011121314151617181920212223242526272829303132switch (t){  case 0:  unit = 63;  break;  case 1:  unit = 06;  break;  case 2:  unit =91;  break;  case 3:  unit=79;  break;  case 4:  unit=102;  break;  case 5:  unit = 109;  break;  case 6:  unit =125;  case 7:  unit = 07;  break;  case 8:  unit = 127;  break;  case 9:  unit =103;  break;   }

Затем индивидуальные цифры в двоичном формате передаются с помощью функции shiftout. Для реализации технологии мультиплексирования соответствующие контакты сначала устанавливаются в LOW, а потом в HIGH. digitalWrite(9, LOW); digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST,thousands); digitalWrite(latchPin, HIGH); digitalWrite(9, HIGH); delay(5);

123456    digitalWrite(9, LOW);    digitalWrite(latchPin, LOW);    shiftOut(dataPin, clockPin, MSBFIRST,thousands);     digitalWrite(latchPin, HIGH);     digitalWrite(9, HIGH);            delay(5);

Аналогично и для числа сотен, десятков и единиц.

Используемая частота синхронизации (frequency of the clock) будет влиять на качество работы технологии мультиплексирования. Если она будет низкой, то вы будете замечать мерцание при работе наших часов на семисегментных дисплеях.

На следующем рисунке показан пример работы проекта.

Тестирование работы проекта часов на Arduino и 4-х разрядном семисегментном индикаторе

Исходный код программы (скетча)

//Four-Digit 7 Segments Multiplexing using Arduino: Display time in HH:MM
 //CIRCUIT DIGEST
 include     //библиотека для связи по протоколу I2C
 include    // библиотека для работы с модулем часов реального времени
 define latchPin 5
 define clockPin 6
 define dataPin 4
 define dot 2
 DS3231 RTC;         //объявляем объект RTC класса DS3231
 int h;              //переменная для хранения часов
 int m;              //переменная для хранения минут
 int thousands;     
 int hundreds;
 int tens;
 int unit;
 bool h24;
 bool PM;
 void setup () 
 {
     Wire.begin();    
     pinMode(9,OUTPUT);
     pinMode(10,OUTPUT);
     pinMode(11,OUTPUT);
     pinMode(12,OUTPUT);
     pinMode(latchPin, OUTPUT);
     pinMode(clockPin, OUTPUT);
     pinMode(dataPin, OUTPUT);
     pinMode(dot,OUTPUT);
 }
 void loop () 
 {
     digitalWrite(dot,HIGH);
     int h= RTC.getHour(h24, PM);  //считываем значение часов
     int m = RTC.getMinute();      //считываем значение минут
     int number = h*100+m;         //преобразуем часы и минуты в единое четырехзначное число
     int thousands = number/1000%10; //выделяем количество тысяч
     int hundreds = number/100%10;  // выделяем количество сотен
     int tens = number/10%10;        // выделяем количество десятков
     int unit = number%10;           //выделяем количество единиц
     int t= unit;
     int u= tens;
     int v= hundreds;
     int w= thousands;
 //Converting the individual digits into corresponding number for passing it through the shift register so LEDs are turned ON or OFF in seven segment – преобразуем наши цифры в специальный двоичный формат чтобы отображать их на семисегментных дисплеях
 switch (t)
 {
   case 0:
   unit = 63;
   break;
   case 1:
   unit = 06;
   break;
   case 2:
   unit =91;
   break;
   case 3:
   unit=79;
   break;
   case 4:
   unit=102;
   break;
   case 5:
   unit = 109;
   break;
   case 6:
   unit =125;
   case 7:
   unit = 07;
   break;
   case 8:
   unit = 127;
   break;
   case 9:
   unit =103;
   break;  
   }
 switch (u)
 {
   case 0:
   tens = 63;
   break;
   case 1:
   tens = 06;
   break;
   case 2:
   tens =91;
   break;
   case 3:
   tens=79;
   break;
   case 4:
   tens=102;
   break;
   case 5:
   tens= 109;
   break;
   case 6:
   tens =125;
   case 7:
   tens = 07;
   break;
   case 8:
   tens = 127;
   break;
   case 9:
   tens =103;
   break;  
   }
 switch (v)
   {
   case 0:
   hundreds = 63;
   break;
   case 1:
   hundreds = 06;
   break;
   case 2:
   hundreds =91;
   break;
   case 3:
   hundreds=79;
   break;
   case 4:
   hundreds=102;
   break;
   case 5:
   hundreds = 109;
   break;
   case 6:
   hundreds =125;
   case 7:
   hundreds = 07;
   break;
   case 8:
   hundreds = 127;
   break;
   case 9:
   hundreds =103;
   break;  
   }
 switch (w)
   {
   case 0:
   thousands = 63;
   break;
   case 1:
   thousands = 06;
   break;
   case 2:
   thousands =91;
   break;
   case 3:
   thousands=79;
   break;
   case 4:
   thousands=102;
   break;
   case 5:
   thousands = 109;
   break;
   case 6:
   thousands =125;
   case 7:
   thousands = 07;
   break;
   case 8:
   thousands= 127;
   break;
   case 9:
   thousands =103;
   break;  
   }
     digitalWrite(9, LOW);
     digitalWrite(latchPin, LOW);
     shiftOut(dataPin, clockPin, MSBFIRST,thousands);  // передаем количество тысяч
     digitalWrite(latchPin, HIGH);  // устанавливаем на контакте latch HIGH чтобы сохранить переданный символ 
     digitalWrite(9, HIGH);         // Turinig on that thousands digit
     delay(5);                      // задержка для мультиплексирования 
     digitalWrite(10, LOW);
     digitalWrite(latchPin, LOW);
     shiftOut(dataPin, clockPin, MSBFIRST,hundreds );    // передаем количество сотен
     digitalWrite(latchPin, HIGH);
     digitalWrite(10, HIGH);
     delay(5);                                 
 digitalWrite(11, LOW);
 digitalWrite(latchPin, LOW); 
shiftOut(dataPin, clockPin, MSBFIRST,tens);   // передаем количество десятков digitalWrite(latchPin, HIGH);
 digitalWrite(11, HIGH);
 delay(5); 
digitalWrite(12, LOW);
 digitalWrite(latchPin, LOW); 
shiftOut(dataPin, clockPin, MSBFIRST,unit);   // передаем количество единиц digitalWrite(latchPin, HIGH); 
digitalWrite(12, HIGH); 
delay(5);
 }

Видео, демонстрирующее работу часов на 4-х разрядном семисегментном дисплее

Похожие статьи

Бинарные часы на светодиодах с использованием Arduinohttps://googleads.g.doubleclick.net/pagead/ads?guci=2.2.0.0.2.2.0.0&client=ca-pub-9773002703636166&output=html&h=162&adk=3757989320&adf=1228866026&pi=t.aa~a.1409530251~rp.4&w=790&lmt=1611740202&nsk=b8f477ec&rafmt=11&pwprc=9686864792&psa=1&ad_type=text_image&format=790×162&url=https%3A%2F%2Fmicrokontroller.ru%2Farduino-projects%2Fchasy-na-arduino-i-semisegmentnyh-displeyah%2F&flash=0&pra=3&wgl=1&fa=26&adsid=ChAIgLvEgAYQ0vbrhPGIkptFEkwAdUp0syOIYDhDSCUCfKs1MBknhdIA9-BgYMU4-B6Fqcaa_PjrmX5OEYbZrZa5OZQKlj4UXY1T8u4SrA95s4aF-ZBMwc-phnQtLiX8&dt=1611740199711&bpp=3&bdt=12486&idt=4&shv=r20210120&cbv=r20190131&ptt=9&saldr=aa&abxe=1&cookie=ID%3D9110382969fd88c7-2274cd9ba0b900d1%3AT%3D1611523040%3ART%3D1611523040%3AS%3DALNI_MbmMnN0eBAoRwwEJnKpvJDxShMnTQ&prev_fmts=0x0%2C795x280&nras=2&correlator=2145012158775&frm=20&pv=1&ga_vid=1195319956.1611740199&ga_sid=1611740199&ga_hid=1498706494&ga_fc=0&u_tz=180&u_his=1&u_java=0&u_h=1080&u_w=1920&u_ah=1053&u_aw=1920&u_cd=24&u_nplug=0&u_nmime=0&adx=557&ady=15968&biw=1908&bih=979&scr_x=0&scr_y=14915&eid=21066922%2C21068769%2C21069720&oid=3&psts=AGkb-H_xbQjK_jSOJMi19fqqE0mBMEdsYTjSM1gLkkzN6dKtWleOSLuujyiMoI8Ddu07JTDlZq9XlcFuc9cdsQ&pvsid=1835586822710445&pem=303&ref=https%3A%2F%2Fyandex.ru%2F&rx=0&eae=0&fc=1792&brdim=0%2C27%2C0%2C27%2C1920%2C27%2C1920%2C1053%2C1920%2C979&vis=1&rsz=%7C%7Cs%7C&abl=NS&fu=8320&bc=31&jar=2021-01-25-22&ifi=2&uci=a!2&btvi=1&fsb=1&xpc=Z6Alv05WGI&p=https%3A//microkontroller.ru&dtd=2309 Как использовать регистр сдвига 74HC595 с Arduino Uno Часы реального времени с будильником на основе Arduino (Проголосуй первым!)
1 668 просмотров Рубрика: Схемы на Arduino Метки: 74HC595, arduino, arduino uno, DS3231, регистр сдвига, семисегментный дисплей, система реального времени, цифровые часыПостоянная ссылка

Навигация по записям

← Последовательная связь с помощью RS-485 между Raspberry Pi и Arduino UnoОбъезжающий препятствия робот на Arduino →

робот конечно непростое устройство и очень нужное. а вот попроще но тоже нужное — пульт для телека на Ардуино, да еще с запоминанием команд с другого пульта (Кто не знает — у пульта с приставки Акадо есть такая же функция). Одним пультом включаем телек приставку, убавляем кондиционер и приглушаем свет диммером.

Датчик воды для насоса или полива, защита от переполнения водонапорной бочки и соответственно потопа и перерасхода электричества. То же самое для откачки воды из подвала -хозяина нет а микроконтроллер заводит генератор, заряжает батареи и включает насосы как только обнаружена вода. Заглушает как только все зарядилось, если мало бензина или солярки отправляет сообщение.

Включение мотора и прогрев двигателя утром часов в 6 перед поездкой. (проверив установлена ли машина на ручник и не включена ли передача на механике, а заодно нет ли кошек в моторном отсеке).

Умный контроллер солнечной батареи — может работать с розетками управляющимися по bluetooth, заряжать аккумуляторы если появилось солнце или включился генератор, отключать мощные нагрузки когда мало энергии, и при этом не отключить газовый котел ночью и зимой конечно, заменяя бесперебойник . (конечно цена такой системы несравнима с Ардуино, штук 6 курских панцирных аккумуляторов — такие же как немецкие OPZV, нужен газовый котел и конечно же магистральный газ — если он недоступен то банка с газом как на заправке, то есть 200т.р если газ есть и 7- 10 в месяц либо тысяч 600 еще и заправка тысяч на 30 ну на 15 если дом небольшой. Что тоже дешевле раза в 3 чем топить электричеством полностью).


Все теперь Вы в секту приняты, микроконтроллер в руках держали и за разбираетесь в этом

Download Attachments

Перейти к верхней панели