PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C zu langsam



fibre original
31.05.2005, 11:12
Hallo,

ich hab ein Problem mit meiner C-Control.

Ich steuere einen autonomen Roboter über Visual Basic.
Die Befehle werden per Funk an die C-Control übertragen.

Die Servos meines Roboters werden über den SD20 angesteuert. D.h. auch über einen generierten I2C-Bus.

Das Problem , dass ich nun habe, ist, dass ich lediglich bis zu 2 Servopositionen pro sec. übermitteln kann, sonst kommt es zu fehlern bei der Steuerung & div. Servos nehmen falsche Stellungen an.

Ich vermute das Liegt daran, das der generierte I2C-Bus sehr langsam ist. Kann mir jemand dies bestetigen, oder liegt das Problem wo anders? Wie kann ich die Geschwindigkeit erhöhen??

FoCus
31.05.2005, 12:00
Soweit ich das mit dem SD20 verstanden habe, benötigt der doch nur einmal einen Stellwert und hält dann die Position oder?! Warum sollte dann der I2C Bus mit 100Khz zu langsam sein? Mit welcher Baudrate überträgst du denn per Funk? Welche Entfernung? Hindernisse? Welche Funkmodule?

Gruss
Michael

fibre original
31.05.2005, 13:18
Lieber Michael,

ich denke, dass es nicht am Funkmodul liegt, da ich mit einem seriellen Kabel in etwa die gleichen Probleme habe. Zur Sicherheit trotzdem hier die Daten der Funkeinheit. Ich benutze zur Datenübertragen die Gigaset M101 Data von Siemens. Mit einer Geschwindigkeit von 9600Bits/sec.

Ich vermute, das es eher daran liegt, das ich den I2C-Bus ja bloß über 2 Digitalports generiere und das hierdrin die Spassbremse liegt. Hast du Erfahrung mit dem I2C über C-control.

Meine C-control verwendet dabei eine modifizierte Version folgenden Programmes:

http://www.the-starbearer.de/Roboterelektronik/servo/sd20MitVB%20CCSource.bas


Schau`s dir mal an!

Vielen Dank im Voraus
Grüße Markus

wfischer
31.05.2005, 14:46
Die C-Control ist ja deutlich langsamer als z.B. ein AVR. Wenn man dann noch I2C über Digitalports simulieren muss, dann kann das die Ursache für das Problem sein. Du könntest mal ein Testprogramm schreiben, das z.B. 100000 mal die Funktion I2C_Write aus dem Beispielprogarmm aufruft. Messe die Zeit, die das Programm dazu braucht. Daraus kannst du die maximale Datenrate von dieser I2C Implementierung errechnen.

Ich kann mich dunkel daran erinnern, dass im Conrad Katalog stand, dass man die C-Control auch mit Assembler programmieren kann. Wenn die I2C Implementierung in Basic zu langsam ist, dann könntest du das versuchen.

pebisoft
31.05.2005, 17:24
die c-control-I kann in asm programmiert werden, hat dafür aber nur "255 byte" frei. nimm einen avr, den kannst du dann in asm proggen. die c-rontrol läuft ja nur mit dem c-basic und das ist die bremse.
mfg pebisoft