
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
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 |