Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Leitor de Disquetes Amiga Baseado em Arduino: Recuperação de Dados Open-Source e Acessível

Componentes Necessários

Componente Quantidade Observações
Resistor 1k ohm 1
Protoboard (genérica) 1
Fios Jumper (genéricos) 1 conjunto
Fonte para Protoboard SparkFun 5V/3.3V 1
Arduino UNO (ou Pro Mini) 1 Funciona com ambos

Software e Serviços Online

Sobre o Projeto

Objetivo

Criar uma forma simples, barata e open-source de recuperar dados de disquetes DD (Double Density) do Amiga a partir do Windows 10 e outros sistemas operacionais.

Solução

Um Arduino + uma aplicação Windows.

Por que?

Para preservar dados desses disquetes para o futuro. Um PC normal não consegue ler disquetes Amiga devido à forma como os dados são gravados.

Site do Projeto: https://amiga.robsmithdev.co.uk/

Esta é a V1 do projeto. A V2 contém leitura e escrita aprimoradas!

Experiências com Amiga

Devo minha carreira ao Amiga, especificamente ao A500+ que meus pais me deram no Natal aos 10 anos. Comecei jogando, mas depois fiquei curioso sobre o que mais ele podia fazer. Brinquei com o Deluxe Paint III e aprendi sobre o Workbench.

Histórico

Usei o Amiga em projetos de GCSE e A-Level (graças ao Highspeed Pascal, compatível com Turbo Pascal no PC). Faz muito tempo, e tenho caixas de disquetes e um A500+ que não funciona mais. Pensei em fazer backup desses disquetes no computador, tanto para preservação quanto nostalgia.

O site Amiga Forever tem uma excelente lista de opções incluindo hardware, e o uso de duas unidades de disquete em um PC. Infelizmente, nenhuma era opção com hardware moderno, e os controladores KryoFlux/Catweasel são muito caros. Fiquei surpreso que a maioria fosse closed-source.

Muito ligado à eletrônica e tendo brincado com dispositivos Atmel (AT89C4051) na universidade, decidi olhar para o Arduino (crédito ao GreatScott pela inspiração mostrando como é fácil começar) e me perguntei se isso seria possível.

Pesquisa

Quando comecei, não sabia como a unidade de disquete funcionava, e menos ainda como os dados eram codificados. Os seguintes sites foram inestimáveis:

Tentativas de Desenvolvimento

Tentativa 1: Registradores de Deslocamento

Primeira abordagem usando dois registradores de deslocamento 8-bit (SN74HC594N) para reduzir a frequência de amostragem necessária. Funcionou para clock de 500kHz, mas os dados não eram significativos. Precisei de um osciloscópio para depurar.

Tentativa 2: Interrupção (ISR)

Removi os registradores e tentei detectar pulsos via interrupção. O overhead da ISR e a lentidão do digitalRead() tornaram inviável.

Tentativa 3: Contador de Hardware

Lembrei-me do módulo "Embedded Systems" na universidade (University of Leicester) onde o Prof. Pont sugeriu usar contadores de hardware. O ATMega328 tem timers que podem contar pulsos de entrada externa – velocidade deixou de ser problema.

Tentativa 4: Loop de Fase Bloqueada (PLL) via Software

O sinal da unidade saía de fase com meu clock de 500kHz. Implementei ressincronização a cada pulso detectado, ajustando o contador do timer. Funcionou! Consegui ler dados quase perfeitos.

Tentativa 5: ISR Otimizada (NAKED)

Para eliminar jitter, movi a ressincronização para uma ISR naked (sem prologue/epilogue do compilador). Reduzi para 5 instruções assembly (0,3125µs). Melhorou resultados, mas alguns disquetes ainda falhavam.

Tentativa 6: Trigger Schmitt

Adicionei SN74HCT14N (Hex Schmitt Trigger) com resistor pull-up de 1kΩ. Não houve diferença perceptível.

Tentativa 7: Validação de Dados MFM

Apliquei regras de codificação MFM para detectar erros: não pode haver dois '1' adjacentes nem mais de três '0' adjacentes. Detectou poucos erros MFM, mas alguns disquetes ainda não liam.

Decodificação

A unidade emite pulsos para cada transição de fase (0→1 ou 1→0). Os pulsos SÃO os dados MFM brutos, podendo ir direto para algoritmos de decodificação.

Busquei a palavra de sincronização 0x4489 (ou 0x2AAAAAAA44894489 com máscara 0x7FFFFFFFFFFFFFFF para bugs em código Amiga antigo). Encontrei até 11 por trilha (setores Amiga).

Decodifiquei cabeçalhos e dados, gravei como arquivo ADF (formato simples: 512 bytes por setor, ambos lados, em ordem). Usei checksums para validar setores e reli até ter 11 válidos.

Próximos Passos

Código

Repositório GitHub: Arduino sketch e código fonte Windows

Esquemáticos

Consulte as imagens de esquemáticos no projeto original (diagrama de circuito e animação GIF do timing).

Processo de manufatura

  1. A Evolução e Arte da Animação
  2. A Evolução dos Disquetes: Da Mídia Magnética ao Armazenamento Óptico
  3. Construa um Spybot Controlado por Bluetooth com Arduino
  4. FlickMote: Controle Remoto IR por Gestos para Casa Inteligente
  5. DIY Arduino TV B-Gone: Controle Remoto Universal para Todas as TVs
  6. Construa um Relógio Mestre LED Personalizado com Alarme – Visível a 12 Metros
  7. Find Me: Localizador Inteligente de Objetos com Arduino e Bluetooth
  8. Soluções de Energia Otimizadas para Projetos Arduino
  9. Jogo da Velha com Arduino, Matriz LED MAX7219 e Caixa de Papelão
  10. Leitor de Disquetes Amiga Baseado em Arduino: Recuperação de Dados Open-Source e Acessível