gehacktes /// noniq.at

0001Eine sd2iec für den Commodore 128

Mein 30 Jahre alter C128 bekommt einen SD-Karten-Leser. Und ich übe das Layoutieren und Löten von Lochrasterplatinen.

Die sd2iec verhält sich dem C64/C128 gegenüber wie ein Diskettenlaufwerk, verwendet aber eine SD-Karte als Speichermedium: 8GB statt 170kB! Keine mechanischen Teile! Sowas musste ich haben.

(Beim Planen und Basteln hat mir übrigens diese Anleitung im Forum64 sehr geholfen.)

Platinen-Layout

Die sd2iec gibts in ziemlich vielen Varianten. Ich hab das „aktualisierte LarsP-Layout“ als Augangspunkt genommen und ein paar Kleinigkeiten geändert:

Alle benötigten Bauteile hab ich dann erstmal schön symmetrisch2 auf der Platine verteilt (und dabei verschiedene Schalter und Stecker ausprobiert – die Qual der Wahl aus der gutsortierten Kleinzeugskiste). Protipp: Ein dickes Stück Schaumstoff unter die Platine legen – dann bleiben die gesteckten Bauteile brav in ihren Löchern und die Anschlüsse verbiegen sich nicht.

Layoutexperiment, frühes StadiumLayoutexperiment, mittleres StadiumLayouexperiment, (fast) endgültiges Stadium

Mit der bestückten Platine als Vorlage hab ich anschließend in DIYLC3 das eigentliche Layout – also die Traces, die die Bauteile miteinander verbinden – gezeichnet. Hier ein paar Zwischenstadien:

Layouts

Fun Fact: Beim Layouten der Anschlüsse an das SD-Karten-Modul hab ich zwei Pins vertauscht (3,3V und Card Select). Der Fehler ist mir erst aufgefallen, als die Schaltung fertig gelötet war und nicht richtig funktioniert hat … aber dazu später mehr.

Falls wer das fertige Layout haben will (korrigierte Version, ohne vertauschte Anschlüsse): DIYLC-Datei / PDF / PNG

Löten

Mit dem (spiegelverkehrt!) ausgedruckten Layout als Vorlage hab ich mich dann ans Löten gemacht – zuerst die Traces auf der Unterseite der Platine, danach die Bauteile auf der Oberseite.

Dafür, dass das meine erste ernstzunehmende Lochrasterplatinen-Löterei war, hat’s ziemlich gut funktioniert. Nur den Kupferlackdraht für die Drahtbrücken an den Enden abisoliert zu bekommen, war ziemlich … anstrengend.4

Traces auf der Unterseite (noch ohne Brücken)Fertig gelötet (Unterseite)Fertig gelötet (Oberseite)

Microcontroller flashen

Um die sd2iec-Firmware auf den Microcontroller zu flashen, hab ich einen Arduino verwendet (→ Using an Arduino as an AVR ISP).5

Der Anfang war simpel: Den Sketch „ArduinoISP“ auf das Arduino-Board laden und das ganze mit dem Microcontroller am Breadboard verkabeln (inklusive Status-LEDs, man weiß ja nie …)

ATMega644 am Breadboard (hier schon mit externem Oszillator), zum Flashen via Arduino

Das eigentliche Flashen war dann ein bisschen komplizierter: Die aktuelle Version der Arduino IDE (1.6.0) kennt den ATMega644 nicht, und mein Versuch, die beiden miteinander bekannt zu machen, war nicht wirklich erfolgreich.6

Aber wer braucht schon eine IDE – es lebe die Kommandozeile!

Das zum Flashen nötige Programm avrdude lässt sich am Mac einfach via Homebrew installieren (brew install avrdude). Die passenden Settings für Connection-Port und Programmer-Type hab ich mir von der Arduino IDE abgeschaut (die benutzt unter der Haube nämlich ebenfalls avrdude). Damit hats dann endlich funktioniert:

avrdude -v -p atmega644 -c stk500v1 -P /dev/tty.usbmodem1411 -b 19200 \
  -Uflash:w:sd2iec-1.0.0alpha0-84-g73a4dfc-larsp-m644p.bin:a

Anschließend mussten noch die Fuse-Bits passend programmiert werden. Ich hab vorerst mal die Werte für die Variante ohne Bootloader verwendet: High 0x91, Low 0xEF, Extended 0xFD (→ Fuse Calculator).

avrdude -v -p atmega644 -c stk500v1 -P /dev/tty.usbmodem1411 -b 19200 \
 -U hfuse:w:0x91:m -U lfuse:w:0xef:m -U efuse:w:0xfd:m

Lerneffekt: Diese Fuse-Bits konfigurieren den Microcontroller so, dass er einen externen Oszillator als Taktquelle erwartet. Wenn man die Bits setzt, während am Breadboard die Minimalkonfiguration ohne externen Oszillator aufgebaut ist, dann lässt sich der Microcontroller danach erstmal nicht mehr ansprechen …7

Abhilfe ist aber zum Glück simpel: Einfach den Aufbau am Breadboard um einen Oszillator plus zugehörige Kondensatoren ergänzen. (Und für genau diesen Fall sicherheitshalber immer ein oder zwei Oszillatoren auf Vorrat bereithalten).

Stromstecker

Wenn man die 5V-Versorgungsspannung für die sd2iec am Kassetten-Port abgreift, dann braucht’s kein zusätzliches Netzteil. Passenden Stecker hatte ich natürlich keinen, aber in der Zeugskiste fanden sich Teile, die grundsätzlich auf den Platinenstecker des Ports passen.

Also so ein Ding genommen, die Kontakte gekürzt, das vorstehende Plastikteil von einem zweiten abgeschnitten und als seitliche Führung angeklebt (damit sich der Stecker nicht im Port verdreht und dabei einen Kurzschluss verursacht), das Kabel angelötet und das ganze mit Sugru verschönert:

Irgendwelche Teile aus der ZeugskisteSeitliche Führung drangeklebt und und mit Sugru verschönertSteckt!

Update März 2017: In der Zwischenzeit hab ich diesen Stecker durch einen „echten“ Kassettenport-Stecker ersetzt, siehe 0011 Improving my sd2iec’s Power Connector.

Der große Moment

Nachdem ich den geflashten Microcontroller vom Breadboard auf die Platine verfrachtet hatte, kam der große Moment: Das Stromkabel angesteckt, und tatsächlich: Die grüne LED hat geleuchtet! Wirklich funktioniert hat die Schaltung aber nicht: Egal mit welcher SD-Karte ich es versucht habe – die Karten wurden einfach nicht erkannt.

Grund dafür war der oben erwähnte Fehler im Layout (vertauschte Anschlüsse beim SD-Karten-Modul). War zum Glück einfach zu fixen: Ich hab die Drahtbrücke zum falschen Pin aufgetrennt, und die fehlende Verbindung zum korrekten Pin testweise mit einem Krokokabel improvisiert. Und siehe da – der C648 meldet: 59964 BLOCKS FREE. \o/

Hotfix für den LayoutfehlerEs spricht mit dem C64!

Das improvisierte Krokokabel hab ich inzwischen durch eine saubere Trace ersetzt – jetzt braucht das Ding nur noch ein hübsches Gehäuse. Aber das ist eine andere Geschichte …


  1. Im Endeffekt hab ich einen 3-poligen Umschalter verwendet, weil mir der für die zugehörige Funktion – „Umschalten“ der Geräteadresse – besser gefallen hat; angeschlossen ist der halt so, dass er sich wie ein Schließer verhält. 

  2. Natürlich gehts bei elektronischen Schaltungen in erster Linie um die Optik. 

  3. Für ein Java-Programm funktioniert das ganz vernünftig – abgesehen davon, dass alle Tastaturshortcuts auch unter MacOS die Ctrl-Taste verwenden (⌃C statt ⌘C für Copy usw.). 

  4. Beim nächsten Mal verwend ich stattdessen Drahtbrücken auf der Platinen-Oberseite.9 

  5. Profis nehmen dafür einen AVR-Programmer

  6. Natürlich kann man die Arduino IDE um eigene Microcontroller-Definitionen erweitern. Man findet im Netz auch Konfigurationsdateien für den ATMega644 – die sind aber für die Arduino IDE 1.0 und müssten für die aktuelle Version erst manuell angepasst werden … 

  7. Das ist also quasi das Microcontroller-Äquivalent zu „Ich häng mich mal schnell via SSH auf den Server und änder was an der Firewall. Oooops …“ 

  8. Genau genommen: Der C128 im C64-Modus. Aber die sd2iec funktioniert natürlich auch im C128-Modus. 

  9. Warum fällt mir das eigentlich erst jetzt ein?10 

  10. Man lernt eben ständig dazu. Inzwischen hab ich aber auch einen Kupferlackdraht gefunden, der sich deutlich besser löten lässt: http://www.reichelt.de/Kupferlackdraht/… 



Die 90er haben angerufen: Sie wollen Ihre Pixel zurück!0002