PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Controller zu langsam??



Simon92
24.11.2010, 21:15
Hallo,

ich habe einen Robonovacontroller (einzeln erworben, ohne Roboter drum rum), wo ich an einen der AD-Ports einen Drehgeber (Lochscheibe mit Mini-Gabellichtschranke) angeschlossen habe. Dessen Signal ist eigentlich recht sauber und Rechteckig. Wenn ich damit einfache Testprogramme durchführe (Variable hochzählen bzw. LED ein und ausschalten) kommt es mir so vor, als misst der Controller (Atmel ATMega128L) immer weniger der Impulse, je schneller sich der Motor mit der Lochscheibe dreht. Bei 2 Impulsen pro Sekunde (nur!) geht es noch, aber danach gibt es bei höherer Geschwindigkeit die ersten Aussetzer. Und je länger ich die Programmschleife zum Zählen der Impulse mach (zum Beispiel durch irgendwelche einfache Berechnungen), werden ebenso immer weniger Impulse registriert.
Das kann dich noch sein. So ein Controller hat doch eine Taktfrequenz von mehreren Megaherz, Da wird er doch schnell genug sein ein paar Impulse zu registrieren. Oder liegt es am Programmierprogramm, das ich verwende, welches "Robobasic" heisst, falls das jemand kennt?

shedepe
24.11.2010, 21:21
Dann poste doch mal dein Programm

Simon92
24.11.2010, 21:26
Bitteschön:

DIM I AS INTEGER
Beginn:
Motor 1
Servo 1, 110

I = AD(0)

IF I > 400 THEN
OUT 1,1 (LED einschalten)
ELSEIF I < 400
OUT 1,0 (LED ausschalten)
ENDIF

GOTO Beginn

shedepe
24.11.2010, 21:36
warum liest du den wert über den AD Wandler ein ?
Wenn es schön rechteckig ist und zwischen 0 und 5V toogelt reicht es aus wenn du abfragst ob der Pin High oder Low ist. Das dürfte um einiges schneller gehen.
Auserdem zählst du keine Variable hoch, sondern dein Programm liest die gerade am AD0 pin anliegende Spannung ein und die vergleichst dann ob die Spannung größer 400 oder kleiner 400 ist.

Simon92
24.11.2010, 21:42
Habs mal auf einen normalen Pin umgesteckt, ja, jetzt gehts schon flotter, wobei er ab einer gewissen, nicht allzuhohen Geschwindigkeit immer noch schlapp macht. Aber für mich würds jetzt allemal ausreichen. Heisst das, das es tatsächlich an der Rechengeschwindigkeit des Controllers liegt?

shedepe
24.11.2010, 21:46
Wenn du den wert über den AD Wandler einliest, braucht das Zeit, sehr viel zeit. Wenn du nur ausliest ob ein Pin gerade auf High oder Low ist geht das viel schneller. Optimal ist es wenn du in einem Interrupt (z.B. steigende Flanke) deine Zählervariable hochzählst.

PS. Die rechenleistung von dem Atmega sollte ohne Probleme dafür ausreichen.

Und könntest du eventuell dein geändertes Programm noch mal hochstellen, dann hat die nachwelt auch noch was davon

Simon92
24.11.2010, 21:50
Okay, dankeschön