Тактирование Ардуино от внутреннего RC-генератора
При написании публикации про ATtiny85 я обратил внимание на то, как реализовано изменение частоты микроконтроллера: достаточно выбрать нужное значение тактовой частоты в меню IDE Ардуино и затем выполнить команду «Записать загрузчик». А почему бы не сделать так же для Ардуино? Чтобы можно было простыми действиями настроить ее на тактирование либо от внешнего резонатора на 16МГц, либо от внутреннего RC-генератора на 8МГц. Кстати при тактировании от внутреннего генератора микроконтроллер можно извлечь из Ардуино, тем самым значительно снизить энергопотребление. В общем, тема весьма интересная, подробности под катом.
Содержание
Что нужно знать о тактировании AVR микроконтроллеров
AVR микроконтроллеры способны работать с различными источниками тактового сигнала. Это может быть внешний резонатор, RC-цепочка (внутренняя или внешняя), а так же внешний сигнал синхронизации.
Настройка микроконтроллера на работу с тем или иным источником тактового сигнала осуществляется установкой конфигурационных битов (фьюзов) при помощи программатора. Применительно к нашей ситуации установка фьюзов происходит при выполнении команды «Записать загрузчик» из меню IDE Ардуино, значения фьюзов берутся из файла boards.
txt. Он же отвечает за добавление новых пунктов в меню Инструменты. Поэтому доработка IDE Ардуино для добавления в нее меню выбора частоты начинается с редактирования файла boards.txtРедактирование файла boards.txt
Перейдите в каталог Arduino_dir\hardware\arduino\avr\, где Arduino_dir — это каталог, в который установлена среда разработки Ардуино. У меня этот путь выглядит так: d:\Arduino\arduino-1.6.12\hardware\arduino\avr\. Перед внесением изменений в файл boards.txt я рекомендую сделать его резервную копию. Теперь открываем файл boards.txt в текстовом редакторе (подойдет notepad++ или другой, поддерживающий кодировку UTF-8, чтобы не было проблем с отображением русских букв в IDE Ардуино) и добавляем в него строку menu.clock=Тактирование
Затем находим секцию для Ардуино Уно (я опишу порядок действий применительно к Ардуино Уно, но таким же образом можно скорректировать секции других плат с поправкой на микроконтроллер):
Здесь нужно добавить наше подменю для выбора источника тактирования и частоты. Для этого сперва удалим строки, определяющие:
- скорость загрузки — uno.upload.speed;
- значения фьюзов — uno.bootloader.low_fuses, .high_fuses, .extended_fuses;
- имя файла загрузчика — uno.bootloader.file;
- частоту микроконтроллера — uno.build.f_cpu.
Эти параметры мы перенесем в подменю, в основной же секции останутся только общие параметры. Ниже приведен фрагмент, добавляющий подменю выбора источника тактирования, вставьте его в свой файл.
uno.menu.clock.external16=Внешний резонатор 16МГц
uno.menu.clock.external16.upload.speed=115200
uno.menu.clock.external16.bootloader.low_fuses=0xFF
uno.menu.clock.external16.bootloader.high_fuses=0xDE
uno.menu.clock.external16.bootloader.extended_fuses=0xFF
uno.menu.clock.external16.bootloader.file=optiboot/optiboot_atmega328.hex
uno.menu.clock.external16.build. f_cpu=16000000L
uno.menu.clock.internal8=Внутренний RC-генератор 8МГц
uno.menu.clock.internal8.upload.speed=57600
uno.menu.clock.internal8.bootloader.low_fuses=0xE2
uno.menu.clock.internal8.bootloader.high_fuses=0xDE
uno.menu.clock.internal8.bootloader.extended_fuses=0xFF
uno.menu.clock.internal8.bootloader.file=optiboot/optiboot_atmega328_8.hex
uno.menu.clock.internal8.build.f_cpu=8000000L
uno.menu.clock.internal1=Внутренний RC-генератор 1МГц
uno.menu.clock.internal1.upload.speed=4800
uno.menu.clock.internal1.bootloader.low_fuses=0x62
uno.menu.clock.internal1.bootloader.high_fuses=0xDE
uno.menu.clock.internal1.bootloader.extended_fuses=0xFF
uno.menu.clock.internal1.bootloader.file=optiboot/optiboot_atmega328_1.hex
uno.menu.clock.internal1.build.f_cpu=1000000L
Для наглядности я приведу скриншот моего файла boards. txt, каким он был и каким стал после выполнения описанных изменений:
Таким образом мы описали меню из трех пунктов, для каждого из них указали скорость загрузки скетчей, значения фьюзов, имя файла загрузчика (об этом чуть позже) и частоту микроконтроллера. При помощи онлайн калькулятора вы можете расшифровать приведенные значения фьюзов и увидеть, как происходит выбор источника тактирования. И что для получения тактовой частоты 1МГц при работе от внутреннего RC-генератора используется деление частоты на 8 (фьюз CKDIV8).
Сохраните файл в кодировке UTF-8 без BOM и запустите IDE. Если все сделано правильно, то при выборе платы Arduino Uno вам станет доступно меню Инструменты->Тактирование. Но этих изменений пока еще мало. Если сейчас выбрать в меню, например, Внутренний RC-генератор 8МГц и выполнить запись загрузчика, то новые значения фьюзов, конечно, запишутся в микроконтроллер и он начнет работать с внутренним RC-генератором. Но мы потеряем возможность загружать в Ардуино новые скетчи, потому что записанный в нее загрузчик рассчитан на частоту 16МГц. Выход — скомпилировать загрузчик для работы на частотах 8МГц и 1МГц. Если у вас нет желания заморачиваться с компиляцией загрузчика, то можете скачать уже скомпилированные файлы отсюда, поместить их в каталог
Что такое Optiboot
Optiboot — это загрузчик для AVR микроконтроллеров, созданный Питером Найтом (Peter Knight). В его основу легли труды нескольких разработчиков и групп (Jason P. Kyle, Arduino group, Spiff , AVR-Libc group, Ladyada), впоследствии он значительно развился. Загрузчик получился настолько удачным, что компания-разработчик Ардуино стала использовать его в своей плате Ардуино Уно. С недавнего времени Optiboot является официальным загрузчиком и для других плат на базе ATmega328p (Нано, Мини). По сравнению с использовавшимся в них старым загрузчиком Optiboot обладает рядом преимуществ:
- занимает всего 512 байт, освобождая 1,5кб для программ пользователя;
- значительно быстрее выполняет загрузку скетчей;
- поддерживает альтернативные серийные порты, скорости загрузки и частоты микроконтроллера.
С 2011 года поддержкой Optiboot занимается Билл Вестфилд (Bill Westfield). Это самостоятельный проект, не финансируемый какими-либо организациями.
Компиляция Optiboot для работы на частотах 8МГц и 1МГц
Исходные файлы Optiboot входят в состав IDE Ардуино и находятся в каталоге Arduino_dir\hardware\arduino\avr\bootloaders\optiboot\. Там же расположен батник omake.bat для сборки загрузчика. Вот только для его сборки в составе IDE Ардуино (начиная с версий 1.5.x) не хватает утилиты make.exe. Наиболее простое решение — это скопировать ее из старой версии. Для этого:
- скачайте IDE версии 1.0.6;
- распакуйте архив и перейдите каталог \arduino-1.0.6\hardware\;
- скопируйте или переместите каталог tools в Arduino_dir\hardware\arduino\ вашей рабочей IDE;
- IDE 1.0.6 больше не нужна, ее можно удалить.
Перейдите в каталог optiboot и откройте файл Makefile в Блокноте. В нем нужно найти секцию для atmega328:
Между ней и началом следующей секции для Sanguino вставляем код:
atmega328_8: TARGET = atmega328
atmega328_8: MCU_TARGET = atmega328p
atmega328_8: CFLAGS += ‘-DLED_START_FLASHES=3’ ‘-DBAUD_RATE=57600’
atmega328_8: AVR_FREQ = 8000000L
atmega328_8: LDSECTIONS = -Wl,—section-start=.text=0x7e00 -Wl,—section-start=.version=0x7ffe
atmega328_8: $(PROGRAM)_atmega328_8.hex
atmega328_8: $(PROGRAM)_atmega328_8.lst
atmega328_1: TARGET = atmega328
atmega328_1: MCU_TARGET = atmega328p
atmega328_1: CFLAGS += ‘-DLED_START_FLASHES=3’ ‘-DBAUD_RATE=4800’
atmega328_1: AVR_FREQ = 1000000L
atmega328_1: LDSECTIONS = -Wl,—section-start=.text=0x7e00 -Wl,—section-start=.version=0x7ffe
atmega328_1: $(PROGRAM)_atmega328_1.hex
atmega328_1: $(PROGRAM)_atmega328_1.lst
Это копии секции atmega328. От исходной они отличаются частотой микроконтроллера и скоростью загрузки скетчей. Эти значения соответствуют указанным нами ранее в файле boards.txt. Думаю, можно указать и большую скорость загрузки, но я не экспериментировал с этим. Однозначно, при слишком высокой скорости ошибки будут неизбежны, поэтому с уменьшением частоты микроконтроллера я уменьшаю и скорость загрузки.
omake.bat atmega328_8
omake.bat atmega328_1
Загрузчики для работы на частоте 8МГц и 1МГц готовы! Теперь нужно удалить папку tools, которую мы позаимствовали из IDE Ардуино 1.0.6. Если этого не сделать, то среда не запустится. Связано это с тем, что содержимое Arduino_dir\hardware\arduino\ должно иметь определенную структуру и папке tools здесь не место.
Изменение частоты и источника тактирования Ардуино
Для изменения частоты и источника тактирования необходимо записать в Ардуино новый загрузчик. Для выполнения этой процедуры нужен программатор. Если у вас его нет, то можете использовать в качестве программатора другую плату Ардуино, в статье Arduino as ISP — программатор из Ардуино эта тема подробно расписана. Я для записи загрузчика воспользуюсь программатором USBasp.
Итак, запускаем среду разработки Ардуино, выбираем в списке плат Arduino/Genuino Uno, в меню Инструменты->Тактирование выбираем значение Внутренний RC-генератор 8МГц. Подключаем программатор к компьютеру, выставляем соответствующее значение в меню Инструменты->Программатор. Записываем загрузчик. После этого отключаем программатор, подключаем Ардуино напрямую к компьютеру и в меню Инструменты->Программатор выставляем стандартное значение — AVRISP mkII. Теперь можете проверить работу платы, загрузив в нее скетч Blink из стандартных примеров. Когда решите снова изменить частоту, нужно будет повторно выполнить запись загрузчика, выбрав соответствующее значение в меню Тактирование.
Если при записи загрузчика на 1МГц через USBasp у вас возникнет следующая ошибка:
— не пугайтесь, просто нужно установить перемычку JP3 на программаторе. При использовании Ардуино в качестве программатора такая ошибка не возникает.
Теперь было бы интересно вынуть ATmega328P из Ардуино и измерить его энергопотребление при работе на 8МГц / 1МГц, а также в режиме PowerDown. Но это я оставлю для будущей публикации — Энергопотребление ATmega328P при тактировании от внутреннего RC-генератора
Радио для всех — Генератор сигналов произвольной формы на AD9833
Данное устройство сделал для того чтобы опробовать AD9833 модуль. Совместное использование аппаратной SPI шины вызвало некоторые программные проблемы, которые необходимо решить. Изначально я не мог получить библиотеку дисплея ST7735 Adafruit , чтобы разделить шину SPI , так что я перешел на немного другой модуль TFT дисплея от BangGood. Он использует версию библиотеки Adafruit , которая была изменена с помощью QDTech для их собственных аппаратных средств отображения и которые используют контроллер Samsung S6D02A1.
Схема
Энкодер для ATmega328 подключен к D2 и D3 — которые запускают процедуру прерывания в программном обеспечении — контролирует частоту, которая записывается в AD9833 модуль (и к выходу). Приращение частоты с коэффициентом x1, x10, x100, X1000 и так далее. Фактический прирост устанавливается с помощью второго энкодера — программным обеспечением, а не с помощью прерывания. Выбранный множитель (x1, x10, и т.д.), отображается на дисплее, выделив нужную цифру в желтый цвет. Энкодер подключен к » back «, вращая ручку против часовой стрелки, он увеличивает приращение. В результате, подсвеченные цифра перемещается влево, если ручка поворачивается влево, и наоборот.
Источник питания
LTC1046 5v к -5v конвертер , в секции питания, обеспечивает -5v и + 5v. Большинство широкополосных усилителей, как правило, требуют ± 5v питания, так что это удобно. Я нашел, что это практически невозможно разработать и протестировать широкополосный усилитель на макете, так что имело смысл иметь объект, чтобы добавить его в качестве отдельной печатной плате.
Дополнительный буфер / усилитель / фильтр
Хотя не показано на схеме A5 соединяет ATmega328. Настроен как цифровой выход, он может, например, использоваться для переключения аттенюатора при квадратно — волновом (выводится из ИС AD9833). Квадратные волны выводятся на 5 вольт, тогда как синусоида и треугольник будут только около 600 мВ. Первоначальная идея сравание AD9850 и AD9833 модулей, я думаю, что AD9850 обеспечивает более чистый выходной сигнал в более широком диапазоне частот, но, если частота поддерживается на уровне ниже 1 МГц, то AD9833 имеет преимущество и обеспечивает треугольную форму волны. AD9850 использует эталонный 125MHz кварц для генерации синусоиды в то время как у AD9833 он только 25МГц. Модуль AD9850 также выгоден для 3 ступени фильтра нижних частот, чтобы удалить любые нежелательные гармоники.
Пример фильтра
Компоновка печатной платы
Сборка
Основные компоненты
1.8 «TFT-дисплей модуль |
Модуль AD9833 DDS |
50x130x100mm корпус |
Программирование ATmega328
AD9833 Техническое описание
Arduino библиотеки:
Adafruit_GFX Adafruit_GFX библиотека
Adafruit_ST7735 библиотека *
Adafruit_QDTech библиотека *
* Используйте библиотеку ST7735, если дисплей имеет ST7735 чип или библиотеку QDTech если дисплея который использует чип Samsung S6D02A1.
СКАЧАТЬ Программный код конструкции
— простые электронные музыкальные проекты своими руками
Кевин Тон Arduino, новичок 3 минуты
В этом проекте используется Arduino Uno и потенциометр для создания тона с переменной высотой тона.
- В генераторе заметок Arduino я обновляю проект для воспроизведения отдельных заметок.
Это ключевые руководства по Arduino для основных концепций, используемых в этом проекте:
- Аналоговый вход Arduino
- Повторитель шага тона Arduino
Если вы новичок в Arduino, см. страницы «Начало работы».
Список деталей
- Arduino Uno
- Динамик 8 Ом или старый динамик для наушников
- 1x 220 резистор
- 1x 10k потенциометр
- Макет и перемычки
Схема
Сигнальный контакт потенциометра (обычно средний) подключается напрямую к аналоговому входу A5 Arduino, а два других контакта к +5 В и GND соответственно. Это означает, что при повороте потенциометра сигнал будет находиться в диапазоне от 0 до +5 В.
Вы можете использовать динамик из старой стереосистемы или телевизора или динамик меньшего размера из пары старых наушников. Динамик будет иметь импеданс — обычно 8 или 16 Ом для более крупного динамика, но, вероятно, больше 30 Ом для некоторых наушников. Вы должны иметь возможность использовать любой из них в этой схеме. В качестве альтернативы любой динамик, который вы получаете в одном из этих «наборов Arduino», также подойдет. Динамик подключен через резистор 220 Ом к выходному контакту 10, чтобы ограничить ток, протекающий с выходного контакта Arduino, который не должен превышать 40 мА, иначе он повредит процессор. Типичный ток 20 мА от вывода является идеальным.
Существует грубый приблизительный расчет, который можно выполнить с помощью закона Ома для оценки протекающего тока. Это оценка, поскольку динамик имеет импеданс, а не «сопротивление постоянному току», и мы используем переменный ток, что усложняет реальный расчет. Но это дает представление с определенной погрешностью.
Для резистора 220 Ом и динамика 8 Ом, используя закон Ома:
Ток = Напряжение/Общее сопротивление
Таким образом, в этом случае мы можем предположить, исходя из нашего источника питания 5 В, что:
Ток = 5 / (220 + 8) = 0,0219… Ампер
Таким образом, это около 22 мА, что почти идеально (или, по крайней мере, дает большую погрешность для нашего простого расчета). При использовании громкоговорителя для наушников сопротивлением около 30 Ом ток будет еще ниже — 20 мА.
Обратите внимание, что это очень неэффективная схема, так как большая часть мощности сигнала теряется в резисторе в виде тепла, а не на динамик, но для наших целей это нормально.
Схема может питаться либо через USB-порт Arduino, либо через порт Arduino «бочонок».
Код
Основная идея кода заключается в следующем:
- Считайте значение с потенциометра, которое будет находиться в диапазоне от 0 (для 0В) до 1023 (для полных 5В).
- Переведите это в высоту тона для вывода на генератор тона () — я использую от 120 Гц до 1500 Гц, что соответствует диапазону от C3 до A6.
- Укажите генератору tone() воспроизвести тон на этой высоте.
Дополнительный шаг заключается в том, что если потенциометр показывает 0, то я расцениваю это как указание полностью выключить тон-генератор.
Один из приемов программирования, который следует изучить, заключается в использовании функции map(), которая берет значение из одного диапазона значений и возвращает эквивалентное значение из второго диапазона. Итак, если ваш первый диапазон был от 1 до 100, а второй диапазон был от 1 до 2000, то присвоение ему значения 50, которое находится на полпути через входной диапазон, вернет значение, которое находится на полпути через выходной диапазон (1000) и так далее. Это простой способ сопоставить диапазон показаний датчика (в данном случае от 0 до 1023) с чем-то другим (в данном случае с частотой от 120 Гц до 1500 Гц).
Функция tone() генерирует прямоугольную волну на определенной частоте, которая при подаче через динамик генерирует простой тон на этой частоте.
Найдите его на GitHub здесь.
Заключительные мысли
Это создаст непрерывную прокрутку между частотами. Одной из модификаций может быть создание таблицы конкретных частот, представляющих отдельные ноты, и использование входа потенциометра для выбора ноты для воспроизведения.
На самом деле, я мог бы попробовать это в следующий раз.
Кевин
Нравится:
Нравится Загрузка…
Просто еще одна душа, блуждающая по Интернету… Просмотреть все сообщения Кевина
Опубликовано
- MiniDexed TX816 — Часть 3 — Конструкция панели
- MiniDexed TX816 — Часть 2 — Проектирование печатной платы
- MiniDexed TX816
- Pico, Nano, печатная плата матрицы микроклавиатуры — часть 2
- Pico, Nano, печатная плата матрицы микроклавиатуры
КатегорииВыберите категориюLo-Fi Orchestra (43)Категории проектов (351) Arduino Tone (37) CD Rack Modules (15) Digital Synthesis (39) Digital Synthesis (39) Digital Synthesis (19) MIDI Control (92) MIDI-интерфейсы (52) MIDI-мониторы (19) Разное аппаратное обеспечение (46) Синтез Mozzi (34) Дизайн печатной платы (39) Перкуссия (6) Секвенсоры (23) Одноплатные компьютеры (18) Модули синтезатора (28) Touch Music (14) Сложность проекта (336) Продвинутый (148) Начинающий (62) Средний ()(130) Рабочие листы (1Без категорий
74hc4067 объявление9833 адафрут аналог ардуино ардуино леонардо ардуино нано ардуино про мини ардуино уно atmega32u4 аудио оголенный метал кнопка емкостный датчик схемапитон неуклюжий миди изменение контроля дак ддс цифровые контакты цифро-аналоговое преобразование прямой цифровой синтез ударные перо фильтр FM-синтез общий миди гранулированный синтез холст i2c или9488 клавиатура матрица клавиатуры клавиатура кикад ЛДР вел светодиодный дисплей светодиодная матрица лоу-фай группы лоу-фай классика лоу-фай темы лолшилд сделай свое уно mcp4725 микропитон миди миди-контроллер миди фильтр миди слияние миди монитор миди роутер миди щит минииндексированный модульный синтезатор моцци мп3 мпр121 mt32-пи мультиплексор мультиплекс печатная плата ПКМ5102 пио полифония потенциометр изменение программы про микро ШИМ р2р Raspberry Pi малиновый пи пико Малина Пи V1 реле резисторная лестница поворотный циферблат энкодер самд пробоотборник секвенсор семисегментный дисплей щит последовательность шагов телефон tft-дисплей планеты таймеры тон трогать сенсорный экран игрушка безделушка UART USB-хост usb-хост миди usb миди vs1003 vs1053 волновая таблица зинтиан
facebook.com/diyelectromusic/»> Простые электронные музыкальные проекты своими рукамиЛоу-фай оркестрИскать:
- Январь 2023 (13)
- декабрь 2022 (3)
- ноябрь 2022 (11)
- Октябрь 2022 (11)
- сентябрь 2022 (14)
- август 2022 (9)
- июль 2022 (4)
- июнь 2022 (4)
- май 2022 (11)
- апрель 2022 (13)
- март 2022 (15)
- февраль 2022 (7)
- январь 2022 (12)
- декабрь 2021 (6)
- ноябрь 2021 (4)
- Октябрь 2021 (10)
- сентябрь 2021 (9)
- август 2021 (12)
- июль 2021 (19)
- июнь 2021 (17)
- май 2021 (13)
- апрель 2021 (10)
- март 2021 (16)
- Февраль 2021 (19)
- январь 2021 (21)
- декабрь 2020 (11)
- ноябрь 2020 (20)
- октябрь 2020 (13)
- сентябрь 2020 (18)
- август 2020 (19)
- июль 2020 (8)
- июнь 2020 (23)
ЛПП-11420 — SparkFun | Генератор сигналов MiniGen
Отзывов пока нет Написать обзор
SparkFun
Экран генератора сигналов MiniGen (для Arduino Pro Mini) SparkFun
Рейтинг Обязательно Выберите рейтинг1 звезда (худший)2 звезды3 звезды (средний)4 звезды5 звезд (лучший)
Имя
Электронная почта Обязательно
Тема отзыва Требуется
Комментарии Обязательно
- Эвелта Артикул:
- 057-БОБ-11420
- Номер детали производителя:
- БОБ-11420
Был:
3 209,60 ₹
2 720,00 ₹
₹ 1925,76 вкл. ГОСТ
₹ 1632,00 экз. GST
- Запросите предложение для больших количеств
Описание
Это генератор сигналов SparkFun MiniGen, небольшой экран для Arduino Pro Mini, способный генерировать синусоидальные, прямоугольные или треугольные волны с частотой до 3 МГц и приблизительно 1 Впик-пик. Хотя MiniGen технически представляет собой щит, на самом деле он может работать как автономная плата, способная выполнять те же функции, что и при размещении поверх Pro Mini.
Resources
Schematic
Eagle Files
Hookup Guide
Datasheet (AD8045)
Datasheet (AD9837)
GitHub (Example Code & Design Files)
GitHub (Library)
Дополнительная информация
СпаркФан
Информация о гарантии
Все товары, поставляемые Evelta, являются подлинными и оригинальными. Мы предлагаем 14-дневную гарантию замены в случае производственного брака. Для получения более подробной информации, пожалуйста, посетите нашу страницу отмены и возврата.
Сопутствующие товары
Быстрый просмотр
SparkFun
Эвелта Артикул: 057-DEV-11113
Arduino Pro Mini 328 — 5 В / 16 МГц
₹880.00 экз. GST
Обычно доставляется в течение 2-5 дней
7 В наличии
Количество Добавить в свой списокБыстрый просмотр
SparkFun
Эвелта Артикул: 057-WRL-12847
XBee Shield для Arduino UART SparkFun
Было:
1 530,00 ₹
765,00 ₹ экз. GST
Отправка в течение 24 часов со склада в Мумбаи
1 В наличии
Количество Добавить в свой списокБыстрый просмотр
SparkFun
Эвелта Артикул: 057-DEV-14352
Qwiic Shield для Arduino SparkFun
₹610.00 экз. GST
Отправка в течение 24 часов со склада в Мумбаи
1 В наличии
Количество Добавить в свой списокБыстрый просмотр
SparkFun
Эвелта Артикул: 057-WRL-13287
ESP8266 Wi-Fi Shield Совместимость с Arduino SparkFun
Было:
1 495,00 ₹
748,00 ₹ экз. GST
Отправка в течение 24 часов со склада в Мумбаи
1 В наличии
Количество Добавить в свой списокКлиенты также просмотрели
Быстрый просмотр
SparkFun
Эвелта Артикул: 057-BOB-12918
ЦАП MCP4725 I2C SparkFun
₹475.00 экз. GST
Отправка в течение 24 часов со склада в Мумбаи
5 В наличии
Количество Добавить в свой списокБыстрый просмотр
SparkFun
Эвелта Артикул: 057-DEV-14809
MAX98357A Аудио I2S SparkFun
₹520.