Du meinst also dieses Funktion:
Code:
Sub i2c_SendByte(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
delay
pulse
Next i
delay
pulse
delay
End Sub
Das letzte Pulse dient eigentlich zum Abruf des sogenannten Acknowledge-Bits (kurz immer Ack genannt). Wenn der angewählte Slave die Daten richtig empfangen hat, dann zieht er kurz die SDA Leitung bei diesem Pulse auf Low. Dies kann dann hier im Master als Bestätigung aufgefasst werden, das ein Slave das Byte empfangen hat.
In meinem Beispiel/Treiber wird dieses Ack Bit nicht ausgewertet, daher nur der einfache Pulse Befehl. Es gibt viele Treiber die das Ack-Bit nicht auswerten, so zum Beispiel auch Betriebsystem-Routinen in der C-Control.
Wer es richtig auswerten möchte, kann also vorher die SDA-Leitung auf High legen und dann prüfen. Notwendig ist es nicht unbedingt, manchmal ist es sogar Nachteilig wenn wegen einem nicht angekoppelten Slave Fehler beim Senden gemeldet werden
Aber zum einfachen Anwenden der implementierten I2C-Funktionen ist dieses interne Wissen nicht wichtig - das sei nur gesagt um Einsteiger nicht zu verunsichern wenn sie mal einen I2C Baustein ansteuern wollen.
Gruß Frank
Lesezeichen