User Tools

Site Tools


mmbasic_original:driver_for_microchip_mcp4xxx_digital_potentiometers

Driver for Microchip MCP4xxx digital potentiometers

This module is part of the original MMBasic library. It is reproduced here with kind permission of Hugh Buckle and Geoff Graham. Be aware it may reference functionality which has changed or is deprecated in the latest versions of MMBasic.

' setup the SPI ports for this chip
MCPSetup 1, 2, 3, 4

' demonstration of ramping from one end of the pot to the other
For i = 0 To 100
  MCPSet 0, i
  Pause 100
Next i
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' driver for the Microchip MCP4xxx series of digital potentiometers
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

' initialise the SPI interface
Sub MCPSetup(mosi, miso, clk, ce)
  _mosi = mosi
  _miso = miso
  _clk = clk
  _ce = ce
  SetPin _mosi, 8                 ' set MOSI pin as an output
  SetPin _miso, 2                 ' set MISO pin as a digital input
  Pin(_clk) = 1 : SetPin _clk, 8  ' set CLK pin high then set it as an output
  Pin(_ce) = 1 : SetPin _ce, 8    ' set CE pin high then set it as an output
End Sub


' set the potentiometer to a percentage of full scale
' pot = 0   set potentiometer 0
' pot = 1   set potentiometer 1 (not on all chips)
' pot = 2   the default power up setting for potentiometer 0
' pot = 3   the default power up setting for potentiometer 1
Sub MCPSet(pot, percent)
  Local junk, r, v
  r = pot * (2 ^ 14)              ' the bits to select the correct register
  v = (256 * percent) \ 100       ' the bits to set the pot
  If percent = 100 Then v = &H100 ' full scale
  Pin(_ce) = 0                    ' select the slave
  junk = SPI(_miso, _mosi, _clk, r + v, m, 3, 16)
  If pot > 1 Then                 ' if we are setting the eeprom
    Pin(_ce) = 1                  ' deselect
    Pause 15                      ' wait for the write
    Pin(_ce) = 0                  ' reselect
  EndIf
  If (SPI(_miso, _mosi, _clk, r + &HC00, m, 3, 16) And &H1FF) <> v Then
    Error "Device not responding"
  EndIf
  Pin(_ce) = 1                    ' deselect the slave
End Sub
mmbasic_original/driver_for_microchip_mcp4xxx_digital_potentiometers.txt · Last modified: 2024/01/19 09:39 by 127.0.0.1