wie schon erwähnt hab ich bei meiner S100 den originalen Controller des Frontpanels gegen einen pinkompatiblen Atmel AVR Controller (ATmega8515) ausgetauscht. Der ist damit frei programmierbar und somit kann man das Verhalten des Frontpanels 100% selbst kontrollieren.
Hardware-Modifikation:
Als erstes muss der alte Controller runter und ein 44-poliger PLCC-Sockel rauf. Das ist der schwierigste Teil.
Der Quarz muss auch noch gegen einen 16 MHz Typ getauscht werden, am besten auch dafür einen Sockel einlöten (z.B. Buchsenleiste oder ein Stück eines IC-Sockels), dann kann man wieder problemlos den alten Controller mit Quarz einsetzen.
Da leider der Reset-Pin im Gegensatz zum Original invertiert, muss man den noch fest auf 5V legen. Dafür setzt man an geeigneter Stelle einen Jumper. Man kann dafür z.B. einfach D1 oder CE4 kurzschließen oder den Jumper wie im den Bildern zu sehen ist montieren.
Hier sieht man zwei Bilder davon:
(Der rote Fädeldraht ist nicht nötig)


Programmierung des Bootloaders:
Chip in geeignetes Programmiergerät stecken und bootloader.hex flashen.
Fuses richtig setzen:
BOOTSZ = Boot flash size = 256 Words (512 Bytes)
BOOTRST aktivieren
SUT_CKSEL = Ext. Crystal High Freq.
Programmieren der Firmware:
Aktivieren des Bootloaders:
Power-Taste gedrückt halten und S100 einschalten. Im Bootloader blinken die LEDs schnell und rot. Man kann jetzt mit der Power-Taste den PC hochfahren.
Unter Windows kann die Firmware (s100-avr-fp.hex) mit AvrProg (ist in AVR Studio dabei) geflasht werden, unter Linux funktioniert z.B. AVRDUDE:
- Code: Alles auswählen
avrdude -p m8515 -c avr910 -P /dev/ttyS1 -b 38400 -u -U flash:w:s100-avr-fp.hex
Funktionen der Firmware:
Fernbedienung der S100 wird komplett unterstützt und als PS2-Tastatur emuliert.
Es wird keine Maus emuliert (das Original macht das wohl).
Die Tastenwiederholrate und -verzögerung kann eingestellt werden.
Kondensator-Mod ist nicht nötig. Die Power-Logik ist momentan wie folgt:
Ein Druck der Power-Taste an der Fernbedienung oder ein kurzer Druck am Frontpanel (< 3s) generiert einen kurzen Puls, um den PC runterzufahren. Ist das nach 30s noch nicht geschehen, wird hart ausgeschaltet (abschaltbar mit #define AUTO_POWER_OFF 0). Drücken > 3s schaltet ebenfalls hart ab (nur am FP).
Es wird erkannt, ob der PC auch wirklich ausgeschaltet wurde (anhand der Spannung an den PS2-Pins, abschaltbar mit #define HOST_POWER_SYNC 0).
Die bekannten seriellen Kommandos funktionieren wie gewohnt, zusätzlich gibt es ein paar neue (alles Hex-Zahlen):
- Code: Alles auswählen
Original Kommandos:
A2 B2 = Umstellen von grün blinkend auf grün leuchtend
A2 B1 = Shutdown
Neue Kommandos:
A2 D0 : Sprung in den Bootloader
A2 D1 : Gibt die Firmwareversion aus
A2 D2 ww xx yy zz : Setzen einer Aufwachzeit nach der der PC wieder gebootet werden soll.
Die Zeit ist in Sekunden (ab sofort) als 32-Bit Wert. 'ww' ist das Low-Byte.
Das FP antwortet mit "OK\n".
Der PC muss dann mit A2 B1 runtergefahren werden und wacht dann automatisch
nach der eingestellten Zeit wieder auf.
Beispiele für Linux:
Aktivieren des Bootloaders: echo -ne '\xa2\xd0' > /dev/ttyS1
Flashen der Firmware: avrdude -p m8515 -c avr910 -P /dev/ttyS1 -b 38400 -u -U flash:w:s100-avr-fp.hex
Beenden des Bootloaders: echo -ne 'E' > /dev/ttyS1
Umschalten auf grün: echo -e '\xa2\xb2\xa2\xb2\xa2\xb2' > /dev/ttyS1
oder kürzer: echo -ne '\xa2\xb2' > /dev/ttyS1
Weckzeit 1h (3600s = 0xe10): echo -e '\xa2\xd2\x10\x0e\x00\x00' > /dev/ttyS1
Runterfahren: echo -e '\xa2\xb1\xa2\xb1\xa2\xb1' > /dev/ttyS1
oder kürzer: echo -ne '\xa2\xb1' > /dev/ttyS1
Ich hoffe, das ist so einigermaßen verständlich...
Gruß,
twinpeaks
EDIT:
2008-10-18: Neue Firmware Version 0.2 angehängt.
2008-11-11: Skripte zum Programmieren des Timers angehängt
2008-11-13: Skripte etwas angepasst. Box fährt jetzt auch automatisch runter.
2008-11-25: Firmware Version 0.3 (unterstützt automatisches booten des PCs nach Einschalten der Box (AUTO_POWER_ON) und deaktivieren des harten Abschaltens nach Timeout des Shutdowns (AUTO_POWER_OFF). Siehe main.h.
Shutdown Skripte etwas geändert.


