Geändert von PICture (11.12.2011 um 18:51 Uhr)
MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!
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
Mach mal ein I2Cinit vor dem Do.
Damit initialisierst du das I2C Interface des Controllers. Und dahinter noch ein Waitms 100. Ich hatte letzte Woche auch das Problem das der I2C nicht richtig lief, weil er nicht initialisiert wurde.
Was auch sein kann ist, wenn du einen abgeschalteten I2C Baustein am Bus hast dann stört er den Bus.......das ist mir auch schon bei einem SRF10 und einem SD21 passiert.
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
hallo Kampi.
hast recht ,ich habs I2C init vergessen.hab es geändert.
das programm startet den I2C und damit die motoren ,soweit sogut- nur den Ultraschallsensor danach und dessen ausgabe,der teil startet nicht!
fehlt da eine anweisung??
mfg jörg
Bis wohin läuft das Programm den? Mach das mal mit Print-Befehlen und schau wo das Programm stehen bleibt.
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
hab es im code oben rot markiert wieweit es läuft(bis hierher läuft es -dann ist schluss!) .
hmm....mit dem print befehl geb ichs doch aufm terminal aus-oder lieg ich da falsch? ich nutze aber das lcd-display als ausgabe!
das zeigt mir "RN-Control V1.4 " und "fahrprog" an.das bleibt dann auch auf dem lcd display stehen und die motoren laufen an.das ist wie gesagt alles in ordnung so.nachdem dann die 20 sec oder so rum sind in denen die motoren laufen sollen,soll er über RS232 den Ultraschallsensor abfragen bzw auf dem lcd display die entfernung ausgeben- das aber macht er nicht.....
mfg jörg
So ich hab nochmal in der Doku geschaut. In der Doku vom SRF02 steht folgendes Programm:
Dort verwenden sie die Adresse 0. Ich nehme nicht an das du die Adresse geändert hast? (siehst du an dem Blinken der LED nach dem Einschalten).Code:Declare Function Srf02_firmware(byval Slaveid As Byte) As Byte Declare Function Srf02_entfernung(byval Slaveid As Byte) As Integer $regfile = "m32def.dat" $framesize = 42 $swstack = 42 $hwstack = 42 $crystal = 16000000 'Quarzfrequenz $baud = 9600 'Normale Hardware RS232 (hier hängt PC dran) 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 = 0 'Standard RS232 Slave ID von SRF02 Dim Entfernung As Integer Wait 3 'Warte 3 Sekunden Print "SRF02 RS232 Testprogramm von robotikhardware.de" Print "SRF02 Ultraschall-Firmware Version:" ; Srf02_firmware(srf02_slaveid) Print "PA0 wird TX und PA1 wird als RX genutzt" V = 1 Do Entfernung = Srf02_entfernung(srf02_slaveid) Print "Entfernung:" ; Entfernung ; "cm" Wait 1 Loop End '------------- 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
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Lesezeichen