/// <summary>
        /// Should be tested with 74CH165
        /// </summary>
        /// <param name="nusbio"></param>
        /// <param name="dataPin"></param>
        /// <param name="clockPin"></param>
        /// <param name="bitOrder"></param>
        /// <returns></returns>
        public static int ShiftIn(Nusbio nusbio, NusbioGpio dataPin, NusbioGpio clockPin, int bitOrder)
        {
            int value = 0;
            int i;

            for (i = 0; i < 8; ++i)
            {
                nusbio.GPIOS[clockPin].DigitalWrite(PinState.High);
                if (bitOrder == LSBFIRST)
                {
                    value |= Nusbio.ConvertTo1Or0(nusbio.GPIOS[dataPin].DigitalRead()) << i;
                }
                else
                {
                    value |= Nusbio.ConvertTo1Or0(nusbio.GPIOS[dataPin].DigitalRead()) << (7 - i);
                }
                nusbio.GPIOS[clockPin].DigitalWrite(PinState.Low);
            }
            return(value);
        }
Ejemplo n.º 2
0
        public static int ShiftIn(IDigitalWriteRead dwr, int dataPin, int clockPin, BitOrder bitOrder)
        {
            int value = 0;
            int i;

            for (i = 0; i < 8; ++i)
            {
                dwr.DigitalWrite(clockPin, PinState.High);

                if (bitOrder == BitOrder.LSBFIRST)
                {
                    value |= Nusbio.ConvertTo1Or0(dwr.DigitalRead(dataPin)) << i;
                }
                else
                {
                    value |= Nusbio.ConvertTo1Or0(dwr.DigitalRead(dataPin)) << (7 - i);
                }

                dwr.DigitalWrite(dataPin, PinState.Low);
            }
            return(value);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Read the value of one analog port using software bit banging.
        /// </summary>
        /// <param name="port"></param>
        /// <returns></returns>
        public int ReadSpiSoftware(int port)
        {
            this._spiEngine.Nusbio.SetPinMode(this._spiEngine.MisoGpio, PinMode.Input);
            int adcValue = 0;
            int command  = WinUtil.BitUtil.ParseBinary("B11000000");

            command |= (port) << 3;
            var nusbio = this._spiEngine.Nusbio;

            this._spiEngine.Select();

            for (int i = 7; i >= 4; i--)
            {
                var r = command & (1 << i);
                nusbio[this._spiEngine.MosiGpio].DigitalWrite(r != 0);

                nusbio[this._spiEngine.ClockGpio].DigitalWrite(true);
                nusbio[this._spiEngine.ClockGpio].DigitalWrite(false);
            }

            nusbio[this._spiEngine.ClockGpio].DigitalWrite(true); // ignores 2 null bits
            nusbio[this._spiEngine.ClockGpio].DigitalWrite(false);

            nusbio[this._spiEngine.ClockGpio].DigitalWrite(true);
            nusbio[this._spiEngine.ClockGpio].DigitalWrite(false);

            for (var i = 10; i > 0; i--)  // Read bits from adc since it is ADC is 10 bits

            {
                adcValue += Nusbio.ConvertTo1Or0(nusbio[this._spiEngine.MisoGpio].DigitalRead()) << i;

                nusbio[this._spiEngine.ClockGpio].DigitalWrite(true);
                nusbio[this._spiEngine.ClockGpio].DigitalWrite(false);
            }
            this._spiEngine.Unselect();
            return(adcValue);
        }