PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : servo-asm anpassung



Z80
12.03.2006, 13:42
Hallo,

Ich habe ihr ein Assemblercode zur Ansteuerung von Servosfür eine C-Control main unit.
Der Code ist weder von mir geschrieben noch Compeliert.

Ich möchte das Programm jedoch mit einer höheren Frequenz betreiben und den Zeitbereich anpassen. Ich verwende den compiler von Workbench in dem Code einige fehler erkennt. Die Anpassungen kann ich machen, jedoch kann ich die Fehler nicht korrigieren.

Bitte seht euch den Code mal an. Ich freue mich auf jede Hilfe.

Der Fehler liegt vor allem in der Warteschleife.
Ich habe die Fehlermeldungen in den Code Geschrieben.

;---------------------------------------
; Servo-Steuerung an port 1
;
; Title: Setzen eines Servos
;
; Parameter:
; mask, Adresse $0A1, Bitmaske des Servos
; pos , Adresse $0A2, Zielposition des Servos 127=Mitte
;
; Beschreibung:
; Es wird ein Setzimpuls an den Servo an Port B gesendet.
; Die Bitmaske bezeichnet den Servo, der gesteuert werden
; soll. Es können auch mehrere Servos synchron gesteuert
; werden.
;
; Diese Routine sollte pro Positionierung 20 mal
; aufgerufen werden.
;
; Copyright Mario Boller-Olfert 2000

portb .equ 1 ;Daten Port B
dirb .equ 5 ;Datenrichtung Port B

.org $101

;--- setzen der Bits entsprechend der mask
lda $0A1 ; dirb = dirb OR mask
ora dirb
sta dirb

sei ;abschalten interrupts wg. zeitkritischer verarbeitung

lda $0A1 ; portb = portb OR mask
ora portb
sta portb
;--- warten entsprechend der Pulslaenge
lda #$FF ;1 ms warten
jsr wart
lda $0A2 ;warten entsprechend der Position
jsr wart

;--- ruecksetzen der Bits entsprechend Servo
lda $0A1 ; portb = portb AND NOT mask
coma ;[Fehler](44): Unbekannter Befehl.(1)
and portb
sta portb
cli
rts

;--- warteschleife
wart beq ret ;[Fehler](51): ungültige Anzahl der Parameter.(2) ;Abfangen der Pulslaenge 0
looph nop ;[Fehler](52): Unbekannter Befehl.(1) ;eigentliche Warteschleife
deca
bne looph
ret rts

.end

Tappi
13.03.2006, 18:48
Hallo,

womit assemblierst Du?

Gruß,

Stefan

Z80
13.03.2006, 20:08
Mit dem da http://www.csslabs.de/ccontrol/workbench.htm
kompatibel zu diesem http://www.fdos.de/ccasm/

Ich kann die Fehler in der Warteschleife nicht finden. Ich brauche eine Korektur oder ein neuer funktionierender Code.

Tappi
13.03.2006, 20:12
Hallo,

der Assembler ist nur für C-Control M Unit 2, Station 2.0 und Micro anwendbar.



wart beq ret ;[Fehler](51): ungültige Anzahl der Parameter.(2) ;Abfangen der Pulslaenge 0
looph nop ;[Fehler](52): Unbekannter Befehl.(1) ;eigentliche Warteschleife


Diese Zeilen sind ja auch aus Sicht des Assemblers falsch.
Wenn "looph" ein Label sein soll muss danach ein ":" folgen, genauso wie bei "wart".

Z80
18.03.2006, 09:51
Ich habe das gefühl als wäre ich der einzige Mensch der mit einer c-control 8 servos ansteuert! Es nuss doch in diesem Forum noch andere Leute geben die sich mit dem gleichen Problem befasst haben. Ich brauche ein asm-code mit dem ich servos auf einer übertakteten (12Mhz) c-control ansteuern kann.

Z80
18.03.2006, 10:57
Mit hilfe des assemblers Tasm konnte ich einen funktionierenden Code compelieren! Beim ersten versuch hats funktioniert! mit keinem fehler.

Tappi
20.03.2006, 20:15
Hallo,

TASM ist aber nicht CCASM. Letzteres richtet sich mehr nach dem original Freescale Assembler. Außerdem muss ein Label in CCASM mit einem ":" am Ende initialisiert werden.

Gruß,

Stefan

Suggarman
22.03.2006, 13:39
Ich habe das gefühl als wäre ich der einzige Mensch der mit einer c-control 8 servos ansteuert! Es nuss doch in diesem Forum noch andere Leute geben die sich mit dem gleichen Problem befasst haben. Ich brauche ein asm-code mit dem ich servos auf einer übertakteten (12Mhz) c-control ansteuern kann.


Naja, ich brauche nur 4 Servos und das schafft die Unit 2.0 noch so.

Wenn es mehr werden würden, dann würde ich einen Servocontroller über I2C, z.B. SD20 nehmen.

mfg

Stefan