89 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Тв приставка на ардуино амперка. Шаг четверый. Завершение

Что можно приготовить из кальмаров: быстро и вкусно

Если вы когда-нибудь почувствуете, что вашему Arduino-проекту стало тесно на алфавитно-цифровом дисплее 1602, обязательно обратите внимание на проект TellyMate Shield . Он позволяет выводить ту же алфавитно-цифровую информацию на обычный телевизор, через видео-вход.

При определенном везении можно заполучить весьма внушительных размеров дисплей (если телевизор имеет прилично дюймов в диагонали), работающий в режиме телетайпа 38 x 25 знакомест. Впрочем, бросив первый взгляд на схему, ловишь себя на мысли о розыгрыше. В самом деле:

Обычный ATmega8 на тактовой частоте 16 МГц формирует два компонента видеосигнала, которые смешиваются нехитрой схемой из двух резисторов и двух диодов. Группой переключателей S1 устанавливаются режимы работы; согласующий резистор 75 Ом подключается через перемычку и добавлен, скорее, для универсальности (думаю, в большинстве случаев не понадобится).

Arduino выводит информацию для отображения через последовательный порт – пины RX/TX. Если вас смущает, что по ним же происходит загузка скетча и во время этого процесса на экране появляется некая “ерунда”, можно уйти на любой пин с помощью библиотеки SoftwareSerial. Поддерживаются разные скорости, а также есть возможность автоопределения. Простейший скетч выглядит так:

Serial . begin (57600 ); //57k6 baud Serial . println (“Hello, world!” );

К сожалению, изображение формируется исключительно черно-белое. Зато внутри имеем полноценный знакогенератор кодовой страницы 437, в котором есть псевдографика:

Вы, наверное, заметили, что для вывода видео использован аудио-разъем 3,5мм. На самом деле, это не казус, а вполне осознанный выбор, ограничивающий высоту элементов и делающий возможным стекирование шилдов:

Кроме вывода обычных символов, поддерживаются так называемые ESCAPE-последовательности, которые управляют курсором, удваивавают высоту и/или ширину символов и даже переключают банки шрифтов и переопределяют символы (что, впрочем, возможно только на ATmega328P, где памяти гораздо больше, чем у ATmega8). Таким же образом можно получить версию прошивки и прочую диагностическую информацию.

Поскольку все материалы доступны и открыты для доработки, мы решили немного поэкспериментировать и создать на базе этого шилда русифицированный вариант. Имя “TellyMate”, подобно Arduino, является торговой маркой – поэтому пришлось назвать наш вариант Freeduino Teleсhat :

Все детали – PTH, поскольку шилд задумывался изначально в формате кита для самостоятельной сборки – и что может быть лучше, чем собрать всё самостоятельно? 😉 Пины RX/TX имеют перемычки под пайку с обратной стороны платы, так что при желании их можно перерезать и подпаять к любым другим пинам. Аналогичным способом отключается и кнопка сброса – если не хотите, чтобы МК шилда сбрасывался синхронно со скетчем Arduino.

Краткое руководство по сборке шилда:

Русифицированный шрифт мы разместили точно таким же способом, что и автор – в виде ссылки на документ в GDocs, копию которого при необходимости можно сохранить у себя. В открытом документе надо зайти на последнюю закладку, генерирующую hex, и скопировать ее содержимое в файл fontbank0.c , подменив его в исходниках (можно скачать со страницы проекта). После компиляции получите прошивку c поддержкой кодовой страницы 866. Именно она и зашивается в ATmega8, входящие в комплект наборов Freeduino TeleChat.

Для вывода русского текста потребуется еще кое-что сделать. Как известно, ArduinoIDE хранит все символы в кодировке UTF-8, и для нормальной работы потребуется их транслировать в кодировку 866. Делать это в оригинальной прошивке нам показалось святотатством – авторы очень скрупулезно рассчитали все задержки в коде. Предлагаем самый простой вариант перекодирующей функции:

byte c1 = 0; void tele_print_char(char cd) < byte c = cd; if (c >= 0x80) < // UTF-8 handling if (!c1) < c1 = c; >else < if (c1 == 0xd0) < if (c == 0x81) Serial .print (char (0xf0)); // Ё else Serial .print ((char ) (c – 0x10)); > if (c1 == 0xd1) < if (c == 0x91) Serial .print (char (0xf1)); // ё else Serial .print ((char ) (c + 0x60)); > c1 = 0; > > else Serial .print (cd); > void tele_print_str(char *s) < for (int i=0;i TVout TV; unsigned char x, y; void setup () < TV.start_render(_NTSC); >void loop ()

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

  • begin(mode) Начало вывода информации на экран. Разешение стандартное — 128х96
  • begin(mode,x,y) Начало вывода информации на экран. Разешение определяется пользователем аргументами x,y
  • end() Очистка видеобуфера
  • force_vscale(sfactor) Force the number of times to display each line.
  • force_outstart(time) Force the time to start outputting on an active line.
  • force_linestart(line) Force line to start outputting on.
  • set_vbi_hook(func) Set the function to be called once per vertical blanking period.
  • set_hbi_hook(func) Set the function to be called once per horizontal blanking period.
  • hres() Команда возвращает значение горизонтального разрешения,
  • vres() Команда возвращает значение вертикального разрешения,
  • char_line() Команда возвращает значение количества символов, которые поместятся в строку.
  • set_pixel(x,y,color) Установка цвета пикселя по заданным координатам
  • get_pixel(x,y) Установка пикселя с заданными координатами в качестве точки отсчета.
  • fill(color) Заливка экрана заданным цветом.
  • clear_screen() Очистка экрана.
  • invert() Инвертирование изображение на экране.
  • shift(distance,direction) Прокрутка экрана на заданную дистанцию в любом из 6 направлений.
  • draw_line(x0,y0,x1,y1,color) Создание прямой с координат (x0,y0) до координат (x1,y1).
  • draw_row(row,x0,x1,color) Заполнение строки с координатами от x0 to x1 заданным цветом.
  • draw_column(column,y0,y1,color) Заполнение столбца с координатами от у0 до у1 заданным цветом.
  • draw_rect(x,y,w,h,color,fillcolor) Отображение прямоугольника с началом в координатах (x,y) с размерами(h,w), и заполнение заданным цветом.
  • draw_rect(x,y,w,h,color) Отображение прямоугольника с началом в координатах (x,y) с размерами(h,w).
  • draw_circle(x,y,radius,color,fillcolor) Отображение окружности с центором в координатах (x,y) с радиусом (RADIUS) и его заполнение заданным цветом
  • draw_circle(x,y,radius,color) Отображение окружности с центором в координатах (x,y) с радиусом (RADIUS).
  • bitmap(x,y,bmp,i,width,height) Отображение заданного изображения в координатах..
  • print_char(x,y,c) Печать символа в координатах (x,y).
  • set_cursor(x,y) Установка позиции для вывода слеующего символа.
  • select_font(font) Установка шрифт для вывода текста.
  • print() Вывод текста.
  • println() Вывод пстой строки.
  • printPGM() Вывод строки с текстом из памяти программы.
  • tone(frequency) Тональный сигнал с заданной частостой.
  • tone(frequency,duration) Тональный сигнал заданной частоты и длительности.
  • noTone() Прикращение вывода тонового сигнала.

Подключаем Ардуино к ТВ

Небольшой урок в котором вы узнаете, как подключить Arduino к телевизору (ТВ) для отображения текста, информации и графики.

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

Комплектующие

По традиции начинаем с деталей, которые нам нужны будут для проекта:

  • 1x — Arduino Uno
  • 1x — 470 Ом резистор
  • 1x — 1 кОм резистор
  • 1x — ТВ с композитным видеовходом
  • 1x — Композитный видеокабель (разъем RCA)

Схема подключения Ардуино к ТВ

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

Как это работает?

Теперь поговорим о том, как работают композитные телевизионные сигналы.

Композитные телевизионные сигналы довольно сложны и запутанны, поэтому мы рассмотрим только основы. Следует также отметить, что мы будем рассматривать только PAL, а не NTSC, поскольку у них несколько разные тайминги, и мы большей частью живем в Европе, которая использует PAL.

Скорость, с которой телевизоры показывают серию изображений для формирования движущегося изображения, называется кадрами в секунду (также известными как FPS). Поскольку каждый кадр является неподвижным изображением, и эти изображения на телевизоре рисуются по строкам, изображения отправляются на телевизор последовательно, каждый пиксель отправляется по одному за раз. Но если линия изображения является последовательными данными, как определяется яркость? В отличие от цифрового последовательного соединения сигналы PAL являются аналоговыми, а напряжение на последовательной линии определяет, насколько ярким является пиксель. На приведенном ниже графике показан график PAL и значения разных напряжений.

Если входной сигнал равен 0 В, телевизор видит это как сигнал синхронизации. В зависимости от того, как выполняется синхронный сигнал, его можно использовать для передачи ТВ одной из двух вещей:

  • Горизонтальная синхронизация — готовность отобразить следующую строку на нашей картинке
  • Вертикальная синхронизация — готовность к совершенно новому изображению

Напряжение между 0,3 В и 1 В — это пиксели изображения, где 0,3 В представляет черный пиксель, 1 В представляет белый пиксель, а напряжения между ними являются серыми. Цветные пиксели не будут покрываться, так как цвет очень сложный, используя сигналы фазового сдвига и цветовой синхронизации. Итак, как мы можем достичь этих уровней напряжения, если у нас нет аналогового выхода на Arduino Uno? Вот зачем наши два внешних резистора!

Arduino Uno при использовании в сочетании с библиотекой TV Out имеет два контакта: видео и синхронизацию. Вывод видеосигнала используется для передачи видеоданных (отдельные пиксели), а синхросигнал используется для синхронизации телевизора. Эти два контакта соединены вместе через R1 и R2, которые образуют простой делитель потенциалов, который дает следующие уровни напряжения.

Установка ТВ библиотеки

Начните с загрузки Arduino IDE, затем нажмите:

Sketch → Include Library → Manage Libraries
(Эскиз → Включить библиотеку → Управление библиотеками)

В открывшемся окне библиотеки выберите строку поиска и введите «TV Text».

Когда поиск будет завершен, выберите библиотеку ТВ-текста «TV Text» и нажмите «установить» (англ. — install).

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

File → Examples → TV Out → Demo PAL
(Файл → Примеры → TV Out → Demo PAL)

Сборка устройства

Этот проект использует макет, чтобы помочь подключить Arduino Uno к двум резисторам и композитному видеокабелю. Ардуино подключен к компьютеру для легкого программирования, а также для обеспечения питания, и как только настройка будет выполнена (как показано ниже), вы можете запрограммировать Arduino и включить телевизор.

Если все идет по плану, у вас должно быть что-то похожее на экране телевизора, показанном ниже:

Это был первый урок из серии взаимодействия Ардуино и ТВ. Если мы получим хорошую обратную связь мы продолжим публикации уроков в данном направлении. Все отличных проектов.

Arduino или AVR. Что лучше?

Arduino или AVR? Что лучше использовать в своих разработках?

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

Читать еще:  Демо вариант егэ по информатике. Изменения в демонстрационных вариантах егэ по информатике. Структура КИМ ЕГЭ

Переход к созданию своих устройств на практике бывает затруднен. Но решение есть. Оно довольно простое и не очень затратное. Многие, думаю, слышали о такой платформе под названием “Arduino”.

Arduino – это электронный модуль-конструктор, имеющий в своем составе МК AVR, который является мозгом всего этого конструктора. Отличие от самого МК AVR – это упрощенное программирование, большое количество дешевых периферийных устройств, которые можно купить без проблем, а также простая и безопасная “заливка” программы в МК.

Блок-схема платы Arduino до боли проста:

Периферийными устройствами в данном случае являются разные датчики контроля, а также исполняемые устройства. Всем этим винегретом заправляет МК AVR, который установлен посередине платы 😉

Вот некоторые из периферийных устройств.

В процессе изучения мы будем знакомиться с ними поближе

Виды Arduino

Существуют несколько разных моделей Arduino. Некоторые дешевле, а некоторые дороже. Как вы поняли, дешевые модели резко ограничены по функционалу, а также по количеству выводов. Устаревшие модели мы рассматривать не будем, а рассмотрим только те, которые можно недорого приобрести у наших друзей китайцев на сайте Алиэкспресс:

Сама приставка “мега” говорит уже сама за себя. Самый мощный конструктор.

У резанная версия модели Arduino Mega, у которой, как видите, уже меньше выводов для подключения периферийных устройств. Если будете брать, то лучше брать сразу кит-набор. При большом желании можете глянуть на Али по этой ссылке.

Также на плате Arduino UNO и Mega распаян стабилизатор питания, позволяющий питать плату от батареи Крона, либо через переходник от китайского адаптера – блока питания. Оптимальное напряжение питания 9-12 Вольт

Думаю, проще уже некуда. На али выбор этой модели огромный .

Все эти три модели – Mega, Uno, Nano – имеют в своем составе составе конвертер USB-Serial и разъем USB. Это означает, что для заливки программы (на языке Arduino – скетча), нам нет необходимости покупать программатор.

Arduino Pro Mini

Для Pro Mini уже необходим программатор. Но это не обычный программатор, типа USBasp, с помощью которого мы шили микроконтроллеры AVR. Здесь уже требуется программатор USB-Serial, который уже встроен в Uno, Nano и Mega, но не имеется в Mini. Стоимость его в среднем чуть меньше 1$. Вот вам ссылка на Али на саму модель Pro Mini, а вот ссылка на программатор.

Какой Arduino лучше?

Какой из Ардуино лучше для начала осваивания работы? Мое мнение – это Arduino Uno. Mega будет стоить дороже, да и зачем новичку такой супер-конструктор? Uno удобнее всего подключать к ПК и для него не требуется паять штырьки, для того чтобы вставить в макетную плату, так как они уже есть. Он полностью готов к работе. Nano и Pro Mini требуют предварительного впаивания гребенки штырьков:

Но если вы уже с паяльником на “ты” и хотите немного сэкономить, то можете приобрести Arduino Nano. Если же вы отладили какое-либо устройство и хотите уже использовать его многие годы, тут как нельзя кстати подойет Pro Mini. Маленький, удобный, а главное – дешевый.

На всех четырех перечисленных моделях Arduino размещены кварцевые резонаторы, используемые для тактирования МК. Также имеется индикация в виде мигания светодиодов при заливке прошивки. Цена Nano и Mini существенно ниже, чем Uno, и приблизительно равна стоимости среднего по функционалу микроконтроллера AVR.

Сравнение плат Arduino – довольно важная вещь. Новичку, не имеющему опыта работы с ней, легко растеряться в многообразии плат и выбрать неподходящую модель. Конечно, выбор той или иной платы зависит от проекта, однако в общем разъяснить новичкам об особенностях каждой платы не помешает:
– Arduino Mega
Одна из самых мощных плат в линейке Arduino. Имеет память аж 256 Кб, которой хватит на 99,9% проектов, 54 цифровых входов/выходов и 16 аналоговых входов.
– Arduino Uno
Наиболее распространённая ардуинка, имеет память 32 Кб, 14 цифровых входов/выходов и 6 аналоговых входов. Немного, по сравнению с Mega, но для многих проектов хватает.
– Arduino Nano
Вопреки ожиданиям от слова “нано” она даже мощнее Uno. Имеет 14 цифровых входов/выходов и 8 аналоговых входов и память тоже 32 Кб, так, как построена на том же МК ATMega328, что и Uno.
– Arduino Pro Mini
Самая слабая плата. Имеет память 16 Кб, 14 цифровых входов/выходов и 4 аналоговых входа. К тому же, обвязка платы настолько ограничена, что она отличается от простого МК лишь кнопкой перезагрузки reset и стабилизатором питания.

Какую же выбрать новичку? Nano отлично подходит для готовых проектов, а Uno – для освоения Arduino, на ней удобнее учиться. Nano очень компактное и дешевле Uno, а Uno удобнее питать и подключать. Pro Mini не оправдывает своей стоимости, да и к ней надо покупать программатор, к тому же её очень неудобно питать.

Программа Arduino IDE

Для написания программ используется собственная среда разработки Arduino. Те, кто пытались освоить работу с Atmel Studio 6, помнят, какое там количество настроек. Сходу разобраться нереально. Здесь же наоборот, мы видим простой интерфейс и только все самое необходимое. Скачать ее можно здесь. Есть также версии посвежее, но это не влияет на работоспособность программы.

Arduino является открытой платформой. Именно это принесло ей такую большую популярность. Для нее было выпущено много клонов под разные версии. Кстати если вы начнете работать именно с китайским клоном, а не с оригинальным Arduino, что скорее всего и произойдет, то вам потребуется установить драйвер под китайский адаптер Usb-Serial, распаянный на плате. Как отличить китайский Ардуино от оригинала? Если присмотреться к модулю, то можно увидеть вот такую микросхему:

Если она имеется, то ардуино китайский. Для него драйвер устанавливается вручную через “Диспетчер устройств”. Никаких проблем при установке замечено не было. Скачать драйвер можно здесь.

Далее нам надо выбрать нужную нам модель Arduino из списка

Ну а потом выбираем COM-порт в системе, к которой у нас подключена Arduino.

Ну вот и все! Совсем ничего сложного 😉

Вывод

Итак, вернемся к теме нашей статьи. Что же все-таки лучше изучать? Голые МК AVR или взять набор Arduino?

Для новичков часто бывает проблемой выставление фьюзов у МК AVR. Этого минуса лишены все Ардуино. Там просто нет такой функции при подключении через USB кабель. Также при небрежном выставлении фьюзов можно залочить дорогой МК AVR, который не всегда просто реанимировать. В Ардуино залочить МК нереально. При прошивке программатором ISP USBASP, мы можем прошить МК Ардуино, как и любой другой МК AVR.

Также одним важным отличием Ардуино от МК AVR – это наличие худшей оптимизации размера кода. То есть программа, которая выполняет одни и те же действия на МК и Arduino будет иметь разный вес. На Arduino она будет весить больше. И может даже случиться так, что просто не войдет в память. Микроконтроллеры AVR имеют более широкие возможности в создании электронных устройств, но есть у них и свои минусы – это необходимость наличия программатора, источника питания, а также мощного компьютера для комфортной работы в Atmel Studio 6.

Этой публикацией мы начинаем цикл статей, посвященных конструированию электронных устройств на платформе Arduino. Оставайтесь с нами и мы поэтапно, следуя от простого к сложному, разберем самостоятельную сборку электронных устройств. Будут рассмотрены разные модели Arduino, программатор Usb – Serial и её периферия. Вы научитесь самостоятельно писать скетчи в среде разработки и обязательно соберете все то, что давно хотели собрать, но затруднялись в создании на практике.

Самодельная цифровая приставка осциллограф к компьютеру своими руками

Осциллограф к ПК – это устройство, которое позволяет графически наблюдать электрический сигнал. Следуя данной инструкции, вы сможете сконструировать недорогой осциллограф своими руками.

Шаг 1: Используем контроллер Arduino Uno

В интернет-магазинах контроллер Arduino Uno стоит в пределах 20 долларов.

Шаг 2: Устанавливаем приложение Arduino IDE и библиотеку TimerOne.h

Прежде всего, если у вас не установлена среда разработки Arduino, скачайте и установите ее с сайта Arduino.

Установите библиотеку «TimerOne.h» для Arduino IDE, следуя следующим инструкциям:

  1. В приложении Arduino выберите пункт меню «Sketch» (см. фото).
  2. Далее «Include Library».
  3. «Manage Libraries…».
  4. Выберите «all» в окне «Type» и «all» в окне «Topic». В пустое поле введите «TimerOne» (без кавычек).
  5. Ниже появится информация о библиотеке.
  6. Щелкните на этом тексте, и появится кнопка «Install».
  7. Нажмите кнопку «Install».
  8. Перезапустите программу.

Шаг 3: Скачиваем скетч и загружаем его в приложение Arduino

  1. Загрузите и разархивируйте скетч для Arduino: ((oscilloscope_arduino.ino)).
  2. Подключите контроллер Arduino к компьютеру через USB-порт.
  3. Запустите приложение Arduino IDE.
  4. Откройте загруженный скетч «oscilloscope_arduino.ino».
  5. Выберите порт, к которому подключен контроллер (см. фото).
  6. Загрузите программу в контроллер Arduino.

Шаг 4: Скачиваем программу Oscilloscope

Загрузите и распакуйте программу. Выберите файл для вашей операционной системы:

Запустите exe-файл (например, Windows 64 => oscilloscope_4ch.exe).

Важно: не удаляйте папку «lib» из директории с программой.

На компьютере должна быть установлена программа «Java» не ниже 8-й версии.

Шаг 5: Если oscilloscope_4ch.exe не работает…

Если, по какой-либо причине программа oscilloscope_4ch.exe не работает, выполните следующее:

  1. Установите утилиту Processing IDE.
  2. Загрузите и разархивируйте скетч Processing source oscilloscope program.
  3. Запустите утилиту «Processing IDE» и откройте в ней скетч «oscilloscope_4ch.pde».
  4. Запустите программу, нажав на значок с треугольником (см. фото).

Шаг 6: Настраиваем последовательный порт для сопряжения контроллера Arduino с программой Oscilloscope

  1. Запустите программу «Oscilloscope»; контроллер Arduino подключите к компьютеру через USB-порт. Теперь вам нужно «подружить» их друг с другом через последовательный порт.
  2. В поле «Configurar Serial» (Настройка последовательного интерфейса) нажимайте на поле «select serial» до тех пор, пока не появится порт, к которому подключен Arduino (если он не появился, нажмите на кнопку «refresh» для обновления).
  3. Нажимайте кнопку «select speed» пока не появится скорость 115200.
  4. Нажмите кнопку «off»; надпись на ней изменится на «on».
  5. Если все правильно сделано, самодельный осциллограф покажет 4 канала [A0 (ch-0), A1 (ch-1), A2 (ch-2) и A3 (ch-3)].

Если подключение настроено неправильно, вы увидите на изображении «шум».

Шаг 7: Соединяем выход (

10) со входом (A0), а выход (

С помощью проводов, подключите цифровой выход 10 контроллера Arduino к его аналоговому входу A0, а выход 9 – к входу A1.

На экране появится сигнал, похожий на тот, который показан на фото. Сигналы на цифровых выходах 9 и 10 задаются блоком «Ger.Sinal» программы: на выходе 9 генерируется ШИМ-сигнал частотой 10 Гц (Т = 100 мс) при Ton = 25 %; на выходе 10 – сигнал, равный удвоенному периоду 2Т (200 мс).

Читать еще:  Как поставить защиту от детей на интернет

Вы можете самостоятельно настроить значения в блоке «Ger.Sinal», перетаскивая ползунок или щелкая по элементу управления.

Шаг 8: Подсказки

  1. Поставьте галочку напротив параметра «Trigger» на Ch-0 (красный), чтобы стабилизировать сигнал.
  2. Чтобы удалить изображения сигналов Ch-2 и Ch-3, нажмите на заголовки «Ch-2» и «Ch-3».
  3. Чтобы наблюдать фигуры Лиссажу, нажмите на заголовок «XYZ».
  4. Чтобы определять частоты, поставьте галочку «detectar freq.» (обнаружить частоту).
  5. Чтобы измерить напряжение и время / частоту, нажмите «medir» (измерение).
  6. Для изменения значения шкалы регулировки, нажмите между вертикальными линиями или перетащите ползунок, обозначенный двумя треугольничками (см. рисунок).
  7. Программа имеет гораздо больше настроек. Исследуйте их самостоятельно.

Шаг 9: Определяем частоту вспышки фонарика

Вы можете узнать частоту мигания фонарика, используя фоторезистор (LDR) и обыкновенный резистор (см. рисунок).

Шаг 10: Определяем частоту вращения вентилятора

Чтобы узнать частоту вращения вентилятора, используйте схему из шага 9, только фонарик должен гореть постоянно.

Подставив значение частоты из компьютерного осциллографа в формулу на рисунке, определите частоту вращения вентилятора.

Шаг 11: Анализируем сигнал от пульта дистанционного управления

Вы можете увидеть ИК-сигнал от пульта дистанционного управления с помощью фототранзистора TIL78.

Соберите схему по рисунку и следуйте следующим инструкциям:

  1. Установите значение «dt» равным 2 мс или 100 мкс.
  2. Включите «Trigger» канала Ch-0.
  3. Увеличьте уровень, перетащив ползунок (см. рисунок).
  4. Нажмите кнопку «UMA»: осцилограф перейдет в режим ожидания.
  5. Нажмите любую кнопку на пульте дистанционного управления, предварительно направив его на фототранзистор.
  6. Анализируйте график.

Шаг 12: Тестируем компоненты или устройства

Приставку осциллограф к компьютеру можно использовать для тестирования различных электронных компонентов или устройств.

В этом примере мы протестируем маленький джойстик для проектов Arduino.

  1. Соберите схему, показанную на рисунке.
  2. Синхронизируйте программу с контроллером Arduino.
  3. Нажмите «fluxo» (поток), чтобы Arduino отправлял каждое значение сразу после прочтения.
  4. Установите значение параметра «dt» равным 100 мс (для медленного чтения).
  5. Выключите «Ch-3», нажав на заголовок.
  6. Установите значение параметра «v/div» равным 5 (во время установки нажмите и держите клавишу «Shift», чтобы настроить все каналы одновременно).
  7. Переместите маленький треугольник слева канала «Ch-0» вверх (нажав клавишу «Shift»).
  8. Включите канал «XYZ» и перетащите ползунок параметра «v/div» до конца вправо.
  9. Перемещайте джойстик во все стороны и понажимайте кнопку несколько раз.
  10. Наблюдайте кривые.

Шаг 13: Определяем параметры резисторов и конденсаторов

Поле «medir res./cap.» предназначено для измерения значений резисторов и конденсаторов, но оно будет работать только при подключении схемы, изображенной на рисунке.

Данная функция может самостоятельно определять, какой из компонентов подключен: резистор или конденсатор и определить правильное значение параметра, используя 3 шкалы (низкие, средние или высокие значения).

Шаг 14: Хотите больше возможностей?

Скачайте полный проект с сайта GitHub.

Посмотрите видео на YouTube.

Рассказываю как сделать какую-либо вещь с пошаговыми фото и видео инструкциями.

Arduino или AVR. Что лучше?

Arduino или AVR? Что лучше использовать в своих разработках?

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

Переход к созданию своих устройств на практике бывает затруднен. Но решение есть. Оно довольно простое и не очень затратное. Многие, думаю, слышали о такой платформе под названием “Arduino”.

Arduino – это электронный модуль-конструктор, имеющий в своем составе МК AVR, который является мозгом всего этого конструктора. Отличие от самого МК AVR – это упрощенное программирование, большое количество дешевых периферийных устройств, которые можно купить без проблем, а также простая и безопасная “заливка” программы в МК.

Блок-схема платы Arduino до боли проста:

Периферийными устройствами в данном случае являются разные датчики контроля, а также исполняемые устройства. Всем этим винегретом заправляет МК AVR, который установлен посередине платы 😉

Вот некоторые из периферийных устройств.

В процессе изучения мы будем знакомиться с ними поближе

Виды Arduino

Существуют несколько разных моделей Arduino. Некоторые дешевле, а некоторые дороже. Как вы поняли, дешевые модели резко ограничены по функционалу, а также по количеству выводов. Устаревшие модели мы рассматривать не будем, а рассмотрим только те, которые можно недорого приобрести у наших друзей китайцев на сайте Алиэкспресс:

Сама приставка “мега” говорит уже сама за себя. Самый мощный конструктор.

У резанная версия модели Arduino Mega, у которой, как видите, уже меньше выводов для подключения периферийных устройств. Если будете брать, то лучше брать сразу кит-набор. При большом желании можете глянуть на Али по этой ссылке.

Также на плате Arduino UNO и Mega распаян стабилизатор питания, позволяющий питать плату от батареи Крона, либо через переходник от китайского адаптера – блока питания. Оптимальное напряжение питания 9-12 Вольт

Думаю, проще уже некуда. На али выбор этой модели огромный .

Все эти три модели – Mega, Uno, Nano – имеют в своем составе составе конвертер USB-Serial и разъем USB. Это означает, что для заливки программы (на языке Arduino – скетча), нам нет необходимости покупать программатор.

Arduino Pro Mini

Для Pro Mini уже необходим программатор. Но это не обычный программатор, типа USBasp, с помощью которого мы шили микроконтроллеры AVR. Здесь уже требуется программатор USB-Serial, который уже встроен в Uno, Nano и Mega, но не имеется в Mini. Стоимость его в среднем чуть меньше 1$. Вот вам ссылка на Али на саму модель Pro Mini, а вот ссылка на программатор.

Какой Arduino лучше?

Какой из Ардуино лучше для начала осваивания работы? Мое мнение – это Arduino Uno. Mega будет стоить дороже, да и зачем новичку такой супер-конструктор? Uno удобнее всего подключать к ПК и для него не требуется паять штырьки, для того чтобы вставить в макетную плату, так как они уже есть. Он полностью готов к работе. Nano и Pro Mini требуют предварительного впаивания гребенки штырьков:

Но если вы уже с паяльником на “ты” и хотите немного сэкономить, то можете приобрести Arduino Nano. Если же вы отладили какое-либо устройство и хотите уже использовать его многие годы, тут как нельзя кстати подойет Pro Mini. Маленький, удобный, а главное – дешевый.

На всех четырех перечисленных моделях Arduino размещены кварцевые резонаторы, используемые для тактирования МК. Также имеется индикация в виде мигания светодиодов при заливке прошивки. Цена Nano и Mini существенно ниже, чем Uno, и приблизительно равна стоимости среднего по функционалу микроконтроллера AVR.

Сравнение плат Arduino – довольно важная вещь. Новичку, не имеющему опыта работы с ней, легко растеряться в многообразии плат и выбрать неподходящую модель. Конечно, выбор той или иной платы зависит от проекта, однако в общем разъяснить новичкам об особенностях каждой платы не помешает:
– Arduino Mega
Одна из самых мощных плат в линейке Arduino. Имеет память аж 256 Кб, которой хватит на 99,9% проектов, 54 цифровых входов/выходов и 16 аналоговых входов.
– Arduino Uno
Наиболее распространённая ардуинка, имеет память 32 Кб, 14 цифровых входов/выходов и 6 аналоговых входов. Немного, по сравнению с Mega, но для многих проектов хватает.
– Arduino Nano
Вопреки ожиданиям от слова “нано” она даже мощнее Uno. Имеет 14 цифровых входов/выходов и 8 аналоговых входов и память тоже 32 Кб, так, как построена на том же МК ATMega328, что и Uno.
– Arduino Pro Mini
Самая слабая плата. Имеет память 16 Кб, 14 цифровых входов/выходов и 4 аналоговых входа. К тому же, обвязка платы настолько ограничена, что она отличается от простого МК лишь кнопкой перезагрузки reset и стабилизатором питания.

Какую же выбрать новичку? Nano отлично подходит для готовых проектов, а Uno – для освоения Arduino, на ней удобнее учиться. Nano очень компактное и дешевле Uno, а Uno удобнее питать и подключать. Pro Mini не оправдывает своей стоимости, да и к ней надо покупать программатор, к тому же её очень неудобно питать.

Программа Arduino IDE

Для написания программ используется собственная среда разработки Arduino. Те, кто пытались освоить работу с Atmel Studio 6, помнят, какое там количество настроек. Сходу разобраться нереально. Здесь же наоборот, мы видим простой интерфейс и только все самое необходимое. Скачать ее можно здесь. Есть также версии посвежее, но это не влияет на работоспособность программы.

Arduino является открытой платформой. Именно это принесло ей такую большую популярность. Для нее было выпущено много клонов под разные версии. Кстати если вы начнете работать именно с китайским клоном, а не с оригинальным Arduino, что скорее всего и произойдет, то вам потребуется установить драйвер под китайский адаптер Usb-Serial, распаянный на плате. Как отличить китайский Ардуино от оригинала? Если присмотреться к модулю, то можно увидеть вот такую микросхему:

Если она имеется, то ардуино китайский. Для него драйвер устанавливается вручную через “Диспетчер устройств”. Никаких проблем при установке замечено не было. Скачать драйвер можно здесь.

Далее нам надо выбрать нужную нам модель Arduino из списка

Ну а потом выбираем COM-порт в системе, к которой у нас подключена Arduino.

Ну вот и все! Совсем ничего сложного 😉

Вывод

Итак, вернемся к теме нашей статьи. Что же все-таки лучше изучать? Голые МК AVR или взять набор Arduino?

Для новичков часто бывает проблемой выставление фьюзов у МК AVR. Этого минуса лишены все Ардуино. Там просто нет такой функции при подключении через USB кабель. Также при небрежном выставлении фьюзов можно залочить дорогой МК AVR, который не всегда просто реанимировать. В Ардуино залочить МК нереально. При прошивке программатором ISP USBASP, мы можем прошить МК Ардуино, как и любой другой МК AVR.

Также одним важным отличием Ардуино от МК AVR – это наличие худшей оптимизации размера кода. То есть программа, которая выполняет одни и те же действия на МК и Arduino будет иметь разный вес. На Arduino она будет весить больше. И может даже случиться так, что просто не войдет в память. Микроконтроллеры AVR имеют более широкие возможности в создании электронных устройств, но есть у них и свои минусы – это необходимость наличия программатора, источника питания, а также мощного компьютера для комфортной работы в Atmel Studio 6.

Читать еще:  Как увеличить или уменьшить масштаб экрана на компьютере с Windows 7/10

Этой публикацией мы начинаем цикл статей, посвященных конструированию электронных устройств на платформе Arduino. Оставайтесь с нами и мы поэтапно, следуя от простого к сложному, разберем самостоятельную сборку электронных устройств. Будут рассмотрены разные модели Arduino, программатор Usb – Serial и её периферия. Вы научитесь самостоятельно писать скетчи в среде разработки и обязательно соберете все то, что давно хотели собрать, но затруднялись в создании на практике.

Прерывания Arduino с помощью attachInterrupt

Прерывания – очень важный механизм Arduino, позволяющий внешним устройствам взаимодействовать с контроллером при возникновении разных событий. Установив обработчик аппаратных прерываний в скетче, мы сможем реагировать на включение или выключение кнопки, нажатие клавиатуры, мышки, тики таймера RTC, получение новых данных по UART, I2C или SPI. В этой статье мы узнаем, как работают прерывания на платах Ардуино Uno, Mega или Nano и приведем пример использования функции Arduino attachInterrupt().

Прерывания в Ардуино

Прерывание – это сигнал, который сообщает процессору о наступлении какого-либо события, которое требует незамедлительного внимания. Процессор должен отреагировать на этот сигнал, прервав выполнение текущих инструкций и передав управление обработчику прерывания (ISR, Interrupt Service Routine). Обработчик – это обычная функция, которую мы пишем сами и помещаем туда тот код, который должен отреагировать на событие.

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

Аппаратные и программные прерывания

Прерывания в Ардуино можно разделить на несколько видов:

  • Аппаратные прерывания. Прерывание на уровне микропроцессорной архитектуры. Самое событие может произойти в производительный момент от внешнего устройства – например, нажатие кнопки на клавиатуре, движение компьютерной мыши и т.п.
  • Программные прерывания. Запускаются внутри программы с помощью специальной инструкции. Используются для того, чтобы вызвать обработчик прерываний.
  • Внутренние (синхронные) прерывания. Внутреннее прерывание возникает в результате изменения или нарушения в исполнении программы (например, при обращении к недопустимому адресу, недопустимый код операции и другие).

Зачем нужны аппаратные прерывания

Аппаратные прерывания возникают в ответ на внешнее событие и исходят от внешнего аппаратного устройства. В Ардуино представлены 4 типа аппаратных прерываний. Все они различаются сигналом на контакте прерывания:

  • Контакт притянут к земле. Обработчик прерывания исполняется до тех пор, пока на пине прерывания будет сигнал LOW.
  • Изменение сигнала на контакте. В таком случае Ардуино выполняет обработчик прерывания, когда на пине прерывания происходит изменение сигнала.
  • Изменение сигнала от LOW к HIGH на контакте – при изменении с низкого сигнала на высокий будет исполняться обработчик прерывания.
  • Изменение сигнала от HIGH к LOW на контакте – при изменении с высокого сигнала на низкий будет исполняться обработчик прерывания.

Прерывания полезны в программах Ардуино, так как помогают решать проблемы синхронизации. Например, при работе с UART прерывания позволяют не отслеживать поступление каждого символа. Внешнее аппаратное устройство подает сигнал прерывания, процессор сразу же вызывает обработчик прерывания, который вовремя захватывает символ. Это позволяет экономить процессорное время, которое без прерываний тратилось бы на проверку статуса UART, вместо этого все необходимые действия выполняются обработчиком прерывания, не затрагивая главную программу. Особых возможностей от аппаратного устройства не требуется.

Основными причинами, по которым необходимо вызвать прерывание, являются:

  • Определение изменения состояния вывода;
  • Прерывание по таймеру;
  • Прерывания данных по SPI, I2C, USART;
  • Аналогово-цифровое преобразование;
  • Готовность использовать EEPROM, флеш-память.

Как реализуются прерывания в Ардуино

При поступлении сигнала прерывания работа в цикле loop() приостанавливается. Начинается выполнение функции, которая объявляется на выполнение при прерывании. Объявленная функция не может принимать входные значения и возвращать значения при завершении работы. На сам код в основном цикле программы прерывание не влияет. Для работы с прерываниями в Ардуино используется стандартная функция attachInterrupt().

Отличие реализации прерываний в разных платах Ардуино

В зависимости от аппаратной реализации конкретной модели микроконтроллера есть несколько прерываний. Плата Arduino Uno имеет 2 прерывания на втором и третьем пине, но если требуется более двух выходов, плата поддерживает специальный режим «pin-change». Этот режим работает по изменению входа для всех пинов. Отличие режима прерывания по изменению входа заключается в том, что прерывания могут генерироваться на любом из восьми контактов. Обработка в таком случае будет сложнее и дольше, так как придется отслеживать последнее состояние на каждом из контактов.

На других платах число прерываний выше. Например, плата Ардуино Мега 2560 имеет 6 пинов, которые могут обрабатывать внешние прерывания. Для всех плат Ардуино при работе с функцией attachInterrupt (interrupt, function, mode) аргумент Inerrupt 0 связан с цифровым пином 2.

Прерывания в языке Arduino

Теперь давайте перейдем к практике и поговорим о том, как использовать прерывания в своих проектах.

Функция attachInterrupt используется для работы с прерываниями. Она служит для соединения внешнего прерывания с обработчиком.

Синтаксис вызова: attachInterrupt(interrupt, function, mode)

  • interrupt – номер вызываемого прерывания (стандартно 0 – для 2-го пина, для платы Ардуино Уно 1 – для 3-го пина),
  • function – название вызываемой функции при прерывании(важно – функция не должна ни принимать, ни возвращать какие-либо значения),
  • mode – условие срабатывания прерывания.

Возможна установка следующих вариантов условий срабатывания:

  • LOW – выполняется по низкому уровню сигнала, когда на контакте нулевое значение. Прерывание может циклично повторяться – например, при нажатой кнопке.
  • CHANGE – по фронту, прерывание происходит при изменении сигнала с высокого на низкий или наоборот. Выполняется один раз при любой смене сигнала.
  • RISING – выполнение прерывания один раз при изменении сигнала от LOW к HIGH.
  • FALLING – выполнение прерывания один раз при изменении сигнала от HIGH к LOW.4

Важные замечания

При работе с прерываниями нужно обязательно учитывать следующие важные ограничения:

  • Функция – обработчик не должна выполняться слишком долго. Все дело в том, что Ардуино не может обрабатывать несколько прерываний одновременно. Пока выполняется ваша функция-обработчик, все остальные прерывания останутся без внимания и вы можете пропустить важные события. Если надо делать что-то большое – просто передавайте обработку событий в основном цикле loop(). В обработчике вы можете лишь устанавливать флаг события, а в loop – проверять флаг и обрабатывать его.
  • Нужно быть очень аккуратными с переменными. Интеллектуальный компилятор C++ может “пере оптимизировать” вашу программу – убрать не нужные, на его взгляд, переменные. Компилятор просто не увидит, что вы устанавливаете какие-то переменные в одной части, а используете – в другой. Для устранения такой вероятности в случае с базовыми типами данных можно использовать ключевое слово volatile, например так: volatile boolean state = 0. Но этот метод не сработает со сложными структурами данных. Так что надо быть всегда на чеку.
  • Не рекомендуется использовать большое количество прерываний (старайтесь не использовать более 6-8). Большое количество разнообразных событий требует серьезного усложнения кода, а, значит, ведет к ошибкам. К тому же надо понимать, что ни о какой временной точности исполнения в системах с большим количеством прерываний речи быть не может – вы никогда точно не поймете, каков промежуток между вызовами важных для вас команд.
  • В обработчиках категорически нельзя использовать delay(). Механизм определения интервала задержки использует таймеры, а они тоже работают на прерываниях, которые заблокирует ваш обработчик. В итоге все будут ждать всех и программа зависнет. По этой же причине нельзя использовать протоколы связи, основанные на прерываниях (например, i2c).

Примеры использования attachInterrupt

Давайте приступим к практике и рассмотрим простейший пример использования прерываний. В примере мы определяем функцию-обработчик, которая при изменении сигнала на 2 пине Arduino Uno переключит состояние пина 13, к которому мы традиционно подключим светодиод.

Давайте рассмотрим несколько примеров более сложных прерываний и их обработчиков: для таймера и кнопок.

Прерывания по нажатию кнопки с антидребезгом

При прерывании по нажатию кнопки возникает проблема дребезга – перед тем, как контакты плотно соприкоснутся при нажатии кнопки, они будут колебаться, порождая несколько срабатываний. Бороться с дребезгом можно двумя способами – аппаратно, то есть, припаивая к кнопке конденсатора, и программно.

Избавиться от дребезга можно при помощи функции millis – она позволяет засечь время, прошедшее от первого срабатывания кнопки.

Этот код позволяет удалить дребезг и не блокирует исполнение программы, как в случае с функцией delay, которая недопустима в прерываниях.

Прерывания по таймеру

Таймером называется счетчик, который производит счет с некоторой частотой, получаемой из процессорных 16 МГц. Можно произвести конфигурацию делителя частоты для получения нужного режима счета. Также можно настроить счетчик для генерации прерываний при достижении заданного значения.

Таймер и прерывание по таймеру позволяет выполнять прерывание один раз в миллисекунду. В Ардуино имеется 3 таймера – Timer0, Timer1 и Timer2. Timer0 используется для генерации прерываний один раз в миллисекунду, при этом происходит обновление счетчика, который передается в функцию millis (). Этот таймер является восьмибитным и считает от 0 до 255. Прерывание генерируется при достижении значения 255. По умолчанию используется тактовый делитель на 65, чтобы получить частоту, близкую к 1 кГц.

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

Требуется определить обработчик прерывания для вектора прерывания по таймеру. Вектором прерывания называется указатель на адрес расположения команды, которая будет выполняться при вызове прерывания. Несколько векторов прерывания объединяются в таблицу векторов прерываний. Таймер в данном случае будет иметь название TIMER0_COMPA_vect. В этом обработчике будут производиться те же действия, что и в loop ().

Подведение итогов

Прерывание в Ардуино – довольно сложная тема, потому что приходится думать сразу обо всей архитектуре проекта, представлять как выполняется код, какие возможны события, что происходит, когда основной код прерывается. Мы не ставили задачу раскрыть все особенности работы с этой конструкцией языка, главная цель была познакомить с основными вариантами использования. В следующих статьях мы продолжим разговор о прерываниях более подробне.

голоса
Рейтинг статьи
Ссылка на основную публикацию
Статьи c упоминанием слов: