Moin,
Ich hab in den letzten Tagen das Logo von meinem Super Nintendo animiert und will euch jetzt zeigen, wie ich das gemacht habe.
Version 1 Quelltext: Quellcode animiertes SNES-Logo.txt
Hier noch eine für Scorp.ius maßgeschneiderte Alternative: Alternativer Quellcode animiertes SNES-Logo.txt
Die Idee ist es, die einzelnen Facetten des Logos in der Ecke von der Oberseite des SNES beim Einschalten zu animieren.
Teileliste:
1x Attiny45 (oder Attiny85, oder einen Attiny24 (Danke sanni, für den Port!), oder einen Attiny13 (Version von ManCloud)) und einen passenden Programmer
4x NPN-Transistoren (2N3904)
4x Ultrahelle LEDs in den Farben des SNES-Logos
4x passende Widerstände für die LEDs
4x 1kOhm als Vorwiderstand für die Transistoren
Lochrasterplatine
Kleinkram: Litze, Lötzinn, Kleber
Optional:
Seidenpapier
Alufolie
Werkzeug:
Lötkolben
Seitenschneider
Gamebit zum Öffnen der Konsole
Aufbau der Schaltung:
Eigentlich recht selbsterklärend. Die Masseleitungen der LEDs kann man verbinden, wenn man mag. Das hab ich aber gelassen, damit man die LEDs leichter in der Konsole positionieren kann.
Kleiner Tipp am Rande: Die Leitungen zu den LEDs schön lang lassen, das spart am Ende Fummelei - und Platz ist im SNES ja ohnehin genug
Wer die Drehrichtung gerne anders herum haben möchte, der muss einfach nur zwei Leitungen vertauschen:
Die Spannung und Masse greife ich am Spannungsregler ab, der sich an der linken Seite der Hauptplatine befindet, ab:
Schaltplan:
Den Attiny85 muss man mit einem Programmiergerät programmieren. Ich habe dazu einen Arduino als ISP benutzt. Wenn man einen Arduino benutzt, funktioniert das ganze Plug and Play. Die verlinkte Seite erklärt das meiner Meinung nach ziemlich gut - einfach die Schaltung aufbauen und den Quelltext mit der Software vom Arduino flashen.
Alternativ lassen sich Attinys mit allen kompatiblen Programmern, wie zB dem AVR-ISP mkII beschreiben. Wie das funktioniert, weiß ich leider nicht
Umbau der Konsole:
Die Konsole wird für den Umbau geöffnet. Eine Anleitung wie man das Ding öffnet spare ich mir an dieser Stelle, das haben wir jetzt schon zu oft gehört
Wir arbeiten uns bis zur obersten Abdeckplatte für und lösen die heraus. Jetzt fummeln wir mit einer Nadel das Logo aus der Ecke ab. Einfach ringsherum reinstecken und nach oben hebeln - aber obacht, man kann leicht die Farbe an der Unterseite abkratzen.
Im nächsten Schritt befreien wir das Logo von den Kleberrückständen. Die würden am Ende nur hässlich durchleuchten.
Jetzt fertigen wir uns von dem Logo eine Schablone an. Ich hatte dafür noch ein Logo herumliegen. Wenn ihr kein Logo herumliegen habt, dann paust es mit Butterbrotpapier oder so an der Fensterscheibe durch
Bei meinem hab ich einfach die Facetten ausgeschnitten. Die Facetten habe ich dann auf die dunkelgraue Oberschale eingezeichnet und rausgefräst.
Auf der helleren Unterseite habe ich das Logo nur grob ausgefräst, das reicht
Die LEDs leuchten am Schluss von Innen durch das Loch des hellen Plastiks durch die Löcher im dunklen Plastik.
Jetzt fummeln wir an dem Logo weiter herum. Damit das Licht sich nicht in dem grauen Bereich des Stickers verteilt, kleben wir Alufolie von unten dran. Das ist ziemlich fummelig. Die farbigen Flächen sparen wir aus, da soll das Licht schließlich noch durchscheinen Danach klebe ich Seidenpapier drüber, damit sich das Licht besser verteilt.
Wenn alles hübsch aussieht, kleben wir das Logo wieder an seinen angestammten Platz.
Die Platine klebt man in die Ecke auf dem Bild. Da ist genug Platz.
Jetzt kommt das Fummelige: Die LEDs müssen so in Position gebracht werden, dass die Facetten schön ausgeleuchtet werden. Also wird das Logo jetzt wieder auf das dunkle Plastik verbogen. Schön drauf achten, dass das licht korrekt von Innen bis nach Außen kommt. Dafür hab ich immer mal wieder ne LED drangehalten.
Ich habe die LEDs mit Heißkleber fixiert und dann korrekt verbogen.
Ui, leuchtet höllisch!
Wenn die LEDs ordentlich sitzen kann man das Gelümp wieder zusammensetzen und testen. Das Ergebnis überlastet allerdings meine Kamera ;D
So, viel Spaß!
Nachtrag:
Alternative Laufrichtung hinzugefügt
Schaltplan erneuert
scorps Version + Quelltext ergänzt
sannis Version für den Attiny24 hinzugefügt:
Spoiler anzeigen
n00bs Version für den Attiny45 hinzugefügt (again THX to sanni ;)):
Spoiler anzeigen
Geflasht wurde der Code mit WinAVR
Download: sneslogo_attiny45.zip
Version von ManCloud für den Attiny13:
Spoiler anzeigen
Alles anzeigen
Download: SNES_Animated_Logo_tiny13.zip
Diese Erweiterung befasst sich kurz mit der Umsetzung des Mods mit einem Platinenpaar, was ich designed habe
Disclaimer:
Alle Änderungen am SNES geschehen auf eigene Gefahr! Wer sein SNES modifiziert oder durch einen Dritten modifizieren lässt, ist selber daran Schuld, wenn es anschließend defekt ist.
Die hier vorgestellte PCB ist nicht kompatibel zu den ersten SNES mit separatem Sound-Modul (erste NTSC-SNESen / SFCs) sowie zu dem SNES Mini bzw. SFC Jr.!
Wer möchte, der kann sich das aktuelle Design von OSHPark herstellen lassen. Die Teile bekommt man bei Reichelt
Alternativ kann man die PCB-Files aus meinem GitHub Repository nutzen, um die PCBs woanders zu ordern. Der Warenkorb von Reichelt beinhaltet KEINE LEDs. Ich habe damals welche von eBay gekauft. Die 2x 180Ohm und 2x 120Ohm Widerstände sind Vorwiderstände der LEDs, die ich für meine ausgerechnet habe. Wer sich also welche aussucht, der muss die Widerstände neu berechnen! Entsprechende Vorwiderstandsrechner findet man im Internet. Es werden LEDs in den Bauformen SMD 0805 (ggf. auch größer) und P-LCC-2 unterstützt.
Spoiler anzeigen
Um den Vorwiderstand R_v einer LED für eine Betriebsspannung U_b zu berechnen, brauchst du den Durchlassstrom I_d und die Durchlassspannung U_d... Dann berechnet sich
R_v = (U_b - U_d)/I_d
Beschreiben des ATTiny45 (mit dem MiniPro Tl866A/CS)
Ich habe einen Backup des Codes in meinem GitHub Repository hinterlegt. Dort gibt es auch zwei Versionen. Bei einer Version dimmen die LEDs aus, nachdem die Animation durchgelaufen ist; bei der anderen Version bleiben die LEDs an (leicht gedimmt).
Das jeweilige Hex-File lässt sich einfach bei MiniPro-Software einladen. VOR DEM BESCHREIBEN muss man allerdings noch die Fuse Bytes setzen (siehe Spoiler). Diese sind unter dem Reiter 'Config' zu setzen. Vom Standard her, sind die fast i.O. - nur der Taktteiler muss herausgenommen werden. Wenn man das nicht macht, läuft die Animation seeeeeehr langsam.
Bestückung
Eigentlich ist alles auf der PCB beschriftet. In diesem Schritt noch NICHT den gewinkelten Pinheader auflöten. Nach der Bestückung sollte das ganze so aussehen:
Bemerkung (falls man andere Vorwiderstände verwendet):
Auf der LED-PCB befinden sich die Vorwiderstände der LEDs. Der Widerstand direkt vor dem Pad zu einer Farbe gehört zur entsprechenden LED. Welcher Buchstabe für welche Farbe steht, sollte klar sein.
Der gewinkelte Pinheader
Wer die Buchse und den Pinheader zur flexiblen Verbindung zwischen Grund-PCB und LED-PCB benutzen will, kann nun den Pinheader auf der Basis anbringen. Hierbei ist folgendes zu beachten:
Einbau Basis-PCB
Die Basis-PCB wird direkt an den Ext.Port der Konsole gelötet. Vor dem Anlöten empfieht es sich, die PCB mit Isolierklebeband an der Unterseite abzuisolieren. Stellt sicher, dass die PCB auf den entsprechenden Pins sitzt (die jeweils rechten Löcher auf Pin 27 und 28). Anschließend einfach anlöten.
Die Animation kann bei einem Reset neu gestartet werden. Dazu habe ich drei Optionen auf der PCB vorgesehen: Ihr habt ein Pad und einen Jumper zur Verfügung. Je nachdem, was ihr haben wollt, habt ihr die Möglichkeiten:
Bitte NIEMALS, das Pad verbinden und gleichzeitig den Jumper zu schließen!Im Spoiler einmal einn Bild meiner Installation, wo ich Option 3 gewählt habe.
Verbinden Basis- und Logo-PCB
Die Pads von Basis- und LED-PCB sind gespiegelt identsich geordnet (beide PCBs so gehalten, dass die Pads oben sind). Einfach die fünf Pads jeweils miteinander verbinden. Es empfiehlt sich, die Litzen zu bündeln (Kabelbinder, Schrumpfschlauch).
Wer die Buchse nutzt, kann die Kabellänge von ca. 7-10cm nehmen. Ich selber habe 10cm.(Ich selber habe keine Crimp-Zange für die Pins zu Hause. Deshalb löte ich die Litzen einfach an.)Wer die Litzen auf beiden PCBs direkt anlötet, sollte 15cm oder mehr an Litzenlänge einplanen.(Ich selber würde das nicht empfehlen, da die LED-PCB in die obere Gehäusehälfte geklebt wird.)
Einbau Logo-PCB
Jetzt ist Zeit für einen ersten Test: Kühlblech wieder anschrauben und SNES einschalten.Läuft alles wie gewünscht, kann man nun die Löcher für das Logo in die obere Gehäusehälfte "schneiden". Sobald dies geschehen ist, hält man die leuchtenden LEDs auf der PCB einmal unter das Logo und schiebt die PCB so hin und her, dass alles gut ausgeleuchtet ist. Anschließend die Position mit Bleistift anzeichnen (nicht wundern - die PCB liegt leicht "schräg", was so gewollt ist). Nun kann man in Ruhe die Logo-PCB z.B. mit Heißkleber fixieren (aufpassen, dass kein Heißkleber zwischen Gehäuse und PCB läuft - das macht sich u.U. negativ in der Ausleuchtung bemerkbar).
Zu guter Letzt kann das SNES wieder zugeschraubt werden.
Ich hab in den letzten Tagen das Logo von meinem Super Nintendo animiert und will euch jetzt zeigen, wie ich das gemacht habe.
Version 1 Quelltext: Quellcode animiertes SNES-Logo.txt
Hier noch eine für Scorp.ius maßgeschneiderte Alternative: Alternativer Quellcode animiertes SNES-Logo.txt
Die Idee ist es, die einzelnen Facetten des Logos in der Ecke von der Oberseite des SNES beim Einschalten zu animieren.
Teileliste:
1x Attiny45 (oder Attiny85, oder einen Attiny24 (Danke sanni, für den Port!), oder einen Attiny13 (Version von ManCloud)) und einen passenden Programmer
4x NPN-Transistoren (2N3904)
4x Ultrahelle LEDs in den Farben des SNES-Logos
4x passende Widerstände für die LEDs
4x 1kOhm als Vorwiderstand für die Transistoren
Lochrasterplatine
Kleinkram: Litze, Lötzinn, Kleber
Optional:
Seidenpapier
Alufolie
Werkzeug:
Lötkolben
Seitenschneider
Gamebit zum Öffnen der Konsole
Aufbau der Schaltung:
Eigentlich recht selbsterklärend. Die Masseleitungen der LEDs kann man verbinden, wenn man mag. Das hab ich aber gelassen, damit man die LEDs leichter in der Konsole positionieren kann.
Kleiner Tipp am Rande: Die Leitungen zu den LEDs schön lang lassen, das spart am Ende Fummelei - und Platz ist im SNES ja ohnehin genug
Wer die Drehrichtung gerne anders herum haben möchte, der muss einfach nur zwei Leitungen vertauschen:
Die Spannung und Masse greife ich am Spannungsregler ab, der sich an der linken Seite der Hauptplatine befindet, ab:
Schaltplan:
Den Attiny85 muss man mit einem Programmiergerät programmieren. Ich habe dazu einen Arduino als ISP benutzt. Wenn man einen Arduino benutzt, funktioniert das ganze Plug and Play. Die verlinkte Seite erklärt das meiner Meinung nach ziemlich gut - einfach die Schaltung aufbauen und den Quelltext mit der Software vom Arduino flashen.
Alternativ lassen sich Attinys mit allen kompatiblen Programmern, wie zB dem AVR-ISP mkII beschreiben. Wie das funktioniert, weiß ich leider nicht
Umbau der Konsole:
Die Konsole wird für den Umbau geöffnet. Eine Anleitung wie man das Ding öffnet spare ich mir an dieser Stelle, das haben wir jetzt schon zu oft gehört
Wir arbeiten uns bis zur obersten Abdeckplatte für und lösen die heraus. Jetzt fummeln wir mit einer Nadel das Logo aus der Ecke ab. Einfach ringsherum reinstecken und nach oben hebeln - aber obacht, man kann leicht die Farbe an der Unterseite abkratzen.
Im nächsten Schritt befreien wir das Logo von den Kleberrückständen. Die würden am Ende nur hässlich durchleuchten.
Jetzt fertigen wir uns von dem Logo eine Schablone an. Ich hatte dafür noch ein Logo herumliegen. Wenn ihr kein Logo herumliegen habt, dann paust es mit Butterbrotpapier oder so an der Fensterscheibe durch
Bei meinem hab ich einfach die Facetten ausgeschnitten. Die Facetten habe ich dann auf die dunkelgraue Oberschale eingezeichnet und rausgefräst.
Auf der helleren Unterseite habe ich das Logo nur grob ausgefräst, das reicht
Die LEDs leuchten am Schluss von Innen durch das Loch des hellen Plastiks durch die Löcher im dunklen Plastik.
Jetzt fummeln wir an dem Logo weiter herum. Damit das Licht sich nicht in dem grauen Bereich des Stickers verteilt, kleben wir Alufolie von unten dran. Das ist ziemlich fummelig. Die farbigen Flächen sparen wir aus, da soll das Licht schließlich noch durchscheinen Danach klebe ich Seidenpapier drüber, damit sich das Licht besser verteilt.
Wenn alles hübsch aussieht, kleben wir das Logo wieder an seinen angestammten Platz.
Die Platine klebt man in die Ecke auf dem Bild. Da ist genug Platz.
Jetzt kommt das Fummelige: Die LEDs müssen so in Position gebracht werden, dass die Facetten schön ausgeleuchtet werden. Also wird das Logo jetzt wieder auf das dunkle Plastik verbogen. Schön drauf achten, dass das licht korrekt von Innen bis nach Außen kommt. Dafür hab ich immer mal wieder ne LED drangehalten.
Ich habe die LEDs mit Heißkleber fixiert und dann korrekt verbogen.
Ui, leuchtet höllisch!
Wenn die LEDs ordentlich sitzen kann man das Gelümp wieder zusammensetzen und testen. Das Ergebnis überlastet allerdings meine Kamera ;D
So, viel Spaß!
Nachtrag:
Alternative Laufrichtung hinzugefügt
Schaltplan erneuert
scorps Version + Quelltext ergänzt
sannis Version für den Attiny24 hinzugefügt:
Laut Datenblatt kann ein Attiny24 pro Pin max 40mA und pro Port max 200mA (aber insgesamt nicht mehr als 200mA für alle Ports zusammen) bereitstellen.
Um sicher zu gehen, dass der Attiny nicht überlastet wird habe ich den Strom, den die Leds ziehen, jeweils per Vorwiderstand auf ca. 20mA reduziert.
Die genauen Ohm Werte kann man sich z.B. hier ausrechnen lassen.
Den Code von Jensma hab ich per Atmel Studio kompiliert, ein paar kleine Dinge wurden dazu angepasst:
Alles anzeigen
Geflasht wurde der Attiny24 dann mit avrdude
Download: snes_logo.zip
Um sicher zu gehen, dass der Attiny nicht überlastet wird habe ich den Strom, den die Leds ziehen, jeweils per Vorwiderstand auf ca. 20mA reduziert.
Die genauen Ohm Werte kann man sich z.B. hier ausrechnen lassen.
Den Code von Jensma hab ich per Atmel Studio kompiliert, ein paar kleine Dinge wurden dazu angepasst:
C-Quellcode
- /*Logo-Beleuchtung SNES
- (c) jensma, jensma.de, 2012
- modified for attiny24 2013 sanni
- */
- #include <avr/io.h>
- #define F_CPU 8000000UL
- #include <util/delay.h>
- int led[4]={0,1,2,3}; // Pins mit LEDs
- int count = 0;
- double geschw = 1;
- int verz = 10;
- uint8_t LOW = 0;
- uint8_t HIGH = 1;
- void delayMicroseconds(uint16_t us)
- {
- while(us--) {
- _delay_us(1);
- }
- }
- void digitalWrite(uint8_t pin, uint8_t val)
- {
- if (val == LOW) {
- PORTA &= ~(1<<pin);
- }
- else {
- PORTA |= (1<<pin);
- }
- }
- //Software PWM on Attiny85 von Ernst Christensen 16.okt. 2011, angepasst von jensma
- void pwm(int freq,int spin)
- {
- digitalWrite(spin,HIGH);
- delayMicroseconds(1*freq);
- digitalWrite(spin,LOW);
- delayMicroseconds(1*(255-freq));
- }
- int main(void)
- {
- //set outputs PortA
- DDRA |= (1<<0);
- DDRA |= (1<<1);
- DDRA |= (1<<2);
- DDRA |= (1<<3);
- while(1)
- {
- for (count = 0; count < 4; count++)
- {
- for (int i = 1; i < 255; i+=1)//LED aufhellen
- {
- pwm(i,led[count]);
- delayMicroseconds(geschw);
- }
- for (int i = 1; i < 255; i+=1)//Und wieder abdunkeln
- {
- pwm(255-i,led[count]);
- delayMicroseconds(2*geschw);
- }
- verz++;
- if (verz > 20) {
- geschw *= 1.5;
- }//Das Aufhellen wird verlangsamt
- if (verz > 37) // In der letzten Phase leuchten alle LEDs noch mal auf
- {
- geschw = 1; //Ich recycle die Variablen mal, das schont den schmalen Platz
- verz = 1;
- do {
- verz++; //Tick-Value
- geschw++;
- if (verz > 50) {
- geschw+=63;
- verz = 0;
- }
- if (verz > 500) {
- delayMicroseconds(1000);
- }//N kleines Delay, das entlastet den Attiny
- for (count = 0; count < 4; count++){
- if (geschw > 254)
- {
- digitalWrite(led[count],HIGH);
- }
- else
- {
- if (geschw > 1)
- {
- pwm(geschw,led[count]);
- }
- else
- {
- digitalWrite(led[count],LOW);
- }
- }
- }
- }
- while (1==1);
- }
- }
- }
- }
Geflasht wurde der Attiny24 dann mit avrdude
Download: snes_logo.zip
n00bs Version für den Attiny45 hinzugefügt (again THX to sanni ;)):
Geflasht wurde der Code mit WinAVR
Quellcode
- C:\Programme\...blablabla\bin\avrdude.exe -C "C:\Programme\...blablabla\bin\avrdude.conf-c diamex (das ist der Name eures Programmers) -P COM3 (der Port, an dem euer Programmer hängt) -b 19200 -p attiny45 -U lfuse:w:0xe2:m -U hfuse:w:0xdf:m -U flash:w:sneslogo_attiny45.hex (wenn das hex-File direkt unter C: liegt)
Download: sneslogo_attiny45.zip
Version von ManCloud für den Attiny13:
Quellcode
- /*Logo-Beleuchtung SNES fuer scorp angepasst
- (c) jensma, jensma.de, 2012
- ported to attiny13 by ManCloud
- */
- #include <avr/io.h>
- #define F_CPU 9600000UL
- // #define F_CPU 1000000UL
- #include <avr/sleep.h>
- #include <util/delay.h>
- uint8_t led[4]={0,1,2,4}; // Pins mit LEDs
- uint8_t count = 0;
- int16_t geschw = 1;
- uint8_t verz = 10;
- uint8_t modus = 0;
- uint8_t breakout = 1;
- enum {LOW,
- HIGH};
- void delayMicroseconds(uint16_t us)
- {
- while(us--) {
- _delay_us(1);
- }
- }
- void digitalWrite(uint8_t pin, uint8_t val)
- {
- if (val == LOW) {
- PORTB &= ~(1<<pin);
- }
- else {
- PORTB |= (1<<pin);
- }
- }
- //Software PWM on Attiny85 von Ernst Christensen 16.okt. 2011, angepasst von jensma
- void pwm(int freq,int spin)
- {
- digitalWrite(spin,HIGH);
- delayMicroseconds(1*freq);
- digitalWrite(spin,LOW);
- delayMicroseconds(1*(255-freq));
- }
- int main(void)
- {
- //set outputs PortB
- DDRB |= (1<<0);
- DDRB |= (1<<1);
- DDRB |= (1<<2);
- DDRB |= (1<<4);
- while(1){
- for (count = 0; count < 4; count++)
- {
- for (int i = 1; i < 190; i+=1)//LED aufhellen
- {
- pwm(i,led[count]);
- delayMicroseconds(geschw);
- }
- for (int i = 1; i < 190; i+=1)//Und wieder abdunkeln
- {
- pwm(191-i,led[count]);
- delayMicroseconds(2*geschw);
- }
- verz++;
- if (verz > 16) {
- geschw *= 3;
- geschw >>= 1;
- if(geschw == 1) geschw++;
- }//Das Aufhellen wird verlangsamt
- if (verz > 32) // In der letzten Phase leuchten alle LEDs noch mal auf
- {
- geschw = 1; //Ich recycle die Variablen mal, das schont den schmalen Platz
- verz = 0;
- modus = 0;
- breakout = 0;
- do {
- verz++; //Tick-Value
- if (verz > 3) {
- if (modus == 0) {
- geschw+=2;
- }
- else{
- geschw-=2;
- }
- verz = 0;
- if (geschw >= 250) {
- modus = 1;
- }
- }
- for (count = 0; count < 4; count++){
- pwm(geschw,led[count]);
- }
- if (geschw <= 50 && modus == 1)
- //if (geschw == -1 && modus == 1)
- {
- breakout=1;
- }
- }
- while (breakout==0);
- while(1)
- {
- for (count = 0; count < 4; count++){
- pwm(50,led[count]);
- // digitalWrite(led[count],LOW);
- }
- // set_sleep_mode(SLEEP_MODE_PWR_DOWN);
- // sleep_mode(); // in den Schlafmodus wechseln
- }
- }
- }
- }
- }
Download: SNES_Animated_Logo_tiny13.zip
ManCloud schrieb:
Ich habe die float operation (geschw *= 1.5) sowie die double Variable durch "rechenärmere" Varianten ersetzt.
Das allein führte zu einem Ersparnis von ~800 Byte. Danach passte das Kompilat (welches vorher ~1500 Byte war) 1a in nen ATtiny13.
Die Variablen verbrauchen nun nurnoch so viel Speicher, wie sie brauchen und das *= 1.5 habe ich durch ein *3/2 ersetzt.
Funzt bei mir einwandfrei
Edit: Ich hab die Source mal aktualisiert... Ist jetzt zum einen "single-source" und zum anderen nochmal etwas platzsparender (~550 bzw. ~520 Byte kompletter Verbrauch).
BTW: die Sourcen funktionieren auch für die anderen Tinys
Wenn noch weitere Kompilate gewünscht sind (Tiny45 /85 z.B.) kann ich die auch noch gern bereitstellen.
Tutorial-Erweiterung [TE]:
(by @borti4938)Diese Erweiterung befasst sich kurz mit der Umsetzung des Mods mit einem Platinenpaar, was ich designed habe
Disclaimer:
Alle Änderungen am SNES geschehen auf eigene Gefahr! Wer sein SNES modifiziert oder durch einen Dritten modifizieren lässt, ist selber daran Schuld, wenn es anschließend defekt ist.
Die hier vorgestellte PCB ist nicht kompatibel zu den ersten SNES mit separatem Sound-Modul (erste NTSC-SNESen / SFCs) sowie zu dem SNES Mini bzw. SFC Jr.!
[TE] Material beschaffen
Wer möchte, der kann sich das aktuelle Design von OSHPark herstellen lassen. Die Teile bekommt man bei Reichelt
- Platinen: Grund-PCB, LED-PCB
(mein Profil (falls ich mal Änderungen hochlade, funktionieren die vorderen Links ggf. nicht mehr)) - aktueller Reichelt-Warenkorb (ohne LEDs)
- Teileliste:
Basis-PCB:
- 4x Widerstand 1kOhm (0805 package)
- 4x Transistor 2N2222 (SOT23 package)
- 1x Keramikkondensator 100nF/50V (0805 package)
- 1x ATTiny45-20SU (SOIC-8 package)- optional: 1x gewinkelter Pinheader (5 Pins) + 1x passender Steckverbinder (für eine flexible Verbindung der beiden Platinen)
LED-PCB:
- 4x Widerstand passend zu den LEDs (0805 package)
- 4x LEDs (rot, grün, gelb, bau; 0805 or P-LCC-2 package)
Alternativ kann man die PCB-Files aus meinem GitHub Repository nutzen, um die PCBs woanders zu ordern. Der Warenkorb von Reichelt beinhaltet KEINE LEDs. Ich habe damals welche von eBay gekauft. Die 2x 180Ohm und 2x 120Ohm Widerstände sind Vorwiderstände der LEDs, die ich für meine ausgerechnet habe. Wer sich also welche aussucht, der muss die Widerstände neu berechnen! Entsprechende Vorwiderstandsrechner findet man im Internet. Es werden LEDs in den Bauformen SMD 0805 (ggf. auch größer) und P-LCC-2 unterstützt.
Um den Vorwiderstand R_v einer LED für eine Betriebsspannung U_b zu berechnen, brauchst du den Durchlassstrom I_d und die Durchlassspannung U_d... Dann berechnet sich
R_v = (U_b - U_d)/I_d
[TE] Bestückung
Beschreiben des ATTiny45 (mit dem MiniPro Tl866A/CS)
Ich habe einen Backup des Codes in meinem GitHub Repository hinterlegt. Dort gibt es auch zwei Versionen. Bei einer Version dimmen die LEDs aus, nachdem die Animation durchgelaufen ist; bei der anderen Version bleiben die LEDs an (leicht gedimmt).
Das jeweilige Hex-File lässt sich einfach bei MiniPro-Software einladen. VOR DEM BESCHREIBEN muss man allerdings noch die Fuse Bytes setzen (siehe Spoiler). Diese sind unter dem Reiter 'Config' zu setzen. Vom Standard her, sind die fast i.O. - nur der Taktteiler muss herausgenommen werden. Wenn man das nicht macht, läuft die Animation seeeeeehr langsam.
- lfuse: 0xe2
- hfuse: 0xdf
Bestückung
Eigentlich ist alles auf der PCB beschriftet. In diesem Schritt noch NICHT den gewinkelten Pinheader auflöten. Nach der Bestückung sollte das ganze so aussehen:
Bemerkung (falls man andere Vorwiderstände verwendet):
Auf der LED-PCB befinden sich die Vorwiderstände der LEDs. Der Widerstand direkt vor dem Pad zu einer Farbe gehört zur entsprechenden LED. Welcher Buchstabe für welche Farbe steht, sollte klar sein.
[TE] Einbau
Der gewinkelte Pinheader
Wer die Buchse und den Pinheader zur flexiblen Verbindung zwischen Grund-PCB und LED-PCB benutzen will, kann nun den Pinheader auf der Basis anbringen. Hierbei ist folgendes zu beachten:
- Wenn die PCB in ein 3Chip-SNES (bzw. 2Chip-SNES) eingebaut wird, kann auch schon der gewinkelte Pinheader aufgelötet werden. Achtet darauf, dass die Pins etwas gekürzt werden, damit diese nicht zu weit (möglichst gar nicht) durch die PCB durchschauen.
- Bei 1Chip-SNES ist das Kühlblech sehr tief über der Montagestelle. Deswegen muss man den Pinheader etwas "unorthodox" anlöten, damit dieser um das Kühlblech "herumschaut" (siehe Spoiler). Außerdem empfiehlt es sich, die PCB gegen mechanischen Druck nach unten 'abzusichern'. Ich habe ein wenig Isoband gerollt und unter den Pinheader geklebt, damit die nicht auf die darunterliegende Massefläche gedrückt werden.
Einbau Basis-PCB
Die Basis-PCB wird direkt an den Ext.Port der Konsole gelötet. Vor dem Anlöten empfieht es sich, die PCB mit Isolierklebeband an der Unterseite abzuisolieren. Stellt sicher, dass die PCB auf den entsprechenden Pins sitzt (die jeweils rechten Löcher auf Pin 27 und 28). Anschließend einfach anlöten.
Die Animation kann bei einem Reset neu gestartet werden. Dazu habe ich drei Optionen auf der PCB vorgesehen: Ihr habt ein Pad und einen Jumper zur Verfügung. Je nachdem, was ihr haben wollt, habt ihr die Möglichkeiten:
- Weder Jumper schließen, noch das Pad anschließen.
Die Logoanimation wird einmal bei Konsoleneinschalten ausgeführt und gut ist - Jumper schließen
Die Logoanimation wird bei jedem Reset ausgeführt. Dies betrifft auch Resets, die beispielsweise durch ein Modul ausgeführt werden.
Beispiel: Wenn ihr die Konsole mit SD2SNES anschaltet, seht ihr das Logo loslaufen. Mitten in der Animation beginnt es von vorne. Das liegt daran, dass das SD2SNES während des Bootvorgangs die Konsole resettet. - Pad mit CIC10 (bei 1Chip-Konsolen mit S-APU Pin 100 bzw. dem Via in der Leiterbahn direkt davor) verbinden
Dann wird die Animation NUR erneut ausgeführt, wenn ihr ein Reset per Resetknopf oder dem IGR-PIC resettet.
Bitte NIEMALS, das Pad verbinden und gleichzeitig den Jumper zu schließen!Im Spoiler einmal einn Bild meiner Installation, wo ich Option 3 gewählt habe.
Verbinden Basis- und Logo-PCB
Die Pads von Basis- und LED-PCB sind gespiegelt identsich geordnet (beide PCBs so gehalten, dass die Pads oben sind). Einfach die fünf Pads jeweils miteinander verbinden. Es empfiehlt sich, die Litzen zu bündeln (Kabelbinder, Schrumpfschlauch).
Wer die Buchse nutzt, kann die Kabellänge von ca. 7-10cm nehmen. Ich selber habe 10cm.(Ich selber habe keine Crimp-Zange für die Pins zu Hause. Deshalb löte ich die Litzen einfach an.)Wer die Litzen auf beiden PCBs direkt anlötet, sollte 15cm oder mehr an Litzenlänge einplanen.(Ich selber würde das nicht empfehlen, da die LED-PCB in die obere Gehäusehälfte geklebt wird.)
Einbau Logo-PCB
Jetzt ist Zeit für einen ersten Test: Kühlblech wieder anschrauben und SNES einschalten.Läuft alles wie gewünscht, kann man nun die Löcher für das Logo in die obere Gehäusehälfte "schneiden". Sobald dies geschehen ist, hält man die leuchtenden LEDs auf der PCB einmal unter das Logo und schiebt die PCB so hin und her, dass alles gut ausgeleuchtet ist. Anschließend die Position mit Bleistift anzeichnen (nicht wundern - die PCB liegt leicht "schräg", was so gewollt ist). Nun kann man in Ruhe die Logo-PCB z.B. mit Heißkleber fixieren (aufpassen, dass kein Heißkleber zwischen Gehäuse und PCB läuft - das macht sich u.U. negativ in der Ausleuchtung bemerkbar).
Zu guter Letzt kann das SNES wieder zugeschraubt werden.
Dieser Beitrag wurde bereits 33 mal editiert, zuletzt von n00b ()