Exemple #1
0
        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);
        }
Exemple #2
0
 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;
 }
Exemple #3
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);
 }
Exemple #4
0
        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);
            }
        }
Exemple #6
0
        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;
        }
Exemple #7
0
 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;
 }