Moin, ich hab gestern einen alten PS1 Controller gefunden und dachte mir ich versuch mich mal dran, es an nen Atmega16 auf 4mhz(interner quarz) anzuschließen.
Hier http://pinouts.ru/Game/playstation_9_pinout.shtml ist erklärt wie der Controller funktioniert.
Nun hab ich folgenden Kot produziert:
Aber irgendwie will das ganze nicht wie ich will, ich kann keine Daten aus dem Controller auslesen und weiß auch nicht ob mein Befehl beim Controller ankommt. Was ich mit einem Voltmeter feststellen konnte ist, dass auf DATA durchgehend 0,20 Volt anliegt, obwohl auf der Seite steht, dass es auf High sein sollte und ändern tut sich da auch nicht viel.
Ich hoffe mir kann geholfen werden
Hier http://pinouts.ru/Game/playstation_9_pinout.shtml ist erklärt wie der Controller funktioniert.
Nun hab ich folgenden Kot produziert:
Code:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; PSX-Controller-Routines ;;
;;
;; Pin0 = DATA
;; Pin1 = CMD
;; Pin2 = ATT
;; Pin3 = CLK
;; Pin4 = ACK
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.equ C_Port = PORTA ;Controller Port
.equ C_Pin = PINA
.equ C_DDR = DDRA ;Controller DDR
.equ DATA = 0
.equ CMD = 1
.equ ATT = 2
.equ CLK = 3
.equ ACK = 4
;sends 0x01 startcommand
C_start:
push temp1
ldi temp1, 0b00001110
out C_DDR, temp1
out C_PORT, temp1
cbi C_PORT, ATT ; ATT auf low
ldi temp1, 0x01
rcall C_command
pop temp1
ret
;Sends Command stored temp1
C_command:
push temp2
push temp3
push temp4
in temp2, SREG
ldi temp3, 8
C_command1:
lsl C_data
ror temp1 ;LSF to carry
in temp4, SREG
sbrs temp4, 0 ;skip if Carrybit set
cbi C_Port, CMD ;clear CMD
sbrc temp4, 0 ;skip if carrybit cleared
sbi C_Port, CMD ;
cbi C_Port, CLK ; Clock low
; Clock-impulse
sbi C_Port, CLK ; Clock high
sbic C_Pin, Data ;write C_data if C_Pin set
sbr C_data, 0
sbis C_Pin, Data ;clear C_data if C_Pin cleared
cbr C_data, 0
dec temp3 ;loop
brne C_command1 ;
sbi C_Port, CMD
rcall mirror ;C_data mirror
out SREG, temp2 ;restore registers
pop temp4
pop temp3
pop temp2
ret
;mirrors C_data
mirror:
push temp1
push temp2
in temp1, SREG
rol C_data ;bit7 ins carry
ror temp2 ;carry ins bit0
rol C_data ;bit6 ins carry
ror temp2 ;carry ins bit1
rol C_data ;bit5 ins carry
ror temp2 ;carry ins bit2
rol C_data ;bit4 ins carry
ror temp2 ;carry ins bit3
rol C_data ;bit3 ins carry
ror temp2 ;carry ins bit4
rol C_data ;bit2 ins carry
ror temp2 ;carry ins bit5
rol C_data ;bit1 ins carry
ror temp2 ;carry ins bit6
rol C_data ;bit0 ins carry
ror temp2 ;carry ins bit7
mov C_data, temp3
out SREG, temp1
pop temp2
pop temp1
ret
Ich hoffe mir kann geholfen werden