#1 Re: Програмування Arduino » Генерація звуків » Вчора 18:16:38

jokeer пише:

Хотілось знайти готову колекцію готових семплів, з яких вибрати щось підходяще.

Колись, в доінтернетні часи, колекції семплів качали з BBSок, видирали з програм-трекерів, з mod-файлів та з іграшок. Пізніше, памʼятаю, продаватись цілі компакт-диски з колекціями семплів.
Невже в наш час інтернету нема де скачати? Наче ж гугляться, і платні, і безплатні. На торентах ще можуть лежати.
Якщо потрібні семпли якихось музичних інструментів, можна згенерувати зі звукового шрифта (soundfont). Той же timidity++ вміє писати в wav.
Звісно, не завжди можна знайти саме те, що хочеться. Тоді аудіоредактор в руки, і ліпити з того що є.

#2 Re: Програмування Arduino » Генерація звуків » 2025-06-28 10:03:46

jokeer пише:

Ключовий момент  - без особливих зусиль. Так то можна упоротися в конвертування, а потім у впихання у флешку. Але це якось не сама основна частина алгоритму.

Тоді не дуже розумію питання. У моно PCM всього два параметра: частота семплінгу та формат семпла. Якщо це не якийсь екзотичний формат, то ресемплиться та конвертується існуючими тулзами, наприклад sox'ом. Якщо екзотичний, то пишеться свій конвертор у потрібний формат.

Ідеї для процедурної генерації на МК можна підглянути в демосцені.

#3 Re: Програмування Arduino » Генерація звуків » 2025-06-28 01:38:51

Тут декілька окремих питань: відтворення звуків, колекція семплів, процедурна генерація.

Якщо не розглядати зовнішні синтезатори типу AY-3-8910, то які варіанти крім PCM? А PCM можна відтворювати хоч ШІМ'ом, хоч пасивним R-2R DACом.

Але у флешку atmega328p, наприклад, при 8 біт @ 8 кГц влізе менше 4 секунд. Можна знизити розрядність до 4 біт, тоді в два рази більше. Можна зберігати семпли у зовнішній EEPROM.

jokeR пише:

Оце подумалось.. Взагалі, хтось бачив десь колекцію семплів, які можна без особливих зусиль запустити на мікроконтроллері?

В чому проблема взяти семпли, які не можна "запустити" на мікроконтролері, і конвертувати в такі, які можна? І що значить "запустити"?

jokeR пише:

А взагалі хочеться процедурно згенерований звук метронома чи кастаньєт wink

Берете семпл в PCM, розкладаєте його у спектр. Непотрібні компоненти відкидаєте, потрібні зберігаєте у форматі з точністю, достатньою для відтворення у необхідній якості. На контролері процедурно відтворюєте вейв-форму зі спектру. Тригонометрію можна реалізувати таблицею або CORDIC. Залежить, що за контролер і які в нього є ресурси.

#4 Re: Апаратні питання » Вибір бюджетного осцилографа... » 2025-06-20 14:14:39

jokeer пише:

Десяті гармоніки ви навряд чи побачите взагалі будь яким осцилографом wink

Побачите, тільки ж не окремо від інших, а в комбінації. Що при обмеженій полосі виглядає як гладенька хвилька, при широкій полосі може бути різкою голкою. З будь-яким осцилографом треба тримати в голові, що бачимо тільки те, що в його полосі пропускання, а за межами полоси може бути ще щось.

#5 Re: Апаратні питання » Вибір бюджетного осцилографа... » 2025-06-20 00:25:37

Vovik07 пише:

Я думаю за допомогою ТС4 можна глянути наприклад вихід з DC-DC перетворювача..?

Глянути-то можна, щось однозначно там побачите smile Питання в тому, що саме хочете побачити, і як детально. Пульсації напруги амплітудою від порядка мілівольт і частотою до декількох мегагерц, скоріш за все, побачите. Але DC-DC, буває, дзвенять гармоніками і на десятках, і на сотнях мегагерц - таке вже не побачите.

#6 Re: Апаратні питання » Вибір бюджетного осцилографа... » 2025-06-19 04:30:11

Vovik07 пише:

але чи ним можна поміряти , те що я вище писав., ?

Дивлячись якої частоти буде ШІМ. Для згаданих застосувань полоси 10 МГц у DSO-T4 має бути достатньо, хіба що який-небудь швидкий SPI не зможете подивитись, чи роботу тактового генератора.
Але зазвичай окремим спеціалізованим пристроєм користуватись зручніше, ніж таким же, але у складі мультифункціонального пристрою. 3-в-1 має сенс, якщо у вас нема окремого генератора сигналів і тестера компонентів, і не збираєтесь їх придбати. Або якщо є необхідність часто носити з собою.

У DSO-T4 та подібних є такий недолік, що повноцінний щуп з компенсаційним конденсатором підключається через перехідник BNC-MCX - громіздко та не дуже зручно.

#7 Re: Програмування Arduino » Симуляція AVR в platformio » 2025-06-15 11:37:02

jokeer пише:

Походу є AVR (Atmel) studio

Воно ж уже Microchip Studio, і вже не рекомендується для нових розробок smile Рекомендують користуватись MPLAB X IDE.

jokeer пише:

Мабуть треба підняти піратський прапор wink Бо купляти того монстра щоб пару разів на рік запустити якось не того.

Хіба воно платне в базовій версії? Щось не знайшов, скільки коштує ліцензія.
Мені не подобається, що воно проприєтарне. Microchip Studio взагалі наче тільки під вінду. MPLAB X IDE встановлювати їхнім інсталлером якось не комільфо. А пакет з неофіційного репозиторію хоче Java8 JDK, коли на дворі вже Java24.
Та й не факт, що воно не таке ж глючне як і саморобки.

#8 Re: Апаратні питання » DigiSpark Attiny85 проблема з логічною 1 на виході. » 2025-06-15 11:02:05

stas_amp пише:

В реальності - десь один імпульс на 5-7 хвилин їзди. В режимі дощу - в двічі частіше.

Тоді розрахунковий ресурс виходить біля 10'000 мотогодин, тобто трохи більше року. А у вас нема ніякої перевірки цілісності даних та індикації помилки. Помилку можна буде розпізнати тільки коли система почне працювати неправильно.
Крім того, дані можуть записатись некоректно і в будь-який момент при вимкненні живлення під час запису.

#9 Re: Програмування Arduino » Симуляція AVR в platformio » 2025-06-14 19:17:56

Бачу, цей simavr ще навіть ворушиться, є недавні комміти. Але якось на рівні аматорської поробки. Вивод стану пінів у VCD працює, але тільки з GPIO портів. Зміна стану по Compare Match Output, наприклад, ніяк не відображається. Інші альтернативні функції пінів не перевіряв. Схоже, що це "by design". Якщо так, то толку з такого емулятора небагато. 
Доречі, є і ще один форк.

#10 Re: Апаратні питання » DigiSpark Attiny85 проблема з логічною 1 на виході. » 2025-06-14 14:09:58

ard125 пише:

Хоча б раз сюди зайти і все. NeedResetCounterOil ніде більше не змінюється

      EEPROM.put(10, ImpulseOilMotor);

EEPROMClass::put() ідемпотентна: EEPROM.h:66. Комірка записується тільки якщо нове значення не дорівнює прочитаному. Просто буде постійно читати. Але це теж баг, вважаю.

#11 Re: Апаратні питання » DigiSpark Attiny85 проблема з логічною 1 на виході. » 2025-06-14 02:52:10

Honey пише:

Може це не від core залежить, а від даних в EEPROM? Спробуйте помістити в кінець setup:
ImpulseOilMotor = maxImpulseOilMotor+1;

І то правда. Шʼєм програматором - в еепромці або FF'ки, або старий контент, в залежності від фʼюзів та опцій програматора. З першим імпульсом FF'ки стають нулями. Шʼєм бутлоадером - micronucleus еепромку не чіпає, а якийсь інший може й стирає. В різних емуляторах також стан еепромки може зберігатись, а може й ні.

Я би очікував більш регулярного паттерну глітчів при суто логічних помилках в коді. Але ж код там такий, що пробуєш його читати - одразу виникає бажання переписати все нафіг. І тоді не вчитуєшся, наївно сподіваючись, що автор знав, що писав smile

#12 Re: Апаратні питання » DigiSpark Attiny85 проблема з логічною 1 на виході. » 2025-06-13 22:17:49

Honey пише:

А ШІМ на outMotorOil завдяки ось цим незалежним одна від одної умовам

Є таке. Тільки чому така залежність від версії core, різниця в реалізації millis() не мала би так впливати. Хоча тут спостерігається залежність і від частоти вхідних імпульсів.

#13 Re: Апаратні питання » DigiSpark Attiny85 проблема з логічною 1 на виході. » 2025-06-13 20:47:45

jokeR пише:

Начебто всі записи в eeprom пов"язані з натисканням кнопки. Судячи по назвах змінних wink

Наче ж при кожному імпульсі подачі виконується EEPROM.put(10, ++ImpulseOilMotor).

jokeR пише:

Щось цей simutron якийсь дивний.

Та виглядає як творчість шкільного гуртка smile Ледве допер, що якщо файл прошивки оновився, весь застосунок потрібно перезапускати і відкривати проект заново. Бо він завантажує файл прошивки не кожний раз при старті симуляції, а тільки один раз. І автоматичний запуск симуляції при старті бісить. Таке, можна викидать  hmm

#14 Re: Апаратні питання » DigiSpark Attiny85 проблема з логічною 1 на виході. » 2025-06-13 19:32:26

Ще один недолік у програмі: постійний перезапис однієї і тієї ж комірки в EEPROM. Даташит обіцяє 100'000 циклів перезапису. При записі раз на 3 секунди менше ніж за 100 мотогодин ресурс вичерпається.

#15 Re: Апаратні питання » DigiSpark Attiny85 проблема з логічною 1 на виході. » 2025-06-13 13:09:11

jokeer пише:

Обідно що глюк з логічними рівнями зламався сам по собі wink

У мене склалося враження, що відтворюваність залежить від того, чи почистили кеш фреймворку після зміни борди в IDE або встановлення іншого BSP. В лінухах він в ~/.cache/arduino/. У IDE ще є свій RAM-кеш в /tmp/arduino-ide2-<sketch_id>/, який зберігається при перезапуску IDE. Але він щось пустий.

Намагався повторити ситуацію - наче IDE при зміні борди перезбирає ядро заново, тільки вже при повторних білдах бере з кеша:

Compiling core...
Using previously compiled file: .../.cache/arduino/sketches/88E89C526180E920CC9AC97AD811FBB4/core/pins_arduino.c.o
Using precompiled core: .../.cache/arduino/cores/digistump_avr_digispark-tiny_3c94b2ea733e4d576f0033e398c581c3/core.a
jokeer пише:

а надійніше переписати як state machine.

ard125 пише:

Потрібно його або переписувати з 0

Якщо мета - отримати працюючу програму, то написати з нуля - це найпростіший варіант smile
Особисто мені, наприклад, було би цікавіше докопатись до причини: в якому саме рядку digitalWrite() скидає стан піна в 0 через неправильно побудовану умову. А для цього потрібно досягти детермінованої відтворюваності в емуляторі при перезбірці прошивки.

#17 Re: Апаратні питання » DigiSpark Attiny85 проблема з логічною 1 на виході. » 2025-06-12 21:43:13

ard125 пише:

В протеусі аналогічно

Це на PB1 чи на PB2?

ard125 пише:

Присвюювання змінним типу boolean HIGH або LOW теж якось око ріже.

Теж звернув увагу, дивний "стиль". Хоча з точки зору мови все валідно.

ard125 пише:

та й (millis() > (durationLongPressMode + btnModeNoLongPressed)) and (LongPressMode == HIGH)
не зовсім з тієї опери

Чому ж, в C++ and, or, not - така ж валідна форма булевих операторів, як і &&, ||, !. Сам іноді  використовую таку форму.

#18 Re: Апаратні питання » DigiSpark Attiny85 проблема з логічною 1 на виході. » 2025-06-12 19:38:10

jokeer пише:

Ну так і так millis переповниться через 50 днів.

millis не "переповнюється", для unsigned типів застосовується модулярна арифметика.

jokeer пише:

Чи для unsigned переповнення при відніманні не undefined behavior?

Для unsigned і при додаванні ніякого undefined behavior нема.

Просто порівнювати потрібно інтервали, а не точки часу.

#19 Re: Апаратні питання » DigiSpark Attiny85 проблема з логічною 1 на виході. » 2025-06-12 19:09:25

stas_amp пише:

А якщо вирізати частину, яка рахує кількість спрацювань насосу, це зробить стабільним пристрій?

Так як точної причини глюку ми не знаєм, то перевірити це може тільки той, у кого є пристрій.

#20 Re: Апаратні питання » DigiSpark Attiny85 проблема з логічною 1 на виході. » 2025-06-12 18:59:58

jokeR пише:

Які є кращі ідеї? Є якийсь софтовий таймер, чи підпирати перевірками?

if (millis() - btnModeNoVeryLongPressed > durationVeryLongPressMode)

#21 Re: Апаратні питання » DigiSpark Attiny85 проблема з логічною 1 на виході. » 2025-06-12 16:58:05

Доречі, в програмі є й інші баги, не повʼязані з сигналом на піні. Наприклад, конструкції типу

if (millis() > (durationVeryLongPressMode + btnModeNoVeryLongPressed))

на граничних значеннях (на 50-й день роботи smile) працюватимуть неправильно.

#22 Re: Апаратні питання » DigiSpark Attiny85 проблема з логічною 1 на виході. » 2025-06-12 16:32:16

@JokeR, вам же наче вдавалось відтворити баг? А можете зашарити .lst-файл прошивки, на якій баг стабільно відтворюється? IDE наче створює .lst при експорті бінарика і кладе його поряд.

#23 Re: Програмування Arduino » Симуляція AVR в platformio » 2025-06-12 14:38:16

jokeR пише:

Тому що в EEPROM.h нічого цікавого немає.

Тепер я зрозумів, чому IDE не показало команди компіляції. Бо ця EEPROM - header only.

jokeR пише:

Це враппер до avr/eeprom.h, а реалізація роботи з eeprom - упсь, в бінарнику.

Реалізація в avr-libc: libc/misc/eewr_byte.S
Вона в ісходніку виглядає страшно, бо там реалізація для всіх платформ. А в згенерованому коді для attiny85 досить проста:

0000096c <eeprom_write_byte>:
 96c:	26 2f       	mov	r18, r22

0000096e <eeprom_write_r18>:
 96e:	e1 99       	sbic	0x1c, 1	; 28
 970:	fe cf       	rjmp	.-4      	; 0x96e <eeprom_write_r18>
 972:	1c ba       	out	0x1c, r1	; 28
 974:	9f bb       	out	0x1f, r25	; 31
 976:	8e bb       	out	0x1e, r24	; 30
 978:	2d bb       	out	0x1d, r18	; 29
 97a:	0f b6       	in	r0, 0x3f	; 63
 97c:	f8 94       	cli
 97e:	e2 9a       	sbi	0x1c, 2	; 28
 980:	e1 9a       	sbi	0x1c, 1	; 28
 982:	0f be       	out	0x3f, r0	; 63
 984:	01 96       	adiw	r24, 0x01	; 1
 986:	08 95       	ret
jokeR пише:

При використанні функцій з eeprom.h все так само ламається.

А, не знав, що з libc'шними функціями той глюк теж проявляється.

Тоді може це просто сайд-ефект через таймінги, і відповідний delay() замість eeprom_write_byte() так само впливатиме.
А збірка в platformio працює тільки тому що інша версія avr-gcc smile

#24 Re: Програмування Arduino » Симуляція AVR в platformio » 2025-06-12 13:02:32

jokeR пише:

https://raw.githubusercontent.com/ArminJo/DigistumpArduino/master/package_digistump_index.json же ж. Без ніяких хитрощів.

А, в 1.7.5 EEPROM уже є в поставці. Тільки IDE навіть з verbose mode не показує як її компілює, тільки Compiling library "EEPROM".
Але автор писав, що доставляв ще якусь додатково. От якщо ліби з однаковими іменами є і в packages/digistump/hardware/avr/1.7.5/libraries/, і в ~/Arduino/libraries, яку з них воно бере? Це тільки з лога збірки можна побачити:

Alternatives for EEPROM.h: [EEPROM@2.0]
ResolveLibrary(EEPROM.h)
  -> candidates: [EEPROM@2.0] 
...
Using library EEPROM at version 2.0 in folder: ...

І який там Clock обрано в меню, теж може впливати.

jokeR пише:

Є підозра що емулятор цього не покаже. Якщо косячаться логічні рівні на виході - значить там всередині щось комутується неправильно.

Якщо апаратний баг, то так. Але в datasheet errata нічого такого нема. Тільки для ревізії A "EEPROM read may fail at low supply voltage / low clock frequency".
А у випадку програмного багу як мінімум стан регістрів можна перевірити. Взагалі можна було б і просто асемблерний код проаналізувати, але мені за то не заплатять smile

jokeR пише:

До речі, в якійсь з ревізій цих tiny85 щось було з eeprom, саме з записом в 0 адресу, і були рекомендації від аксакалів починати запис з 10..

Наскільки знаю, то якщо бутлоадер теж використовує EEPROM для збереження своїх даних. Micronucleus такого не робить наче.

#25 Re: Програмування Arduino » Симуляція AVR в platformio » 2025-06-12 11:39:05

jokeR пише:

А так, відчуття якоїсь незавершеності.

У мене це відчуття щодо більшості інструментів для розробки під МК smile

Підвал форуму