-         

Ergebnis 1 bis 8 von 8

Thema: servo-asm anpassung

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    05.05.2005
    Ort
    ZH-Winterthur
    Beiträge
    99

    servo-asm anpassung

    Anzeige

    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.
    Code:
    ;---------------------------------------
    ; 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

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.06.2004
    Ort
    Düsseldorf
    Alter
    33
    Beiträge
    158
    Hallo,

    womit assemblierst Du?

    Gruß,

    Stefan
    http://www.tappertzhofen.eu/bpp2

    Basic++ Programmiersprache
    für den C-Control I Mikrocontroller

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    05.05.2005
    Ort
    ZH-Winterthur
    Beiträge
    99
    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.

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.06.2004
    Ort
    Düsseldorf
    Alter
    33
    Beiträge
    158
    Hallo,

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

    Code:
    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".
    http://www.tappertzhofen.eu/bpp2

    Basic++ Programmiersprache
    für den C-Control I Mikrocontroller

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    05.05.2005
    Ort
    ZH-Winterthur
    Beiträge
    99
    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.

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    05.05.2005
    Ort
    ZH-Winterthur
    Beiträge
    99
    Mit hilfe des assemblers Tasm konnte ich einen funktionierenden Code compelieren! Beim ersten versuch hats funktioniert! mit keinem fehler.

  7. #7
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    03.06.2004
    Ort
    Düsseldorf
    Alter
    33
    Beiträge
    158
    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
    http://www.tappertzhofen.eu/bpp2

    Basic++ Programmiersprache
    für den C-Control I Mikrocontroller

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.09.2004
    Beiträge
    264
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •