Hallo
ich möchte euch gerne meine PS3 Hardware + Software Mod vorstellen.
Es ist ein LED Mod den ich über webMAN, sowohl per Tasten-Kombo als auch in den webMAN Einstellungen, steuern und einstellen kann.
Verbaut habe ich das ganze in meiner CECHC04.
[Blockierte Grafik: http://www11.pic-upload.de/thumb/18.01.15/bp6aku7rti7k.jpg][Blockierte Grafik: http://www11.pic-upload.de/thumb/18.01.15/xs8z96or78j.jpg][Blockierte Grafik: http://www11.pic-upload.de/thumb/18.01.15/1vbv2sj3y9uv.jpg]
Das ganze wird über die grüne Power-LED der PS3 durch einen PIC16F628A PIC16F648A gesteuert. Durch die Programmerweiterung auf dem Microcontroller musste ich von dem 16F628 auf den 16F648 umsteigen.
Bilder von der aktuellen Platine und Einbau:
[Blockierte Grafik: http://www11.pic-upload.de/thumb/18.01.15/dy89acztvq6a.jpg]
Hier fange ich das Signal der grünen Power LED von der PS3 ab und verwende dieses in meiner Schaltung als Trigger:
[Blockierte Grafik: http://www11.pic-upload.de/thumb/18.01.15/b1bgl3s8gjiq.jpg]
Die Leitung zum Schriftzug unter der Karten-Klappe:
[Blockierte Grafik: http://www11.pic-upload.de/thumb/18.01.15/ooot495iphju.jpg]
Der Schriftzug unter der Karten-Klappe:
[Blockierte Grafik: http://www11.pic-upload.de/thumb/18.01.15/hop6ct45a7g.jpg][Blockierte Grafik: http://www11.pic-upload.de/thumb/18.01.15/d12gzme5vg18.jpg][Blockierte Grafik: http://www11.pic-upload.de/thumb/18.01.15/nkbjfcdmgisx.jpg]
Kommen wir nun zu den Funktionen.
Wird die PS3 gestartet, bekommt meine Platine die Spannungsversorgung und fängt an zu artbeiten. Bei jedem Neustart läuft eine Demo durch bei der alle Farben und Schriftzug durchgeschaltet werden...
...Nach dem Demo Durchlauf wird der EEPROM-Speicher gelesen und die Farben/Schriftzug eingestellt.
Neu in dieser Version ist die möglichkeit das "Intro/Outro" des LED Mods in der webMAN Einstellungen an- oder auszustellen:
[Blockierte Grafik: http://www11.pic-upload.de/18.01.15/3wpb6q2kdpj8.jpg]
Intro (beim Anschalten der PS3):
Es werden alle Farben und Schriftzug durchgeschaltet.Blau->Rot->Grün->Lila->Türkis->Orange->Weiss->Schriftzug an->aus
Outro (beim Abschalten der PS3):
Abschaltsequenz Grün->Orange->Rot->Rot->Rot->Rot.....
Hier ein Video dazu:
An dem Steuerungs-Prinzip hat sich nichts geändert:
- Bei Tastenkombo R3+R2+L2 geht die Power-LED für etwa 1/10 sekunde aus und gleich wieder an, dabei wird der Schriftzug unter der Klappe an oder aus gemacht.
- Bei R3+R2+L1 geht die Power-LED aus und bleibt auch erstmal aus, nach einer von mir definierten Zeit schaltet der PIC alle programmierten Farben durch. Ist man bei der gewünschten Farbe angekommen muss man die gleiche Tastenkombo (R3+R2+L1) drücken um diese zu halten. Die Power-LED geht wieder an.
Die
Einstellungen werden, in 2 verschiedenen Werten, im EEPROM des PIC
gespeichert, dh die Einstellungen bleiben nach Neustarts erhalten.
Hinzu gekommen ist die möglichkeit das ganze auch in den webMAN Einstellungen zu steuern:
[Blockierte Grafik: http://www11.pic-upload.de/18.01.15/p3r9x947ym4.jpg]
Zu den bisher möglichen 7 Farben (Blau, Rot, Grün, Lila, Türkis, Orange und Weiss) sind noch 2 verschidene Modi hinzu gekommen.
- Schneller zufällige Farbwchsel
- Langsamer zufälliger Farbwechsel
Wobei der zufällige Farbwechsel nicht wirklich zufällig ist. (Nach meinem Wissen (ich bin nur ein Laie) ist es recht schwierig mit einem PIC eine richtige Zufallszahl zu erstellen.)
Hier ein Video mit den ganzen Einstellungs- und Speicherfunktionen:
Ich muss den Schaltplan noch aktualisieren und hochladen. Den Source Code für den PIC und webMAN werde ich auch, nach einer kleinen Überarbeitung, hier bereitstellen. Siehe Anhang
Eine Anleitung zum Nachbauen folgt ebenfalls noch
Hallo Leute,
EDIT2: 3.9.2014
Bin etwas weiter gekommen. Hier einpaar neue Bilder (Einbau und Schaltplan) und ein neues Video.
Source Code für webMAN und den PIC16F628A sind auch dabei.
Steuerplatine, Kabel und LED-Streifen (über den Lüftungslöchern):
[Blockierte Grafik: http://www11.pic-upload.de/thumb/03.09.14/cfajwsrdxdx.jpg]
[Blockierte Grafik: http://www11.pic-upload.de/thumb/03.09.14/nqpch9vstwzq.jpg]
Hier fange ich das Signal der grünen Power-LED ab:
[Blockierte Grafik: http://www11.pic-upload.de/thumb/03.09.14/5avg9wecluzb.jpg]
Durch den Microcontroller sind nicht viele Bauteile notwendig, man kann alles über Software steuern.
Für Testzwecken ist die Platine ohne große Mühe raus zu holen:
[Blockierte Grafik: http://www11.pic-upload.de/thumb/03.09.14/voc834suzdsg.jpg]
Streifenrasterplatine, sieht etwas aus aber es läuft
[Blockierte Grafik: http://www11.pic-upload.de/thumb/03.09.14/l62yrdpijg43.jpg]
Der Schaltplan ist das Grundprinzip, hab bei mir auf der Platine etwas mehr drauf.
Ist für Testzwecke, um das Programm für den PIC anzupassen.
[Blockierte Grafik: http://www11.pic-upload.de/thumb/03.09.14/kxngvc418uqv.png]
Auf dem Video sieht man die LEDs nicht so gut wegen dem Licht.
Source Code webMAN, ist nicht viel (macht ja nur die Power-LED an/aus):)
int ledMod;
ledMod = 0;
static void poll_thread(uint64_t poll)
{
...
...
...
...
...
..
while(working)
{
for(u8 n=0;n<10;n++)
{
if(!webman_config->nopad)
{
data.len=0;
if (cellPadGetData(0, &data) != CELL_PAD_OK)
if (cellPadGetData(1, &data) != CELL_PAD_OK)
if (cellPadGetData(2, &data) != CELL_PAD_OK) {sys_timer_usleep(300000); continue;}
if (data.len > 0)
{
.....
////////////////////////////////////////
MEIN CODE - LED-MOD
////////////////////////////////////////
if(data.button[CELL_PAD_BTN_OFFSET_DIGITAL1] & CELL_PAD_CTRL_R3)
{
if((data.button[CELL_PAD_BTN_OFFSET_DIGITAL2] & CELL_PAD_CTRL_R2)) // R3+R2+ LED Mod
{
if((data.button[CELL_PAD_BTN_OFFSET_DIGITAL2] & CELL_PAD_CTRL_L1)) // R3+R2+L1 TEST1
{
if(ledMod==0)
{
ledMod=1;
led(1,0);
sprintf((char*)tmp, "LED-Mod @PIC16F628A \r\nby MixeryMaxe \r\n>>> Einstellung <<<");
}
else if(ledMod==1)
{
ledMod=0;
led(1,1);
sprintf((char*)tmp, "LED-Mod @PIC16F628A \r\nby MixeryMaxe \r\n>>> Einstellung geändert <<<");
}
show_msg((char*)tmp);
sys_timer_sleep(1);
}
////////////////////////////////////////
MEIN CODE - LED-MOD ENDE
////////////////////////////////////////
}
}
......
}
......
}
sys_timer_usleep(300000);
}
.....
sec+=step;
}
sys_ppu_thread_exit(0);
}
Der PIC ist nicht sauber programmiert, ist erst der zweite versuch.
Später kommt nocht PWM und Speicherfunktion (damit nicht bei jedem Neustart die Farbe wieder neu gewählt werden muss).
;****************************************************************************************************
;****************************************************************************************************
; PS3-LED-Steuerung @PIC 16F628A (über webMAN gesteuert) by MixeryM@xe
;****************************************************************************************************
;****************************************************************************************************
;****************************************************************************************************
; PIC wählen und Includedatei einbinden
;****************************************************************************************************
list p=16f628
#include <P16f628A.INC>
ERRORLEVEL -302 ;SUPPRESS BANK SELECTION MESSAGES
;****************************************************************************************************
;Konfiguration festlegen
;****************************************************************************************************
__config _INTRC_OSC_NOCLKOUT & _MCLRE_ON & _LVP_OFF & _WDT_OFF & _PWRTE_ON & _DATA_CP_OFF & _CP_OFF & _BODEN_ON
;****************************************************************************************************
; Konstanten und Variablen festlegen
;****************************************************************************************************
#define blau PORTB,0 ; LED Blau
#define rot PORTB,1 ; info 15 sec
#define gruen PORTB,2 ; info 30 sec
#define pwmOUT PORTB,4 ; PWM an/aus
#define in1 PORTA,2 ; Trigger
hmin equ 0x20 ; Schleifenzähler 1
count equ 0x21 ; Schleifenzähler 2
loop1 equ 0x22 ; Schleifenzähler 3
loop2 equ 0x23 ; Schleifenzähler 4
count1 equ 0x24 ; Schleifenzähler 5
count2 equ 0x25 ; Schleifenzähler 6
count3 equ 0x26 ; Schleifenzähler 7
val equ 0x27 ; Schleifenzähler 8
pwmStat equ 0x28 ; LED Status/Modus
;------------------------------------------------------------------------------------------------
; Macros
;------------------------------------------------------------------------------------------------
Bank0 macro ; Bank 0 einschalten
bcf STATUS, RP0
bcf STATUS, RP1
endm
Bank1 macro ; Bank 1 einschalten
bsf STATUS, RP0
bcf STATUS, RP1
endm
Bank2 macro ; Bank 2 einschalten
bcf STATUS, RP0
bsf STATUS, RP1
endm
Bank3 macro ; Bank 3 einschalten
bsf STATUS, RP0
bsf STATUS, RP1
endm
Ini_con Equ B'00000000' ; Interupt disable
Ini_opt Equ B'00000011' ; pull-up disable
;****************************************************************************************************
; Das Programm beginnt mit der Initialisierung
;****************************************************************************************************
Init
Bank0
movlw Ini_opt ; pull-up Wiederstände aus
movwf OPTION_REG
CLRF PORTA ;Initialize PORTA by setting output data latches
MOVLW 0x07 ;Turn comparators off and
MOVWF CMCON ;enable pins for I/O functions
clrf INTCON
clrf T2CON
clrf TMR2
Bank1
clrf PIE1
movlw d'255' ; frequency ~ 1000 Hz
movwf PR2
movlw B'11111111' ; PortA auf input
movwf TRISA
movlw B'00000000' ; PortB auf outputs
movwf TRISB
Bank0
movlw Ini_con ; Interupt disable
movwf INTCON
clrf PORTB ; PORTB aus
nop
nop
movlw b'00000111'
movwf T2CON ; turn on TMR2 prescale 16
movlw d'0' ; duty cycle = 0% or no output
movwf CCPR1L
movlw b'00111100'
movwf CCP1CON ; turn on PWM
goto main1 ; beginne Hauptprogramm
;****************************************************************************************************
; Haupt-Programmstart
;****************************************************************************************************
main1
btfsc in1 ; ist grüne Power-LED an?
goto main1 ; dann zu main1, sonst
call wait2s ; sonst warte 2 sekunden
btfsc in1 ; ist nach 2 sekunden LED immer noch aus?
goto main1 ; dann überspringe
main1a
call ledBlau ; LED Blau anschalten
bsf pwmOUT ; kein PWM
call wait2s ; warte 2 sekunden
btfss in1 ; ist nach 2 sekunden LED immer noch aus?
goto main2a ; dann gehe zu main2a
goto main2
main2
btfsc in1 ; ist grüne Power-LED an?
goto main2 ; dann zu main2, sonst
call wait2s ; sonst warte 2 sekunden
btfsc in1 ; ist nach 2 sekunden LED immer noch aus?
goto main2 ; dann überspringe
main2a
call ledRot ; LED Rot anschalten
bsf pwmOUT ; kein PWM
call wait2s ; warte 2 sekunden
btfss in1 ; ist nach 2 sekunden LED immer noch aus?
goto main3a ; dann gehe zu main3a
goto main3
main3
btfsc in1 ; ist grüne Power-LED an?
goto main3 ; dann zu main3, sonst
call wait2s ; sonst warte 2 sekunden
btfsc in1 ; ist nach 2 sekunden LED immer noch aus?
goto main3 ; dann überspringe
main3a
call ledGruen ; LED Grün anschalten
bsf pwmOUT ; kein PWM
call wait2s ; warte 2 sekunden
btfss in1 ; ist nach 2 sekunden LED immer noch aus?
goto main4a ; dann gehe zu main4a
goto main4
main4
btfsc in1 ; ist grüne Power-LED an?
goto main4 ; dann zu main4, sonst
call wait2s ; sonst warte 2 sekunden
btfsc in1 ; ist nach 2 sekunden LED immer noch aus?
goto main4 ; dann überspringe
main4a
call ledBlauRot ; LED Blau-Rot anschalten
bsf pwmOUT ; kein PWM
call wait2s ; warte 2 sekunden
btfss in1 ; ist nach 2 sekunden LED immer noch aus?
goto main5a ; dann gehe zu main5a
goto main5
main5
btfsc in1 ; ist grüne Power-LED an?
goto main5 ; dann zu main5, sonst
call wait2s ; sonst warte 2 sekunden
btfsc in1 ; ist nach 2 sekunden LED immer noch aus?
goto main5 ; dann überspringe
main5a
call ledBlauGruen ; LED Blau-Grün anschalten
bsf pwmOUT ; kein PWM
call wait2s ; warte 2 sekunden
btfss in1 ; ist nach 2 sekunden LED immer noch aus?
goto main6a ; dann gehe zu main6a
goto main6
main6
btfsc in1 ; ist grüne Power-LED an?
goto main6 ; dann zu main6, sonst
call wait2s ; sonst warte 2 sekunden
btfsc in1 ; ist nach 2 sekunden LED immer noch aus?
goto main6 ; dann überspringe
main6a
call ledRotGruen ; LED Rot-Grün anschalten
bsf pwmOUT ; kein PWM
call wait2s ; warte 2 sekunden
btfss in1 ; ist nach 2 sekunden LED immer noch aus?
goto main7a ; dann gehe zu main7a
goto main7
main7
btfsc in1 ; ist grüne Power-LED an?
goto main7 ; dann zu main7, sonst
call wait2s ; sonst warte 2 sekunden
btfsc in1 ; ist nach 2 sekunden LED immer noch aus?
goto main7 ; dann überspringe
main7a
call ledWeiss ; LED Weiss anschalten
bsf pwmOUT ; kein PWM
call wait2s ; warte 2 sekunden
btfss in1 ; ist nach 2 sekunden LED immer noch aus?
goto main8a ; dann gehe zu main8a
goto main8
main8
btfsc in1 ; ist grüne Power-LED an?
goto main8 ; dann zu main8, sonst
call wait2s ; sonst warte 2 sekunden
btfsc in1 ; ist nach 2 sekunden LED immer noch aus?
goto main8 ; dann überspringe
main8a
call ledAus ; LED ausschalten
bsf pwmOUT ; kein PWM
call wait2s ; warte 2 sekunden
btfss in1 ; ist nach 2 sekunden LED immer noch aus?
goto main1a ; dann gehe zu main1a
goto main1
;*********************************************
pwmAUS
bsf pwmOUT ; PWM deaktivieren
call ledAus
goto main1
pwmAN
bcf pwmOUT ; PWM aktiviert
goto PWMmain
;****************************************************************************************************
; Nebenprogramme
;****************************************************************************************************
;*********************************************
; Farben einstellen auf PORTB
;*********************************************
ledBlau
bsf blau ;
bcf rot ; Blau 100
bcf gruen ;
return
ledRot
bcf blau ;
bsf rot ; Rot 010
bcf gruen ;
return
ledGruen
bcf blau ;
bcf rot ; Grün 001
bsf gruen ;
return
ledBlauRot
bsf blau ;
bsf rot ; Blau-Rot 110
bcf gruen ;
return
ledBlauGruen
bsf blau ;
bcf rot ; Blau-Grün 101
bsf gruen ;
return
ledRotGruen
bcf blau ;
bsf rot ; Rot-Grün 011
bsf gruen ;
return
ledWeiss
bsf blau ;
bsf rot ; Blau-Rot-Grün 111
bsf gruen ;
return
ledAus
bcf blau ;
bcf rot ; LEDs AUS 000
bcf gruen ;
return
;*******************************************
; Farbe im EEPROM speichern
;*******************************************
;*******************************************
; Gespeicherte Farbe aus EEPROM auslesen
; und einstellen
;*******************************************
;*******************************************
; Demo Mode
;*******************************************
;*******************************************
; PWM Mode
;*******************************************
PWMmain
; first loop increases brightness of LEDs
clrf val ; val = 0
gg call delay_100ms
btfss in1 ;
return
movf val, w
movwf CCPR1L ; output val to pwm RB3
movlw d'20'
addwf val, F ; add X to val
btfss STATUS, C ; check for carry
goto gg ; no carry loop again
; decreases brightness of LEDs
movlw 0xFF
movwf val
hh call delay_100ms
btfss in1 ;
return
movfw val
movwf CCPR1L ; save val to register
movlw d'20'
subwf val, F ; subtract X from val save in val
btfsc STATUS, C ; check for < 0
goto hh ; no loop again
clrf CCPR1L
goto PWMmain
delay_1ms
; 16 mHz crystal, 4 mS with 4 mhz crystal
movlw 0x07
movwf count1
aa movlw 0xBC
movwf count2
decfsz count2, F
goto $-1
decfsz count1, F
goto aa
return
delay_100ms
; 16 mHz crystal, 400 mS with 4 mHz crystal
movlw d'99'
;movlw d'200'
movwf count3
bb call delay_1ms
decfsz count3, F
goto bb
return
;****************************************************************************************************
; Warteschleifen 2 sek
;****************************************************************************************************
wait2s
btfsc in1 ; ist grüne Power-LED an?
return ; dann abbrechen
call wait500
btfsc in1 ; ist grüne Power-LED an?
return ; dann abbrechen
call wait500
btfsc in1 ; ist grüne Power-LED an?
return ; dann abbrechen
call wait500
btfsc in1 ; ist grüne Power-LED an?
return ; dann abbrechen
call wait500
return
;****************************************************************************************************
; Warteschleifen 1 sek
;****************************************************************************************************
wait1s
call wait250
call wait250
call wait250
call wait250
return
;****************************************************************************************************
; Warteschleifen 0.5 sek
;****************************************************************************************************
wait500
call wait250
call wait250
return
;****************************************************************************************************
; Warteschleifen 100/200/250 ms
;****************************************************************************************************
wait100:
movlw d'100' ; 100 ms Pause
movwf loop1
goto wait1
wait200:
movlw d'200' ; 200 ms Pause
movwf loop1
goto wait1
wait250:
movlw d'250' ; 250 ms Pause
movwf loop1
goto wait1
wait1:
movlw d'110' ; Zeitkonstante für 1ms
movwf loop2
wait2:
nop
nop
nop
nop
nop
nop
decfsz loop2,F ; 1 ms vorbei?
goto wait2 ; nein, noch nicht
decfsz loop1,F ; 250 ms vorbei?
goto wait1 ; nein, noch nicht
retlw 0 ; das Warten hat ein Ende
;****************************************************************************************************
; Programmende
;****************************************************************************************************
end
;****************************************************************************************************
29.8.2014
EDIT:
Ok, hab jetzt was gefunden und es funktioniert alles soweit wie ich es mir vorgestellt habe.
Kurz zusammengefasst:
Es soll ein LED Mod für mein PS3 Gehäuse werden.
Hab ein Microcontroller (PIC16F628A) programmiert um die LEDs anzusteuern und um das Signal der grünen Power-LED der PS3 zu verarbeiten( dient als Trigger).
Dann habe ich den webMAN source code etwas umgeschrieben um die Power-LED der PS3 zu steuern. Somit kann ich mein LED Mod bequem per DS3 an und umschalten
Es ist im Moment ein POC und wird von mir auf jeden fall noch erweiter. Auf dem PIC ist nur ein kleines Demo Programm mit 4 Stufen, Blau-Rot-Grün-Aus.
Ich werde die Tage, wenn ich etwas mehr Zeit habe, etwas ausführlicher berichten und Schaltplan und source code vom PIC nachreichen falls interesse besteht.
[Blockierte Grafik: http://www11.pic-upload.de/thumb/29.08.14/xf4codp136mm.jpg]
[Blockierte Grafik: http://www11.pic-upload.de/thumb/29.08.14/pb5xu3tqkj8.jpg]
[Blockierte Grafik: http://www11.pic-upload.de/thumb/29.08.14/7bzss48edpq.jpg]
Hier ein Video dazu
26.8.2014
ZitatOriginal von MixeryM@xe
ich möchte meiner PS3 einen Hardware Mod verpassen und brauche das Signal der Grünen Power LED.
Jetzt die Frage an die Hardware Experten, wo kann ich mir am besten etwas Saft von der grünen LED abzapfen? Ich brauche auch nur ganz wenig, so etwa 5 mA, damit muss einen Transistor (npn oder pnp) ansteuern können.
Ich habe die CECHC04 mit der kleinen Power/Eject Platine.
MixeryM@xe