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.

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
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.

Ich öffne also den Port mit
Code:
Private Ob_Port As IO.Ports.SerialPort
        Ob_Port = New Ports.SerialPort("COM1")
        Ob_Port.Open()
und es geht um die Funktionen
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
Aber mir gelingt es nicht SDA oder SCL auf HIGH zu setzten, hat irgendjemand so etwas schon mal gemacht oder hat ne Idee???

Schon mal Danke!!!!