-
SNES Controller
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
ich habe versucht das mit Waitus zu realiesiren aber irgendwie liest der so nichts aus ...
kann mir da jemand weiter helfen ?
Code:
$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
-
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:
Code:
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