I2C-Schnittstelle auslesen

Gast #1136999
Lesenswert?

Hi,

ich möchte einen Ultraschallsensor (SRF10), der über eine 
I2C-Schnittstelle Daten liefert, auslesen. Der Code ist schon fertig und 
es läuft alles. Ich möchte aber gerne mal verstehen, was da genau 
passiert.

Kann mir jemand einmal ganz knapp sagen, was im folgenden Code genau vor 
sich geht? Besonders die Funktion Makeint() ist mir noch sehr kryptisch.
1
I2C_Start()
2
I2C_Write(SlaveIdRead)
3
MSB = I2C_Read_ACK()
4
LSB = I2C_Read_NACK()
5
I2C_Stop()
6

7
Entfernung = Makeint(LSB , MSB) 
8

9
Return Entfernung
10

11
End Sub
12

13
Sub Makeint(A As Byte , B As Byte) As Word
14
Dim tmp As Word
15
tmp = A 
16
tmp << 7 
17
tmp = tmp + B 
18
Return tmp
19
End Sub

MfG
Basti
Gast #1137036
Lesenswert?

wenn du aus "tmp << 7" noch "tmp << 8" machst, wird's noch richtiger.

da ist auch irgendwo ein bytedreher drin.

Du liest ja MSB (=most significant byte) und LSB (=least significant 
byte) vom I2C Bus.

Makeint() setzt die beiden bytes dann zu einem 16 bit-Wort zusammen.

Also MSB * 256 + LSB

*256 kann man rechenzeitsparender durch 8x linksshiften (<<8) erreichen.

Da MSB in b landet und LSB in a, sollte die Funktion eigentlich heissen

wort = b<<8 + a

insofern stimmt da was mit deinem code nicht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren