Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Servos steuern mit Unit M als I2C-Interface Kategorie: Programmierung ASM (von Theo - 11.03.2005 22:30)
Hallo,
ich habe eine Frage zur ASM-Programmierung (mit der ich bislang noch keine echte Erfahrung habe).
Meine Aufgabe: Eine CCII-Unit steuert über den I2C-Bus mit Hilfe einer CI-Unit-M mehrere Standard-RC-Servos. Das ist sowohl für die Bussteuerung, als auch für die Servosteuerung zeitkritisch und nur mit ASM auf der CI-Unit lösbar. Die Teillösungen I2C-Bussteuerung und Servosteuerung auf der CI-Unit haben freundlicherweise schon andere (A. Helbig/B. Kainka) bereits für mich gelöst ;). Die beiden ASM-Routinen funktionieren für sich problemlos. Nun bleibt für mich nur das Problem, die beiden ASM-Routinen (s.u.) in ein Programm zusammenzufassen, die Einsprungadressen zu kennen und das Ganze zu kompilieren. Ich hoffe, ihr könnt mir einen Tipp dazu geben. Vermutlich ist es wieder ganz einfach...wenn man weiß wie es geht. Anbei noch die beiden ASM-Listings.

Gruß und Dank im voraus
Theo

P.S. Der sehr interessante Vorschlag von sl - 1.03.2005 22:05 kommt für (noch) nicht in Frage, da ich die CCII-Unit nicht so gern mit dem SWCom umrüsten möchte (oder die HWCom-Programmierschnittstelle umschalten o.ä.).

*** Servoansteuerung für bis zu 8 Servos (by B. Kainka) ***
portb   .equ 1       ;Daten Port B
pbdir   .equ 5       ;Datenrichtung Port B

       .org $101
        sei
loop    lda $0A1     ;Bytevariable 1
        sta portb    ;Port setzen
        ldx #230
loop1   nop          ;Loop1: 1 ms
        dex
        bne loop1
        ldx $0A2     ;Impulslänge in X laden

        inx
loop2   nop
        dex          ;X -1
        bne loop2    ;Loop2: 0...1ms

        lda #00
        sta portb    ;Port = 0
        cli
        rts
.end


*** I2C-Koppler (by A. Helbig) ***
i2c_start equ $083C
i2c_write equ $0846
i2c_read  equ $086F
i2c_readlast equ $08BB
i2c_stop  equ $08E5

; 92 = Wert
; 94 = Addresse

        org $101
get     bsr swr4f
        bsr chkrxd
        asla
        asla
        asla
        asla
        sta $93
        bsr rdpulse
        bsr chkrxd
        and #$0F
        ora $93
        sta $91
        bsr rdpulse
        lda $91
        sta $92
        clr $91
        bra coneeprom
       
start92 bsr rdlast
        ldx $92
        bra i2cstrt

chkrxd  bsr strt92r
rxdloop bsr read91
        brclr 6,$91,rxdloop
        rts

strt92r ldx $92
startr  incx
        bra i2cstrt

rdpulse bsr start92
        ldx #$5F
        jsr i2c_write
wr4f    ldx #$4F
wrlast  jsr i2c_write
        jsr i2c_stop
        rts

read91  jsr i2c_read
        sta $91
        rts
       
chkrdy  ldx $94
        bsr startr
rdyloop bsr read91
        brset 6,$91,rdyloop
rdlast  jsr i2c_readlast
        rts        

swr4f   bsr start92
        bra wr4f

put     bsr rdlast
        ldx $94
        bsr swr6f
        bsr chkrdy
        lda $92
        asra
        asra
        asra
        asra
        bsr wrpulse
        bsr chkrdy
        lda $92
        bsr wrpulse
        ;bra coneeprom
       
coneeprom ;EEProm anmelden
        ldx #$0A0
        bsr i2cstrt
        ldx $066
        jsr i2c_write
        ldx $067
        jsr i2c_write
        ldx #$0A1
i2cstrt jsr i2c_start
        rts

reset   bsr start92
        ldx#$CF
        jsr i2c_write
        bsr wr4f
        bra coneeprom

swr6f   bsr i2cstrt
        ldx #$6F
        bra wrlast
       
rdstat  bsr strt92r
        bsr read91
        bsr rdlast
        clra
        rts

wrpulse and #$0F
        ora #$60
        sta $93
        ldx $94
        bsr i2cstrt
        ldx $93
        jsr i2c_write
        lda $93
        ora #$10
        tax
        jsr i2c_write
        ldx $93
        bra wrlast

rxd     bsr swr4f
        bsr rdstat
        brclr 6,$91,stnrdy
strdy   lda #$FF
stnrdy  sta $92        
        sta $91
        bra coneeprom
       
ready   bsr rdlast
        ldx $92
        bsr swr6f
        bsr rdstat
        brset 6,$92,stnrdy
        bra strdy
       



 Antwort schreiben

Bisherige Antworten: