Обсуждаем цифровые устройства...
Ответить

Re: Эмулятор магнитофона для ZX-Spectrum

Вт окт 17, 2017 18:59:35

Не датчик. Сам тепловизор Flir One Gen 2 и подключён по USB к плате STM32F4Discovery на этом самом STM32F407.

Re: Эмулятор магнитофона для ZX-Spectrum

Вт окт 17, 2017 19:34:55

Вижу вижу. Это приставка для мобильника. Занятная штука.

Добавлено after 40 seconds:
Теперь как то изловить откуда глюк берется.

Добавлено after 1 minute 18 seconds:
Может как нибудь приоритет выставить на таймер. Что бы самые высокие привилегии имел.

Добавлено after 6 minutes 52 seconds:
Давно хочется свой тепловизор. Датчики очень дорогие....

Re: Эмулятор магнитофона для ZX-Spectrum

Сб окт 28, 2017 19:40:54

Ну как, нашли в чём причина сбоя? :)

Re: Эмулятор магнитофона для ZX-Spectrum

Ср ноя 01, 2017 12:57:07

Нет, все переискал...у меня мало опыта работы с контроллерами. Думаю срабатывает прерывание и происходит рассогласование по передаче. Могу предоставить исходный код.

Re: Эмулятор магнитофона для ZX-Spectrum

Ср ноя 01, 2017 19:20:31

А с буферизацией данных в ОЗУ тоже происходит сбой?

Re: Эмулятор магнитофона для ZX-Spectrum

Чт ноя 02, 2017 20:32:15

да. все так же

Re: Эмулятор магнитофона для ZX-Spectrum

Вс ноя 05, 2017 17:04:30

Думаю срабатывает прерывание и происходит рассогласование по передаче.


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

Re: Эмулятор магнитофона для ZX-Spectrum

Ср ноя 22, 2017 06:24:58

После перерыва наконец то заработал мой плеер.
Вот видео работы

Программа пока очень сырая.
Сделал буферизацию на влезло пока 65535 байт
Хочу сделать кусочками хотя бы по 1 Кб или пока напрямую читать по байту с карты.

У меня вопрос как организовать пользовательский интерфейс, т.е. сделать отображение текущего блока и полоску оставшегося времени воспроизведения.

Добавлено after 2 minutes 21 second:
Код:
void TIM7_IRQHandler(void)
{
  /* USER CODE BEGIN TIM7_IRQn 0 */

  /* USER CODE END TIM7_IRQn 0 */
  HAL_TIM_IRQHandler(&htim7);
  /* USER CODE BEGIN TIM7_IRQn 1 */
if (TapeOutMode==TAPE_OUT_STOP)
 {
  index16=16;//первоначальное значение бита
   byte =0;//первоначальное значение байта
   HAL_GPIO_WritePin(T_OUT_GPIO_Port, T_OUT_Pin, GPIO_PIN_RESET);
  return;
 }      
  if (TapeOutVolume==true)
 {
  HAL_GPIO_WritePin(T_OUT_GPIO_Port, T_OUT_Pin, GPIO_PIN_RESET);
  TapeOutVolume=false;
 }
 else
 {
  HAL_GPIO_WritePin(T_OUT_GPIO_Port, T_OUT_Pin, GPIO_PIN_SET);
  TapeOutVolume=true;
 }
 
  //выводим пилот-тон
 if (TapeOutMode==TAPE_OUT_LEAD)
 {
  TIM7->ARR = 2168*2;//начальное значение таймера
  if (tim6_countersec > 0) tim6_countersec--;
  else
  {
    tim6_countersec = 3223;//Время воспроизведения пилот тона 2 сек.
   TapeOutMode=TAPE_OUT_SYNCHRO_1;
   return;
  }
 }
 
 //выводим синхросигнал 1
 if (TapeOutMode==TAPE_OUT_SYNCHRO_1)
 {
  TIM7->ARR = 667;//начальное значение таймера
  TapeOutMode=TAPE_OUT_SYNCHRO_2;
  return;
 }
 
 //выводим синхросигнал 2
 if (TapeOutMode==TAPE_OUT_SYNCHRO_2){
  TIM7->ARR = 735;//начальное значение таймера
  TapeOutMode=TAPE_OUT_DATA;
  index16=16;
  byte=0;
   BytesCount=0;//обнуляем счетчик байт   
   return;}

 //передаём данные
 if (TapeOutMode==TAPE_OUT_DATA)
 {   
  if (index16>=16)
  {     
   if (BytesCount>=sz)
   {
    TapeOutMode=TAPE_OUT_STOP;
      //TapeOutMode=TAPE_OUT_PAUSE;//ставим паузу по оканчанию процесса
      //sz=FioNextHead();//читаем размер блока       
      BytesCount = 0;
   return;
   }
   //byte=FioNextByte();//читаем байт из буфера   
   byte=read_byte();//читаем байт из буфера   
   index16=0;//первоначальное значение бита
   BytesCount++;//общий счетчик байт файла   
   byte_temp = byte;
  }
 // printf("byte_temp %X\r\n", byte_temp);
  //выдаём бит
  if (byte&128) {
      TIM7->ARR = 1710*2;//начальное значение таймера
      //printf("bit%u =1 byte %u\r\n", index16,BytesCount);
   }
            else {
                     TIM7->ARR = 855*2;//начальное значение таймера
                     //printf("bit%u =0 byte %u\r\n", index16,BytesCount);
                  }
  if ((index16%2)==1) byte<<=1; 
  index16++;
  return;      
 }
  /* USER CODE END TIM7_IRQn 1 */
}


Это код обработчика таймера

Re: Эмулятор магнитофона для ZX-Spectrum

Ср ноя 22, 2017 17:45:26

Как можно внешнюю память подключить к stm32?

Re: Эмулятор магнитофона для ZX-Spectrum

Пт ноя 24, 2017 09:14:24

Зависит от типа памяти (по SPi, I2C, параллельная). И, насколько я читал (но не точно), у STM бывает программные интерфейс для работы с некоторыми типами памяти.

Re: Эмулятор магнитофона для ZX-Spectrum

Пт ноя 24, 2017 15:44:31

да есть, FSMC в моем stm32f407
Хочу SRAM добавить.


Теперь сделал индикацию загрузки

Re: Эмулятор магнитофона для ZX-Spectrum

Вс ноя 26, 2017 08:50:27

А ошибку-то нашли?

Re: Эмулятор магнитофона для ZX-Spectrum

Вс ноя 26, 2017 17:25:59

Да, неверно задавал регистры. Сейчас использую все настройки через ARR
Основной стоит делитель PSC 120 (тактовая 84МГц)
До этого делал ARR=1 и частоту настраивал через PSC

Так же настроил уровень сигнала, слишком большой искажал форму.
Это все в рамках эмулятора на ПК.

Добавлено after 1 minute:
Думаю как паузу организовать и прокрутку блоков так как некоторые игры требуют остановки воспроизведения, либо выбор уровней.

Re: Эмулятор магнитофона для ZX-Spectrum

Пн ноя 27, 2017 10:46:12

Так у меня же в эмуляторе и пауза и прокрутка блоков сделана. Так же и вы можете сделать. :)

Re: Эмулятор магнитофона для ZX-Spectrum

Пн ноя 27, 2017 11:22:21

.....что то не сразу заметил
Попытаюсь разобраться.

Re: Эмулятор магнитофона для ZX-Spectrum

Чт ноя 30, 2017 01:04:36

da-nie, а что стряслось в тестом памяти в версии прошивки Firmware 2.2? Длится аж 15 минут.

Реально отсортировать файлы хотя бы по имени?

P.S. Вставляю пустую SD карту. Появляется Основное меню в котором выбираю пункт Магнитофон х1. Появляется сообщение "Нет файлов tap" и через пару секунд опять попадаю в Основное меню. На горячую меняю карту и ... все, более на кнопки магнитофон не реагирует. Так и должно быть или задумывалось, что сменим карту и будем работать дальше?

Re: Эмулятор магнитофона для ZX-Spectrum

Чт ноя 30, 2017 06:09:51

Запустил полностью свою версию плеера. Сделал перемотку вперед и назад, паузу и выход. Теперь все нужно тестировать на глюки.
Хочу попробовать чтение tzx и запись реализовать.

Re: Эмулятор магнитофона для ZX-Spectrum

Чт ноя 30, 2017 10:45:19

Тест памяти был изменён - проверяется каждое значение байта (0-255). Просто кто-то жаловался на плавающие дефекты и сделал так.

Горячая замена карты не поддерживается. :)

tzx довольно сложный формат. И в общем, не нужный. А запись сделать можно (но потребуется игра с FAT). Я их не делал из-за общей бесполезности такого. Не припомню необходимости сохранять что-либо с ZX сейчас, за исключением файлов достижений от Elite. Но они мне не нужны. :)

Re: Эмулятор магнитофона для ZX-Spectrum

Чт ноя 30, 2017 11:17:01

Как реализовать запись? Сигнал с ZX так же частотно модулированный?
Потом анализировать его и писать в файл.

Re: Эмулятор магнитофона для ZX-Spectrum

Чт ноя 30, 2017 14:12:15

Да. А пример расшифровщика магнитофонных файлов я приводил в этой теме (странице так на второй).
Ответить