/* vim: set ft=wiki-moin :*/ /* Projektseite für den C64 snes2md Adapter im moinmoin Syntax als für die HackSpace Webseite */ = Info = Beschreibung:: SNES Controller nach C64 Joystick Adapter Kategorie:: Basteln Beteiligte:: DaMicha, Peter Status:: Abgeschlossen Start-Datum:: 2016-05 Letzte Aktivität:: 2016-11 <> = Anleitung = ''Vorneweg - die Anleitung.'' Der SNES2MD Adapter ermöglicht es das Anschließen eines SNES Controllers an den C64. Wie immer, der Adapter darf nur an einem '''ausgeschalteten''' C64 angeschlossen oder entfernt werden. Das Gleiche gilt für die SNES Controller, die an den SNES Adapter angeschlossen werden. Der Adapter selbst funktioniert ohne weiteres zutun. Jedoch lässt sich über den SNES Controller die Autofire-Funktion aktivieren und konfigurieren. '''Button Belegung:''' * A - Fire * B - Fire (gleiche Funktion wie A) * X - keine Funktion * Y - Autofire ist aktiv solange der Button gedrückt wird. * Start - Autofire dauerhaft aktivieren/deaktivieren * Select - Autofire Rate einstellen Gerade bei der Start Taste muss man ein wenig aufpassen, dass man nicht aus Versehen das Autofire aktiviert. = Projekthintergrund/Motivation = Einfaches Mikrocontrollerprojekt um einen SNES Controller am C64 (oder Amiga) anschließen zu können. = Ziele = * SNES2MD Adpater nachbauen * Atmega mit Grundschaltung auf'm Breadboard als Prototyp * Atmega binary flashen * Atmega mit Grundschaltung auf ner Lochrasterplatine mit Kabel, Stecker und Buchsen * Am C64 ausprobieren = SNES Controller zu C64 SubD9 Adpater = '''snes2md''': * SNES Controller am C64 anschließen * unterstützt konfigurierbares Dauerfeuer (An/Aus, verschiedene Frequenzen) * mit Bauanleitung und Firmware im Source-Code * benutzt einen Atmega8 * lässt sich sehr gut selber auf einer Lochrasterplatine nachbauen. '''Links''': * http://www.raphnet.net/electronique/snes_to_db9/index_en.php * es ist auch eine snes2usb version verlinkt (http://www.raphnet.net/electronique/multiuse_pcb2/index_en.php) * weitere Informationen zur Funktion: http://www.a1k.org/forum/showthread.php?t=42525&highlight=SNES * Layout eines Bastelprojekts: http://www.forum64.de/index.php?thread/52749-heute-so-gebastelt/&pageNo=11&s=3c5cf5c18d567cc99f941cba76b0f58689d434ba '''Kaufversion''': * [[http://www.raphnet-tech.com/products/snes_to_db9/index.php|raphnet tech.]] (ca. 26€ + Versand) == Die SNES Controller == Wir haben 2 gebrauche gekauft (ebay: je 15 Euro). Der Zustand ist akzeptabel und kann noch durch etwas Pflege verbessert werden. Dazu besitzen wir jetzt noch 2 Verlängerungskabel (je 4 Euro), die wir zerschneiden können um die Controller an den Adapter anschließen zu können. So haben wir auf der SNES-Controller Seite ein vorkonfektionierte Lösung. == Atmega auf nem Breadboard == Bevor es richtig los geht ein Blinky Projekt auf einem Arduino machen. Das ist das standard Arduino-Beispiel. Damit hätten wir schon einmal ein Programm in einen Atmega geflasht. * standard Blink Projekt mit der Arduino IDE compilieren * über dem Arduino USB Interface in den Atmega flashen * LED sollte blinken. Und es blinkt. Als zweiten Schritt nutzen wir das selbe Program auf einem Atmega328p. Hierfür betreiben wir den Atmega in der Grundbeschaltung mit einem 16MHz Oszillator. Von dem Arduino übernehmen wir die LED an Pin 13. Dazu benutzen wir einen tinyUSB als Programmierhardware. Und schon haben wir Atmega für unser Projekt am Start. * Der tinyUSB Programmer muss zuvor als USB Gerät unter Linux angemeldet werden. * Als Programmiersoftware haben wir '''avrdude''' genommen. * Wir haben das von der Arduino IDE erstellte Hex File des Blinky Demos wiederverwendet und es blinkt auch mit einem einzelnen Atmega. * Was noch fehlte war das Setzen der Atmega Fuse Bits auf die Werte, die der Atmega auf dem Arduino benutzt. Im wesentlichen ist das die Konfiguration für das Benutzen eines externen Oszillators. Der nächste Schritt ist der Aufbau des '''snes2md''' Adapters auf einem Breadboard. * Als Controller haben wir den Atmega8 genommen, wie auch in dem SNES2MD Projekt. * Wir haben uns die Firmware von der Webseite zum Adapter geladen. * Mittels '''avrdude''' und tinyUSB geflasht und die entsprechenden Fuse Bits gesetzt. * Zusätzlich haben wir über Jumpwires den SNES Controller angeschlossen und uns auf einem Oszi das Signalspiel zwischen Atmega und SNES Controller angeschaut. Hat alles wir erwartet funktioniert. Und hier das Ergebnis: {{attachment:C64-SNES2MD-Adapter-Breadboardaufbau-1280x720.jpg||width=640}} Auf dem Breadboard ist der Atmega in der Grundschaltung aufgebaut und der Programmier Adapter ist verbunden. Neben der Programmierung des Mikrocontrollers, dient er hier noch dessen Spannungsversorgung. Über Jumpwires sind ein SNES Controller und das Oszilloskop angeschlossen. Es zeigt sehr schön die Signale Clock (Gelb, 16 Takte) und Chip-Select (Türkis), beide generiert vom Atmega, und das Datensignal (Violett), gesendet vom Controller, an. Am Controller ist die Knopf "A" gedrückt, was im Datensignal als Low-Pegel in der hinteren Hälfte zu sehen ist. == Atmega Programmieren == Das Atmega Model ist `Atmega8a`. Programmiert haben wir folgendermaßen: Ersteinmal den Zustand des Atmegas abfragen: {{{ avrdude -n -p m8 -P usb -c usbtiny -v }}} Wir brauchen folgende Fusebits: `high_byte=0xc9, low_byte=0x9f` Fuses setzen (-B setzt den Bit Clock in mikroseconds): {{{ avrdude -p m8 -P usb -c usbtiny -v -Uhfuse:w:0xc9:m -Ulfuse:w:0x9f:m -B 20.0 }}} Hiernach muss der Atmega mit dem Oszillator zusammen betrieben werden. Firmware flashen: {{{ avrdude -p m8 -P usb -c usbtiny -v -Uflash:w:snes2md.hex }}} Schon fertig :-) == Lochrasterplatinenlayout == Das Layout haben wir mit Fritzing erstellt. Ist nicht schön geworden, sollte aber so stimmen. {{attachment:C64-SNES2MD-Breadboardlayout-1280x576.jpg||width=640}} Die Kabel haben wir folgendermaßen an den Steckern belegt: '''SNES Kabel''' Belegung. Die Farben sind die von unserem Kabel: {{{ Pin Nr Kabel Farbe Bezeichnung ------------------------------------- 1 grün 5V 2 gelb Clock 3 weiß Latch 4 rot Data 5 nc 6 nc 7 schwarz Ground }}} '''SNES Kabel Kontakte am uC''' - J2: {{{ Header Pin Signal name AVR pin name Farbe ----------------------------------------------------------- 5 CLOCK PB5 gelb 4 DATA PB4 rot 3 LATCH PB3 weiß 2 VCC VCC grün 1 GND GND schwarz }}} '''Atari/commodore wiring Kabel und Kontakte''' - J3 und SubD 9 Stecker {{{ Header Pin DB9 Pin Signal name AVR pin name Kabel Farbe -------------------------------------------------------------------- 8 1 UP PC5 schwarz 7 2 DN PC4 braun 6 3 LF PC3 rot 5 4 RT PC2 orange 4 6 Fire PC1 grün 3 9 Fire 2 PC0 weiß 2 8 GND GND grau 1 7 VCC VCC blau 5 nc gelb }}} === Unklare Pin Konfigurationen === Es gab noch ein paar unklare Pinbelegung die wir geklärt haben: '''PB1''': muss nach GND um Atari-Mode (ist C64 kompatibel) zu aktivieren. '''PD2''': SELECT (input): um die Geschwindingkeit des Dauerfeuers zu ändern. Benutzen wir nicht. Ist mit pull-up konfiguriert und der Pin muss nicht belegt werden. '''PD4''': einfach von Außen auf VCC gesetzt. Hat keine Funktion. Ist aus Layoutgründen im Original mit VCC verbunden. Haben wir so übernommen == Zusammenlöten des Adapters == Wir bauen 2 Versionen. Eine, bei der die Adern des SNES- und SubD-Kabels auf Stecker gekrimpt werden und eine, bei der die Adern aufgelötet sind. Mal schaun, was besser funktioniert. * SNES Verlängerungskabel zerschneiden und die Kabel auf nen Stecker krimpen, bzw. auf die Platine auflöten. Bei der Lötversion haben wir kleine Drahtbrücken benutzt, um die Kabel besser anlöten zu können. * Als Gehäuse haben wir ein G026N (für den Steckerversion), bzw. G025N Kunstoffgehäuse genommen, in den die Leiterplatte sehr gut Platz findet. * Zugentlastung für die Kabel mittels Kabelbinder und Drahtschlingen auf der Leiterplatte Hier die Lochrasterplatine mit den aufgelöteten Kabeln: {{attachment:C64-SNES2MD-Adapter-Leiterplatte-1280x456.jpg||width=640}} Die Schaltung hat nach dem Zusammenlöten erstaunlicherweise sofort funktioniert :-). Und der Adapter im Gehäuse: {{attachment:C64-SNES2MD-Adapter-Gehäuse-1280x720.jpg||width=640}} ---- KategorieProjekt