Du meinst also dieses Funktion:
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.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
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







Zitieren

Lesezeichen