/// <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); }
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); }
/// <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); }