Важная информация

User Tag List

Страница 1 из 17 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 163

Тема: ROM-плеер на ардуино

  1. #1
    Master Аватар для Improver
    Регистрация
    06.02.2018
    Адрес
    г. Волгоград
    Сообщений
    970
    Спасибо Благодарностей отдано 
    417
    Спасибо Благодарностей получено 
    392
    Поблагодарили
    217 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    Lightbulb ROM-плеер на ардуино

    В качестве альтернативы проекту "SD-ROM Картридж", можно сделать аналогичное устройство, которое будет загружать программы с SD-карты в Вектор-06ц, но только будет это делать через магнитофонный вход. Этот вариант, хоть и более медленный, но имеет свои плюсы -- такой плеер будет работать с любой моделью Вектора, вне зависимости от того, какой в нём прошит загрузчик. Конечно, таким способом можно загружать программы и при помощи простого mp3-плеера, и напрямую со звуковой карты ПК, но пусть будет и эта альтернатива, возможно устройство получится более удобное в использовании.

    Пока что я ставлю себе ближайшую цель создать плеер, который будет с SD-карты выводить данные в формате ROM, а цель "на перспективу" -- создать аналог проекта "Магнитофон для Спектрума на ATMega128", но для Вектора и на ардуино, без необходимости изготовления плат, пайки и в полностью открытых исходниках (пусть будет GPL...).

    Итак, на текущий момент у меня готов первый вариант скетча, который выводит заранее подготовленные данные в формате ROM. Данный скетч протестирован на китайском аналоге Arduino Nano v3.

    Содержимое скетча


    Для компиляции использовалась IDE версии 1.0.5 под Ubuntu, никаких дополнительных библиотек не потребовалось. Размер скетча в двоичном коде -- чуть больше 4Кб.
    Вкратце, скетч работает так: сначала выводится короткий звуковой сигнал и через 1 секунду начинается воспроизведение заголовка и данных. Дублирование блоков не делал -- думаю, при качественном сигнале в этом не будет необходимости. Далее пауза на 15 секунд и всё повторяется сначала.
    Код:
    // Заголовок
    byte SB[27] = { 
      0x4E, 0x4F, 0x44, 0x49, 0x53, 0x43, 0x30, 0x30, // NODISK00
      0x31, 0x39, 0x30, 0x31, 0x31, 0x38,             // дата 190118
      0x74, 0x65, 0x73, 0x74, 0x74, 0x70, 0x20, 0x20, // testtp.....
      0x20, 0x20, 0x20, 0x00, 0x00 };
    // собственно, сама программа -- тест техпрогона
    byte St[1024] = {
      0xC3, 0x3D, 0x01, 0x77, 0x65, 0x6B, 0x74, 0x6F,  0x72, 0x2D, 0x30, 0x36, 0x63, 0x54, 0x45, 0x53,
      0x54, 0x20, 0x56, 0x28, 0x31, 0x2E, 0x31, 0x29,  0x20, 0x20, 0x72, 0x61, 0x7A, 0x72, 0x61, 0x62,
      0x2E, 0x74, 0x65, 0x6D, 0x69, 0x72, 0x61, 0x7A,  0x6F, 0x77, 0x20, 0x64, 0x2E, 0x61, 0x2E, 0x20,
      0x2C, 0x73, 0x6F, 0x6B, 0x6F, 0x6C, 0x6F, 0x77,  0x20, 0x61, 0x2E, 0x61, 0x2E, 0x3E, 0x80, 0xD3,
      0x04, 0x3E, 0xC3, 0x32, 0x00, 0x00, 0x3E, 0xC9,  0x32, 0x38, 0x00, 0x21, 0x01, 0x00, 0x22, 0xE6,
      0x04, 0x21, 0x3D, 0x01, 0x22, 0x01, 0x00, 0x21,  0x00, 0x05, 0x11, 0x01, 0x00, 0xAF, 0x77, 0x23,
      0x77, 0x23, 0x77, 0x23, 0x77, 0x19, 0xD2, 0x5E,  0x01, 0x31, 0x00, 0x01, 0x3E, 0x88, 0xD3, 0x00,
      0xCD, 0xD7, 0x02, 0x3E, 0x03, 0xD3, 0x02, 0x3E,  0x02, 0xD3, 0x01, 0x3E, 0xFF, 0xD3, 0x03, 0xCD,
      0xB4, 0x03, 0x21, 0x55, 0x9E, 0x06, 0x04, 0x0E,  0x08, 0x3E, 0xFF, 0xCD, 0x71, 0x03, 0x7C, 0xD6,
      0x04, 0x67, 0x0D, 0xC2, 0x89, 0x01, 0x7C, 0xC6,  0x20, 0x67, 0x7D, 0xC6, 0x20, 0x6F, 0x05, 0xC2,
      0x87, 0x01, 0x06, 0x80, 0x2A, 0xE6, 0x04, 0xE5,  0x7C, 0x21, 0x34, 0x8A, 0xF5, 0xCD, 0x38, 0x03,
      0xF1, 0x21, 0x34, 0xCA, 0xCD, 0x38, 0x03, 0xE1,  0x7D, 0x21, 0x34, 0x94, 0xF5, 0xCD, 0x38, 0x03,
      0xF1, 0x21, 0x34, 0xD4, 0xCD, 0x38, 0x03, 0x21,  0x00, 0x05, 0x78, 0x07, 0x47, 0x4E, 0x70, 0x7E,
      0x71, 0xB8, 0xCA, 0xFF, 0x01, 0xCD, 0x04, 0x03,  0xE5, 0x21, 0x1A, 0x9E, 0xCD, 0x38, 0x03, 0xE1,
      0xE5, 0x7C, 0x21, 0x1A, 0xAA, 0xCD, 0x38, 0x03,  0xE1, 0xE5, 0x7D, 0x21, 0x1A, 0xB4, 0xCD, 0x38,
      0x03, 0x3A, 0x9E, 0x04, 0x3C, 0x32, 0x9E, 0x04,  0x21, 0x0C, 0xB4, 0xCD, 0x38, 0x03, 0xE1, 0x7D,
      0xB7, 0xC2, 0x23, 0x02, 0xE5, 0x7C, 0xD3, 0x07,  0x21, 0x27, 0xCA, 0xCD, 0x38, 0x03, 0xE1, 0xE5,
      0x7D, 0xD3, 0x06, 0x21, 0x27, 0xD4, 0xCD, 0x38,  0x03, 0x78, 0xD3, 0x05, 0x21, 0x27, 0xFE, 0xCD,
      0x38, 0x03, 0xE1, 0x23, 0x7C, 0xFE, 0x00, 0xC2,  0xCD, 0x01, 0x3E, 0x80, 0xB8, 0xC2, 0xA4, 0x01,
      0xE5, 0x2E, 0x00, 0xCD, 0x99, 0x02, 0xCD, 0x99,  0x02, 0x21, 0xDC, 0x05, 0x3E, 0x36, 0xD3, 0x08,
      0x7D, 0xD3, 0x0B, 0x7C, 0xD3, 0x0B, 0x2E, 0xFF,  0xCD, 0x99, 0x02, 0x21, 0xEE, 0x02, 0x3E, 0x76,
      0xD3, 0x08, 0x7D, 0xD3, 0x0A, 0x7C, 0xD3, 0x0A,  0x2E, 0x01, 0xCD, 0x99, 0x02, 0x21, 0xF4, 0x01,
      0x3E, 0xB6, 0xD3, 0x08, 0x7D, 0xD3, 0x09, 0x7C,  0xD3, 0x09, 0x2E, 0x00, 0xCD, 0x99, 0x02, 0x21,
      0xFF, 0xFF, 0x3E, 0x00, 0xD3, 0x02, 0x2B, 0xD3,  0x01, 0x7C, 0xB5, 0xC2, 0x76, 0x02, 0x3E, 0x03,
      0xD3, 0x02, 0x2A, 0xE6, 0x04, 0x23, 0x22, 0xE6,  0x04, 0xE1, 0x3E, 0x30, 0xD3, 0x08, 0x3E, 0x70,
      0xD3, 0x08, 0x3E, 0xB0, 0xD3, 0x08, 0xC3, 0xA4,  0x01, 0x26, 0x00, 0x3E, 0xFF, 0xFB, 0x76, 0xD3,
      0x03, 0xF5, 0xE5, 0x21, 0x78, 0x02, 0x2B, 0x7C,  0xB5, 0xC2, 0xA6, 0x02, 0x2E, 0x0F, 0x26, 0x52,
      0x7D, 0xD3, 0x02, 0x25, 0xC2, 0xB3, 0x02, 0x2D,  0xC2, 0xAE, 0x02, 0x3E, 0x03, 0xD3, 0x02, 0xE1,
      0xF1, 0x85, 0x24, 0xC2, 0x9D, 0x02, 0xC9, 0xF6,  0xA4, 0x52, 0x00, 0xC0, 0x80, 0x40, 0x00, 0x20,
      0x10, 0x08, 0x00, 0x04, 0x02, 0x01, 0x24, 0xFB,  0x76, 0xF5, 0xE5, 0xD5, 0x11, 0x0F, 0x10, 0x21,
      0xC7, 0x02, 0x7B, 0xD3, 0x02, 0x7E, 0xD3, 0x0C,  0x23, 0xD3, 0x0C, 0x1D, 0xD3, 0x0C, 0x15, 0xD3,
      0x0C, 0x14, 0xD3, 0x0C, 0x15, 0xD3, 0x0C, 0x14,  0xD3, 0x0C, 0x15, 0xD3, 0x0C, 0xC2, 0xE2, 0x02,
      0xD1, 0xE1, 0xF1, 0xC9, 0xE5, 0xC5, 0x4F, 0x2E,  0x35, 0x7C, 0xE6, 0x60, 0x67, 0x7D, 0xC6, 0x20,
      0x6F, 0x7C, 0xD6, 0x20, 0x67, 0xF2, 0x0D, 0x03,  0x79, 0xA8, 0x26, 0xBE, 0x47, 0x7C, 0xC6, 0x04,
      0x67, 0xFE, 0xE2, 0xCA, 0x34, 0x03, 0x78, 0x1F,  0x47, 0xD2, 0x1D, 0x03, 0x3E, 0x55, 0xCD, 0x71,
      0x03, 0xC3, 0x1D, 0x03, 0x79, 0xC1, 0xE1, 0xC9,  0xC5, 0xD5, 0xE5, 0x06, 0x08, 0x4F, 0x78, 0xFE,
      0x04, 0xC2, 0x45, 0x03, 0x25, 0x79, 0x1F, 0x4F,  0xD2, 0x51, 0x03, 0x11, 0x94, 0x04, 0xC3, 0x54,
      0x03, 0x11, 0x8A, 0x04, 0xCD, 0x60, 0x03, 0x25,  0x05, 0xC2, 0x3E, 0x03, 0xE1, 0xD1, 0xC1, 0xC9,
      0xC5, 0xD5, 0xE5, 0x06, 0x0A, 0x1A, 0x77, 0x2D,  0x13, 0x05, 0xC2, 0x65, 0x03, 0xE1, 0xD1, 0xC1,
      0xC9, 0xC5, 0xD5, 0xE5, 0xFE, 0xFF, 0xCA, 0x93,  0x03, 0x11, 0xA4, 0x03, 0x4C, 0x21, 0xAC, 0x03,
      0xF5, 0x1A, 0xB9, 0x46, 0x13, 0x23, 0xC2, 0x81,  0x03, 0xF1, 0xE1, 0xE5, 0x60, 0x11, 0x72, 0x04,
      0xC3, 0x96, 0x03, 0x11, 0x5A, 0x04, 0x06, 0x18,  0x1A, 0x77, 0x13, 0x2D, 0x05, 0xC2, 0x98, 0x03,
      0xE1, 0xD1, 0xC1, 0xC9, 0xC2, 0xC6, 0xCA, 0xCE,  0xD2, 0xD6, 0xDA, 0xDE, 0xC6, 0xC2, 0xCE, 0xCA,
      0xD6, 0xD2, 0xDE, 0xDA, 0x06, 0x18, 0x3E, 0xFF,  0x26, 0x88, 0x0E, 0x38, 0x2E, 0xF8, 0x77, 0x2D,
      0x0D, 0xC2, 0xBE, 0x03, 0x24, 0x05, 0xC2, 0xBA,  0x03, 0x21, 0xE0, 0xEA, 0x3E, 0x01, 0xCD, 0x32,
      0x04, 0x24, 0x3C, 0xFE, 0x10, 0xC2, 0xCE, 0x03,  0x21, 0xF0, 0x81, 0xCD, 0xE1, 0x03, 0x21, 0xF0,
      0x99, 0x06, 0x03, 0x11, 0x9F, 0x04, 0xE5, 0x3E,  0x04, 0xF5, 0xE5, 0x0E, 0x09, 0x1A, 0x77, 0x2B,
      0x13, 0x0D, 0xC2, 0xED, 0x03, 0xE1, 0xF1, 0x24,  0x3D, 0xC2, 0xE9, 0x03, 0xE1, 0x11, 0xF0, 0x20,
      0x19, 0x05, 0xC2, 0xE3, 0x03, 0xD5, 0xE5, 0xC5,  0x21, 0xEB, 0x8B, 0x11, 0xC3, 0x04, 0xCD, 0x27,
      0x04, 0x21, 0xEB, 0x8F, 0xCD, 0x27, 0x04, 0x21,  0xEB, 0x93, 0xCD, 0x27, 0x04, 0x21, 0xEB, 0x97,
      0xCD, 0x27, 0x04, 0xC1, 0xE1, 0xD1, 0xC9, 0x06,  0x09, 0x1A, 0x77, 0x13, 0x2B, 0x05, 0xC2, 0x29,
      0x04, 0xC9, 0xF5, 0xE5, 0x57, 0x0E, 0x04, 0x06,  0x18, 0xE5, 0x7A, 0x0F, 0x57, 0xD2, 0x45, 0x04,
      0x3E, 0xFF, 0xC3, 0x46, 0x04, 0xAF, 0x77, 0x2D,  0x05, 0xC2, 0x46, 0x04, 0xE1, 0xD5, 0x11, 0x00,
      0xE0, 0x19, 0xD1, 0x0D, 0xC2, 0x37, 0x04, 0xE1,  0xF1, 0xC9, 0xFF, 0x81, 0x81, 0x81, 0x81, 0x81,
      0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,  0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x85,
      0x81, 0xFF, 0xFF, 0x81, 0x85, 0xA9, 0x91, 0xBD,  0x81, 0x81, 0xBD, 0xA9, 0xA9, 0x9D, 0x81, 0x91,
      0xA9, 0xA9, 0xBD, 0x81, 0x81, 0xAD, 0xAD, 0xBD,  0x81, 0xFF, 0x7C, 0xC6, 0xCE, 0xCE, 0xD6, 0xD6,
      0xE6, 0xE6, 0xC6, 0x7C, 0x04, 0x0C, 0x1C, 0x3C,  0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x3E, 0x00, 0x00,
      0x7F, 0x5D, 0x1C, 0x1C, 0x1C, 0x1C, 0x3E, 0x00,  0x00, 0x00, 0x00, 0x3E, 0x63, 0x7F, 0x60, 0x3E,
      0x00, 0x00, 0x00, 0x00, 0x3F, 0x60, 0x3E, 0x03,  0x7E, 0x00, 0x00, 0x08, 0x18, 0x7F, 0x18, 0x18,
      0x19, 0x0E, 0x00, 0x00, 0x7C, 0x66, 0x66, 0x7C,  0x78, 0x6C, 0x66, 0x00, 0x00, 0x3C, 0x66, 0x6E,
      0x60, 0x66, 0x66, 0x3C, 0x00, 0x00, 0x7C, 0x66,  0x66, 0x7C, 0x66, 0x66, 0x7C, 0x00, 0x00, 0x66,
      0x66, 0x24, 0x18, 0x18, 0x3C, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
    
    int p = 3; // номер пина, на который будет вывод сигнала
    
    void setup() //процедура setup
    {
      pinMode(p, OUTPUT); //объявляем пин как выход
    }
    
    void loop() //процедура loop
    {
      tone(p, 500, 100); //включаем на 500 Гц на 100 мс
      delay(1000);       //ждем 1 с
    
      byte BLs = 0x01; // начальный блок
      byte BLe = 0x04; // всего блоков
      byte BLt;        // осталось блоков
      byte Nst;        // номер строки
      int  Nbt = 0;    // номер байта из массива 
    
      byte CSz = 0x00; // контрольная сумма заголовка
      byte CSs = 0x00; // контрольная сумма строки
      byte i;
      byte j;
    
      for (i=0; i<=3; i++){           // преамбула (4*(00H*25+55H*25))
        for (j=0; j<=24; j++){
          SendByte(0x00);
        }
        for (j=0; j<=24; j++){
          SendByte(0x55);
        }
      }  
    
      for (BLt=BLe; BLt>=1; BLt--){   // Вывод блоков данных
        CSz = BLs;
        CSz += BLe;
        CSz += BLt;
        for (j=0; j<=15; j++){        // 00h*16
          SendByte(0x00);
        }
        for (j=0; j<=3; j++){         // 55h*4
          SendByte(0x55);
        }
        SendByte(0xE6);               // E6h*1
        for (j=0; j<=3; j++){         // 00h*4
          SendByte(0x00);
        }
    
        for (j=0; j<=26; j++){        // заголовок блока
          CSz += SB[j];
          SendByte(SB[j]);
        }
        SendByte(BLs);                // начальный блок
        SendByte(BLe);                // конечный блок
        SendByte(BLt);                // осталось блоков
        SendByte(CSz);                // контр.сумма заголовка
    
        for (Nst=0x80; Nst<=0x87; Nst++){   // вывод строк (8 шт.)
          for (j=0; j<=3; j++){       // 00h*4
            SendByte(0x00);
          }
          SendByte(0xE6);             // E6h*1
          CSs = Nst;
          SendByte(Nst);              // номер строки
          CSs += CSz;
          SendByte(CSz);              // контр.сумма заголовка
    
          for (j=0; j<=31; j++){      // собственно, строка данных
            CSs += St[Nbt];
            SendByte(St[Nbt]);
            Nbt++;
          }
          SendByte(CSs);              // контр.сумма строки
        }  
      }
    
      for (j=0; j<=15; j++){          // 00h*16 -- завершение вывода программы (?)
        SendByte(0x00);
      }
    
      delay(15000);   // ждем 15 с
    }
    
    void SendByte(byte SBt){          // Подпрограмма вывода байта
      byte Pd=PORTD;
      byte i=8;
      do{                 // Выводим биты начиная со старшего
        i--;
        if ((bitRead(Pd, p))^(bitRead(SBt, i))){ // Если состояние порта и выводимый бит разные
          Pd ^= (1 << p); // инвертируем бит в позиции p=3
          PORTD = Pd;     // вывод в порт p
        }
        else{
          delayMicroseconds(128); // Задержка для выравнивания длительности сигнала
        }
        delayMicroseconds(256);   // Задержка первого полупериода сигнала
        Pd ^= (1 << p);   // инвертируем бит в позиции p
        PORTD = Pd;       // вывод в порт p
        delayMicroseconds(256);   // Задержка второго полупериода сигнала
      } 
      while (i>0);
    }
    [свернуть]


    В качестве выхода выбран порт D3 на ардуино, к нему можно подключить для теста пьезоэлемент (второй вывод на GND), либо подключить непосредственно ко входу Вектора через конденсатор. Я пробовал его подключать напрямую ко входу звуковой карты ПК и записать сигнал в WAV-файл (пример: Test_WAV.7z), полученный файл без ошибок распознаётся программой wav2rom на скорости 6-8. На реальном железе ещё пока не протестил...

    В общем, если тема интересна -- давайте её развивать. Исходник скетча в виде файла для скачки: Test_TP_vector06c.ino.zip

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Veteran Аватар для zebest
    Регистрация
    11.01.2008
    Адрес
    Ладошкино
    Сообщений
    1,668
    Записей в дневнике
    4
    Спасибо Благодарностей отдано 
    318
    Спасибо Благодарностей получено 
    221
    Поблагодарили
    174 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Мимо проходил

    Почемууу бы в известный проект Tapeduino/Tzxduino не добавить функционал по выигрыванию/проигрыванию ром файлов? Или свой велосипед за всегда ближе?
    Ну или хотя бы железо по пинам совместимые, чтобы два раза не вставать
    https://github.com/sadken/TZXDuino
    Последний раз редактировалось zebest; 07.02.2018 в 15:08.
    Profi v3.2 -=- Speccy2010,r2

  4. #3
    Master Аватар для Improver
    Регистрация
    06.02.2018
    Адрес
    г. Волгоград
    Сообщений
    970
    Спасибо Благодарностей отдано 
    417
    Спасибо Благодарностей получено 
    392
    Поблагодарили
    217 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от zebest Посмотреть сообщение
    Почемууу бы в известный проект Tapeduino/Tzxduino не добавить функционал по выигрыванию/проигрыванию ром файлов? Или свой велосипед за всегда ближе?
    Свой велосипед интереснее. :-) А если серьёзно -- то на данном этапе ещё пока не имеет значения, на основе какого проекта строить свой, т.к. пока что, фактически, есть только кодировщик в rom-формат. Хотя я заметил, что в этом проекте сначала файл с программой преобразуется в wav, а потом проигрывается -- я не вижу пока в этом преобразовании особого смысла. Но я совершенно не возражаю против того, чтобы "взять лучшее" из Tapeduino/Tzxduino.

    Ну или хотя бы железо по пинам совместимые, чтобы два раза не вставать
    Так... Подключение SD-картридера и экрана в любом случае будут совпадать, ибо там используется аппаратные интерфейсы, кнопки без проблем можно сделать так же, если очень хочется, а вот выход... Там это сделано на пин D9, он же PB1, и на том же порту PB висит обращение к картридеру -- тут надо ещё протестить, не будут ли неожиданные глюки или тормоза при выводе данных.

  5. #4
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,806
    Спасибо Благодарностей отдано 
    642
    Спасибо Благодарностей получено 
    1,773
    Поблагодарили
    1,023 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Improver, генерацию стоит доработать. Наблюдается перекос длительностей. В идеале "длинные" интервалы д.б. в 2 раза длиннее "коротких", а в Test_16~~.wav они примерно на четверть длиннее чем нужно. Легко заметить на преамбуле - нули нормальные, а 55h слишком долгие. В эмуляторе стандартные загрузчики не могут прочитать такой файл, прочитал только таким и только в VV. Есть большое сомнение, что реал лучше воспримет такой wav.

  6. #5
    Guru Аватар для svofski
    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,105
    Спасибо Благодарностей отдано 
    772
    Спасибо Благодарностей получено 
    643
    Поблагодарили
    398 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Improver, ты генерируешь сигнал таймером-компарером?
    Больше игр нет

  7. #6
    Master Аватар для Improver
    Регистрация
    06.02.2018
    Адрес
    г. Волгоград
    Сообщений
    970
    Спасибо Благодарностей отдано 
    417
    Спасибо Благодарностей получено 
    392
    Поблагодарили
    217 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Improver, генерацию стоит доработать. Наблюдается перекос длительностей. В идеале "длинные" интервалы д.б. в 2 раза длиннее "коротких", а в Test_16~~.wav они примерно на четверть длиннее чем нужно. Легко заметить на преамбуле - нули нормальные, а 55h слишком долгие.
    Да, сейчас глянул -- так и есть... Надо уменьшить значение в строке "delayMicroseconds(128)" в подпрограмме вывода байта.

    - - - Добавлено - - -

    Цитата Сообщение от svofski Посмотреть сообщение
    Improver, ты генерируешь сигнал таймером-компарером?
    Незнаю, что это, но наверно нет. :-) Сигнал создаётся изменением состояния порта в подпрограмме SendByte, там же делается задержка длительности каждого состояния.

  8. #7
    Guru Аватар для svofski
    Регистрация
    20.06.2007
    Адрес
    С.-Петербург
    Сообщений
    4,105
    Спасибо Благодарностей отдано 
    772
    Спасибо Благодарностей получено 
    643
    Поблагодарили
    398 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Improver Посмотреть сообщение
    Незнаю, что это, но наверно нет. :-)
    Хардверные таймеры позволяют отмерять точные промежутки времени и аппаратно генерируют волновую форму на выходе. Я кроме даташитов на атмеги ничего не читал, но может быть вот тут неплохо это в ардуинный контекст помещено:
    https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM

    С другой стороны полностью софтовый генератор проще переносить на альтернативные Ардуины. Так что наверное нету смысла заморачиваться.
    Больше игр нет

  9. #8
    Master Аватар для Improver
    Регистрация
    06.02.2018
    Адрес
    г. Волгоград
    Сообщений
    970
    Спасибо Благодарностей отдано 
    417
    Спасибо Благодарностей получено 
    392
    Поблагодарили
    217 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ivagor, вот, уменьшил значение до 16, и тогда пропорции сигнала соблюдены, вроде... Посмотри: TestWAV17.7z
    Опять же, проверил через wav2rom -- распознаётся легко...

    - - - Добавлено - - -

    Цитата Сообщение от svofski Посмотреть сообщение
    Хардверные таймеры позволяют отмерять точные промежутки времени и аппаратно генерируют волновую форму на выходе.
    А, про это... Да, в начале у меня была идея использовать аппаратную генерацию, но нам ведь на выходе, фактически, нужно получать один импульс в нужной фазе на каждый бит, и мне показалось, что это будет слишком заморочено...

    Я сейчас бегло почитал ту статью про PWM, там есть интересные вещи, надо будет изучить этот вопрос.
    Последний раз редактировалось Improver; 07.02.2018 в 18:12.

  10. #9
    Veteran Аватар для zebest
    Регистрация
    11.01.2008
    Адрес
    Ладошкино
    Сообщений
    1,668
    Записей в дневнике
    4
    Спасибо Благодарностей отдано 
    318
    Спасибо Благодарностей получено 
    221
    Поблагодарили
    174 сообщений
    Mentioned
    7 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Improver Посмотреть сообщение
    Подключение SD-картридера и экрана в любом случае будут совпадать, ибо там используется аппаратные интерфейсы, кнопки без проблем можно сделать так же, если очень хочется, а вот выход...

    16+

    [свернуть]

    с год назад собирал ради интереса и тестировал на тап-ках, ну и разрисовал, для сеяб.. Пищало вполне прилично
    Profi v3.2 -=- Speccy2010,r2

  11. #10
    Guru
    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    7,806
    Спасибо Благодарностей отдано 
    642
    Спасибо Благодарностей получено 
    1,773
    Поблагодарили
    1,023 сообщений
    Mentioned
    22 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Test_17~.wav спокойно читается в эмуляторах штатными загрузчиками, длительности выровнялись.

Страница 1 из 17 12345 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Портативный AY плеер.
    от Руслан в разделе Звук
    Ответов: 1
    Последнее: 16.04.2014, 08:46
  2. Service rom + 128 basic rom
    от VELESOFT в разделе Оси
    Ответов: 1
    Последнее: 24.03.2013, 04:48
  3. Плеер для pt 3
    от Руслан в разделе Музыка
    Ответов: 25
    Последнее: 14.08.2012, 19:25
  4. Advanced ROM Manager (ROM Switvcher + Prof. ROM)
    от Alex_NEMO в разделе Память
    Ответов: 4
    Последнее: 04.10.2010, 11:43
  5. AY плеер
    от newart в разделе Звук
    Ответов: 19
    Последнее: 20.07.2006, 00:03

Метки этой темы

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •