mirror of
https://github.com/tinygo-org/drivers.git
synced 2026-08-02 22:17:49 +00:00
156d6e7c9c
Signed-off-by: deadprogram <ron@hybridgroup.com>
62 lines
1.9 KiB
Go
62 lines
1.9 KiB
Go
// Connects to SPI1 on a RP2040 (Pico)
|
|
package main
|
|
|
|
import (
|
|
"machine"
|
|
|
|
"tinygo.org/x/drivers/tmc5160"
|
|
)
|
|
|
|
func main() {
|
|
// Step 1. Setup your protocol. SPI setup shown below
|
|
spi := machine.SPI1
|
|
spi.Configure(machine.SPIConfig{
|
|
Frequency: 12000000, // Upto 12 MHZ is pretty stable. Reduce to 5 or 6 Mhz if you are experiencing issues
|
|
Mode: 3,
|
|
LSBFirst: false,
|
|
})
|
|
// Step 2. Set up all associated Pins
|
|
csPin0 := machine.GPIO13
|
|
csPin0.Configure(machine.PinConfig{Mode: machine.PinOutput})
|
|
enn0 := machine.GPIO18
|
|
enn0.Configure(machine.PinConfig{Mode: machine.PinOutput})
|
|
|
|
// csPins is a map of all chip select pins in a multi driver setup.
|
|
//Only one pin csPin0 mapped to "0"is shown in this example, but add more mappings as required
|
|
csPins := map[uint8]machine.Pin{0: csPin0}
|
|
//bind csPin to driverAdddress
|
|
driverAddress := uint8(0) // Let's assume we are working with driver at address 0x01
|
|
// Step 3. Bind the communication interface to the protocol
|
|
comm := tmc5160.NewSPIComm(spi, csPins)
|
|
// Step 4. Define your stepper like this below
|
|
//stepper := tmc5160.NewStepper(angle , gearRatio vSupply rCoil , lCoil , iPeak , rSense , mSteps, fclk )
|
|
stepper := tmc5160.NewDefaultStepper() // Default Stepper should be used only for testing.
|
|
// Step 5. Instantiate your driver
|
|
driver := tmc5160.NewDriver(
|
|
comm,
|
|
driverAddress,
|
|
enn0,
|
|
stepper)
|
|
|
|
// Setting and getting mode
|
|
rampMode := tmc5160.NewRAMPMODE(comm, driverAddress)
|
|
err := rampMode.SetMode(tmc5160.PositioningMode)
|
|
if err != nil {
|
|
return
|
|
}
|
|
mode, err := rampMode.GetMode()
|
|
if err != nil {
|
|
println("Error getting mode:", err)
|
|
} else {
|
|
println("Current Mode:", mode)
|
|
}
|
|
|
|
// Read GCONF register
|
|
GCONF := tmc5160.NewGCONF()
|
|
gconfVal, err := driver.ReadRegister(tmc5160.GCONF)
|
|
// Uppack the register to get all the bits and bytes of the register
|
|
GCONF.Unpack(gconfVal)
|
|
//E.g. MultiStepFlit is retrieved from the GCONF register
|
|
println("GCONF:MultiStepFlit:", GCONF.MultistepFilt)
|
|
}
|