YM2149f+Atmega328. Две программы в одном контроллере

ему так запомнилось…

ну с первым скетчем понятно, интерес был, но всё одно из-за 100 байт выпрыгнули, а тут то…

  1. Делают они одно и то-же, но работают с разными последовательными интерфейсами, с разными несовместимыми протоколами MIDI и RS-232. Не принципиально как называть YM2149f. По мне так скорее - синтезатор т.к. имеет все признаки: 3 генератора, LFO, фильтр настраиваемые через управляющий 8-bit регистр. Применялись в 80-х годах как “звуковая карта” в компьютерах ZX-Spektrum, Atari и др.
  2. Не согласен. Это, скорее, магнитола из магнитофона и радиоприемника…
  3. Опять не согласен. Мне 55 лет. Я воспитывался на 155-ой логике и современные микроконтроллеры сломали для меня все преграды кроме одной. В силу возраста в моей голове такая каша и память не как у школьника. Освоить программирование в полной мере я не в состоянии. Спасает FLProg. Я в нем как рыба в воде. Да код получается избыточный, не оптимизированный, но, зато, рабочий. И еще, FLProg не всемогущий, для некоторых идей не подходит.
  4. …я же говорил: функця case … Но я то ее настрою в loop и запущу необходимый, на данный момент, цикл, а для serial в setup как выбрать необходимый, на данный момент, begin…

…это ты про что?

сделай, там делов мне на пару минут, значит тебе на 5

Не понял… Это ты MIDI скомпилировал в 1.8.19?

Да ты тут один из самых молодых будешь :slight_smile:
Тут тех кому менее 40-ка - единицы.

естественно, там же дамп экрана

…уфф… прям отлегло. Я то думал тут молодежь, озорная задорная. Однако у вас, небось, образование высшее и профильное, а у меня 10 классов, станция юных техников и папа-радиолюбитель… был…

высшее, профильное… Только профиль не тот :slight_smile:

Так… Завтра со свежей головой… Не сойти мне с места (не встать со стула) пока не увижу такой же картинки…

Процитировал одним блоком, чтобы нее растягивать на две страницы.

  1. Не хватает признака “наличие клавиатуры”. Поэтому с точки зрения музыканта - тонгенератор, а не синтезатор.
    В ZX-Spectrum этой микросхемы не было.
  2. IMHO если бы было 7-9 лет, FLProg еще можно было бы объяснить (с прицелом на переход в 9 лет на нормальный режим программирования). Впрочем, думаю, что дело просто в небольшом стаже, когда ограниченность ФЛПрога еще не стала угнетать.
  3. case - это не функция, а оператор. И служит для множественного выбора. При бинарном выборе лучше подходит оператор if.

Ладно, пока формально, у нас есть два исходника:

void setup() {
все содержимое здесь назовем A
}

void loop() {
все содержимое здесь назовем B
}

и второй исходник:

void setup() {
все содержимое здесь назовем C
}

void loop() {
все содержимое здесь назовем D
}

перепишем эти исходники так:

void setup_0(){
A
}

void loop_0() {
B
}

void setup(){
  setup_0();
}

void loop() {
  loop_0();
}

и соответственно:

void setup_1(){
C
}

void loop_1() {
D
}

void setup(){
  setup_1();
}

void loop() {
  loop_1();
}

добъемся работоспособности каждого из них по отдельности.
Ну а дальше общий скетч:

bool zeroProg;

void setup() {
  pinMode(selectPin, INPUT_PULLUP);
  zeroPoog = digitalRead(selectPin);
  if(zeroProg) 
    setup_0();
  else
    setup_1();
}

void loop() {
  if(zeroProg) 
    loop_0();
  else
    loop_1();
}

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

если тебя мучает жажда всё таки не стоит пить из лужи

А это какая жажда… И из лужи будешь пить :wink:

чтоб губами тронуть чудо поцелуя и ручья (с) Вознесенский

1 лайк

В первых - не было, сами устанавливали. А в Пентагонах уже была… по умолчанию…

Спасибо за примеры, буду пробовать…
P.S. Вот видишь какой я программист. Функцию от оператора не отличаю :pensive:

В оригинальном ZX-Spectrum 128 была AY-3-8912 - урезанный вариант AY-3-8910, YM2149F почти полный аналог которой.

Скомпилировал… :thinking:
prog_char заменил на const char. Но в первой моей попытке, когда у меня стояла 1.8.13, этим не закончилось… Может IDE была засрата всякими ядрами, аддонами и библиотеками…
Сейчас стоит 2.3.2 свежая и, пока еще, чистая. Я на ней этот код еще не пробовал компилировать. И еще выкинул #include <avr/io.h> и #include <avr/interrupt.h>. Мне кажется - в них нет нужды…
Я все правильно сделал?

Сами-то понимаете, что тут написано?

По мне - это бессмысленный набор слов.

зачем? если они не используются компилятор их сам выкинет