I2C Hardware - MCP23017 Ansteuerung

  • VB.NET
  • .NET (FX) 4.5–4.8

    I2C Hardware - MCP23017 Ansteuerung

    Hallo,
    ich hatte vor einiger Zeit eine Steuerung auf einem Raspi geschrieben. Nutze den I2C Bus zum Ansteuern von MCP23017.
    Dafür hatte ich folgendes Modul eingesetzt:

    Python-Quellcode

    1. #!/usr/bin/python
    2. # -*- coding: utf-8 -*-
    3. import smbus
    4.  
    5.  
    6. class mcp23017:
    7. def __init__(self,i2cbus=0,device=0x20):
    8. self.device=device
    9. self.bus = smbus.SMBus(i2cbus)
    10. self.gpioa = {"register":0x12,"dirreg":0x00,"pureg":0x0c}
    11. self.gpiob = {"register":0x13,"dirreg":0x01,"pureg":0x0d}
    12.  
    13. class pin:
    14. def __init__(self,ioexp,register="gpioa",bit=0):
    15. self.__ioexp=ioexp
    16. self.__register=register
    17. if self.__register=="gpioa":
    18. self.__ioreg=self.__ioexp.gpioa
    19. else:
    20. self.__ioreg=self.__ioexp.gpiob
    21. self.__register=self.__ioreg["register"]
    22. self.__dirreg=self.__ioreg["dirreg"]
    23. self.__pureg=self.__ioreg["pureg"]
    24. self.__bit=bit
    25. #default to tri state
    26. self.setx()
    27. def getbit():
    28. return self.__bit
    29. def getregister():
    30. return self.__register
    31. def getdirreg():
    32. return self.__dirreg
    33. def getpureg():
    34. return self.__pureg
    35. def setbit(newbit):
    36. self.__bit=newbit
    37. def setregister(newregister):
    38. self.__register=newregister
    39. def setdirreg(newdirreg):
    40. self.__dirreg=newdirreg
    41. def setpureg(newpureg):
    42. self.__pureg=newpureg
    43. def enable(self):
    44. self.disable_bit(self.__dirreg,self.__bit)
    45. self.enable_bit(self.__register,self.__bit)
    46. #print self.value
    47. def disable(self):
    48. self.disable_bit(self.__dirreg,self.__bit)
    49. self.disable_bit(self.__register,self.__bit)
    50. def setinput(self):
    51. self.enable_bit(self.__dirreg,self.__bit)
    52. self.enable_bit(self.__pureg,self.__bit)
    53. #Tri state mode, input and pullup resistor off
    54. def setx(self):
    55. self.enable_bit(self.__dirreg,self.__bit)
    56. self.disable_bit(self.__pureg,self.__bit)
    57. def value(self):
    58. try:
    59. returnvalue=self.__ioexp.bus.read_byte_data(self.__ioexp.device,self.__register) & 2**self.__bit
    60. except:
    61. print("Error reading bus")
    62. return 3
    63. if returnvalue==0:
    64. return 0
    65. else:
    66. return 1
    67. def enable_bit(self,register,bit):
    68. try:
    69. value_old = self.__ioexp.bus.read_byte_data(self.__ioexp.device,register)
    70. newvalue = value_old | 1<<bit
    71. except:
    72. print("Unable to read bus")
    73. try:
    74. self.__ioexp.bus.write_byte_data(self.__ioexp.device, register, newvalue)
    75. except:
    76. print("Unable to write bus")
    77. def disable_bit(self,register,bit):
    78. try:
    79. value_old = self.__ioexp.bus.read_byte_data(self.__ioexp.device, register)
    80. newvalue = value_old & ~(1<<bit)
    81. except:
    82. print("Unable to read bus")
    83. try:
    84. self.__ioexp.bus.write_byte_data(self.__ioexp.device, register, newvalue)
    85. except:
    86. print("Unable to read bus")


    Das Modul hat mir viel Arbeit in de Ablaufsteuerung abgenommen.

    Gibt es so was ähnliches für VB.net?
    Was gibt es für günstige "I2C 2 PC" Hardware, welche ggf. auch eine VB.NET API mitbringen?

    Gruß Tommi