Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Чтение дискет Amiga на Arduino: открытое решение для восстановления данных

Необходимые компоненты

Программное обеспечение

О проекте

Автор проекта Роб Смит (Rob Smith) создал дешёвое open-source решение для чтения дискет формата Amiga (DD, 880 КБ) на современном ПК. Коммерческие контроллеры вроде KryoFlux или Catweasel стоят дорого и часто закрыты, а стандартные ПК-флоппи-контроллеры не умеют читать специфическую запись Amiga (MFM, 11 секторов на дорожку, 512 байт/сектор, 300 об/мин).

Идея и подход

Arduino (ATmega328, 16 МГц) напрямую подключается к интерфейсу флоппи-привода. Главная сложность — частота данных 500 кГц (битовой поток MFM). Стандартные прерывания и digitalRead слишком медленны. Решение: использовать аппаратный таймер/счётчик ATmega328 для подсчёта импульсов от привода и программную фазовую автоподстройку частоты (PLL) для синхронизации с дрифтом скорости вращения диска.

Эволюция решения (кратко)

  1. Попытка 1: Два сдвиговых регистра 74HC594 для параллельного захвата 8 бит при 62,5 кГц. Не сработало — данные невалидны.
  2. Попытка 2: Прерывание (ISR) на каждом импульсе. Накладные расходы ISR + медленный digitalRead привели к потере тактов.
  3. Попытка 3: Аппаратный счётчик Timer0 считает импульсы, Timer2 генерирует окно 2 мкс. Появились синхронизационные ошибки из-за нестабильной скорости диска.
  4. Попытка 4: Программная PLL: сброс счётчика Timer2 при каждом импульсе (фазовая коррекция). Данные стали читаться, но с ошибками контрольных сумм.
  5. Попытка 5: Перенос фазовой коррекции в «голое» прерывание (ISR_NAKED) на пине INT0. Минимизированы такты: всего 5 инструкций (0,3125 мкс). Качество чтения значительно выросло.
  6. Попытка 6: Добавлен триггер Шмитта (74HCT14) и подтяжка 1 кОм — заметного улучшения нет.
  7. Попытка 7: Проверка правил MFM-кодирования (не может быть двух «1» подряд, не более трёх «0» подряд) для исправления ошибок.

Декодирование MFM и формирование ADF

Перспективы (V2 и дальше)

Ссылки

Производственный процесс

  1. Эволюция и мастерство анимации
  2. Эволюция дискет: от магнитных носителей к оптическим
  3. Сборка Bluetooth-робота-шпиона на Arduino с управлением с телефона
  4. FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике
  5. DIY Arduino TV-B-Gone: универсальный пульт для выключения любого телевизора
  6. Создание пользовательских LED-часов с будильником — видно с 12 метров
  7. Find Me: Умный поисковик вещей на Arduino и Bluetooth
  8. Оптимизированные решения питания для проектов на Arduino
  9. Крестики-нолики на Arduino с матрицей MAX7219 и картонным корпусом
  10. Чтение дискет Amiga на Arduino: открытое решение для восстановления данных