SerPar.a51

 

Programmbeschreibung

 

 

 

 

 

 

 

 

beabsichtigte Wirkung

Dieses Programm ist ein Beispiel dafür, wie MC80515 / MC80535 Mikrocontrollersysteme, einem zweiten Computer funktionale Fähigkeiten bereitstellen können. Im vorliegenden Fall spielt sich der Datenaustausch zwischen beiden Systemen über eine serielle Schnittstellenverbindung mit den nachfolgend genannten Einstellungen ab.

Baud 9600, 8 Datenbits, no Parity, 1 Stopbit, no Handshake.


Funktionalitäten von SerPar.A51

Das Programm arbeitet wie gesagt auf einem MC80515 Mikrocontrollersystem und wartet darauf, dass ihm von einem fremden Rechner, über die serielle Schnittstelle ein Kommando gesendet wird.

Tritt dieser Fall ein, und versteht SerPar.A51 das Kommando, wird es das Kommando ausführen und dem nachfragenden Rechner eine Antwort zurücksenden. Folgende Anweisungen kann ein fremder Rechner über SerPar.A51 auf dem 80515 /MC80535-System anstossen.


.. digitale Ein- oder Ausgaben an den MC80535-Toren lesen oder veranlassen

.. Digital-/Analogwandlungen an 3 DA-Ausgängen anweisen

.. Analog-/Digitalwandlungen an 8 AD-Eingängen lesen

.. eine angeschlossene Funkuhr in Bezug auf Zeit und Datum lesen


Hierzu stehen die virtuellen Tore A-F und 0-7 bereit, deren Zuordnung zu den realen Ports des MC80515 aus nachfolgender Tabelle entnommen werden kann ..

 

 

 

 

Tor A

P4.0 - P4.7 1

1 * digitales Ein- oder Ausgabetor mit 8 Bit Breite

Tor B

P6.0 - P6.7 1

1 * digitales Eingabetor mit 8 Bit Breite oder ..

Tor 0-7

P6.0 - P6.7 1

8 * analoge Eingabetore mit je 8 Bit Genauigkeit

Tor C

P5.0 - P5.7

2 * digitale Ein- oder Ausgabetore mit je 4 Bit Breite

Tor D

P1.1

1 * analoges Ausgangstor, pulsweitenmoduliert mit je 8Bit      oder 16Bit Genauigkeit

Tor E

P1.2

1 * analoges Ausgangstor, pulsweitenmoduliert wie D

Tor F

P1.3

1 * analoges Ausgangstor, pulsweitenmoduliert wie D

 

 

 

Pin

 

Fest belegte Anschlüsse am MC80535-Rechner

P1.6

 

Ausgabe des 1MHz Systemtaktes (1:5)

P1.7

 

Eingang zum Anschluss eines DCF77-Empfängers

P1.0

 

Anzeige der DCF-Bereitschaft

P1.4

 

Fehler beim DCF-Empfang 100/200ms

P1.5

 

Fehler beim DCF-Empfang 1/2 s

 

 

 

 

Modi 0-3 des Programms Serpar.A51

Der Seriell-Parallel-Wandler arbeitet mit einem Übertragungsprotokoll von 9600 Baud. Daraus ergibt sich, dass maximal 960 Zeichen pro Sekunde und Richtungen auf der seriellen Schnittstelle übertragen werden können. Abhängig von der Anzahl der pro Befehl zu übertragenden Zeichen, vermindert sich die Menge der Befehle, die pro Sekunde vom nachfragenden Rechner, an das Wandlerprogramm gegeben werden können. Deswegen wurden in dem Programm verschiedene Arbeitsweisen (Modi) vorgesehen. Im Modus 0 sind die Befehle kurz, dadurch können viele Anweisungen pro Sekunde gesendet werden, jedoch lassen sich nicht alle Möglichkeiten des Wandlers ausschöpfen. Im Modus 1 sind die Befehle länger, ihre Anzahl pro Sekunde wird geringer, aber es lässt sich mehr befehlen und im Modus 3 (HauRuck-Modus) wird mit der maximalen Geschwindigkeit gearbeitet, allerdings nur an zwei digitalen Toren. Der Modus 2 ist bisher nicht belegt.


Kontrollregister:

Um in die verschiedenen Modi umschalten zu können, wurde ein Kontrollregister eingeführt. Es beinhaltet Flaggen, die Informationen über den eingeschalteten Modus und die Einstellungen der virtuellen Tore bereitstellen. Das Kontrollregister ist 8Bit breit und seine Flagge beinhalten folgende Informationen ..

 

 

 

 

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

Status

ModusA2

ModusA1

TorA 0-8

TorC 4-7

Modus B

Modus DA

TorCO-3

 

 

 

Status:

x

momentan keine Bedeutung

ModusA2:

Modus A2

Modus A1

Wirkung

ModusA1

0

0

Modus 0 eingeschaltet (Startzustand)

 

0

1

Modus 1 eingeschaltet

 

1

0

Modus 2 eingeschaltet (z.Zt nicht belegt)

 

1

1

Modus 3 eingeschaltet

TorA 0-8

0

(P4.0-P4.7)

alle 8 Bits des Tores sind Ausgänge

 

1

(P4.0-P4.7)

alle 8 Bits des Tores sind Eingänge

TorC 4-7

0

(P5.4-P5.7)

die 4 Bits des Tores sind Ausgänge

 

1

(P5.4-P5.7)

die 4 Bits des Tores sind Eingänge

Modus B

0

(P6.0-P6.7)

die 8 Bits des Tores sind digitale Eingänge

 

1

 

die 8 Bits des Tores sind jeder für sich ein analoger Eingang

ModusDA

0

(P1.1-P1.3)

die Analogausgänge sind 8Bit PWM-Ausgänge mit einer Auflösung von 256 Schritten

 

1

(P1.1-P1.3)

die Analogausgänge können bis zu 16Bit PWM-Ausgänge mit programmierbarer Auflösung bis zu 65535 Schritten oder Taktgeber werden.

TorC 0-3

0

(P5.0-P5.3)

die 4 Bits des Tores sind Ausgänge

 

1

(P5.0-P5.3)

die 4 Bits des Tores sind Eingänge

 

 

 

 

Modus 0

Sendet der fremde Rechner eines der nachfolgenden ASCII-Zeichen, reagiert das SerPar.A51 Programm wie in der Tabelle angegeben. Die Angabe 'wert' meint eine 8 Bit-Zahl zwischen 00h und FFh

 

 

 

 

Kommando

MC80515 reagiert

Bemerkung

'R'

 

gibt 1Byte Signale an TorA zurück

Tor A (P4.0-4.7) lesen

'W'

wert

schreibt wert nach Tor C

Tor C (P5.0-5. 7) schreiben

'0' bis '7'

 

gibt die 8 Bit Wandlung des Analogeingangs von Tor B zurück

Analogeingang (P6.0-P6.7) lesen

'D bis 'F'

wert

nutzt wert zur Erzeugung einer PWM-Frequenz an Tor D-F

Analogausgang (P1.1 - P1.3) schreiben

'T'

 

gibt 4 Bytes Std, Min, Sek und Flaggen* (BCD) zurück

DCF-Funkuhr an Tor 1.7

'Y'

 

gibt 4 Bytes Tag, Monat, Jahr, TagesName (BCD) zurück

O-nix, 1-Mo, 2-Di, ... 7-So

'K'

wert

Nutzt wert zur Setzung eine neuen Modus (s.Tabelle oben)

Moduseinstellung schreiben.

'M'

 

momentane Moduseinstellung zurückgeben

Moduseinstellung lesen

'Q'

 

Hauruck-Modus. In einer dauerhaften Schleife werden ohne Unterbrechung die Tore A und C gelesen bzw. beschrieben, bis irgendeine Änderung an Tor B eintritt.

 

 

 

 

 

Modus 1

In diesem Modus besitzen alle Befehle zwei ASCII-Zeichen, von denen das erste 'R' read oder 'W write ist. Das zweite Zeichen bezeichnet das betroffene Tor A-F oder 0-7. Eine Ausnahme bilden die Befehle 'K' und 'M' zum Setzen des Kontrollbytes, bzw. zum Lesen der Moduseinstellung. Sie können als Einzelbefehl oder im Zusammenhang mit 'R' oder 'W benutzt werden. Durch die Befehlslänge von zwei bis drei Bytes wird der geringste Befehlsdurchsatz pro Sekunde erreicht, andererseits aber auch die grösste Befehlsvielfalt.

 

 

 

 

Kommando

Wirkung im Wandlerprogramm, wenn das angesprochene Tor ... ist

Byte1

Byte2

Byte3

Ausgabetor

Eingabetor

Digitale Ein- und Ausgaben

'R'

'A'

 

liest den Wert am TorA

liest den Wert der TorA - Eingabe

'W'

'A'

wert

setzt TorA auf den Ausgabewert B

keine Wirkung

'R'

'B'

 

B kann nur Eingabetor sein

liest den Wert der TorB -Eingabe

'W'

'B'

wert

keine Wirkung

keine Wirkung

'R'

'C'

 

liest den Wert an der Ausgabebits Cn-Cm

liest der Wert der Eingabebits Cn-Cm

'W'

'C'

wert

setzt die Ausgabebits Cn-Cm auf Wert

keine Wirkung

Analoge PWM 8-Bit, 256 Schritt Ausgabe {ModusDA =0)

'R'

'D'

 

liest den digitalen Wert der die analogen Ausgangssignal bestimmt.

kann nur Ausgabetor sein

'W'

'D'

wert

setzt die neue Analogausgabe

kann nur Ausgabetor sein

'R'

'E'

 

wie 'D'

wie 'D'

'W'

'E'

wert

wie 'D'

wie 'D'

'R'

'F'

 

wie 'D'

wie 'D'

'W'

'F'

wert

wie 'D'

wie 'D'

Analoge PWM 16-Bit, 65535 Schritt Ausgabe (ModusDA =1}

'R'

'G'

 

Sendet 2Bytes die den 16-Bit Wert, HighByte, LowByte, des Reload-TaktZählers darstellen

kann nur Ausgabetor sein

'W'

'G'

Hi, Lo

Setzt den neuen 16-Bit Wert des Zählers

kann nur Ausgabetor sein

'R'

'W'

'D'

'D'



Hi, Lo

wie bei 8 Bit, jedoch müssen 2 Bytes HighByte, LowByte gesendet werden

kann nur Ausgabetor sein

 

'E'

 

wie 'D'

wie 'D'

 

'F'

 

wie 'D'

wie 'D'

Analoge 8-Bit Analegeingänge

'R'

'0'

 

kann nur Eingabetor

liest den Wert am Analogeingang 0

'W'

'0'

wert

kann nur Eingabetor

keine Wirkung

...

...

 

...

...

'R'

'8'

 

kann nur Eingabetor

liest den Wert am Analogeingang 8

'W'

'8'

wert

kann nur Eingabetor

keine Wirkung

Zeit und Datum

'R'

'T'

 

4 Bytes der Uhr, - Std, Min, Sek und Flaggen - werden im BCD-Format gesendet

'W'

'T'

3 Bytes

3 Bytes 3 Bytes der Uhr, - Std, Min, Sek - werden im BCD-Format erwartet

'R'

'Y'

 

4 Bytes des Datums, - Tag, Mon, Jahr, TagName - werden im BCD-Format gesendet

'W'

'Y'

4 Bytes

4 Bytes 4 Bytes des Datums, - Tag, Mon, Jahr, TagName - werden im BCD-Format erwartet

Änderung des Kontrollbytes

'K'

wert

 

Wert wird als Kontrollbyte ausgewertet

'M'

 

 

Der Inhalt des Kontrollregisters wird zurückgegeben

'R'

'K'

 

Der Inhalt des Kontrollregisters wird zurückgegeben

'W'

'K'

wert

wie 'K' wert

 

 

 

 

Modus 2

Dieser Modus wird momentan nicht verwendet

 

 

Modus 3

Dieser Modus wird momentan nicht verwendet

 

 

 

 

 

Hinweis zum Kontrollbit ModusDA = 0

Ein Zähler bewirkt an allen Ausgängen nach 256µs einen Signalabfall von High nach Low. Während dieser Zeitspanne kann ein Compare-Register (Vergleichsregister) nach je 1µs das Signal von Low auf High anheben. Geschieht dies, so erhält man ein Taktsignal, dessen Einschaltzeit zwischen 1µs und 255µs liegt, bzw. dessen Ausschaltzeit zwischen 255µs und 1µs liegt. Integrierende Geräte wie Messinstrumente zeigen diesen Takt als analoge Spannung an. Zur Bildung eines wirklichen Analogsignals werden entsprechend verschaltete Operationsverstärker benutzt.


Hinweis zum Kontrollbit ModusDA = 1

In diesem Modus kann der Zähler 'G' frei zwischen den Werten 0000h und FFFFh programmiert werden. Ebenso die Compare-Register 'D'-'F'. Ihre Werte sollte jedoch kleiner oder gleich dem Wert des Zählregisters sein. Durch die Veränderung der Zählerzeit ist es möglich einen Taktgenerator zu programmieren. Seine 1 und 0-Signale sind symmetrisch, wenn der Wert des benutzten Compareregisters gerade in der Mitte der Taktzeit liegt. Durch geeignete Programmierung lassen sich je nach Auflösung des Zählers beliebig andere Takt-Pause-Verhältnisse einstellen. Der Zähler wirkt immer für alle drei Compareregister.

Natürlich kann das Ausgangssignal auch als PWM-Signal benutzt werden.

 

 

 

 

 

Hinweis zum Anschluss eines DCF 77 Empfängers

Ein solcher Empfänger muss am Tor P1.7 mit seinem positiv arbeitenden Signal angeschlossen werden. Das Programm wird dann versuchen, die Funkzeit kontinuierlich zu ermitteln. Gelingt dies nicht, so führt eine interne Uhr die Zeit weiter, bis wieder ein Empfang besteht.

Diese interne Uhr kann im Modus 1 auf einen Anfangswert gebracht werden, der dann mit oder ohne DCF-Empfänger weitergeführt wird.


Torbit P1.0 indiziert, ob die DCF-Zeit benutzt wird, oder die interne Zeit.


       P1.0 = 0          es wird die interne Zeit benutzt

       P1.0 = 1          es wird die DCF- Zeit benutzt

       P1.0 = blinkt    DCF-Zeit wird gerade gesucht. Wurde sie zuvor

                               schon einmal empfangen oder die interne Uhr gesetzt,

                               so wird die interne Zeit ausgeliefert.

Flaggen in der zurückgegebenen Zeit:

Zusammen mit der Zeit (Std, Min, Sek) im BCD-Format, wird ein Byte mit Flaggen zurückgesendet. Diese stammen von der DCF77- Funkuhr und sagen folgendes aus ..


Flagge.0 =1 ... Die Zeit entspricht der MEZ   (mitteleuropäische Zeit)

Flagge.1 =1 ... Die Zeit entspricht der MESZ (mitteleuropäische Sommerzeit)

Flagge.2 =1 ... Ankündigung des Wechsels MEZ/MESZ/MEZ, 1Std zuvor

Flagge.3 =1 ... Ankündigung der Einfügung einer Schaltsekunde, 1Std zuvor

Flagge.4 =1 ... Reserveantenne der PTB strahlt die Zeit aus

Flagge.5            nicht benutzt

Flagge.6            nicht benutzt

Flagge.7 =1 ... DCF-Uhr ist die Quelle der Zeit. (Flagge.7=0 interne Uhr)

Soll die Zeit der internen Uhr gesetzt werden, so müssen diese Flaggen natürlich nicht übermittelt werden.

 

 


 

 

 

SerPar.A51

Quelltext des Wandlers

 

 

 

DCF77_H.INC

Quelltext, der DCF77 Funkuhr

 

www..de