PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Codebeispiel (Bascom Basic) rn-control-->I2C-->sn20 ?



ReiniXXL
11.03.2006, 18:59
Hi @ all
Ich hab jetzt schon 10 min die "Suchfunktion" strapaziert und hab leider nur Codebeispiele zum Ansteuern eines s20 in C gefunden. 8-[

Leider komme ich mit der I²C-Adresse "0xC2" nicht zurecht.

Hab es so versucht:

Const Servoid = 0xc2
Sub servoset()
Local Befehle As String * 2
Befehle = Chr(63) + Chr(200)
I2csend Servoid , Befehle , 2
End Sub


Es kommen aber Fehlermeldungen...

...wie geht es richtig?

Danke O:)

hrei
11.03.2006, 19:21
Hallo,



Const Servoid = 0xc2


ohne s20 (was immer das sei) nun zu kennen, fällt mir auf, daß die Notation für einen Hexwert in Bascom so lauten muß:

Const Servoid = &Hc2

Grüße
Henrik

ReiniXXL
11.03.2006, 19:28
Es geht um den "anx-S20 - 20 Kanal I²C+RS232 Servocontroller"

http://www.autonomics.de/assets/own/anx_s20_datenblatt.pdf

hrei
11.03.2006, 20:12
Es geht um den "anx-S20 - 20 Kanal I²C+RS232 Servocontroller"

http://www.autonomics.de/assets/own/anx_s20_datenblatt.pdf

Hübsch komplex, aber ausführliches Datenblatt. Na dann lies Dir mal die Hilfe zu I2C durch und entscheide mal zunächst, ob Du nun via I2C oder via Rs232 au den Controller zugreifen möchtest. Mit I2C wirst du mit CHR(xxx) usw. keinen Erfolg haben.

Die paar Zeilen Code werden doch hoffentlich nicht alles sein, was Du bisher für den S20 geschrieben hast. Die Wahrscheinlichkeit, daß Dir hier jemand ein komplettes Beispiel schreibt, ist gering.

Viel Vergnügen
Henrik

ReiniXXL
11.03.2006, 20:25
entscheide mal zunächst, ob Du nun via I2C oder via Rs232 au den Controller zugreifen möchtest.

Ich möchte Den Servocontroller per I2C ansteuern!


Mit I2C wirst du mit CHR(xxx) usw. keinen Erfolg haben.

Und was ist Dein Vorschlag?



Die paar Zeilen Code werden doch hoffentlich nicht alles sein, was Du bisher für den S20 geschrieben hast. Die Wahrscheinlichkeit, daß Dir hier jemand ein komplettes Beispiel schreibt, ist gering.

Das verlange ich auch nicht...aber ich hab nunmal nix (bis auf das was ich oben steht) gefunden wie ich die Befehle über I2C schicken kann (mit Bascom Basic).

hrei
11.03.2006, 20:43
entscheide mal zunächst, ob Du nun via I2C oder via Rs232 au den Controller zugreifen möchtest.

Ich möchte Den Servocontroller per I2C ansteuern!


Mit I2C wirst du mit CHR(xxx) usw. keinen Erfolg haben.

Und was ist Dein Vorschlag?


Dir die Hilfe zu I2C durchzulesen.
Das geht z.B. für den Anfang am einfachsten mit

I2Cstart
I2Cwbyte data
.....
.....
I2Cstop

Was Du im Einzelnen übertragen musst, verrät Dir das Datenblatt.




Die paar Zeilen Code werden doch hoffentlich nicht alles sein, was Du bisher für den S20 geschrieben hast. Die Wahrscheinlichkeit, daß Dir hier jemand ein komplettes Beispiel schreibt, ist gering.

Das verlange ich auch nicht...aber ich hab nunmal nix (bis auf das was ich oben steht) gefunden wie ich die Befehle über I2C schicken kann (mit Bascom Basic).

Es gibt in der Bascom Hilfe und in den Samples eine Reihe von Beispielen, die zeigen, wie I2C mit Bascom grundsätzlich funktioniert.

Da Du offensichtlich noch überhaupt nicht mit I2C gearbetet hast und wohl auch Bascom nur sehr oberflächlich kennst, kann ich nur empfehlen, Dich mit den Grundlagen vertraut zu machen, bevor Du an so komplexe Aufgaben gehst. Das fängt mit der Syntax von Bascom an und hört bei den I2C Befehlen noch lange nicht auf. Schau mal in die Rubrik "Wissen", da findet sich sehr viel nützliches und gut aufbereitetes für Anfänger.

Grüße
Henrik

ReiniXXL
11.03.2006, 22:28
Vielleicht gibt es ja jemanden der bereit ist, sein Basic-Code zur Ansteuerung zu posten
Wie ich gesehen hab gibt es ja doch einige die diesen Servocontroller verwenden!

Ich komm bei meinem Code einfach nicht weiter 8-[
Es will sich einfach kein Servo bewegen... :-s mit einem funktionierenden Code könnte ich sicherstellen das es nicht doch an der Hardware liegt (Kabel, Stecker, ...)

ReiniXXL
12.03.2006, 09:40
Ich hab gestern bzw. heute Nacht noch weiter verschiedene Arten versucht:
(Das Servo 1 soll auf den Wert 200 gesetzt werden)



$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 Sub


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 bearbeiten :-k ist 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/anx_s20_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>"

ReiniXXL
18.03.2006, 08:13
Kann mir keiner helfen?

hrei
18.03.2006, 09:04
Kann mir keiner helfen?

Können? Für meinen Teil habe ich einfach keine Lust, jemandem zu helfen, der einfach nur wild irgendwelchen Code ins Forum schreibt, bei dem er beim compilieren schon Fehlermeldung über Fehlermeldung erhalten müsste und dann erwartet, daß jemand ihm ein fertiges Beispiel daraus macht.

So hast Du Dir z.B. den verwendetet Select Case Befehl bestimmt nicht in der Hilfe angesehen.

Als letzten Tip: Die Register werden genauso angesprochen, wie die der kleinen 24xx I2C-EEproms (ein Byte zur Adressierung). Da bist Du also schon auf dem richtigen Weg.

Henrik

EDIT: Ich sehe gerade, daß Du Deinen Beitrag nachträglich noch editiert hast. Select Case stimmt jetzt. Bitte vermerke Änderungen zukünftig.

ReiniXXL
18.03.2006, 09:19
Für meinen Teil habe ich einfach keine Lust, jemandem zu helfen, der einfach nur wild irgendwelchen Code ins Forum schreibt, bei dem er beim compilieren schon Fehlermeldung über Fehlermeldung erhalten müsste


Natürlich ist der code nicht compilierbar ... er ist aus einem 3 seiten code rausgeschnitten den ich nicht in aller länge hier posten möchte!
Ich bin davon ausgegangen das die relevanten Teile im Gesamtcode ausreichen...



Ist die I2C-Adresse richtig angegeben??? --> (auf Seite 1) http://www.autonomics.de/assets/own/anx_s20_datenblatt.pdf

Sind die I2C-Befehle richtig?


Darum geht es mir (und ich denke die Fragen sind durchaus berechtigt und können mit je einem Wort beantwortet werden)!

...Danke für den 24xx i2c-eeprom Tip ich werd mich umsehen