Forum: Mikrocontroller und Digitale Elektronik I2C-Schnittstelle auslesen


von Basti (Gast)


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

von ROFL (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.