Przejdź do treści

Jak zbudować ulepszony SDrive-MAX

SDrive-MAXSDrive-MAX to sprzętowy emulator stacji dysków/magnetofonu dla 8-bitowych komputerów Atari. Jest to projekt open source bazujący na sdrive-ng przeniesionym na platformę Arduino. Cały kod źródłowy oraz wiele użytecznych informacji możesz znaleźć na strone projektu na githubie: https://github.com/kbr-net/sdrive-max

1. Potrzebne komponenty

  • Płytka deweloperska Arduino UNO / ATMega 328
  • Ekran dotykowy 2,8” TFT ze gniazdem na kartę microSD
  • Kabel z wtyczką SIO

Płytkę z mikrokontrolerem ATMega 328 można kupić za ok. 16-25 PLN na Allegro. Tanim źródłem klonów może być też ebay czy AliExpress. Ceny kształtują się między 2,50 a 7 USD. Ja za swoją zapłaciłem 19.99 PLN (~5.20 $). Kupując w zestawie z zasilaczem lub kablem USB zapłacisz trochę drożej, jednak pewnie masz już taki kabelek w domu (np. od drukarki). Jeśli masz taki kabel, za zasilacz może posłużyć dowolna ładowarka do telefonu z napięciem wyjściowym 5V.

Kolejnym ważnym elementem jest wyświetlacz dotykowy ze slotem na kartę microSD. Musi to być tzw. shield zgodny z Arduino Uno R3. Najlepiej kup taki z układem ILI9341. Najnowsza wersja kodu z githuba obsługuje również kontrolery ILI9329, ILI9340, HX8347G, HX8347I. Zanim kupisz, upewnij się w specyfikacji, czy wyjścia są ze sobą zgodne.

Ja kupiłem swój na Allegro razem z płytką UNO (za 32,56 PLN = ~8,5 USD), dzięki czemu nie płaciłem za koszt przesyłki 🙂

Ostatnia niezbędna rzecz – kabelek z wtyczką SIO. Możesz go mieć za darmo, jeśli pozyskasz go np. ze swojego starego uszkodzonego magnetofonu do Atari 🙂 Totalnie uszkodzony magnetofon pozyskasz na aukcjach za cenę złomu przy odrobinie szczęścia. Sprawdź jednak czy nie ma już uciętego kabla!

SIO plugDrugą opcją jest zrobić kabelek samemu. Potrzebujesz 5-żyłowego kabla sygnałowego – ok. 0.5m powinno Ci wystarczyć. Wtyczkę możesz sam wydrukować na drukarce 3D. Kilka projektów znajdziesz na Thingiverse. Będziesz jednak potrzebował jeszcze blaszek kontaktowych. Jeśli nie masz drukarki, gotowe do złożenia wtyczki rozdawali za free koledzy atarowcy ze Słowacji na ostatnim SillyVenture, pozdrawiam ich gorąco 🙂 Napisz do nich. Koszt materiału PLA razem z blaszkami nie powinien przekroczyć 1$.

Naprawdę godnym polecenia jeż też gotowy kabelek dostępny na stronie Lotharka. Przystępna cena (~7,80 USD) za naprawdę wysoką jakość wykonania. Sam mam taki.

W oryginalnym projekcie jako opcja występuje jeszcze dioda 1N4148. Nie będzie jednak już potrzebna, jej rolę przejmie dodatkowy układ – ale o tym później.

2. Programowanie mikrokontrolera

Podłączamy płytkę UNO do komputera PC odpowiednim kablem USB. Nie potrzebujemy na razie montować nic więcej. Potrzebne będzie:

  • Arduino IDE – potrzebne do kompilacji kodu źródłowego jeśli chcemy mieć najnowszą wersję firmware’u z githuba. Zawiera też sterowniki pod Windows, aby system prawidłowo wykrył podłączoną do USB płytkę;
  • avrdude – program do zaprogramowania płytki, posłuży do wypalenia gotowego pliku binarnego z firmware’em;
  • sdrive-max-v11.zip – gotowe pliki binarne hex

Rozpakowujemy pobranego zipa. Dostaniemy katalogi z których wybieramy ten, którego nazwa odpowiada wersji naszego sterownika ekranu, w moim przypadku był to atmega328-ili9341.

W środku będą dwa pliki:

  • eeprom_writer.hex
  • SDrive.hex

Jeśli programujesz pod Windows, sprawdź w Menedżerze Urządzeń, pod jakim portem szeregowym widać Arduino i użyj go z parametrem -P. W moim przypadku był to COM6.

Cały proces programowania powinien przebiec następująco:

E:\atmega328-ili9341>avrdude -carduino -pm328p -P com6 -U flash:w:eeprom_writer.hex

 avrdude: AVR device initialized and ready to accept instructions
 Reading | ################################################## | 100% 0.01s
 avrdude: Device signature = 0x1e950f
 avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
          To disable this feature, specify the -D option.
 avrdude: erasing chip
 avrdude: reading input file "eeprom_writer.hex"
 avrdude: input file eeprom_writer.hex auto detected as Intel Hex
 avrdude: writing flash (3484 bytes):
 Writing | ################################################## | 100% 0.65s
 avrdude: 3484 bytes of flash written
 avrdude: verifying flash memory against eeprom_writer.hex:
 avrdude: load data flash data from input file eeprom_writer.hex:
 avrdude: input file eeprom_writer.hex auto detected as Intel Hex
 avrdude: input file eeprom_writer.hex contains 3484 bytes
 avrdude: reading on-chip flash data:
 Reading | ################################################## | 100% 0.51s
 avrdude: verifying …
 avrdude: 3484 bytes of flash verified
 avrdude: safemode: Fuses OK
 avrdude done.  Thank you. 
E:\atmega328-ili9341>avrdude -carduino -pm328p -P com6 -U flash:w:SDrive.hex

 avrdude: AVR device initialized and ready to accept instructions
 Reading | ################################################## | 100% 0.01s
 avrdude: Device signature = 0x1e950f
 avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
          To disable this feature, specify the -D option.
 avrdude: erasing chip
 avrdude: reading input file "SDrive.hex"
 avrdude: input file SDrive.hex auto detected as Intel Hex
 avrdude: writing flash (30992 bytes):
 Writing | ################################################## | 100% 5.21s
 avrdude: 30992 bytes of flash written
 avrdude: verifying flash memory against SDrive.hex:
 avrdude: load data flash data from input file SDrive.hex:
 avrdude: input file SDrive.hex auto detected as Intel Hex
 avrdude: input file SDrive.hex contains 30992 bytes
 avrdude: reading on-chip flash data:
 Reading | ################################################## | 100% 4.02s
 avrdude: verifying …
 avrdude: 30992 bytes of flash verified
 avrdude: safemode: Fuses OK
 avrdude done.  Thank you.

Pod Linuksem proces przebiega podobnie, sprawdzimy jednak czy płytka została wykryta oraz pod jakim urządzeniem systemowym się kryje:

$ sudo su

$ lsusb
Bus 001 Device 009: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter

$ dmesq | tail
[  521.212625] usb 1-1.4: new full-speed USB device number 9 using ehci-pci
[  521.321533] usb 1-1.4: New USB device found, idVendor=1a86, idProduct=7523
[  521.321536] usb 1-1.4: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[  521.321537] usb 1-1.4: Product: USB2.0-Serial
[  521.321807] ch341 1-1.4:1.0: ch341-uart converter detected
[  521.322485] usb 1-1.4: ch341-uart converter now attached to ttyUSB0

$ ls -l /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 maj 12 20:03 /dev/ttyUSB0

Polecenia linuksowe powinny wyglądać tak (tylko wstaw w odpowiednie miejsce ścieżkę do swojego urządzenia):

$ avrdude -carduino -pm328p -P /dev/ttyUSB0 -U flash:w:eeprom_writer.hex
...
$ avrdude -carduino -pm328p -P /dev/ttyUSB0 -U flash:w:SDrive.hex
...

Gotowe.

3. Modyfikacja dla lepszej kompatybilności z szyną SIO

SIO plugMamy gotową, zaprogramowaną płytkę. Czas poskładać wszystko razem. Niniejsza modyfikacja nie jest potrzebna, gdy SDrive ma działać jako jedyne urządzenie podpięte do SIO. Jednak gdy chcemy aby wszystko działało bezproblemowo np. podłączając jednocześnie stację dysków, musimy wykonać mały układ, zaprojektowany przez Brend’a Herale (BigBen ) z niemieckiego forum Abbuc. Układ można zmontować „na pająka” lub przy użyciu płytki uniwersalnej, jednak bardziej eleganckim rozwiązaniem jest wykonanie płytki drukowanej. Jest na tyle prosta, że można użyć metody np. termotransferu tonera i wytrawić ją samemu w domu. Można też po prostu zamówić jej wykonanie np. w OSH Park. Steve Boswell (znany jako Mr Robot) udostępnił swój projekt płytki. Tak też zrobiłem, 3 płytki kosztowały mnie 5.80$

Potrzebne elementy:

  • układ scalony 74LS07 (np. SN74LS07N za 0.98 $)
  • 2 x rezystory 4.7 kOhm
  • 2-pins goldpin header
  • 4-pins goldpin header
  • jumper

Na tym etapie wymagane są podstawowe umiejętności lutowania elementów przewlekanych.

Zmontowane UNO2SIO

Płytka ma oznaczone pola lutownicze numerami które odpowiadają numerom pinów we wtyczce SIO. Sprawdź więc multimetrem i zapisz sobie który kolor kabelka odpowiada któremu pinowi.

Następnie przylutuj 2-pinowe złącze goldpin. Trzeba je wygiąć o 90 stopni, inaczej płytka nie zmieści się pomiędzy główną płytą a wyświetlaczem.

Teraz trzeba przygotować płytkę UNO do montażu interfejsu. Trzeba przylutować 4-pinowe złącze do wyprowadzeń oznaczonych RX-TX-5V-GND. Czasem są trzy rzędy a napisy nadrukowane nieco niżej, więc nie pomyl się i nie przylutuj pinów w środkowym rzędzie! Płytka MrRobota dostosowana jest do jedno lub dwurzędowych wyprowadzeń, często jednak są trzy rzędy przesunięte nieco względem oryginału. Wtedy trzeba lekko nagiąć piny aby płytka pasowała.

Ostatnią rzeczą jest przylutowanie kabelka do pól oznaczonych jako A5. Po dopasowaniu płytek do siebie, lutujemy piny na stałe.

Jumper służy do wyboru sposobu zasilania:

  • otwarty – możesz zasilać płytkę z zewnętrznego zasilacza, lub przez kabel USB, dzięki temu będziesz mógł wybrać obraz dysku lub kasety PRZED włączeniem Atari
  • zamknięty – zasilanie 5V będzie brane z portu SIO

UWAGA! Jeśli SDrive jest podłączony do Atari, nigdy nie używaj zasilania zewnętrznego przy założonej zworce! Możesz uszkodzić mikrokontroler lub port SIO w Atari! Nie wkładaj też lub nie wyjmuj wtyczki z portu SIO kiedy SDrive-MAX i/lub Atari są włączone.

Osobiście wolę, kiedy zworka jest zdjęta. Wygoda używania SDrive’a zdecydowanie jest wtedy większa.

OK. Teraz już pozostaje tylko założenie wyświetlacza.

4. Przygotowanie karty SD card oraz oprogramowania

SIO plugDo przechowywania plików z obrazami dyskietek (.ATR, .ATX) lub kaset (.CAS) potrzebujesz karty microSD. Myślę, że 4GB powinno spokojnie wystarczyć. Rozpakowane archiwum ze wszystkimi grami zajmuje ok 850MB, a programami użytkowymi ok. 1GB. Pozostaje więc jeszcze sporo miejsca (np. na Twoje ulubione dema). Gdzie znaleźć archiwa z oprogramowaniem? Np. na atarionline.pl. Są tam aktualizowane i gotowe paczki w formacie ZIP. Aby użyć karty w komputerze PC, będziesz potrzebował adaptera USB lub uniwersalnego czytnika kart. Kartę sformatuj przy użyciu systemu plików FAT32. SIO plugAby nie było później problemów z jej odczytem, nie powinna być podzielona na partycje. W katalogu głównym karty umieść plik sdrive.atr. Pozwoli on na wybieranie plików bez użycia ekranu dotykowego. Będzie on standardowo umieszczony w slocie D0: i uruchamiany jako domyślna „dyskietka”.

5. Miłej zabawy 🙂

Pora podłączyć SDrive do Atari. Najpierw wsadź kartę microSD, a potem podłącz do urządzenia zasilanie np. z USB (jeśli nie założyłeś zworki). Przy pierwszym uruchomieniu pojawi się ekran na którym dokonasz kalibracji ekranu dotykowego. Następnie wejdź w „Cfg” i jeśli chcesz, aby timingi w obsłudze plików ATX były zgodne ze stacją 1050, zaznacz tę opcję. Domyślnie timingi odpowiadają stacji Atari 810. Kliknij „Save”. Zaznacz slot „D0:”. Teraz możesz włączyć Atari z przyciśniętym klawiszem OPTION. Po chwili wczytywania zobaczysz ekran z możliwością przypisania obrazów ATR do slotów.

Gwoli przypomnienia, jeśli wybierzesz „Tape:” oraz plik z rozszerzeniem .CAS, wtedy wczytujesz program tak jak z magnetofonu czyli przytrzymując w Atari klawisze START i OPTION. Tu się pojawia przewaga ustawienia zewnętrznego zasilania – możesz wybrać obraz zanim włączysz Atari.

Atari 1050 drive number switchTo wszystko, twój SDrive-MAX jest gotowy 🙂 Teraz podłączając prawdziwą stację dysków np. Atari 1050 jako urządzenie D2: (ustaw zworkami stację jak na foto), „włóż” w slot D1 obraz np. AtariDOS II 2.75, będziesz mógł skopiować obraz ATR na prawdziwą dyskietkę, lub dokonać backupu Twojej dyskietki na pusty obraz (utworzony przyciskiem „New”). Pamiętaj, aby nie używać w SDrivie slotu który odpowiada podłączonej fizycznej stacji dysków.

Trochę zdjęć z moich testów:

Całość zajęła mi ok. 1 godziny, a koszt stworzenia własnego urządzenia wyniósł ok. 25 $. (płytka UNO + ekran + kabel SIO: 82,54 PLN = ~21,58 USD; płytka UNO2SIO: 1,93 USD; pozostałe elementy: < 2 USD). Radość z samodzielnego złożenia SDrive’a – bezcenna 🙂

Jeśli masz jakieś pytania lub problem z montażem, śmiało napisz komentarz, chętnie pomogę.

Przydatne linki:

Czytaj więcej: Jak podłączyć do SDrive’a diody LED zasilania i aktywności napędu.

13 komentarzy do “Jak zbudować ulepszony SDrive-MAX”

  1. Czy ktoś ma pobrany plik Bernd Harale’a ze schematem płytki UNO2SIO? Byłbym wdzięczny jakby ktoś mógłby go podesłać ponieważ oryginalny link na stronie autora prowadzi tylko do błędu 404. Mail do mnie el_beton(at)tlen.pl

  2. Hi. Projekt wydawał się banalny a wykonanie szybkie . I w sumie nic nie wskazywało problemów . Kontroler sie ładnie zainstalował pod W10, wykrył się na COM5 .Do wgrania softu użyłem XLoadera . Oba pliki .hex wgrały się bez problemów . Pierwsze uruchomienie i … zonk układ zatrzymuje sie na kalibracji ekranu . Wyświetla się plusik w rogu ekranu i …reaguje tylko na reset. Nie mam pojęcia czy to ja cos sknociłem , czy wyświetlacz jest uwalony .Wyświetlacz TFT 2.4 240X320 ILI9341 + SLOT SD, kontroler zgodny z ARDUINO UNO R3 . Będę zobowiązany za jakieś sugestie

  3. A odwrotnie wyłączona stacja 1050 (gdzie są oporniki pull-up 100kOhm) nie przeszkadza w transmisji SDriveMax czy innej stacji. Właściwe pull-upy są w komputerze i mają właśnie wartość 4,7kOhm.

  4. A spróbuj wczytać z 1050 czy innej stacji przy podłączonym do SIO SDriverMax, które zasilane jest z zewnętrznego zasilacza i zasilanie te jest odłączone.

  5. Rezystory przy 74ls07 powinny mieć wartość 100kohm. bo jeśli SDrive Max nie będzie jedynym urządzeniem podpiętym pod port SIO może być problem ze współpracą.

    1. Autor poprawki, Bernd Harale, w swoim schemacie daje 4,7kOhm – zwykła wartość dla pull-upów, dlaczego potrzebne by miało tam być 100k? Z mojego (i innych) doświadczenia – SDrive z tą poprawką bez problemu pracuje podłączony ze stacjami 1050 i XF551.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *


The reCAPTCHA verification period has expired. Please reload the page.