private static void WriteSequentialBytes(Mcp23xxx mcp23xxx) { // This assumes the device is in default Sequential Operation mode. Console.WriteLine("Write Sequential Bytes"); using (mcp23xxx) { void SequentialRead(Mcp23xxx mcp) { byte[] dataRead = mcp23xxx.Read(0, 2, Port.PortA, Bank.Bank0); Console.WriteLine($"\tIODIRA: 0x{dataRead[0]:X2}"); Console.WriteLine($"\tIODIRB: 0x{dataRead[1]:X2}"); } Console.WriteLine("Before Write"); SequentialRead(mcp23xxx); byte[] dataWrite = new byte[] { 0x12, 0x34 }; mcp23xxx.Write(0, dataWrite, Port.PortA, Bank.Bank0); Console.WriteLine("After Write"); SequentialRead(mcp23xxx); dataWrite = new byte[] { 0xFF, 0xFF }; mcp23xxx.Write(0, dataWrite, Port.PortA, Bank.Bank0); Console.WriteLine("After Writing Again"); SequentialRead(mcp23xxx); } }
private static void WriteIndividualByte(Mcp23xxx mcp23xxx) { // This assumes the device is in default Sequential Operation mode. Console.WriteLine("Write Individual Byte"); using (mcp23xxx) { Register.Address address = Register.Address.IODIR; void IndividualRead(Mcp23xxx mcp, Register.Address addressToRead) { byte[] dataRead = mcp23xxx.Read(addressToRead, 1, Port.PortB, Bank.Bank0); Console.WriteLine($"\tIODIRB: 0x{dataRead[0]:X2}"); } Console.WriteLine("Before Write"); IndividualRead(mcp23xxx, address); byte[] dataWrite = new byte[] { 0x12 }; mcp23xxx.Write(address, dataWrite, Port.PortB, Bank.Bank0); Console.WriteLine("After Write"); IndividualRead(mcp23xxx, address); dataWrite = new byte[] { 0xFF }; mcp23xxx.Write(address, dataWrite, Port.PortB, Bank.Bank0); Console.WriteLine("After Writing Again"); IndividualRead(mcp23xxx, address); } }
public void CacheInvalidatesWhenReset(TestDevice testDevice) { Mcp23xxx device = testDevice.Device; // Check the output latches after enabling and setting // different bits. device.Enable(); device.Write(0, PinValue.High); Assert.Equal(1, device.ReadByte(Register.OLAT)); device.Write(1, PinValue.High); Assert.Equal(3, device.ReadByte(Register.OLAT)); // Flush OLAT device.WriteByte(Register.OLAT, 0x00); Assert.Equal(0, device.ReadByte(Register.OLAT)); // Now setting the next bit will pick back up our cached 3 device.Write(2, PinValue.High); Assert.Equal(7, device.ReadByte(Register.OLAT)); // Re-enabling will reset the cache device.WriteByte(Register.OLAT, 0x00); device.Disable(); device.Enable(); device.Write(3, PinValue.High); Assert.Equal(8, device.ReadByte(Register.OLAT)); device.WriteByte(Register.OLAT, 0x02); device.Disable(); device.Enable(); device.Write(0, PinValue.High); Assert.Equal(3, device.ReadByte(Register.OLAT)); }
public void Write_GoodPin(TestDevice testDevice) { Mcp23xxx device = testDevice.Device; for (int pin = 0; pin < testDevice.Device.PinCount; pin++) { bool first = pin < 8; device.Write(pin, PinValue.High); byte expected = (byte)(1 << (first ? pin : pin - 8)); Assert.Equal(expected, first ? device.ReadByte(Register.OLAT) : ((Mcp23x1x)device).ReadByte(Register.OLAT, Port.PortB)); device.Write(pin, PinValue.Low); Assert.Equal(0, first ? device.ReadByte(Register.OLAT) : ((Mcp23x1x)device).ReadByte(Register.OLAT, Port.PortB)); } }
private static void WriteBits(Mcp23xxx mcp23xxx) { Console.WriteLine("Write Bits"); // Make port output and set all pins. mcp23xxx.Write(Register.Address.IODIR, 0x00, Port.PortB, Bank.Bank0); mcp23xxx.Write(Register.Address.GPIO, 0xFF, Port.PortB, Bank.Bank0); using (mcp23xxx) { for (int bitNumber = 0; bitNumber < 8; bitNumber++) { mcp23xxx.WriteBit(Register.Address.GPIO, bitNumber, false, Port.PortB, Bank.Bank0); Console.WriteLine($"Bit {bitNumber} low"); Thread.Sleep(500); mcp23xxx.WriteBit(Register.Address.GPIO, bitNumber, true, Port.PortB, Bank.Bank0); Console.WriteLine($"Bit {bitNumber} high"); Thread.Sleep(500); } } }
private static void ReadSwitchesWriteLeds(Mcp23xxx mcp23xxx) { Console.WriteLine("Read Switches & Write LEDs"); using (mcp23xxx) { // Input direction for switches. mcp23xxx.Write(Register.Address.IODIR, 0b1111_1111, Port.PortA, Bank.Bank0); // Output direction for LEDs. mcp23xxx.Write(Register.Address.IODIR, 0b0000_0000, Port.PortB, Bank.Bank0); while (true) { // Read switches. byte data = mcp23xxx.Read(Register.Address.GPIO, Port.PortA, Bank.Bank0); // Write data to LEDs. mcp23xxx.Write(Register.Address.GPIO, data, Port.PortB, Bank.Bank0); Console.WriteLine(data); Thread.Sleep(500); } } }