Precise GENERATOR with ARDUINO 1Hz - 8 MHz. DIY computer-controlled generator using Arduino NANO
Вставка
- Опубліковано 3 жов 2023
- We make an accurate square wave generator on Arduino Nano or Uno with computer control. Frequency setting accuracy 1 Hz. Frequency range from 1 Hz to 8 megahertz. For control we use a Windows application written by MBS Electronics. What is a square wave signal? Harmonics of a square wave signal. Filtering a square wave signal on a musical synthesizer. Let's program the Arduino board. Simulation of a sketch in Proteus professional
Article and downloads of project files here musbench.com/all/arduino-sqr-...
Arduino Uno boards and others musbench.com/all/arduino-brea...
Donations for the channel: www.donationalerts.com/r/mrsh...
Review of the oscilloscope as in the article: • ZOTEK ZT-702s 10 MHz О...
Walkthrough of the FNIRSI oscilloscope-generator-tester • FNIRSI DSO-TC3 vs DSO-...
-
Telegram channel t.me/+g_S7UrcHqmozZjg9
Telegram chat t.me/mbs_electro
My Travels goo.gl/6JoHxh - Наука та технологія
Спасибо за грамотное, ясное изложение в идеальном для усвоения темпе.
Как всегда Отлично . Спасибо за знания 👍
Познавательно и интересно. Молодец. Хороший получится тестер для проверки слуха от 20Гц-20кГц. 😀
Большое спасибо, то, что нужно!
Большое спасибо.
Спасибо!
Спасибо
12:07 -- вот уж я думаю тут почти всегда енто враки... поскольку я думаю либо все, либо почти все компиляторы, под ардуино способны актуально оптимизировать код, и в случае возможности использования сдвига вместо умножения они будут делать именно сдвиг, если он действительно на конкретной платформе (микроконтроллере) быстрее.
Другой фактор -- надо из мануалов к микроконтроллеру определять его машинные инструкции, а так же какое количество тактов они занимают. Другими словами, могут встречаться случаи, в которых именно даже машинная операция умножения будет занимать не больше тактов, чем операция сдвига.
Подскажите, есть ли возможность в графическом редакторе подключить сдвиговый регистр? Или какой ни будь вариант чтоб увеличить количество входов и выходов?
Как подключить 2 канал для управления например двумя светодиодами разными частотами ?
А теперь синхронизируем генератор с каким-нибудь GPS модулем, чтоы точность частоты задать )
какую минимальную скважность сигнала можно получиь в этом коде при низких частотах? К примеру от 1Hz до 150Hz ?
Не могли бы показать как в протеусе без написания кода сделать MIDI клавиатуру с ручками пич и модуляция. Спасибо.
Погодите, погодите, если взять осциллограф на 200мгц (например) то ардуинка выжмет красивый и ровный квадрат ?
0:57 к сожалению это не так, более того , то что вы предлогаете закаментировать на 15:55 необходимо чтобы знать реальную частоту которую будет генерировать МК, реальная и ожидаемая частота могут отличатся на десятки а то и сотни тисяч Герц, с этими строкому МК хотябы отправляет информацию о том что не способен генерировать нужную частоту и будет генерировать ближайшую частоту которую может.
Ну да, только программировать научится, а так класс!
Можно зделать контролер ветрогенератора с сбросом на баласт!?
Спасибо! Можно ли исходник на Delphi увидеть в учебных целях?.
можно, выложу вечером в архиве с проектом
Спасибо!@@MbsElectronics
@@user-dq3xc5ws5i добавил в архив
Как открыть Ваш проект в Delphi 11 Community Edition? . Как проще добавить компоненты из Вашей папки в проект?
вам нужен установленный компонент bcomport. У меня делфи еще 10 стоит с прошлого года. Попробуйте установить из моего архива или скачать где то версию для 11 Delphi. Мой компонент AtulKbib я писал сам. это круглая ручка установки частоты. Он должен устанавливаться в любой делфи.
Спасибо, попробую.@@MbsElectronics
Внезапно дельфи ещё есть... Лет 20 на нём не писал ничего
Еще как есть...
Я и AVR в последний раз держал лет 10-15 назад, как появились STM8 МК с настройками на лету, с отладчиком на борту и ценой полноценный мк по цене младшего обрубка тини. А сейчас вообще 32бита уже 20р за МК на али можно взять (и это при текущем курсе). А 8бит давно похоронены, просто даже не выгодно покупать. Любой AVR и клоны, STM8 будет дороже 32бит клона STM32 (пример цены выше) со всякими DMA и т.д. За 35р иметь 32бит таймер под ШИМ - пожалуйста. Уже давно нужно знать как самое начало программирования МК это STM32 (И взять и прочитать один раз именно manual от производителя чтоб знать как устроен МК) и язык программирования естественно Си. Сейчас новые МК разных производителей калькируются с этого МК, у китайцев своих производителей десятки, всякие GD32, CH32, AT32 и т.д и т.д. Некоторые бедолаги за все это время все не могут попасть в реальность.
@@dekus80 под AVR куча кода, есть микросхемы в DIP корпусах. Быстродействия хватает для мигалок всяких. Код 8-битный более читаемый. В STM32 какой-нибудь таймер сложнее чем весь микроконтроллер 8-битный. Я AVR программирвоал и 10 лет назад и до сих пор только ими и пользуюсь, мне больше не надо, тем более что Ардуина стала стандартом. С кучей отлаженных прошивок, Marlin для 3D принтера, GRBL для CNC станков и т.п. Если нужно что-то считать и выводить на HD экран то лучше куплю Raspbery Pi
Вы наверное путаете профессиональных разработчиков и хобби. Для хобби AVR хватает с запасом. А самый крутой подход это Xilinx всякие FPGA, более сложные для понимания, выше порог вхождения, но и возможностей выше на порядок.
@@SIM31r Как говорится сколько людей столько мнений. Мог бы по каждому пункту поспорить, но это будет пустой тратой времени, вы же уже выбрали свой путь.
Лично я программирую вообще на регистрах хоть 51, хоть avr, хоть stm8, хоть stm32. Знаю ассемблеры и как компилятор ту или иную запись скомпилирует, изучал получаемые листинги. Могу реверсить любые прошивки. А уж сколько различных МК в кассетнице... И у меня МК это тоже всего лишь хобби для души, никогда не работал в этой области. Просто у меня ко всему вот такой уровень любознательности. У вас такой. Вам достаточно АВР (который я уж забыл как страшный сон) и Ардуино, а я нахожу чего там ещё нового появилось в мире МК, покупаю, изучаю по мануалу. Для изучения МК никогда не использовал ничего кроме мануалов от производителя, там все есть для этого и прочитав удивительным образом окажется что ничего сложного нет и в том же stm32, на регистрах тот же таймер инициализируется в 4-5 строчек.
@@dekus80 если это хобби, то непонятно откуда столько времени на всё это. Осталось FPGA освоить, DSP хотя бы ADAU1452, СВЧ передатчики, силовую электронику, квадракоптеры и изготовление радиоламп, всё же интересно ))
100000 kHz)))
0:57 Точность задания частоты 1 Гц - это для любого диапазона?!! Это не оговорка?
кароче тема программирования ардуино в протеусе сдохла... впрочем это так по "Нашему"... задекларировать и забыть. 👌
Больше воды только в Байкале... Главная проблема у многих авторов в том, что они пытаются впихнуть в один ролик всё. Начал с ардуино, потом пол ролика на кой-то хрен объяснял гармоники, крутил ПО и че то там настраивал... Ну если есть желание более подробно остановится на видах сигнала и гармониках, то запили отдельный видос со всеми подробностями. Смысл пол ролика занимать тем, что к делу не относится?
от куда в прямоугольном сигнале берутся гормоники, если фактически это лишь смена полярности с некоторой частотой?
смена полярности с некоторой частотой порождает гармоники. так устроен этот мир. Откуда круги на воде если я просто бросил туда камень? Я не знаю. И никто не знает.
а ведь есть библиотека gyverPWM, там уже это есть
Исходник на Delphi так и не появился....
Сейчас добавил в архив, можете перезагрузить
Спасибо!@@MbsElectronics
трохи покромсал код ядра:
void generator( u32 Freq )
{
if (Freq == 0 || Freq > F_CPU/2) return;
const u8 Lshift[] = {3,3,2,2};
u32 compare = F_CPU / Freq /2; //calculate OCR
for (u8 i = 0; i < 4; i++) {
if (compare > 65536) compare >>= Lshift[i];
else {
TCCR1B = (1
Можно еще добавить установку скважности, хотя на высоких частотах будет совсем небольшой ее диапазон. Но на относительно низких частотах можно будет вполне пользоваться
Дякую
@@IndiaMagicTV , ще варіант
void gen_Update ( u32 Freq )
{
if (Freq == 0 || Freq > F_CPU/2) return;
const u8 shift [] = {3, 3, 2, 2};
u32 compare = F_CPU / Freq /2; //calculate OCR
u8 prescaler = 0;
for (u8 i = 0; i < 4; i++) {
prescaler++;
if (compare > 65536) compare >>= shift [i];
else break;
}
OCR1A = compare - 1;
TCCR1A = 1