PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SNES Controller



Jenssnej
19.08.2011, 17:45
Hallo,

Ich habe versucht den 16 Bit Schieberegister von einem Snes Controller aus zu lesen.
Unter rn-wissen steht auch eine Anleitung dazu aber ich komme da nicht weiter.
hier erstmal der Link: www.rn-wissen.de/index.php/SNES_Controller (http://www.rn-wissen.de/index.php/SNES_Controller)

ich habe versucht das mit Waitus zu realiesiren aber irgendwie liest der so nichts aus ...
kann mir da jemand weiter helfen ?



$regfile = "m32def.dat" 'für mega 32
$framesize = 32
$swstack = 32
$hwstack = 32

$crystal = 16000000 'Quarzfrequenz
$baud = 9600 'für rs232

' Um das Register auszulesen muss der SNES Controller zunächst initialisiert werden:

Config Portc.0 = Output 'Clock
Config Portc.1 = Output 'Latch
Config Portc.2 = Input 'Data
Portc.2 = 0 'Pullup Widerstand ein
Portc.0 = 1
Portc.1 = 0

' Tasten auf dem Controller

Dim Rauf As Integer
Dim Runter As Integer
Dim Links As Integer
Dim Rechts As Integer
Dim Go As Integer
Dim Sel As Integer
Dim A As Integer
Dim B As Integer
Dim Y As Integer
Dim X As Integer
Dim L As Integer
Dim R As Integer
Dim I As Integer

' ---------------------------------------------------------
' --------------------- Hauptprogramm ---------------------
' ---------------------------------------------------------

Do

' Die Datenübertragung muss initialisiert werden.
' Dieser Schritt muss bei jedem Auslesen des Registers durchgeführt werden.

Portc.1 = 1
Waitus 12
Portc.1 = 0

' Nun können die 16 Bit des Registers wie folgt ausgelesen werden
' (folgendes also 16 Mal wiederholen)

For I = 0 To 15

Waitus 6
Portc.0 = 0

If I = 0 Then
Print Portc.2
Elseif I = 1 Then
Print Portc.2
Elseif I = 2 Then
Print Portc.2
Elseif I = 3 Then
Print Portc.2
Elseif I = 4 Then
Print Portc.2
Elseif I = 5 Then
Print Portc.2
Elseif I = 6 Then
Print Portc.2
Elseif I = 7 Then
Print Portc.2
Elseif I = 8 Then
Print Portc.2
Elseif I = 9 Then
Print Portc.2
Elseif I = 10 Then
Print Portc.2
Elseif I = 11 Then
Print Portc.2
Elseif I = 12 Then
Print Portc.2
End If

Waitus 6
Portc.0 = 1


Next I




' ---------------------------------------------------------
' ------------------ Hauptprogramm Ende -------------------
' ---------------------------------------------------------


Print "Ende"
Wait 1


Loop
End

Sauerbruch
19.08.2011, 23:25
Also, ohne mich groß in den SNES-Controller eingedacht zu haben, fällt mir schon mal ein "klassischer" Fehler auf:
Du konfigurierst C.2 als Input, schreibst dann aber "Print PORTC.2". Ich nehme ja mal an, dass Du den Eingangspegel an C.2 meinst - diese müssen aber über die PIN-Register abgefragt werden (also Print PINC.2). Mit PORTC.2 beeinflusst Du den PullUp-Widerstand, der aktiviert wird, wenn PORTC.2 1 ist (und nicht 0).

Darüber hinaus fällt mir auf, dass Du in der langen "Elseif"-Schleife für alle I-Werte genau das gleiche machst, nämlich Print PORTC.2. Mal davon abgesehen, dass wahrscheinlich PINC.2 gemeint sein dürfte, könntest Du das Ganze wesentlich einfacher haben:



Portc.1 = 1
Waitus 12
Portc.1 = 0

For I = 0 To 15
Waitus 6
Portc.0 = 0
Print PINC.2
Waitus 6
Portc.0 = 1
Next I'

---------------------------------------------------------
------------------ Hauptprogramm Ende -------------
---------------------------------------------------------

Print "Ende"
Wait 1
Loop
End