Просмотр полной версии : AY-3-8910 / AY-3-8912 и Arduino. Странное поведение
Здравствуйте уважаемые специалисты.
Сразу скажу, что в плане практики со спектрумом и его деталями я новичок. С теорией немного получше, но не сильно.
Я на досуге занимаюсь проектом создания автономного синтезатора на базе AY-3-8910 / AY-3-8912 и arduino (любая модель на atmega328). Устроен он следующим образом: весь ввод происходит через midi, внутри ардуино находится виртуальная модель синтезатора со своими "ручками" и другими высокоуровневыми параметрами, а в итоге всё это "рендерится" в низкоуровневый поток команд для AY.
Это то что хотелось. а на практике у меня не получается нормально завести звуковой чип.
И тема вродебы освещена на каждом углу и схем куча и все почти одинаковые. Но звука нет ни на смешаных каналах ни на каждом по-отдельности.
Для начала и теста работоспособности я хотел повторить популярный плеер. Отсюда http://www.pvsm.ru/arduino/117267
пробовал и тестовый скетч (самый первый, где данные берутся из массива) и полный вариант с картой.
я пробовал разные варианты arduino, разные версии звуковых чипов.
Заказывал на али две штуки AY-3-8910 и две штуки AY-3-8912 у разных продавцов. При подключении сверялся с даташитом по 100 раз. пробовал усилить выходы. получал просто типичный фоноый шум "цифрового характера".
Все комбинации выдают одинаковый результат.
Однажды собрав на беспаечной плате в очередной раз этот злосчастный плеер, я случайно задел провод земли и он выскочил из разъёма. Из выходов начал доноситься очень искаженный и безумно низкий (ну насколько это может AY) звук. сложно понять либо это очень заниженый "голос", или просто рваный "шум", но ритм явно прослушивался. На слух во всех трёх каналах шум абсолютно одинаковый.
Я провёл тот же эксперимент на других чипах (и возможно привёл их в негодность). результат одинаковый.
После этого мне пришла в голову ничем особо не подкреплённая идея, что это могут быть проблемы с несущей частотой и из-за этого звук так сильно искжается и занижается. экспериментируя с одним из чипов который я определил как "на убой" (окончательно). из него я помимо земли извлёк и clock. шум вообще никак не изменился. Попробовал собрать внешний генератор частоты на кварце. Результат тот же самый
В итоге. когда всё подключено верно - звука нет, если отключить землю появляется звук ритмически совпадающий с песней или фрагментом, но с большими искажениями.
И это для меня стало полным тупиком. Подскажите что это может быть. Куда копать? Подобного поведения я в сети так и не нашел. Сжег ли я чипы или все они изначальо были с дефектами и как это предотвратить с новыми.
Я понимаю что идеально было бы проверить чипы внутри собственно спектрума, но увы у меня его нету и у знакомых вроде как тоже =(
фотографии чипов.
http://i.imgur.com/yvtOPKC.jpg
http://i.imgur.com/h4P6Dyl.jpg
Если для уточнения подробностей нужны ещё какие-то данные, я всё предоставлю, только скажите что именно.
Заранее спасибо.
null_device
28.06.2017, 05:28
Если для уточнения подробностей нужны ещё какие-то данные, я всё предоставлю, только скажите что именно.
В первую очередь было бы неплохо предоставить схему того что у вас собрано. В частности, лично мне не совсем понятно, каким образом между собой "общается" ПГЗ и "мега".
Сжег ли я чипы или все они изначальо были с дефектами и как это предотвратить с новыми.
Было бы неплохо проверить их на "исправность". Например в том же самом спектруме (правда, для этого необходимо его наличие "в железе").
Где-то проскакивала информация про "новодельные" чипы, которые работают и звучат "несколько иначе". Также, я не стал бы исключать откровенный "левак" из отбраковки. К сожалению, такое далеко не редкость в наше время.
SoftFelix
28.06.2017, 09:21
Заказывал на али две штуки AY-3-8910
Я 8910 получил (https://ru.aliexpress.com/item/AY-3-8910-in-stock-can-pay/32616083091.html) с такой же маркировкой. В Спекке (КАЙ-1024_2010) всё работает.
http://photo.qip.ru/photo/softfelix/3868246/large/110572509.jpg (http://photo.qip.ru/users/softfelix/3868246/110572509/)
В первую очередь было бы неплохо предоставить схему того что у вас собрано. В частности, лично мне не совсем понятно, каким образом между собой "общается" ПГЗ и "мега".
вот схема подключения к ардуино, исполнение автора, могу в перерыве перерисовать в игле.
http://www.pvsm.ru/images/2016/04/07/Arduino-ZX-Spectrum-AY-Player-5.jpg
вот тестовый код
void resetAY(){
pinMode(A0, OUTPUT); // D0
pinMode(A1, OUTPUT);
pinMode(A2, OUTPUT);
pinMode(A3, OUTPUT); // D3
pinMode(4, OUTPUT); // D4
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT); // D7
pinMode(8, OUTPUT); // BC1
pinMode(9, OUTPUT); // BDIR
digitalWrite(8,LOW);
digitalWrite(9,LOW);
pinMode(2, OUTPUT);
digitalWrite(2, LOW);
delay(100);
digitalWrite(2, HIGH);
delay(100);
for (int i=0;i<16;i++) ay_out(i,0);
}
void setupAYclock(){
pinMode(3, OUTPUT);
TCCR2A = 0x23;
TCCR2B = 0x09;
OCR2A = 8;
OCR2B = 3;
}
void setup() {
Serial.begin(9600);
setupAYclock();
resetAY();
}
void ay_out(unsigned char port, unsigned char data){
PORTB = PORTB & B11111100;
PORTC = port & B00001111;
PORTD = PORTD & B00001111;
PORTB = PORTB | B00000011;
delayMicroseconds(1);
PORTB = PORTB & B11111100;
PORTC = data & B00001111;
PORTD = (PORTD & B00001111) | (data & B11110000);
PORTB = PORTB | B00000010;
delayMicroseconds(1);
PORTB = PORTB & B11111100;
}
unsigned int cb = 0;
byte rawData[] = {
0xFF, 0x00, 0x8E, 0x02, 0x38, 0x03, 0x02, 0x04, 0x0E, 0x05, 0x02, 0x07,
0x1A, 0x08, 0x0F, 0x09, 0x10, 0x0A, 0x0E, 0x0B, 0x47, 0x0D, 0x0E, 0xFF,
0x00, 0x77, 0x04, 0x8E, 0x05, 0x03, 0x07, 0x3A, 0x08, 0x0E, 0x0A, 0x0D,
0xFF, 0x00, 0x5E, 0x04, 0x0E, 0x05, 0x05, 0x0A, 0x0C, 0xFF, 0x04, 0x8E,
0x05, 0x06, 0x07, 0x32, 0x08, 0x00, 0x0A, 0x0A, 0xFF, 0x05, 0x08, 0x0A,
0x07, 0xFF, 0x04, 0x0E, 0x05, 0x0A, 0x0A, 0x04, 0xFF, 0x00, 0x8E, 0x04,
0x8E, 0x05, 0x00, 0x07, 0x1E, 0x08, 0x0F, 0x0A, 0x0B, 0x0D, 0x0E, 0xFF,
0x00, 0x77, 0x08, 0x0E, 0x0A, 0x06, 0xFF, 0x00, 0x5E, 0x07, 0x3E, 0x0A,
0x00, 0xFF, 0x07, 0x36, 0x08, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x8E, 0x07,
0x33, 0x08, 0x0B, 0x0A, 0x0F, 0x0D, 0x0E, 0xFF, 0x04, 0x77, 0x08, 0x06,
0x0A, 0x0E, 0xFF, 0x04, 0x5E, 0x07, 0x3B, 0x08, 0x00, 0xFF, 0x07, 0x1B,
0x0A, 0x00, 0xFF, 0xFF, 0xFF, 0x02, 0x1C, 0x03, 0x01, 0x04, 0x8E, 0x07,
0x33, 0x08, 0x0B, 0x0A, 0x0B, 0x0B, 0x23, 0x0D, 0x0E, 0xFF, 0x04, 0x77,
0x08, 0x06, 0x0A, 0x0A, 0xFF, 0x04, 0x5E, 0x07, 0x3B, 0x08, 0x00, 0x0A,
0x09, 0xFF, 0x07, 0x1B, 0x0A, 0x00, 0xFF, 0xFF, 0xFF, 0x02, 0x8E, 0x03,
0x00, 0x04, 0x0E, 0x05, 0x01, 0x07, 0x18, 0x08, 0x0F, 0x09, 0x0B, 0x0A,
0x0E, 0xFF, 0x00, 0x77, 0x02, 0x77, 0x04, 0x8E, 0x06, 0x01, 0x08, 0x0E,
0x09, 0x0A, 0x0A, 0x0D, 0xFF, 0x00, 0x5E, 0x02, 0x5E, 0x04, 0x0E, 0x05,
0x02, 0x06, 0x02, 0x09, 0x09, 0x0A, 0x0C, 0xFF, 0x02, 0x8E, 0x04, 0x8E,
0x07, 0x30, 0x08, 0x00, 0x09, 0x08, 0x0A, 0x0A, 0xFF, 0x02, 0x77, 0xFF,
0xFF
}
void pseudoInterrupt(){
while(rawData[cb]<0xFF){
Serial.print("AY[");
Serial.print(rawData[cb],DEC);
Serial.print("] = ");
Serial.print(rawData[cb+1],HEX);
Serial.println();
ay_out(rawData[cb],rawData[cb+1]);
cb++;
cb++;
}
if(rawData[cb]==0xff)cb++;
if (cb>20*12) {
Serial.println("================================================== == ZERO ==================================================");
cb=0;
}
}
void loop() {
delay(20);
pseudoInterrupt();
}
тактируется от шима на 3 пине.
Было бы неплохо проверить их на "исправность". Например в том же самом спектруме (правда, для этого необходимо его наличие "в железе").
Где-то проскакивала информация про "новодельные" чипы, которые работают и звучат "несколько иначе". Также, я не стал бы исключать откровенный "левак" из отбраковки. К сожалению, такое далеко не редкость в наше время.
Да было бы неплохо проверить "в железе", но увы пока нету возможности.
А среди YM версий тоже такая же ситуация с леваком и отбраковкой?
Я 8910 получил с такой же маркировкой. В Спекке (КАЙ-1024_2010) всё работает.
Спасибо. Там как раз сейчас скидка, попытаю счастья у этого китайца.
вот тестовый код
Может стоит откинуть UART, взять полный человеческий PD0 для шины данных что бы не выводить через куски портов по маске, сделать reset длиннее или вообще лучше кнопкой. В общем для теста стоит максимально все упростить, а то как то мудрено, как думаете ?
Может стоит откинуть UART, взять полный человеческий PD0 для шины данных что бы не выводить через куски портов по маске, сделать reset длиннее или вообще лучше кнопкой. В общем для теста стоит максимально все упростить, а то как то мудрено, как думаете ?
Вечером обязательно переделаю под PORTD и долгий ресет и проверю на всех доступных чипах.
Этот код и подключение я брал как заведомо провереные. Из оригинальной статьи которую автор ещё и на хабре постил (или гиктаймс). В комментариях не было жалоб на то что этот вариант не работает. Хотя конечно там комментарии часто вообще не о том =)
Делал примерно то же самое, только не на ардуино, а на ПЛИСе. Там были какие-то ньюансы, вроде бы в теме я их все описывал (http://zx-pk.ru/threads/25712-ay-kakie-zvuki-i-kak-poluchit.html). По коду, вижу, что у меня используется отдельный генератор на 1.75 МГц. В то же время, в журнале записано, что этот генератор в итоге не пригодился. Не помню уже :)
Мне повезло, ведь я не знал, рабочая ли микросхема, к тому же, я ее грубо выпаивал из старой платы. В случае с китайскими микросхемами, я бы начал с проверки их работоспособности в заведомо рабочем проекте (спектруме).
Запустил скетч на ардуине и поглядел тайминги.
На третьей ноге 1.7 МГц, все путём. А вот картина при записи в регистры меня немного смущает. Вот скрин, это пишется AY[0x02] = 0x38, каналы 0..6 - D0..D6, седьмой - BC1):
http://savepic.ru/14652589.png
Выделенное маркерами время (это Address Setup Time по даташиту (http://www.ym2149.com/ay8910.pdf)) должно быть минимум 300 нс, а оно меньше. На картинке это, правда, уже данные пишутся, но тайминги записи адреса и данных в программе одинаковые. Что, кстати, само по себе неправильно, т.к. Data Pulse Width должен быть аж 1800 нс! А он всего 170 нс. Не знаю, как так получилось, видимо точность у delayMicroseconds(1) никудышная. Тут явно нужно поиграться задержками.
HardWareMan
29.06.2017, 06:11
Вот они, жертвы ардуины. Delay() и delayMicroseconds() у этой АрдуОСи ***** и никогда не выдерживает точности на малых отрезках времени. На больших, конечно, работает, ибо если ждешь 1 секунду, то потерю 1 микросекунды заметить тяжело. Я не знаю, почему именно это происходит, так как я не знаю, как именно этот самый делай там устроен, но я всегда делал по-своему, с использованием таймера или нет (это по ситуации). Никогда не доверяйте чужому велосипеду, он вас может подвести в критичный момент.
Всем большое спасибо за помощь! :)
Благодаря вашим советам я таки смог завести эту конструкцию.
Решил сам переделать этот тестовый скетч с нуля максимально просто, но приближено к финальным целям.
В итоге я планировал подключить AY через регистр, что и сделал в тестовом скетче. Поменял частоту клока на 2Мгц.
В дальнейшем планирую очень осторожно переписать writeAYRegister с ардуинных функций на работу с портами и регулируемыми таймингами.
Ардуинные функции очень медленные, поэтому наверное получается что все тайминги выдерживаются. Конечно в таком виде врядли оставлю в финале. Но как по мне лучше двигаться от работающего варианта, чем от неработающего.
под спойлером код и схема подключения
http://i.imgur.com/H4kKIUn.png
#include <SPI.h>
//pins
#define BC1 9
#define BCDIR 8
#define SS 4
#define AY_CLOCK 3
//clock
#define PRESCALE 1
#define OCR2A_VAL 3
SPISettings spiSettings(16000000, MSBFIRST, SPI_MODE0);
void setup() {
pinMode(SS, OUTPUT);
pinMode(BC1, OUTPUT);
pinMode(BCDIR, OUTPUT);
pinMode(AY_CLOCK, OUTPUT);
initAYClock();
SPI.begin();
}
void loop() {
pseudoInterrupt();
delay(20);
}
void initAYClock() {
TCCR2A = ((1 << WGM21) | (1 << COM2B0));
TCCR2B = (1 << CS20);
TIMSK2 = 0;
OCR2A = OCR2A_VAL;
}
uint8_t cb = 0;
uint8_t rawData[] = {
0xFF, 0x00, 0x8E, 0x02, 0x38, 0x03, 0x02, 0x04, 0x0E, 0x05, 0x02, 0x07,
0x1A, 0x08, 0x0F, 0x09, 0x10, 0x0A, 0x0E, 0x0B, 0x47, 0x0D, 0x0E, 0xFF,
0x00, 0x77, 0x04, 0x8E, 0x05, 0x03, 0x07, 0x3A, 0x08, 0x0E, 0x0A, 0x0D,
0xFF, 0x00, 0x5E, 0x04, 0x0E, 0x05, 0x05, 0x0A, 0x0C, 0xFF, 0x04, 0x8E,
0x05, 0x06, 0x07, 0x32, 0x08, 0x00, 0x0A, 0x0A, 0xFF, 0x05, 0x08, 0x0A,
0x07, 0xFF, 0x04, 0x0E, 0x05, 0x0A, 0x0A, 0x04, 0xFF, 0x00, 0x8E, 0x04,
0x8E, 0x05, 0x00, 0x07, 0x1E, 0x08, 0x0F, 0x0A, 0x0B, 0x0D, 0x0E, 0xFF,
0x00, 0x77, 0x08, 0x0E, 0x0A, 0x06, 0xFF, 0x00, 0x5E, 0x07, 0x3E, 0x0A,
0x00, 0xFF, 0x07, 0x36, 0x08, 0x00, 0xFF, 0xFF, 0xFF, 0x00, 0x8E, 0x07,
0x33, 0x08, 0x0B, 0x0A, 0x0F, 0x0D, 0x0E, 0xFF, 0x04, 0x77, 0x08, 0x06,
0x0A, 0x0E, 0xFF, 0x04, 0x5E, 0x07, 0x3B, 0x08, 0x00, 0xFF, 0x07, 0x1B,
0x0A, 0x00, 0xFF, 0xFF, 0xFF, 0x02, 0x1C, 0x03, 0x01, 0x04, 0x8E, 0x07,
0x33, 0x08, 0x0B, 0x0A, 0x0B, 0x0B, 0x23, 0x0D, 0x0E, 0xFF, 0x04, 0x77,
0x08, 0x06, 0x0A, 0x0A, 0xFF, 0x04, 0x5E, 0x07, 0x3B, 0x08, 0x00, 0x0A,
0x09, 0xFF, 0x07, 0x1B, 0x0A, 0x00, 0xFF, 0xFF, 0xFF, 0x02, 0x8E, 0x03,
0x00, 0x04, 0x0E, 0x05, 0x01, 0x07, 0x18, 0x08, 0x0F, 0x09, 0x0B, 0x0A,
0x0E, 0xFF, 0x00, 0x77, 0x02, 0x77, 0x04, 0x8E, 0x06, 0x01, 0x08, 0x0E,
0x09, 0x0A, 0x0A, 0x0D, 0xFF, 0x00, 0x5E, 0x02, 0x5E, 0x04, 0x0E, 0x05,
0x02, 0x06, 0x02, 0x09, 0x09, 0x0A, 0x0C, 0xFF, 0x02, 0x8E, 0x04, 0x8E,
0x07, 0x30, 0x08, 0x00, 0x09, 0x08, 0x0A, 0x0A, 0xFF, 0x02, 0x77, 0xFF,
0xFF
};
void pseudoInterrupt(){
while(rawData[cb] < 0xFF){
writeAYRegister(rawData[cb], rawData[cb+1]);
cb += 2;
}
if(rawData[cb] == 0xff) {
cb++;
}
if (cb > 20*12) {
cb = 0;
}
}
void writeAYRegister(uint8_t address, uint8_t data) {
SPI.beginTransaction(spiSettings);
digitalWrite(BC1, LOW);
digitalWrite(BCDIR, LOW);
//write address
digitalWrite(SS, LOW);
SPI.transfer(address);
digitalWrite(SS, HIGH);
digitalWrite(BC1, HIGH);
digitalWrite(BCDIR, HIGH);
digitalWrite(BC1, LOW);
digitalWrite(BCDIR, LOW);
//write data
digitalWrite(BC1, LOW);
digitalWrite(BCDIR, HIGH);
digitalWrite(SS, LOW);
SPI.transfer(data);
digitalWrite(SS, HIGH);
digitalWrite(BC1, LOW);
digitalWrite(BCDIR, LOW);
SPI.endTransaction();
}
Вот они, жертвы ардуины. Delay() и delayMicroseconds() у этой АрдуОСи ***** и никогда не выдерживает точности на малых отрезках времени. На больших, конечно, работает, ибо если ждешь 1 секунду, то потерю 1 микросекунды заметить тяжело. Я не знаю, почему именно это происходит, так как я не знаю, как именно этот самый делай там устроен, но я всегда делал по-своему, с использованием таймера или нет (это по ситуации). Никогда не доверяйте чужому велосипеду, он вас может подвести в критичный момент.
Не такие уж и жертвы, свою работу в качестве входного порога и развлечения с железом, ардуина всё-таки выполняет, но думаю это тема отдельного разговора ;) Да этот delay впринципе *****, но и замена delayMicroseconds на _delay_us не сильно помогла, увы.
А ещё подскажите. стоит ли мне о дальнейшей судьбе собираемого устройства писать сюда. или потом лучше отдельную тему создать?
Чуть офтопа, сорри. А в ArduinoIDE до сих пор никаких средств отладки кода нет? Только уже в скомпилированный скетч вставлять костыли типа вывода в COM-порт или зажигания светодиода? Как же там более-менее серьезные вещи делаются - только набивать шишки (через терни к звездам)?
Чуть офтопа, сорри. А в ArduinoIDE до сих пор никаких средств отладки кода нет? Только уже в скомпилированный скетч вставлять костыли типа вывода в COM-порт или зажигания светодиода? Как же там более-менее серьезные вещи делаются - только набивать шишки (через терни к звездам)?
Нет. Там вообще нет такого понятия как отладка. сплошной хардкор =) с другой стороны есть определённый срез программистов принципиально не признающих пошаговую отладку.
А более-менее серьёзные вещи это какого уровня? мне казалось на самых ходовых моделях, тех что на на 328й и на 32u4 не особо развернёшься =)
Нет. Там вообще нет такого понятия как отладка. сплошной хардкор =) с другой стороны есть определённый срез программистов принципиально не признающих пошаговую отладку.
Чтобы не признавать отладку, про нее нужно либо не знать, либо уже какой-то серьезный уровень скиллов иметь. Удивительно, что ArduinoIDE завоевала такую популярность, хотя казалось бы новичкам без отладки тяжелее, а профи должны признавать, что отладка - это ~80% времени от написания программы. Только в качестве brainfuck, но опять же это не массовое увлечение. Странно все это, реально феномен.
А более-менее серьёзные вещи это какого уровня?
Ну если смотреть среднестатистический скетч, то там да - зачастую лично мне кажется как-будто пятиклассник на Бейсике линейную программу пишет. Но если в какую-нибудь библиотеку заглянуть, то там опять же как правило имхо все на приличном уровне - структуры, указатели.
мне казалось на самых ходовых моделях, тех что на на 328й и на 32u4 не особо развернёшься =)
Ну web-сервер конечно не напишешь, но если сравнивать с Z80, то лично я в начале 2000-ных просто плакал - куча регистров (и все как Аккумулятор), какая хочешь память на борту - ОЗУ, EEPROM, FLASH. Припаял пару деталюх, подрубил 5 Вольт и фигачь на Си прям из коробки.
Вооот такое чудо получилось. Альфа версия =)
Подробности с примерами звука будут чуть-чуть позже.
Его кстати можно будет потрогать на завтрашнем Verve.
https://i.imgur.com/KvT6b5c.jpg
Что-то как-то не заметил эту тему ранее, первый скетч (его оригинальную версию вроде разработал кто-то из-за рубежа) я тоже в свое время брал за основу, но очень сильно переделал код отправки данных, особенно задержки с помощью delayMicroseconds, ваш же второй скетч - это наоборот даунгрейд всей разработки автора на функцию digitalWrite от которой автор постарался уйти.
Мой вариант переделки можете посмотреть здесь http://www.avray.ru/ru/parallel-sending-with-generator/ всё сделано было согласно даташиту, но над генератором 1.7 я так упорно не заморачивался, а сделал просто 2 МГц, так что можно из моего варианта взять функцию отправки данных и будет всё отлично работать.
Приветствую. Спасибо за пример. Но из-за особенностей синтезатора мне пришлось уйти от прямого подключения. Сейчас у меня напрямую от ардуины и до AY'шек идет только clock и reset
Данные заводятся через сдвиговый регистр. И bdir и bc1 всех 4х AY'шек заведены на отдельный сдвиговый регистр. Все работает через spi на максимально доступной скорости. И функция отправки сейчас состоит только из прижимания нужных cs и SPI.transfer'ов.
Касаемо несущей частоты. Сейчас у меня работает на 2Мгц, но в будущем я хочу реализовать выбор из 3х частот 1Мгц, 1.75Мгц и 2Мгц
https://www.youtube.com/watch?v=hUPs2pv5d_g
Вот такое есть ;) Код в описании видео.
https://www.youtube.com/watch?v=m23hZ-1JwqI
Здравствуйте, как ни странно эта тема оказалась самой полезной. Эта тема и тема на Arduino.cc.
В интернете полно видео, попадаются статьи как быстро накидать простенький скетч и на этом все обрывается =)
В итоге с попытки пятой смог завести AY =)
Чем меньше понимаешь схему тем меньше вероятность того что она заработает.
Что нужно учесть
В первую очередь то что не все пины ардуино одинакого полезны, что на разных ардуинах это пин разный еще. Авторы схем же обычно не объясняют почему именно пин 2 был выбран или то что это не выводы 10-13, а выводы SPI )
Кварцевый генератор и кварц очень разные вещи
Скорости прямого чтения побайтно вам наверняка не хватит.
Выходы AY мне показались капризными, ощущение что если выход руками к колонке контасить то она может и перестать играть.
Паяние макетки процесс хоть и медитативный, но лучше сразу запастись изопропиловым спиртом, я долго не мог понять почему все не работает и полупроводит на схеме пока пару раз в нем не искупал плату.
Еще все авторы куда-то пропадают сразу фразы вау все заработало поэтому софт пришлось писать почти с нуля, взяв за основу здешний скетч с SPI.
Отладка это дааа, неопределенные состояния это прям моя любимая часть С++ )
На данный момент плеер играет, переходит туда, обратно и играет случайную песню, правда переключение назад и случайное медлеееенное и есть баги в нем. Думаю что же еще можно прикрутить к нему )
И такой вопрос, а нет никакого удобного способа конвертировать в PSG? Или может кто написал поддержку и других форматов, просто PSG это мой потолок, я неделю реализовывал его =)65906659086590765909
Вот примеры работы плеера =)
https://soundcloud.com/wzftub5lvvn3/sets/ay-8910-by-kulich
siemensC35
04.01.2019, 18:20
Я 8910 получил с такой же маркировкой. В Спекке (КАЙ-1024_2010) всё работает.
Заказал по такой же цене. Приколхозил к Ленинграду на макетах и МГТФе по класической схеме с ЛЕ и ЛА3
В итоге как и у автора ловлю белый шум
1,75 брал со счетчиков в самом компе
( В другом источнике сигнал TST 2 висит в воздухе, ёсть мысля что его не нужно было подключать для АЮ )
Схема класики бралась атседа :
http://sblive.narod.ru/ZX-Spectrum/AY-ADAPTERforLUT/AY-ADAPTERforLUT.htm
Извиняюсь что здесь спрашиваю зарание т.к мб вопрос не по теме
stepmotor
05.01.2019, 19:02
Может шум на выходе формируется.
Посмотрите схему подключения в HARLEQUIN .. работает идеально.
http://micronc.ru/zx/ay_hq.png
siemensC35
06.01.2019, 11:31
Может шум на выходе формируется.
ага, загнал програмку под эмулятором, там где скачивал написано 48/128 . Но по факту на 48к машинах "белый шум"
Подскажите какой-то не тяжелый софт работающий с АЮ для отладки тогда ( с касеты т.к дискогрыза еще нету)
stepmotor
06.01.2019, 11:59
Я этим тестом тестил.
67555.
где скачал не помню, но тест мне помог.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot