PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fehler bei Entfernungsmessung



[IN]Crusher
05.04.2006, 00:16
Hallo!

Ich bin das Programmbeispiel im RN-Wissensbereich zum auslesen eines srf08 durchgegangen...

ich denke mal, dass ich alles so abgetippt habe, dass es passen sollte....

er gibt mir aber immer in zeile 70


I2cwbyte Sf08_adr_0 + 1

Errors aus: Invalid datatype + variable not dimensioned

hier ist erschtma der programmcode von mir:


'################################################# ##############################
'# #
'# entfernung_1.bas #
'# #
'# Aufgabe: Messen von Entfernungen via SRF08 #
'# #
'################################################# ##############################



$regfile = "m32def.dat"

$crystal = 16000000
$baud = 9600

Const Sf08_adr_0 = &HE0 ' I2C Adresse
Const Sf08_c_range = 100 ' Reichweite
Const Sf08_c_gain = 1 'Empfindlichkeit

Dim Lsb As Byte
Dim Msb As Byte
Dim Ival As Word


'################################################# ##############################
'# Setzten des Range Wertes #
'################################################# ##############################

i2cstart
I2cwbyte Sf08_adr_0
I2cwbyte 2
I2cwbyte Sf08_c_range
I2cstop



'################################################# ##############################
'# Setzten des Gain Wertes #
'################################################# ##############################

i2cstart
I2cwbyte Sf08_adr_0
I2cwbyte 1
I2cwbyte Sf08_c_gain
I2cstop


'################################################# ##############################
'# Messung auslösen #
'################################################# ##############################

i2cstart
I2cwbyte Sf08_adr_0
I2cwbyte 0
I2cwbyte 81
Waitms 70


'################################################# ##############################
'# Ergebnis abholen #
'################################################# ##############################

I2cstart
I2cwbyte Sf08_adr_0
I2cwbyte 2

I2cstart
I2cwbyte Sf08_adr_0 + 1
I2crbyte Msb , Ack
I2crbyte Lsb , Nack
I2cstop

Ival = Makeint(lsb , Msb)


'################################################# ##############################
'# Ergebnis abholen #
'################################################# ##############################


Print "Die Entfernung beträgt" Ival "Meter."




und dann hab ich noch ne frage:

was ist der unterschied zwischen ack & nack?


MfG Jürgen

hrei
05.04.2006, 00:48
Crusher]Hallo!

Ich bin das Programmbeispiel im RN-Wissensbereich zum auslesen eines srf08 durchgegangen...

ich denke mal, dass ich alles so abgetippt habe, dass es passen sollte....

er gibt mir aber immer in zeile 70
I2cwbyte Sf08_adr_0 + 1


Tja, da isse wieder, die Bascom Rechenschwäche. Was habe ich da schon geflucht :-(.
Leider akzeptiert Bascom die berechnete Übergabe der Deviceadresse nicht.
Man muss es also umständlich entweder so lösen:

Sf08_adr_0_read = Sf0ß_adr_0 + 1
I2cwbyte Sf08_adr_0 _read

oder gleich eine Konstante mit der Readadresse definieren.



was ist der unterschied zwischen ack & nack?


Ack sagt dem Slave (in diesem Fall) es werden noch mehr Daten gelesen, Nack erzählt ihm, daß dies das letzte benötigte Byte war.

Grüße
Henrik