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 

 QT4-Einsatz mal anders Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Bert - 10.10.2011 12:48)
Bert nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro
Hallo,
neuerdings gibt es die QT4-Kontroller in SMD-Ausführung. Das hat mich inspiriert, mehrere Funktionen in meinen Projekten separat von diesen Controllern ausführen zu lassen. Als Beispiel möchte ich hier die Konvertierung der RS232-Pegel auf MCU-Niveau und Semi-Dual-Wire-RS232 nennen. Der Winzling kann damit  Dietmars Semi-Dual-Wire-RS232 auf dem OM-Board ersetzen, das mit Transistoren realisiert wird. Der Eingangsport wird mit Vorwiderstand und zwei Dioden vor den erhöhten RS232-Pegeln geschützt. Getestet wurde diese Konvertierung mit 9600 Baud. Sie arbeitet zuverlässig.
Was hier vielleicht noch Spielerei sein mag, gewinnt bei mir zusätzlichen Wert, weil die Konvertierung das Speichern der empfangenen Bytes ermöglicht. Mit dem Get-Befehl über Port 1 im Polling können die Bytes aufgelesen werden, ohne dass die Gefahr besteht, dass sich das Programm bei ausbleibendem Empfang festfährt. Die Midi- oder Macro-Controller haben dafür mit der ESCI-Schnittstelle und Interrupt sicher die elegantere Lösung, aber manchmal kann eine zweite Schnittstelle oder das  Einsparen von Interrupts nützlich sein.
Weil es mich reizte, setze ich für nicht allzu komplexe Aufgaben QT4 ohne OM-Betriebssystem  im sogenannten User-Monitor-Mode(UMMAP) ein. Einzelheiten dazu findet man bei Freescale unter AN 2305.



Das folgende Beispiel könnte leicht in Inline-Assembler umgeschrieben werden

TRIO         equ 0         ;Port 1:  TX von MCU und RX zur MCU
TXO          equ 5             ;Port 6
RXI           equ 1             ;Port 2

;---------------------------------------------------------------------
Schleife
;---------------------------------------------------------------------

Konvertieren

;zuerst Richtung bestimmen MCU->Terminal oder Terminal->MCU
TX_K  ; MCU-TX ist L-aktiv

brset TRIO,PTA,RX_K ;nicht L, weiter zu RX-Abfrage
bra IstTX_K ;jetzt TX

RX_K  ; Extern-RX ist H-aktiv

brclr TXO,PTA,TX_K ;nicht H, wieder zu TX-Abfrage
bra IstRX_K

IstTX_K

bset RXI,PTA ;Port auf H setzen: Impuls ein
IstTX_K1
                ;Timeout kann entfallen
mov #7T,Timeout  ;Timeout setzen 7x200us = 1,4ms
IstTX_K2
tst Timeout
        beq Schleife  ;zurück - Zeit überschritten
brclr TRIO,PTA,IstTX_K2 ;warten auf H

bclr RXI,PTA ;Port auf L setzen: Impuls aus
bra Schleife

IstRX_K     ;zuerst Port auf Ausgang setzen

        bclr TRIO,PTA  ;Port auf L setzen: Impuls ein
        bset TRIO,DDRA ;setze Port auf Ausgang

IstRX_K1
        mov #7T,Timeout  ;Timeout setzen: 7x200us = 1,4ms

IstRX_K2
        tst Timeout
        beq IstRX_K3  ;weiter - Zeit überschritten
        brset TXO,PTA,IstRX_K2; warten auf L

IstRX_K3
        bset TRIO,PTA  ;Port auf H setzen: Impuls aus
        bclr TRIO,DDRA ;Port wieder auf Eingang setzen
        bra Schleife
     
;---------------------------------------------------------------------

 Antwort schreiben

Bisherige Antworten: