Hallo Siro,
deine Annahme war richtig. Die Poti haben einen Data-In und einen Data-Out. Es geht dabei speziell um die MCP42010.
Wie das Senden der Daten via SPI erfolgt, ist mir mittlerweile, nachdem ich das Datenblatt bestimmt 6mal gewälzt habe, nun auch geläufig ^^. Mein Englisch ist halt gerade so ausreichend für das Nötigste...
Ein Testprogramm für 2 dieser Poti habe ich eben noch geschrieben - ging sogar verdammt zügig, da ich nicht jedes Mal ein neues Array erstellen musste.
Mittlerweile werde ich mit den Arrays auch richtig warm. Habe bis Dato halt immer ohne geschrieben ^^.
Morgen probiere ich das Programm einmal aus.
Bin mir im Moment nur nicht ganz sicher, ob die Command-Variablen in der Debounce-Subroutine richtig sind. Werde ich morgen aber sehen. Wenn nicht, dann wandern die halt ins Hauptprogramm ^^.
Code:
$regfile = "m8def.dat"
$crystal = 1000000
$hwstack = 40
$swstack = 32
$framesize = 60
Config Portb = Output
Config Portd = Input
Portd = 255
Config Spi = Soft , Dout = Portb.1 , Ss = Portb.2 , Clock = Portb.3
Spiinit
Dim A As Byte , Command1 As Byte , Command2 As Byte , Senddata(4) As Byte , Data1 As Byte , Data2 As Byte
Dim M1 As Bit
M1 = 0
Declare Sub Links
Declare Sub Rechts
Declare Sub Pushbutton
Declare Sub Powerbutton
' ********************************
' **** Main Program ****
' ********************************
Do
' ---------------------------
' SPI-Dataoutput for MCP42010
' ---------------------------
Senddata(1) = Command1
Senddata(2) = Data1
Senddata(3) = Command2
Senddata(4) = Data2
Spiinit
Spiout Senddata(1) , 4
' ----------------
' Querying Encoder
' ----------------
A = Encoder(pind.2 , Pind.3 , Links , Rechts , 0)
' --------------------
' Querying Pushbuttons
' --------------------
Debounce Pind.4 , 0 , Encoderbutton , Sub
Debounce Pind.5 , 0 , Powerbutton , Sub
Loop
Links:
If M1 = 0 Then Incr Data1
If M1 = 1 Then Incr Data2
If Data1 = 255 Then Data1 = 254
If Data2 = 255 Then Data2 = 254
Return
Rechts:
If M1 = 0 Then Decr Data1
If M1 = 1 Then Decr Data2
If Data1 = -1 Then Data1 = 0
If Data2 = -1 Then Data2 = 0
Return
Encoderbutton:
Toggle M1
If M1 = 0 Then
Command1 = &B00010011
Command2 = &B00010000
Elseif M1 = 1 Then
Command1 = &B00010000
Command2 = &B00010011
End If
Return
Powerbutton:
nop
Return
End
MFG - Maik
Lesezeichen