Ich hab gestern bzw. heute Nacht noch weiter verschiedene Arten versucht:
(Das Servo 1 soll auf den Wert 200 gesetzt werden)
Wenn ich am Rn-Keylcd die 1 drücke bekomm ich wunderbar meine Spannung angezeigt... aber wenn ich die 2 drücke (also "Write_servo") braucht er ca. 20 sek um diesen Sub-Teil zu bearbeitenCode:$regfile = "m32def.dat" $hwstack = 32 $framesize = 32 $swstack = 32 $crystal = 16000000 'Quarzfrequenz $baud = 9600 Porta.7 = 1 'Pullup Widerstand ein '+++++++++++++++++++++++++++++++++++++++++++++++ Dim Ton As Integer Dim I As Integer Dim I2 As Integer Dim Taste As Word Dim Menuetext As String * 1 Dim Volt As Single Dim Servonr As String * 1 Dim Servopos As String * 1 Const Ref = 5 / 1023 'Für Batteriespannungsberechnung Const Servoid = &HC2 'I2C Servokarte-SlaveAdresse '+++++++++++++++++++++++++++++++++++++++++++++++ 'SUB-Programmteile: Declare Sub Write_servo(byval Adres As Byte , Byval Value As Byte) Declare Sub Batteriespannung() Declare Sub Hauptmenue() Declare Sub Rnlcd_cursor(byval Spalte As Byte , Byval Zeile As Byte) Declare Sub Rnlcd_clr() Declare Function Rnlcd_getscan() As Word Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung Waitms 1 'Warte bis LCD bereit Print Chr(27) ; Chr(122) ; Chr(0); 'Autosend deaktivieren Print Chr(27) ; Chr(119) ; Chr(1); 'Tasten Scanmodus aktivieren Rnlcd_clr 'Display löschen Print "Halloeoeole!" Print "Wenn dieser Text" Print "erscheint, dann" 'Anfangstext Print "klappt RS232 Modi" ; Sound Portd.7 , 400 , 450 'BEEP Sound Portd.7 , 400 , 250 'BEEP Sound Portd.7 , 400 , 450 'BEEP Waitms 200 Do If I > 30 Then I = 1 I2 = I2 + 1 Call Hauptmenue() Print "###############" Print "Bitte auswählen:" Print Menuetext Print "###############" ; End If I = I + 1 Taste = Rnlcd_getscan() If Taste <> 0 Then Select Case Taste Case 1 Call Batteriespannung Case 2 Call Write_servo(63 , 200) Case 4 Call Write_servo(63 , 20) End Select Sound Portd.7 , 400 , 500 End If Waitms 100 Loop End Sub Write_servo(byval Adres As Byte , Byval Value As Byte) I2cinit I2cstart 'start I2cwbyte Servoid 'slave address I2cwbyte Adres 'Servonummer I2cwbyte Value 'Servo Position I2cstop 'stop End Sub Sub Batteriespannung() I = 0 I2 = 1 Local W As Word Start Adc W = Getadc(6) Volt = W * Ref Volt = Volt * 5.2941 Gosub Rnlcd_clr Print "" Print "Logik-Spannung: " Print Volt ; " Volt " Select Case Volt Case 0 To 6.8 Print "schlecht<+------->OK"; Sound Portd.7 , 400 , 500 Sound Portd.7 , 400 , 500 Sound Portd.7 , 400 , 500 Sound Portd.7 , 400 , 500 Case 6.8 To 7.5 Print "schlecht<-+------>OK"; Sound Portd.7 , 400 , 500 Sound Portd.7 , 400 , 500 Case 7.5 To 8.2 Print "schlecht<--+----->OK"; Case 8.2 To 9 Print "schlecht<---+---->OK"; Case 9 To 9.7 Print "schlecht<----+--->OK"; Case 9.7 To 10.4 Print "schlecht<-----+-->OK"; Case 10.4 To 11.1 Print "schlecht<------+->OK"; Case 11.1 To 18 Print "schlecht<-------+>OK"; End Select End Sub Sub Hauptmenue() If I2 > 3 Then I2 = 1 End If Select Case I2 Case 1 Menuetext = "1:BatSpannung" Case 2 Menuetext = "2:I2CTest200" Case 3 Menuetext = "3:I2CTest20" End Select End Subist das normal?
Ist der Code so OK? [-o< und vor allem:
Ist die I2C-Adresse richtig angegeben??? --> (auf Seite 1) http://www.autonomics.de/assets/own/...datenblatt.pdf
Sind die I2C-Befehle richtig?
Im Datenblatt steht (auf Seite 12)
"8bit-Position Servo 1: <63>,<0-255>
8bit-Position Servo 2: <62>,<0-255>"







Zitieren

Lesezeichen