public static EEPROM_BUFFER ReadPageOptimized_SendReadData (GpioSequence spiSeq, int startByteToSkip, int byteToRead, SPIEngine spi) { var nusbio = spi.Nusbio; var eb = new EEPROM_BUFFER(); if (spiSeq.Send(nusbio)) { var inBuffer = spiSeq.GetInputBuffer(nusbio).ToList(); if (startByteToSkip == 0) { inBuffer.RemoveAt(0); // Extra byte from somewhere } if (startByteToSkip > 0) { var offSetToSkip = SPIEngine.BYTES_PER_BIT * 8 * startByteToSkip; // Skip the first 3 bytes, bitbanging the command and 16 bit address inBuffer = inBuffer.GetRange(offSetToSkip, inBuffer.Count - offSetToSkip); } var buffer = __spi_buf_r(byteToRead, inBuffer, spi); for (var i = 0; i < startByteToSkip; i++) // Remove the last startByteToSkip because they were not yet sent { buffer.RemoveAt(buffer.Count - 1); } eb.Buffer = buffer.ToArray(); eb.Succeeded = true; } return(eb); }
public MCP41X1_Base(Nusbio nusbio, NusbioGpio selectGpio, NusbioGpio mosiGpio, NusbioGpio misoGpio, NusbioGpio clockGpio, NusbioGpio resetGpio = NusbioGpio.None, bool debug = false) { this._spiEngine = new SPIEngine(nusbio, selectGpio, mosiGpio, misoGpio, clockGpio, resetGpio, debug); this.Voltage = Nusbio.Voltage; // Nusbio is a 5 volt device this.MaxDigitalValue = 128; this.MinDigitalValue = 0; }
public TC77(Nusbio nusbio, NusbioGpio clockGpio, NusbioGpio mosiGpio, NusbioGpio misoGpio, NusbioGpio selectGpio, bool debug = false) : base(nusbio) { this._spi = new SPIEngine(nusbio, selectGpio, mosiGpio, misoGpio, clockGpio, NusbioGpio.None, false); }
internal static List <byte> __spi_buf_r(int s, List <byte> outputBuf, SPIEngine spi) { try { int j = 0; int pos = 0; List <byte> b = new List <byte>(); var misoBit = (spi.Nusbio[spi.MisoGpio] as Gpio).Bit; j = 1; for (pos = 0; pos < s; pos++) { Byte v = 0; Byte bit; if (spi.BitOrder == BitOrder.MSBFIRST) { for (bit = (1 << 7); bit > 0; bit >>= 1) { if (j < outputBuf.Count) { if (WinUtil.BitUtil.IsSet(outputBuf[j], misoBit)) //if (buf[j++] & PIN_FMISO) { v |= bit; } } j += 2; } } else { throw new NotImplementedException(); } b.Add(v); } return(b); } catch (System.Exception ex) { Debug.WriteLine(ex.ToString()); if (Debugger.IsAttached) { Debugger.Break(); } return(null); } }
/* * Create a new controler * Params : * dataPin pin on the Arduino where data gets shifted out * clockPin pin for the clock * csPin pin for selecting the device * deviceCount maximum number of devices that can be controled */ public MAX7219(Nusbio nusbio, NusbioGpio selectGpio, NusbioGpio mosiGpio, NusbioGpio clockGpio, int deviceCount = 1, Int16 width = 8, Int16 height = 8) : base(width, height) { this._spiEngine = new SPIEngine(nusbio, selectGpio, mosiGpio, NusbioGpio.None, clockGpio); this._nusbio = nusbio; if (deviceCount <= 0 || deviceCount > MAX_MAX7219_CHAINABLE) { deviceCount = MAX_MAX7219_CHAINABLE; } _deviceCount = deviceCount; for (var i = 0; i < 64; i++) { _pixels[i] = 0x00; } for (var i = 0; i < _deviceCount; i++) { var r1 = SpiTransfer(i, OP_DISPLAYTEST, 0); //scanlimit is set to max on startup // The scan-limit register sets how many digits are displayed, from 1 to 8. T // Originally the MAX7219 is for Display 7-Segment Display from 1 to 8. // The scan limit defines how many 7-Segment are contolled. // Each 7-Segments require 8 LEDs time 8, it is 8 x 8 = 64. // Since we want to handle most of the time 8x8 LEDs we need to set it to // the max. var r2 = SetScanLimit(i, MAX_SCAN_LIMIT - 1); // decode is done in source var r3 = SpiTransfer(i, OP_DECODEMODE, 0); // No decode mode, see datasheet page 7 Clear(i, refresh: true); //we go into Shutdown-mode on startup Shutdown(true, i); } }
public MCP300X_Base(int maxADConverter, Nusbio nusbio, NusbioGpio selectGpio, NusbioGpio mosiGpio, NusbioGpio misoGpio, NusbioGpio clockGpio) { this._spiEngine = new SPIEngine(nusbio, selectGpio, mosiGpio, misoGpio, clockGpio); this.MaxAdConverterConverter = maxADConverter; }