danke erstmal für eure antworten.ich hab mal versucht ein fahrprog mit ultraschall-entfernungsangabe zu schreiben.hier mal der code:
'################################################# ##
'I2CANSTEUERUNG.BAS
'Beispiel: zu RN-MotorControl
'
' Demonstriert einige Grundbefehle über den I2C-Bus
' Motorgeschwindigkeit und Motordrehrichtung
'
' Achtung:
' Diese Demo ist mit Bascom Compiler 1.11.7.9 getestet
' Ältere Bascom Versionen sollten geupdatet werden
'
'
' ------------- Hier die üblichen RN-Control Anweisungen --------------
$regfile = "m32def.dat"
$hwstack = 32
$framesize = 32
$swstack = 32
$crystal = 16000000 'Quarzfrequenz
'''''''''''''''''''''''''''i2c'''''''''''''''''''' ''
$lib "i2c_twi.lbx" 'Sorgt dafür das der Hardware I2C vom Chip genutzt wird
Config Scl = Portc.0 'Ports fuer I2C-Bus
Config Sda = Portc.1
Const Slaveid = &H58 'I2C SlaveAdresse von RN-MotorCOntrol
Config Twi = 100000 'I2C Geschwindigkeit immer 100000
'''''''''''''''''''''lcd''''''''''''''''''
Config Lcd = 20 * 4 'wir verwenden ein 4 x 20 Zeichen Display
Cursor On
' Im I/O Mode wird jeder Prozessor Pin einzeln angegeben
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4
'''''''''''''''''''''usm''''''''''''''
Declare Function Srf02_firmware(byval Slaveid As Byte) As Byte
Declare Function Srf02_entfernung(byval Slaveid As Byte) As Integer
Open "COMA.0:9600,8,N,2" For Output As #1 'Port PA0 wird als TX definiert
Open "COMA.1:9600,8,N,2" For Input As #2 'Port PA1 wird als RX definiert
Const Srf02_slaveid = 1 'Standard RS232 Slave ID von SRF02
Dim Entfernung As Integer
' ------------- Ende der üblichen RN-Control Anweisungen --------------
Cls
Locate 1 , 1
Lcd "RN-CONTROL V1.4 "
Locate 2 , 1
Lcd "Fahrprog1"
Wait 2
Do
Wait 3
'Beide Motoren mit Geschwindigkeit 75 anlaufen lassen
I2cstart
I2cwbyte Slaveid
I2cwbyte 35 'Kennung
I2cwbyte 2 'Befehl
I2cwbyte 3 'Motorwahl
I2cwbyte 100 'Geschwindigkeit
I2cstop
Wait 20
'Motor 2 stoppen (Geschwindigkeit=0)
I2cstart
I2cwbyte Slaveid
I2cwbyte 35 'Kennung
I2cwbyte 2 'Befehl
I2cwbyte 3 'Motorwahl
I2cwbyte 0 'Geschwindigkeit
I2cstop bis hierher läuft es -dann ist schluss!
Wait 3
Entfernung = Srf02_entfernung(srf02_slaveid)
Cls
Locate 1 , 1
Lcd "Entfernung:" ; Entfernung ; "cm"
Loop
'------------- Hilfsfunktionen für SRF02 ----------
Function Srf02_firmware(byval Slaveid As Byte) As Byte
Print #1 , Chr(slaveid) ; Chr(93);
Srf02_firmware = Waitkey(#2)
End Function
Function Srf02_entfernung(byval Slaveid As Byte) As Integer
Local Lob As Byte
Local Hib As Byte
Print #1 , Chr(slaveid) ; Chr(84); 'Messvorgang in cm starten
Inputbin #2 , Hib , Lob 'Warte auf Ergebnis
Srf02_entfernung = Makeint(lob , Hib)
End Function
bis zur rot markierten stelle funktonierts es,dannach macht das prog nix mehr.
ich hab bestimmt nen furchtbaren denkfehler darin..find ihn nur nicht.
vielleicht hat ja von euch jemand ne idee....
mfg jörg
Lesezeichen