Hallo
Ich verfolge diesen Thread nun schon fast von Anfang an und habe ein ähnliches Problem. Ich möchte ein VB.NET 2005 (Version 8.0.5) und Framework 2.0, Program schreiben, das einen I2C-Bus über
RN-I2C-RS232 Adapter ansteuert. Den VB Code kann man ja nach einigen wenigen Änderungen unverändert nutzen,(ja ich weiß kein guter Stil.....) nur die letzten Functionen die SDL und SDA lesen und setzten bereiten mir Kopfzerbrechen.
Die erste test Function für sieht so aus.
Nebenbei, es hat etwas gedauert, eine brauchbare Erklärung zu finden, die einem den Wechsel von MSComm.OCX auf die neuen Framework Funktionen erklären.Code:Imports System.IO Public Class I2C Private Ob_Port As IO.Ports.SerialPort Private Int_Delay As Integer = 500 Public Sub New() Ob_Port = New Ports.SerialPort("COM1") Try Ob_Port.Open() S_I2C_INIT() Catch ex As Exception MsgBox(ex.Message) End Try End Sub Public Sub S_I2C_INIT() S_I2C_STOP() S_Delay(Int_Delay) End Sub Public Function F_I2C_START() As Boolean Do Loop Until (get_sda() = True And get_scl() = True) set_sda(False) S_Delay(Int_Delay) set_scl(False) S_Delay(Int_Delay) Return True End Function Public Sub S_I2C_STOP() set_sda(False) set_scl(True) Do If get_scl() = True Then Exit Do Loop Until get_scl() = True set_sda(True) End Sub Public Sub S_I2C_ACK(ByVal Boo_ACK As Boolean) If Boo_ACK = True Then set_scl(False) S_Pullse() Else set_sda(True) S_Pullse() S_Delay(Int_Delay) End If End Sub Public Sub i2c_SendByte(ByVal wert As Byte) Dim i As Integer Dim bitmask As Byte bitmask = 128 For i = 1 To 8 set_sda(0) If (wert And bitmask) > 0 Then set_sda(1) Else set_sda(0) End If bitmask = bitmask / 2 S_Delay(Int_Delay) S_Pullse() Next i S_Delay(Int_Delay) End Sub Public Function i2c_EmpfangeByte() As Byte Dim i As Integer Dim bitmask As Byte set_sda(1) i2c_EmpfangeByte = 0 bitmask = 128 For i = 1 To 8 set_scl(1) empanga: If get_scl() = 0 Then GoTo empanga If get_sda() = True Then i2c_EmpfangeByte = i2c_EmpfangeByte Or bitmask End If bitmask = bitmask / 2 set_scl(0) S_Delay(Int_Delay) Next i End Function Public Function S_Pullse() As Boolean set_scl(True) Dim Timeoute As Integer = 0 Do If Timeoute >= 999999999 Then Return False Exit Function Else Timeoute = Timeoute + 1 End If If get_scl() = True Then Exit Do Loop Until get_scl() = True set_scl(False) Return True End Function Private Sub S_Delay(ByVal int_Count As Integer) Dim int_Lauf As Integer For int_Lauf = 0 To int_Count Next End Sub Public Sub set_sda(ByVal Boo_zustand As Boolean) Ob_Port.DtrEnable = Boo_zustand End Sub Public Sub set_scl(ByVal Boo_zustand As Boolean) Ob_Port.RtsEnable = Boo_zustand End Sub Public Function get_scl() As Boolean Return Ob_Port.CtsHolding End Function Public Function get_sda() As Boolean Return Ob_Port.DsrHolding End Function End Class
Ich öffne also den Port mit
und es geht um die FunktionenCode:Private Ob_Port As IO.Ports.SerialPort Ob_Port = New Ports.SerialPort("COM1") Ob_Port.Open()
Aber mir gelingt es nicht SDA oder SCL auf HIGH zu setzten, hat irgendjemand so etwas schon mal gemacht oder hat ne Idee???Code:Public Sub set_sda(ByVal Boo_zustand As Boolean) Ob_Port.DtrEnable = Boo_zustand End Sub Public Sub set_scl(ByVal Boo_zustand As Boolean) Ob_Port.RtsEnable = Boo_zustand End Sub Public Function get_scl() As Boolean Return Ob_Port.CtsHolding End Function Public Function get_sda() As Boolean Return Ob_Port.DsrHolding End Function
Schon mal Danke!!!!







Zitieren

Lesezeichen