84
 Mikrocontroller Umdruck zur Vorlesung mit integrierter Übung ________________________________________________ Prof. Dr.-Ing. R. Roskam Februar 2009

Umdruck Mikrocontroller 26-05-09

Embed Size (px)

DESCRIPTION

Umdruck über Mikrocontroller

Citation preview

Page 1: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 1/84

MikrocontrollerUmdruck zur Vorlesung mit integrierter Übung

________________________________________________

Prof. Dr.-Ing. R. Roskam

Februar 2009

Page 2: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 2/84

Page 3: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 3/84

EinleitungDieses Skript gibt den Inhalt der Vorlesung "Mikrocontroller" wieder. Die Vorlesung wird imFachbereich Maschinenbau an der Fachhochschule Braunschweig/Wolfenbüttel in der Vertie-fungsrichtung Mechatronik gelehrt. Voraussetzung zum Verständnis der Vorlesung sind Grund-

kenntnisse der Elektrotechnik und Informatik, wie sie im Grundstudium eines ingenieurwissen-schaftlichen Studiengangs gelehrt werden.

Ziel der Vorlesung ist es, die Studenten in der Lage zu versetzen, die Funktionsweise eines Mik-rocontrollers auf mechatronische Systeme anwenden zu können.

Roter Faden

Die wesentlichen Begriffe und Stichworte zum Inhalt werden am Textrand des Skriptes darge-stellt, so dass schnell eine Übersicht gewonnen werden kann. Ich wünsche allen, die mit diesemSkript arbeiten, viel Spaß beim Lesen und zugleich beim Lernen.

Wolfenbüttel, Februar 2009.

Rolf Roskam

[email protected]

Page 4: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 4/84

1

Inhaltsverzeichnis

1 Einleitung.......................................................................................................... 1

2 Grundlagen ....................................................................................................... 2 2.1 Digitale Zustandsinformation ................................................................... 2

2.2 Informationsdarstellung............................................................................ 5

2.3 Informationsverarbeitung ......................................................................... 9

3 Entwicklungsumgebung für Mikrocontroller ................................................. 11

3.1 Programmierung von Mikrocontrollern.................................................. 11

3.2 Programmer ............................................................................................ 14

3.3 Debugger................................................................................................. 14

3.4 Debugger Accemic MDE .......................................................................15 4 Speicher .......................................................................................................... 19

5 IO-Ansteuerung .............................................................................................. 25

6 Strukturierte Programmierung........................................................................32

7 Timer .............................................................................................................. 41

8 D/A-Wandler .................................................................................................. 45

9 PWM Ansteuerung ......................................................................................... 48

10 A/D-Wandler und Interruptfunktion........................................................... 57

11 Lösungen ohne Kommentar........................................................................67 12 Literatur ...................................................................................................... 74

13 Anlage.........................................................................................................75

13.1 Funktionsschema Mechatronic Evaluation Board (MEB)...................... 75

13.2 Schaltplan Mechatronic Evaluation Board ............................................. 77

13.3 Funktionsweise Treiberbaustein 6206Fehler! Textmarke nichtdefiniert.

13.4 Funktionsweise Up-/Down-Counter PE 12024 ...................................... 80

Page 5: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 5/84

Page 6: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 6/84

2

2 Grundlagen

2.1 Digitale Zustandsinformation

Die grundsätzliche Informationsverarbeitung mit Mikrocontrollern basiert auf digi-tale Spannungssignale, die den Zustand 0 (low) oder 1 (high) annehmen können(Bild 2.1).

U

2 Zustände:

0 low Lampe aus U = 0V

1 high Lampe an U = U0

Bild 2.1: Digitale Zustandsinformation

Man spricht von dem Bit (binary digit) als kleinste Dateneinheit. Um eines sichereVerarbeitung der Zustände zu gewährleisten, wurden Spannungsbereiche für die

Zustände 0 (low) und 1 (high) definiert, die je nach Technologie in bestimmtenBereichen definiert wurden (Bild 2.2)

A E

0 50,4 2,40,8 U (V)

TTLtransistor transistor logic

Baustein 1 Baustein 2

GND GND

Ausgang

Eingang

CMOScomplementary metal oxide

semiconductor

0,05

1,5 3,5

4,95 Ausgang

Eingang

Bild 2.2: Spannungsbereiche für digitale Zustände /1/

Üblicherweise wird nur die Verbindung von einem Baustein zum nächsten betrach-tet, die allgemeine Masseleitung, an der alle Bausteine angeschlossen sind, wirdhäufig nicht weiter erwähnt.

CMOS-Bausteine haben gegenüber TTL-Bausteine den Vorteil geringerer Leis-tungsaufnahme (µW anstelle von mW). Neueste Bausteine verwenden HC/HCT-Technologie, die den Vorteil geringer Leistungsaufnahme mit den Spannungsbe-reichen der TTL-Bausteine verbinden.

Soll vom Zustand 0 auf den Zustand 1 geschaltet werden, so durchläuft die Span-

nung in Abhängigkeit der Zeit den undefinierten Bereich zwischen 2 Zuständen(Bild 2.3). Oberhalb von 0,8V und unterhalb von 2V erkennt der 2. Baustein denEingang als ungültig. Dieser Zeitraum sollte daher möglichst schnell durchschrittenwerden. Eine entscheidende Kenngröße ist dabei die Schaltverzögerungszeit tp (propagation delay time), in der das Signal zwischen 10% und 90% des endgülti-gen Spannungssignals durchlaufen hat. Typische Werte für HCT-Bausteine liegenim Bereich von wenigen ns.

Bit0 – low

1 – hi h

TTLCMOSHC/HCT

propagationdelay time

Page 7: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 7/84

3

high

low

5,0

2,0

0,8

U (V)

t

tp

10%

90%

Bild 2.3: Zustandswechsel von low nach high

Werden externe Signale (z.B. Schalter) an einen HCT-Baustein angelegt, so sollteder Zustandswechsel des externen Signals in der Schaltzeit des HCT-Bausteins

liegen. Durch kapazitive Effekte (z.B. langes Kabel zum Schalter) können jedochgrößere Schaltzeiten auftreten. In diesem Fall ist ein Schmitt-Trigger vorzusehen(Bild 2.4).

ESchmitt-

Trigger high

low

5,0

2,0

0,8

U (V)

t

AR

C τ

5V

R

C

5V

Bild 2.4: Schmitt-Trigger

Obwohl die Schaltzeiten nur wenige ns betragen, besteht dennoch die Gefahr unde-finierte Schaltzustände zu verarbeiten. Aus diesem Grund werden digitale Systemeder Datenverarbeitung getaktet. Hierzu existiert ein zentraler Taktgenerator, der einRechtecksignal erzeugt. Eine Verarbeitung der Information und damit ein Zu-standswechsel des Ausgangs der einzelnen Bausteine erfolgt immer nur zur stei-

genden Flanke des Taktsignals.

Baustein 1 Baustein 2 Baustein 3

Taktgeneratort

Utc

Bild 2.5: Getaktete Informationsverarbeitung

Die Taktzeit tc muss somit größer sein als die Schaltverzögerungszeit tp der einzel-nen Bausteine. Taktfrequenzen moderner Mikrocontroller liegen im Bereich von

10…100 MHz, so dass sich eine Taktzeit von 100…10ns ergibt.

Schmitt-Trigger

Takt

Page 8: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 8/84

4

Beim Ausgang eines Bausteins werden 2 Prinzipien unterschieden:

• Tri-state

• Open collector

5V

GND

T2

T1

5V

GND

T

5V

GND

T2

T1

CS

CS

Baustein 1

Baustein 2

R

GND

T

Baustein 1

Baustein 2

Tri-State Open Collector

Bild 2.6: Ausgänge digitaler Bausteine

Beim Tri-State Ausgang existieren 3 mögliche Zustände:

• Ausgang auf high, T1 ist durchgeschaltet

• Ausgang auf low, T2 ist durchgeschaltet

• Ausgang hochohmig, kein Transistor wird angesteuert

Werden mehrere Ausgänge parallel auf eine Leitung geschaltet, muss über einenzusätzlichen Eingang (CS: chip select, auch CE chip enable) selektiert werden,

welcher Baustein gerade aktiv ist und die Leitung auf low oder high schalten darf.Sonst könnte ein Baustein T1 ansteuern, ein anderer T2 und damit einen Kurz-schluss mit der Zerstörung der Transistoren der Ausgangsstufe.

Beim Open-Collector Ausgang existiert am Ausgang nur ein Transistor, der denAusgang entweder hochohmig oder auf low schalten kann. Damit überhaupt einhigh Signal erzeugt werden kann, muss die Ausgangsleitung über einen so genann-ten Pull-Up-Widerstand auf 5V Pegel gelegt werden. Werden mehrere Ausgängeparallel geschaltet, ist ein separater CS-Eingang nicht erforderlich. Durch den OC-Ausgang wird indirekt eine UND-Verknüpfung realisiert (Tabelle 2.1).

Baustein 1 Baustein 2 Ausgang

0 0 00 1 01 0 01 1 1

Tabelle 2.1: Ausgang mehrerer OC-Bausteine

Verwendet wird der OC-Ausgang häufig zur Meldung eines Fehlers, der mit demZustand 0 signalisiert wird. Im fehlerfreien Betrieb liegt auf der gemeinsamen Lei-tung über den Pull-Up Widerstand 5V an. Sobald ein Baustein einen Fehler auf-weist, wird dieser über das Schalten des Transistors signalisiert und die gemeinsa-me Leitung nimmt den Zustand 0 an.

Tri-StateOpen Collector

Chip Select/EnablePull-Up-Widerstand

Page 9: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 9/84

5

2.2 Informationsdarstellung

Mit einer Leitung können somit nur 2 Informationen (0/1) dargestellt werden. Um jedoch Zahlen oder Buchstaben abbilden zu können, müssen mehrere Informatio-nen darstellbar sein. Hierzu werden mehrere Leitungen parallel geschaltet.

D0D1D2D3D4D5D6D7

00000000

10000000

01000000

11000000

01111111

11111111

28 = 256 Zustände

Zustand

0

1

2

3

254

255

=

=

=

=

=

=

Bild 2.7: Parallelisierung von Datenleitungen

Die Anzahl möglicher Zustände n wird berechnet aus der Anzahl der zur Verfü-gung stehenden Leitungen k zu:

k n 2= (1)

Der sich aus den einzelnen Leitungen D7…D0 ergebende Zustand wird aus demDualzahlensystem berechnet (Bild 2.8). Bei der Entwicklung auf einem PC kannder im Betriebssystem Window unter Zubehör vorhandene Rechner in der Ansicht

„Wissenschaftlich“ genutzt werden.

D0D1D2D3D4D5D6D7

2021222324252627

10101101

LSBMSB

1x27

1x1280x26

0x641x25

1x321x24

0x160x23

0x81x22

1x40x21

0x21x20

1x1 = 181

Bild 2.8: Umrechnung Binär in Dezimal

Man bezeichnet das Bit mit dem höchsten Wert (D7 = 128) als MSB (most signifi-cant bit), das Bit mit dem niedrigsten Wert (D0 = 1) als LSB (least significant bit).

Im Bereich der Mikrocontroller wird häufig mit dem Hexadezimalzahlensystemgearbeitet. Dieses System bietet den Vorteil, die 8-Bit breite Darstellung in zwei 4-Bit breite Elemente zu zerteilen und diesen direkt einen Wert zuzuordnen. 4-Bit

Binärzahl

MSB / LSB

Page 10: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 10/84

6

breite Elemente entsprechen genau einer Interpretation (0…F) im hexadezimalenSystem (Bild 2.9)

1111

0111

1011

0011

1101

0101

1001

0001

1110

0110

1010

0010

1100

0100

1000

0000

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

F

E

D

C

B

A

9

8

7

6

5

4

3

2

1

0

DezimalHexa-

DezimalD0D1D2D3

Bild 2.9: Binär-Dezimal-Hexadezimal

Eine Umrechnung einer 8-Bit breiten Darstellung kann somit einfacher erfolgen,ein Beispiel hierzu zeigt Bild 2.10.

D0D1D2D3D4D5D6D7

2021222324252627

10101101

1x23

1x8

0x22

0x4

1x21

1x2

1x20

0x1

0x23

0x8

1x22

1x4

0x21

0x2

1x20

1x1

= 5= 11 = 11x16 + 5 = 181Dezimal

Hexa-

dezimal= 5= B = B5

Bild 2.10: Umrechnung 8-Bit breite Darstellung in eine Hexadezimalzahl

Bei Mikrcontroller besteht eine unterschiedliche Anzahl an Leitungen, die parallelDaten übertragen. Es werden unterschieden.

• 8 Bit

• 16 Bit• 32 Bit

Die Programmierung eines Mikrocontrollers erfolgt in der Regel in der Program-miersprache C. Hier stehen dem Entwickler unterschiedliche Variablentypen zurVerfügung (Bild 2.11).

Binärzahl

Anzahl Bits

Page 11: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 11/84

7

char

Bits8 16 32 64

short

int

unsigned int

unsigned long

long

float

double

1 Byte

unsignedshort

0…255

0…255

-127…+127

-32767…32767

0…65535

0…429467295

-2147483647…-2147483647

+/- 1,2·10 -38 …+/-3,4 · 10 +38

+/- 2,2·10 -308 …+/-1,8 · 10 +308

2 Byte

4 Byte

8 Byte

Bild 2.11: Variablentypen in C und deren Repräsentierung (nach /1/)

Ein char repräsentiert prinzipiell ein Zeichen. Jedem Zeichen ist jedoch wieder einWert zugeordnet. Der Mikcontroller unterscheidet nicht, ob es sich um ein Zeichenoder ein Wert handelt, er verarbeitet lediglich 8 Leitungen parallel.

Für die Verarbeitung von kleinen Werten ist in C das short bzw. unsigned shortvorgesehen. Hierbei ist zu unterscheiden, ob es ein vorzeichenbehafteter Wert(short) oder ein ausschließlich positiver Wert (unsigned short) ist (Bild 2.12).

01

2

255

0000 0000

0000 0001

0000 0010

1111 1111

2541111 1110

3253 0000 00111111 1101

.

.

..

.

.

1270111 1111128

129

1000 0000

1000 0001

unsignedshort

126 0111 11101301000 0010

01

2

-1

0000 0000

0000 0001

0000 0010

1111 1111

-21111 1110

3-3 0000 00111111 1101

.

.

..

.

.

1270111 1111-128

-127

1000 00001000 0001

short

126 0111 1110-1261000 0010

Bild 2.12: Werterepräsentation eines short und unsiged short

Problematisch sind numerische Operationen, bei denen der Wertebereich verlassenwird. Hierzu dient folgendes Beispiel:

main()

unsigned short a;

a=255;

a++;

1 1 1 1 1 1 1 1

0 0 0 0 0 0 0 01

carry

Beim Inkrementieren (a++) der Variablen a wird der Wertebereich verlassen undals Ergebnis wird der Wert a=0 interpretiert. Hierbei entsteht gedanklich ein Über-trag (carry) auf die nächst höherer Bit-Stelle.

Alternativ kann der Zahlenbereich aber auch unterschritten werden, wie folgendesBeispiel zeigt:

main()

unsigned short a;

a=0;

a--;

0 0 0 0 0 0 0 0

1 1 1 1 1 1 1 1negative

charshortint

longfloatdouble

Übertragcarry

Page 12: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 12/84

8

In diesem Fall würde als Ergebnis a=255 erscheinen, es entsteht ein Überlauf insNegative (negativ). Die Variable a müsste als negative Zahl interpretiert werden.

Negative Zahlen werden im so genannten Zweierkomplement dargestellt. Hierbeiwird das MSB als negative Zahl interpretiert (Bild 2.12).

D0D1D2D3D4D5D6D7

2021222324252627

10101101

LSBMSB

-1x27

1x(-128)0x26

0x641x25

1x321x24

0x160x23

0x81x22

1x40x21

0x21x20

1x1 = -75

Bild 2.12: Umrechnung Zweierkomplement

Bei Verwendung negativer Zahlen kann ein Überlauf (overflow) in beide Richtun-gen entstehen, wie folgende Beispiele zeigen:

main()

short a;

a=127;a++;

0 1 1 1 1 1 1 11 0 0 0 0 0 0 0

overflow

a=-128

main()

short a;

a=-128;

a--;

1 0 0 0 0 0 0 0

0 1 1 1 1 1 1 1overflowa=127

In beiden Beispielen wird der Zahlenkreis aus Bild 2.12 beim In- bzw. Dekremen-tieren weiter durchlaufen, so dass fehlerhafte Werte entstehen.

Eine weitere Problematik ergibt bei der Verarbeitung von Werten mit Nachkom-

mastellen, wenn z.B. zwei Zahlen a=2,8 und b=1,6 addiert werden sollen. Zur Ver-arbeitung bieten sich 2 Möglichkeiten an:

• Festkomma,• Gleitkomma.

Bei der Festkomma-Arithmetik sind zunächst alle Werte mit einem Faktor k zumultiplizieren, so dass sich keine Nachkommastellen mehr ergeben. Anschließenderfolgt die Verarbeitung und am Ende wird wieder durch den Faktor k dividiert(Bild 2.13). Wenn die Division erst am Ende der gesamten Verarbeitung erfolgt,werden keine Rundungsfehler auftreten. Problematisch ist dabei, dass es insbeson-dere bei Multiplikationen sehr schnell zu einem Überkauf kommen kann, so dassdann bereits während der Verarbeitung durch den Faktor k geteilt werden muss.

2,8

1,6

x10

x10

28

16

Faktor

kWert Short

Σ 44

WertFaktor

k

/10 4,4

Bild 2.13: Verarbeitung von Festkommawerten

Wird als Faktor ein Vielfaches der Basis 2 genommen, kann eine Mulitplikationund Division einfach durch eine Schiebeoperation der einzelnen Bits nach links(Multiplikation) oder rechts (Division) erfolgen (Bild 2.14)

negativ

Negative ZahlenZweierkomplement

Überlaufoverflow

FestkommaGleitkomma

Page 13: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 13/84

9

0 0 1 0 1 0 1 143

•2 86 0 1 0 1 0 1 1 0

•4 172 1 0 1 0 1 1 0 0

÷2 21 0 0 0 1 0 1 0 1

÷4 10 0 0 0 0 1 0 1 0

<<1 (schiebe 1 nach links)

<<2 (schiebe 2 nach links)

>>2 (schiebe 2 nach rechts)

>>1 (schiebe 1 nach rechts)

Bild 2.14: Schiebeoperationen zum Dividieren und Multiplizieren

Mikrocontroller können Schiebeoperationen in einem Bearbeitungstakt durchfüh-ren während für Multiplikationen und insbesondere für Divisionen häufig mehrereArbeitstakte aufgewendet werden müssen. Aus diesem Grund hat die Normierungauf Basis 2 in der Praxis ihre Berechtigung.

Gleitkommawerte werden über Mantisse und Exponent dargestellt (Bild 2.15).

V E7 E0 M1 M23

02231

2-1 2-2 2-3 2-23

2-222-21

1 0 1 1 0 10

M1V M2 M3 M21 M22 M23

1 0 11

·2

1 1 10

E0E7

27 26 25 24 23 22 21 20

float

(single precision)

Byte 0Byte 1Byte 2Byte 3

1,xxxx

1

M0

Bild 2.15: Darstellung Gleitkommazahl (float – single precision)

Eine Gleitkommazahl wird immer normiert auf einen Wert 1,xxx, so dass der Wert

1 für die Mantisse (Stelle M0) entfallen kann. Diese Normierung ist immer mög-lich, da die Gleitkommadarstellung mit einem Exponenten der Basis 2 operiert. EinWert größer gleich 2,xxx könnte noch einmal durch 2 dividiert werden.

Zu unterscheiden ist die Darstellung der Form float (single precision) und double(double precision). Der Variablentyp float verwendet 4 Bytes (Aufteilung Mantisseund Exponent siehe Bild 2.15). Der Variablentyp double benötigt 8 Bytes (Mantis-se 52 Bit, Exponent 11 Bit, Vorzeichen 1 Bit).

Zur Verarbeitung von Gleitkommazahlen benötigt ein Mikrocontroller eine speziel-le Recheneinheit, die FPU (Floating Point Unit). Die meisten Mikrocontroller ver-fügen aus Kosten-/Nutzengründen nicht über eine FPU. Prinzipiell ist eine Verar-beitung auch ohne FPU möglich, jedoch wird dann eine hohe Rechenzeit benötigt,

in der der Mikrocontroller für andere Aufgaben nicht zur Verfügung steht. Ausdiesem Grund sollte die Verarbeitung von Festkommawerten bekannt sein.

2.3 Informationsverarbeitung

Da auf Mikrocontroller häufig eine Manipulation einzelner Bits innerhalb einerVariablen durchgeführt werden muss, sollen hier kurz die elementaren Operationenwiederholt werden.

Die wesentlichen Operationen auf digitaler Ebene sind in Bild 2.16 dargestellt.

Schiebeoperation

GleitkommaMantisseExponent

Page 14: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 14/84

10

&E1

E2A ≥1

E1

E2A 1E1 A

E1 E2 A

0 0 00 1 11 0 11 1 1

E1 E2 A

0 0 00 1 01 0 01 1 1

E A

0 11 0

UND

AND

ODER

OR

NICHT

NOT

Bild 2.16: Elementare logische Verknüpfungen

Bei einer logischen Verknüpfung von Variablen werden die jeweiligen Bits mitein-ander verknüpft. Beispiele hierzu zeigt Bild 2.17.

main()

short a,b,c;

a=0x5B;

b=0x92;

c=a&b;

0 1 0 1 1 0 1 1

1 0 0 1 0 0 1 0

0 0 0 1 0 0 1 0

a = 0x5B

b = 0x92

c = 0x12

main()

short a,b,c;

a=0x5B;

b=0x92;

c=a|b;

0 1 0 1 1 0 1 1

1 0 0 1 0 0 1 0

1 1 0 1 1 0 1 1

a = 0x5B

b = 0x92

c = 0xDB

main()

short a,b;

a=0x5B;

b=~a;

0 1 0 1 1 0 1 1

1 0 1 0 0 1 0 0

a = 0x5B

b = 0xA4

Bild 2.17: Logische Verknüpfungen von VariablenDie Operation „~“ ist nicht zu verwechseln mit der Operation „!“ in der Program-miersprache C. Während die Operation „~“ lediglich die einzelnen Bits einer Vari-ablen invertiert, wird mit der Operation „!“ das Zweierkomplement einer Zahl be-rechnet.

Das Setzen bzw. Löschen einzelner Bits innerhalb einer Variablen, ohne dabei dieübrigen Bits der Variablen zu beeinflussen, benötigt eine entsprechende ODER-bzw. UND-Verknüpfung, wie Bild 2.18 zeigt.

main()

short a,b,c;

a=0x5B;

b=0x06;c=a|b;

0 1 0 1 1 0 1 1

0 0 0 0 0 1 1 0

0 1 0 1 1 1 1 1

a = 0x5B

b = 0x06

c = 0x5F

main()

short a,b,c;

a=0x5B;

b=0xF9;

c=a&b;

0 1 0 1 1 0 1 1

1 1 1 1 1 0 0 1

0 1 0 1 1 0 0 1

a = 0x5B

b = 0xF9

c = 0x59

main()

short a,b,c;

a=0x5B;

b=~0x06;

c=a&b;

Setzen von Bit 1 und 2

Löschen von Bit 1 und 2

0 1 0 1 1 0 1 1

1 1 1 1 1 0 0 1

0 1 0 1 1 0 0 1

a = 0x5B

b = 0xF9

c = 0x59

Bild 2.18: Setzen und Löschen einzelner Bits in Variablen

UNDODERNICHT

Operanden&|~

Bit Setzen

Bit Löschen

Page 15: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 15/84

11

3 Entwicklungsumgebung für Mikrocontroller

Zur Entwicklung lauffähiger Programme auf einem Mikrocontroller wird übli-cherweise eine IDE und ein Debugger eingesetzt, welche im Folgenden vorgestelltwerden.

3.1 Programmierung von Mikrocontrollern

Programme für Mikrocontroller werden heutzutage in der Regel in der Program-miersprache C entwickelt. Vereinzelt kommt die Programmiersprache C++ zumEinsatz, die jedoch höhere Ressourcen (Speicherplatz, Taktrate) des Mikrocontrol-lers voraussetzt. Für Programmteile, bei denen es auf eine besonders kurze Re-chenzeit ankommt, wird in seltenen Fällen in Assembler programmiert. Die prinzi-pielle Funktionsweise von Assembler wird im Kapitel 5 vorgestellt.

Um ein Programm, welches in der Programmiersprache C geschrieben wurde, inein ausführbares Programm für einen Mikrocontroller (unter Windows die EXE) zutransferieren, muss dieses übersetzt werden. Bild 3.1 zeigt den prinzipiellen Ablauf

eines solchen Übersetzungsvorgangs (nach /3/, /4/).

Textdatei.c

Präprozessor

Text-Editor

Textdatei.asm

Compiler

Header.h

Message

Stack-

Information

Präprozessor

Assembler

Objektmodul.obj

Textdatei.lst

(Listfile)

Linker

Bibliothek.obj

Textfile.xxx(Optionen)

Textdatei.xxx

(Mapping)

Datei.xxx

Textfile.xxx(Optionen)

Bild 3.1: Übersetzung eines C-/Assembler-Programms in eine ausführbare Datei

Ausgangspunkt für die Übersetzung eines C-Programms ist eine Textdatei (Textda-

tei.c im Bild 3.1), in der die Anweisungen des Programms stehen. Diese Datei wirdvom Präprozessor und Compiler verarbeitet. Der Präprozessor verarbeitet Makros,Definitionen (#define) und eingebundene Dateien (#include), in der Regel Header-files. Zur Übersetzung können eine Reihe von Optionen eingestellt werden. DieÜbersetzung gibt eine Assembler-Textdatei aus. Diese Datei wird wiederum vomAssembler übersetzt in eine Objektdatei. Über ein Listfile werden Informationenzum Assemblerprogramm ausgegeben, die später der Debuggger (siehe Kapitel xx)benötigt werden. Abschließend wandelt der Linker das Objektmodul in eine aus-führbare Datei um. Hierzu können wiederum eine Reihe von Optionen eingestelltwerden. In der Regel wird sich ein Programm aus mehreren Textdateien und ggf.auch aus vorübersetzten Textdateien, den Bibliotheksmodulen, zusammensetzen.

Die einzelnen Entwicklungsprogramme (Texteditor, Präprozessor, Compiler, As-sembler, Linker) werden i.d.R. auf einem PC ausgeführt. Um eine bessere Über-

C-ProgrammAssembler

PräprozessorCompilerAssemblerBibliothek

Linker

Page 16: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 16/84

12

sicht zu bekommen, wurden so genannte IDE (integrated development enviroment,integrierte Entwicklungsumgebung) zur Verfügung gestellt.

In dem vorlesungsbegleitenden Labor wird die IDE softune der Firma fujitsu mic-rocontroller verwendet (Bild 3.2).

Text-Editor

Ausgabe-Fenster

Projekt-

Verwaltung

compile

make

build

Bild 3.2: IDE softune der Firma fujitsu microcontroller

Das Programm wird im Tex-Editor erstellt. Häufig besteht ein ausführbares Pro-gramm aus mehreren Einzeldateien, die in einem Projekt zusammengefasst sind.Aus diesem Grund wird von den IDEs neben den einzelnen Programmdateien zu-sätzlich eine Projektdatei (Datei.prj) erstellt und gespeichert.

Soll nur eine Textdatei übersetzt werden (C-Compiler oder Assembler), ist derButton COMPILE zu aktivieren. Sollen alle Dateien des Projektes übersetzt wer-den und eine ausführbare Datei erzeugt werden, ist der Button BUILD zu betätigen.Sollen lediglich die geänderten Module neu übersetzt werden und von den nichtveränderten Modulen die bereits erstellten Objekt-Module zur Erzeugung einer

ausführbaren Datei verwendet werden, ist der Button MAKE zu wählen.Zum Projekt können eine Reihe von Einstellungen vorgenommen werden (Bild3.3). Unter General wird der Projekttyp (Erstellung einer ausführbaren Datei: Lo-admodul), der Projektname und die zugehörigen Dateiordner für die Ausgabedatei-en definiert. Unter MCU wird der Typ des Mikrocontrollers, für den die ausführba-re Datei erzeugt werden soll, ausgewählt und spezielle Einstellungen vorgenom-men. Die Optionen für den C-Compiler werden ebenfalls mit diesem Fenster ver-waltet (Bild 3.4).

Eine für Mikrocontroller wichtige Einstellmöglichkeit ist die Art der Übersetzungdes C-Programms mit den Anforderungen:

• optimiert für schnelle Programmausführung• optimiert für wenig Speicherplatzbedarf

IDE softune

project

compilebuildmake

CompilerOptimierung

Page 17: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 17/84

13

Diese beiden Anforderungen widersprechen einander, d.h. eine Auslegung aufschnelle Programmausführung benötigt einen erhöhten Speicherplatzbedarf undumgekehrt. Aus diesem Grund existieren häufig noch Zwischenstufen. Für denBeginn einer Entwicklung und aus Didaktischen Gründen wird empfohlen, zu-nächst die Variante ohne Optimierung (None) zu wählen.

Menü: Projekt – Setup Project …

Bild 3.3: Projekteinstellungen

Bild 3.4: Einstellungen des C-Compilers

Die Einstellungen beim Linker umfassen unter Anderem die Verwendung des zurVerfügung stehenden Speichers (Bild 3.5). Hierauf wird im Kapitel xx näher ein-gegangen.

Empfehlung:Ohne Optimierung

SpeicherbereicheLinker

Page 18: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 18/84

14

Bild 3.5: Einstellungen des Linkers

Die Hersteller von Mikrocontrollern stellen dem Entwickler üblicherweise so ge-

nannte Templates zur Verfügung. Templates sind kleine Beispielprojekte, die sämt-liche Einstellungen auf einen Standardwert gesetzt haben und die ein ausführbaresProgramm erzeugen. Üblicherweise beginnt eine Entwicklung auf Basis eines sol-chen Templates.

3.2 Programmer

Moderne Mikrocontroller sind häufig mit einem Flash-Speicher ausgestattet. DieÜbertragung eines ablauffähigen Programms auf den Mikrocontroller erfolgti. d. R. über eine serielle Schnittstelle (typisch RS232, Bild 3.6). Hierzu wird einspezielles Programm (Flash-Programmer) benötigt.

RS 232

Steuerung mit

Mikrocontroller

Entwicklungsumgebung

Bild 3.6: Flashen des ablauffähigen Programms eines Mikrocontrollers

Nach dem Download des Programms wird dieses selbständig ausgeführt. In derEntwicklungsphase kann ein Programm jedoch Fehler enthalten. Zur Fehleranalysewird ein Programm (Debugger) benötigt, welches über eine geeignete Schnittstelleden Mikrocontroller analysieren kann.

3.3 Debugger

Werden Programme für einen PC entwickelt, kann die Programmausführung direktam PC beobachtet werden. Dies kann bei Programmen für Mikrocontroller so di-rekt nicht erfolgen, da das Programm lediglich auf dem Mikrocontroller abläuft,der i.d.R. nicht über einen eigenen Bildschirm verfügt. Es werden zwei Variantenvon Debuggern unterschieden:

• In-Circuit-Emulator• In-System-Debugger

Template

Programmer

Page 19: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 19/84

15

Beim In-Circuit-Debugger wird der Mikrocontroller ersetzt durch einen Emulator.Dieser verhält sich an den Anschlüssen des Emulator-Tastkopfes wie der ursprüng-liche Mikrocontroller, ist aber intern mit einer erheblich höheren Rechenleistungausgestattet. Somit kann der PC über den Emulator den Ablauf des Programmsanalysieren. In-Circuit Emulatoren verfügen über die größten Analysemöglichkei-ten, allerdings sind diese Geräte sehr teuer.

Emulator

Emulator-

Tastkopf

Bild 3.7: In-Circuit Emulator

Eine kostengünstige Alternative sind Mikrocontroller, die über eine integrierteDebug-Schnittstelle verfügen (In-System Debugger). Eine solche Schnittstelle wur-de unter dem Begriff JTAG bekannt, die eigentlich eine Arbeitsgruppe mehrererFirmen zur Standardisierung einer Testschnittstelle war (Joint Test Action Group).Die Kommunikation zum PC erfolgt über ein spezielles Interface.

RS 232

Mikrocontroller mitDebug-Schnittstelle

Bild 3.8: In-System Debugger

Alternativ gibt es Mikrocontroller, die eine Debug-Schnittstelle intern zur Verfü-gung stellen. Zum Verwalten dieser Schnittstelle ist ein Monitor-Programm erfor-

derlich, welches parallel zum eigentlichen Programm abläuft. Das Monitor-Programm stellt damit das Interface dar zwischen der internen Debug- und einerseriellen Schnittstelle des Mikrocontrollers. Nachteilig bei dieser Variante ist derSpeicherbedarf des Monitor-Programms und die zusätzliche Rechenzeit, die dasProgramm benötigt. Zusätzliche Rechenzeit ist immer dann erforderlich, wenn einDatenaustausch zwischen PC und Mikrocontroller über die serielle Schnittstelleerfolgen soll. Der Vorteil dieser Lösung ist die kostengünstige Realisierung, dakeine weitere Hardware erforderlich ist.

3.4 Debugger Accemic MDE

Im vorlesungsbegleitenden Labor wird ein In-System Debugger der Firma accemic

verwendet. Die wichtigsten Funktionen werden in diesem Kapitel kurz vorgestellt.Als Template dient ein einfaches Programm, welches im Bild 3.9 dargestellt ist.

In-System Debugger

In-Circuit-Emulator

Monitor-Program

Page 20: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 20/84

16

#include “irq.h” // Zugriff auf Funktion initIRQ()

short t; // globale Variable

void toggle(void) // Funktion invertiert globale Variable

t=~t;

void main(void)

short i; // lokale Variable

initIRQ(); // Freigabe Interrupt (Monitor-Programm)

i = 0; // lokale Variable initialisieren

t = 1; // globale Variable initialisieren

while( 1 ) // Endlosschleife

i++; // lokale Variable inkrementieren

if (i > 3) // wenn lokale Variable größer 3

i=0; // lokale Variable zuruecksetzen

toggle(); // Funktionsaufruf zum Invertieren globale Variable

Bild 3.9: Template zum Test des Debuggers

Nach der Erzeugung eines lauffähigen Programms unter der IDE softune wird derDebugger gestartet. Wird der Mikrocontroller das erste Mal verwendet oder ist einSystemabsturz des Monitor-Programms aufgetreten, muss zunächst das Monitor-Programm (Kernel) geladen werden (Bild 3.10). Ist das Monitor-Programm bereitsauf dem Mikrocontroller vorhanden, genügt ein Starten der seriellen Verbindung(connect).

Connect-Butten

Menü: Start - Connect

wenn Monitor-Programmbereits geladen wurde

Menü: Preference – Processor …

zum Laden des Monitor-Programms

Bild 3.10: Verbindungsaufbau mit dem Mikrocontroller.

ACHTUNG: Es ist darauf zu achten, dass der Mikrocontroller eingeschaltet unddie serielle Kabelverbindung gesteckt ist.

HINWEIS: Tritt eine Fehlermeldung beim Verbindungsaufbau auf, kann häufig einReset (Aus-/Einschalten) des Mikrocontrollers den Fehler beheben.

Accemic MDEVerbindungsaufbau

Page 21: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 21/84

17

Nach dem Start des Debuggers muss das lauffähige Programm (project.abs) gela-den werden, wenn es nicht bereits automatisch geladen wurde. Das Laden des Pro-gramms erfolgt über das Menü: Load File oder durch Aktivieren des entsprechen-den Buttons. Nach dem Laden des Programms werden standardmäßig folgendeFenster angezeigt (Bild 3.11):

• Variablen-Browser• Datei- und Funktions-Browser• C-Quelltext• Assembler-Quelltext

Variablen

Browser C-Quelltext

Assembler

Quelltext

Datei- und

Funktions-

Browser

Bild 3.11: Standardansicht des Debuggers

Der Mikrocontroller ist zunächst angehalten, der nächste auszuführende Befehlwird im Quelltextfenster blau markiert. Im Variablen-Browser wird die lokale Va-riable i zunächst nicht angezeigt, da der Befehl zur Deklaration noch nicht abgear-beitet wurde. Ein Aktivieren des Reiters „Global“ im Variablen-Browser zeigt dieglobale Variable t, die bereits vorab deklariert wurde.

Zum Ausführen des Programms existieren unterschiedliche Möglichkeiten (Bild3.12). So können nur einzelne Programmzeilen bearbeitet werden (mit der OptionUnterfunktionen zu überspringen oder hineinzuspringen) oder es wird das PRo-

gramm permanent ausgeführt.

Reset (Programm beginnt erneut bei main)

Start

Nächste Programmzeile (Funktionen überspringen)

Stopp des Programms

Nächste Programmzeile (Funktionen hineinspringen)

Funktion beenden

Programmzeilen schrittweise in Assembler ausführen

Bild 3.12: Funktionen zur Kontrolle des Programmablaufs

Programm laden

Variablen-/Datei-/Funktions-BrowserQuelltextanzeige

Funktionen zurProgrammausführung

Page 22: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 22/84

18

Gerade durch die Möglichkeit, Programmzeilen einzeln ausführen zu lassen, kannin Verbindung mit dem Variablen-Browser sehr gut die Funktionsweise des Pro-gramms analysiert werden.

Soll das Programm bis zu einer bestimmten Stelle ohne Unterbrechung ausgeführtwerden, und an diesem Punkt stoppen, müssen Unterbrechungspunkte (Break-

points) gesetzt werden (Bild 3.13).

Bild 3.13: Setzen von Unterbrechungspunkten (Breakpoints)

Zum Starten wird der Button betätigt. Das Programm wird bis zum Breakpointausgeführt. Insgesamt können mit accemic mde bis zu 4 Breakpoints gesetzt wer-den. Bei der Unterbrechung wird die Zeile, in der der Breakpoint gesetzt ist, nichtmehr ausgeführt. Hierzu muss nach der Unterbrechung der Einzelschrittmodus

aktiviert werden.

AUFGABE: Analysieren Sie das Template-Programm mit dem Debugger. NutzenSie dabei den Variablen-Browser und den Einzelschrittmodus bzw. Breakpoints.Wie verändert sich die lokale und globale Variable?

Ergebnis

Breakpoint

Page 23: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 23/84

19

4 Speicher

Das Programm, welches der Mikrocontroller verarbeitet und sämtliche Daten müs-sen in einem Speicher abgelegt werden. Das Grundprinzip eines Speichers verdeut-licht Bild 4.1.

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Demultiplexer

D a

t e n

1 0 1 0

A0A1A2A3

1

0

1

0

1

0

0

1D0

D1

D2

D3

D4

D5

D6

D7

Adresse

Bild 4.1: Grundprinzip Speicher

Bei dem hier dargestellten Speicher wird an den Leitungen der Adresse, dem sogenannten Adressbus, ein Datum vorgegeben. Ein Demultiplexer aktiviert gemäßder binärcodierten Adresse eine Leitung. Über Speicherelemente (hier vereinfachtDioden) wird definiert, welche Datenleitung aktiviert werden. Im obigen Beispielverfügt der Speicher über 8 Datenleitungen, so dass je Adresse 1 Byte ausgelesen

werden kann.Mit dem in Bild 4.1 dargestellten Speicher können insgesamt 16 Byte unterschied-liche Daten gespeichert werden, wozu ein 4-Bit breiter Adressbus ausreichend ist.Soll z.B. ein Speicher von 1MByte byteweise adressiert werden, sind 20 Adresslei-tungen erforderlich.

Speicher verfügen typischerweise über 8, 16 oder 32 parallele Datenleitungen, d.h.sie werden entweder byte- oder wort- oder doppelwortweise organisiert. EinZugriff auf die Daten ist demnach nur in diesen Datenbreiten möglich.

Grundsätzlich werden Speicher unterschieden in Festwertspeicher, genannt ROM(Read Only Memory) und Schreib-/Lesespeicher, genannt RAM (Random Access

Memory. Eine Übersicht aktuell verwendeter ROM-Typen zeigt Tabelle 4.1. BeiMikrocontrollern werden aktuell werden OTP oder Flash-Speicher verwendet.

Beschreiben und elektrisches Löschen, , max. 104…106

Löschzyklen möglichµsFLASH

Beschreiben und elektrisches Löschen, teilweise speziellesProgrammiergerät erforderlich, max. 104…106 Löschzyklenmöglich

msElectrical EPROMEEPROM

Beschreiben mit speziellem Programmiergerät, Löschen fürerneutes Beschreiben durch UV-Licht

minErasable PROMEPROM

Allgemeiner Baustein, der einmalig mit speziellemProgrammiergerät beschrieben werden kann,für kleinere Stückzahlen

minProgrammable-ROMOne Time PROM

PROMOTP

Spezieller Speicherbaustein, wird durch den Herstellprozessprogrammiert. Nur für große Stückzahl geeignet, kostengünstig

-Masken-ROM

MROM

HinweisProgrammier-Dauer

BezeichnungTyp

Beschreiben und elektrisches Löschen, , max. 104…106

Löschzyklen möglichµsFLASH

Beschreiben und elektrisches Löschen, teilweise speziellesProgrammiergerät erforderlich, max. 104…106 Löschzyklenmöglich

msElectrical EPROMEEPROM

Beschreiben mit speziellem Programmiergerät, Löschen fürerneutes Beschreiben durch UV-Licht

minErasable PROMEPROM

Allgemeiner Baustein, der einmalig mit speziellemProgrammiergerät beschrieben werden kann,für kleinere Stückzahlen

minProgrammable-ROMOne Time PROM

PROMOTP

Spezieller Speicherbaustein, wird durch den Herstellprozessprogrammiert. Nur für große Stückzahl geeignet, kostengünstig

-Masken-ROM

MROM

HinweisProgrammier-Dauer

BezeichnungTyp

Tabelle 4.1: Übersicht ROM

AdressbusDatenbus

RAM / ROM

MROMOTPEPORMEEPROMFLASH

Page 24: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 24/84

20

RAM-Bausteine ermöglichen das Lesen und Schreiben einzelner Speicherstellenmit einer Zugriffszeit im Bereich weniger Nanosekunden. Tabelle 4.2 gibt einenÜberblick über aktuellen RAM-Varianten. Mikrocontroller verwenden üblicher-weise SRAM-Bausteine.

Ferromagnetischer Speicher, mind. 1012 Schreib- /Lesezyklen, mind. 20…40 Jahre Speicherung auchohne Spannungsversorgung, teuer

mehrere 10nsBis 10MBit

Ferroelektrisches RAMFRAM

Kapazitiver Speichereffekt, geringste Zugriffszeit undgrößte Speicher, benötigt kontinuierliche Refresh-Zyklenzum Halten der Information, günstig

ns…wenige ns100.1000MBit

Dynamisches RAM(Synchrones DRAM)

(Double Data Rate SDRAM)

DRAM(SDRAM)

(DDR-RAM)

Benötigt keine Refresh-Zyklen, aufgebaut aus Halbleiter(Flip-Flop), Informationsverlust bei Spannungsausfall(ggf. Batteriegepuffert)

wenige ns…wenige 10nsbis 4MBit

Statisches RAMSRAM

HinweisZugriffszeitSpeichergröße

BezeichnungTyp

Ferromagnetischer Speicher, mind. 1012 Schreib- /Lesezyklen, mind. 20…40 Jahre Speicherung auchohne Spannungsversorgung, teuer

mehrere 10nsBis 10MBit

Ferroelektrisches RAMFRAM

Kapazitiver Speichereffekt, geringste Zugriffszeit undgrößte Speicher, benötigt kontinuierliche Refresh-Zyklenzum Halten der Information, günstig

ns…wenige ns100.1000MBit

Dynamisches RAM(Synchrones DRAM)

(Double Data Rate SDRAM)

DRAM(SDRAM)

(DDR-RAM)

Benötigt keine Refresh-Zyklen, aufgebaut aus Halbleiter(Flip-Flop), Informationsverlust bei Spannungsausfall(ggf. Batteriegepuffert)

wenige ns…wenige 10nsbis 4MBit

Statisches RAMSRAM

HinweisZugriffszeitSpeichergröße

BezeichnungTyp

Tabelle 4.2: Übersicht RAM

Wie bereits oben erwähnt, sind Adress- und Datenleitungen für den Zugriff auf denSpeicher erforderlich. Zusätzlich sind weitere Steuersignale erforderlich, die dieZugriffsart, Lesen oder Schreiben, definieren und die den Speicherbaustein aktivie-

ren. Steuersignale arbeiten üblicherweise mit negativer Logik, d.h. das Signal istaktiv bei Logikpegel 0. Gekennzeichnet wird die negative Logik mit einem Quer-strich über der Signalbezeichnung. Einen typischen Schreib-/Lesezugriff einesSRAM beschreibt Bild 4.2.

32KByte(256KBit)

SRAM

A0

A14

CECE

OEOE

WEWE

D0

D7

Write Enable

Output Enable

Chip Enable

CECE OEOEWEWE Modus

1

0

0

0

X X

X: don‘t care

D0…D7: hochohmig

1 1

1 0

0 X

D0…D7: hochohmig

D0…D7: Lesen

D0…D7: Schreiben

Data valid

tOE

tACE

CECE

OEOE

tOE

tACE

D

Output enable access time: max 5ns

Chip enable access time: max 10ns

Adress

tAA

D Data valid

tAA Adress access t ime: max 10ns

Lese-Zugriff

tRC

tAA Read cycle time: min 10ns

Schreib-Zugriff

AdresstWP

tWC

tWP

tDW

Write pulse width: min 7ns

Data valid to write end: min 5ns

tAS Adress setup time: min 0ns

tWC Write cycle time: min 10ns

WEWE

Data valid

tDWtWP

tAS

tDH Data hold time: min 0ns

D

Bild 4.2: Zeitverhalten beim Schreib-/Lesezugriff eines SRAM (nach /5/)

Bei einem Lesezugriff wird zunächst die Adresse angelegt. Gleichzeitig kann dasChip Enable (CE) Signal aktiviert werden. Frühestens 10ns nach Anlegen der Ad-ressleitungen bzw. des CE-Signals sind die Signale auf den Datenleitungen gültigund können vom Mikrocontroller verarbeitet werden. Hierzu ist zusätzlich dasOutput Enable (OE) Signal zu aktivieren (low), welches mindestens 5ns vor dengültigen Daten erfolgen muss.

Beim Schreibzugriff kann unmittelbar nach dem Anlegen der Adresse das WriteEnable (WE) Signal zur Initiierung eines Schreibzugriffs aktiviert (low) werden.Der über das WE-Signal aktivierte Schreibzugriff muss mindestens 7ns dauern,wobei die Datenleitungen mindestens 5ns stabil angestanden haben müssen, bevor

DRAMFRAMSRAM

Zeitverhalten SRAMCE Chip Enable

WE Write EnableOE Output Enable

Page 25: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 25/84

21

das WE-Signal wieder deaktiviert (high) wird. Typischerweise wird bei der stei-genden Flanke des WE-Signals das aktuelle Datum in die Speicherstelle übernom-men. Da die Adressleitungen mindestens 10ns aktiviert bleiben müssen, benötigtder gesamte Schreibzugriff diese Zeit.

Die Lese- und Schreibzugriffsdauer ist mit entscheidend für die Geschwindigkeit

des Prozessors bei der Bearbeitung der Informationen.Der Zugriff auf den Speicher erfolgt durch die CPU (Central Processing Unit), aufdie im nachfolgenden Kapitel näher eingegangen wird. Bei der Anordnung derSpeicher werden zwei Architekturen unterschieden (Bild 4.3):

• Von Neumann Architektur

• Harvard Architektur

CPU

Daten

Speicher

Programm

Speicher

Steuerleitungen 2Adressbus 2Datenbus 2

Steuerleitungen 1Adressbus 1Datenbus 1

CPU

Daten/ProgrammSpeicher

SteuerleitungenAdressbusDatenbus

von Neumann

Architektur

Harvard

Architektur

Bild 4.3: Architektur der Speicheranordnung

Bei der von Neumann Architektur wird nicht zwischen Programm oder Daten un-terschieden, es gibt nur einen Adressbus. Hierdurch gibt es eine größere Flexibili-tät. Die Harvard-Architektur bietet zwei getrennte Speicher, jeweils einen Speicherfür Daten und Programm. Durch 2 getrennte Bussysteme kann der Zugriff schnellererfolgen.

Es sind auch Kombinationen denkbar, wie z.B. eine Harvard-Architektur, die an-schließend über einen Buskonverter auf einen gemeinsamen Speicher zugreift (Bild4.4). Dies ist im Mikrocontroller der Baureihe FR der Firma Fujitsu, der im vorle-sungsbegleitenden Labor verwendet wird, der Fall.

CPU

DatenSpeicher

(D-RAM)

ProgrammSpeicher

(I-RAM)

BusKonverter

Programm/ Datenspeicher

(RAM)

Bild 4.4: Kombinierte Architektur Harvard und von Neumann

Ein wichtiges Kriterium ist, ob es sich um internen (on board) Speicher des Mikro-controllers handelt, oder ob dieser extern zur Verfügung steht (Bild 4.5). Vorteilbei der externen Variante ist der flexible Ausbau des Speichers, je nachdem wieviel benötigt wird. Nachteilig ist der zusätzliche Fertigungsaufwand, da weitereBausteine benötigt werden, die gelagert, bestückt und verlötet werden müssen.Durch die hohen Taktraten auf dem Adress- und Datenbus kommt es bei externerAusführung zu erhöhter Störstrahlungsaussendung, so dass zusätzliche EMV-

Architekturvon NeumannHarvardKombinationen

Page 26: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 26/84

22

Maßnahmen erforderlich sind. Aus diesen Gründen wird in vielen Anwendungeneine Single Chip Lösung favorisiert. Viele Mikrocontroller stellen gar keinen ex-ternen Bus mit Adress-, Daten- und Steuerleitungen mehr zur Verfügung.

CPU

InternesRAM

InternesROM

I n t e r n e r

B u s

CPU

ExternesRAM

ExternesROM

I n t e r n e r

B u s

InternesRAM

InternesROM

E x

t e r n e r

B u s

Single Chip

Bild 4.5: Interner und Externer Speicher

Der im vorlesungsbegleitendem Labor eingesetzte Mikrocontroller MB91F364verfügt über:

• 2 KByte Boot-ROM• 256KByte Flash• 12KByte D-RAM (Daten)• 4 KByte RAM (Programm und Daten)• Kein Erweiterungsbus

Das Boot-ROM dient zum Hochfahren des Mikrocontrollers. Das dort abgelegteProgramm prüft, ob an der seriellen Schnittstelle ein definiertes Zeichen ange-kommen ist. Ist dies der Fall, werden die Daten in den Flash-Speicher geschrieben.Dieses Programm nennt sich „Bootstraploader“. Die Adressierung der unterschied-

lichen Bausteine erfolgt in der Regel linear, d.h. der gesamte zur Verfügung ste-hende Adressraum wird fortlaufend an die einzelnen Bausteine vergeben (Bild 4.6).Der gesamte Adressraum wird dabei unterteilt in unterschiedliche Bereiche, derengenaue Lage im Adressraum häufig einstellbar ist. Damit das aus dem C-Programmerstellte Programm in den richtigen Speicherstellen geladen wird, werden demLinker die einzelne Bereiche als Option mitgeteilt (Bild 3.5).

0000

64KByteFFFF

A0A15

16 Adressleitungen für 64KByte

0 000064KByte

0 FFFF

A0A15

18 Adressleitungen für 256KByte

64KByte

64KByte

64KByte

2 0000

2 FFFF

1 0000

1 FFFF

3 0000

3 FFFF

A16A17

CS=00

CS=01

CS=10

CS=11

Adressdekodierung

IO

RAM

ROM

Externes ROM

Bild 4.6: Aufteilung des Adressraums und Adressdekodierung

Stehen mehr als 16 Adressleitungen zur Verfügung, wird der Speicher häufig inSegmente aufgeteilt. Die Größe der Segmente ist unterschiedlich, ein Beispiel einer

Segmentierung in 64KByte Segmente zeigt Bild 4.6.

Häufig kann die Lage der einzelnen Segmente im Mikrocontroller eingestellt wer-den, d.h. die Adresscodierung kann umprogrammiert werden.

Internes RAM/ROMExternes RAM/ROMSingle Chip

SpeichersegmenteAdressdekodierung

Bootstraploader

Page 27: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 27/84

23

Bild 4.7 zeigt den Adressbereich des Mikrocontrollers aus dem Labor.

00 0000

00 07FF

00 1000

00 1024

IO

DMA

01 1000

01 1FFF

I-RAM (nicht beim 91F364)

03 D000

03 FFFFD-RAM

04 C000

04 0FFFRAM

05 C000

05 07FFBoot ROM

0C 0000

0F FFFFFlash

10 0000

10 C7FF

CAN

Bild 4.7: Linearer Adressbereich MB91F364

AUFGABE: Über den Debugger soll eine Variable im Adressraum angezeigt wer-den. Die Adresse der globale Variable aus obigem Beispiel (Bild 3.9) wird imSpeicherabbild eingetragen und deren Veränderung im Einzelschrittmodus nach-verfolgt (Bild 4.8). Welche Besonderheit stellen Sie bei der Variablen vom Typshort fest?

Ergebnis

1) Globale

Variable

aktivieren,

dann wirdAdresseangezeigt

2) Anzeige des

Speicherabbildes

3) Adresse der

Variablen eintragen

4) Zuweisung der

Variablen überprüfen

5) Adresse

Befehl

Bild 4.8: Überprüfung einer Variablenänderung im Speicherabbild

Page 28: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 28/84

24

AUFGABE: Verändern Sie den Wert im Speicherabbild. Welchen Effekt stellenSie fest?

Ergebnis

AUFGABE: Verfolgen Sie im Einzelschrittmodus die Adresse des Befehls (Num-

mer 5 im Bild 4.8). Was stellen Sie fest?Ergebnis

AUFGABE: Beobachten Sie den bisher nicht erläuterten Adressbereich IO ab Ad-resse 0. Betätigen Sie einen Schalter und halten Sie diesen gedrückt. BeobachtenSie die Veränderung für jeden Schalter. An welcher Adresse ändert sich ein Wertund wie viele Bits ändern sich jeweils?

Hinweis: Das Speicherabbild wird nicht kontinuierlich aktualisiert. Ein manuellesAktualisieren erfolgt über die Taste F3.

Ergebnis

Page 29: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 29/84

25

5 IO-Ansteuerung

Wie in der letzten Aufgabe festgestellt werden konnte, gibt es einen direkten Zu-sammenhang zwischen einem Hardwarezustand und einer Variablen an einer be-stimmten Adresse. Dieser Adressbereich wird mit IO (Input/Output) gekennzeich-net. Die Speicherstellen, die den IO-Zugriff ermöglichen, werden Register genannt.

Den Anschlüssen des Mikrocontrollers, den so genannten Pins, werden bestimmteRegisteradressen zugeordnet. Häufig ist es Möglich, die Funktion einzelner Pins zubeeinflussen, z.B. ob es sich um einen digitalen Eingang (z.B. zum Einlesen einerTaste) oder um einen digitalen Ausgang (z.B. zur Ansteuerung einer LED) handelt.Die Funktionszuordnung erfolgt ebenfalls über Register.

Register haben i. d. R. eine Bitbreite von 8 oder 16, selbst bei einem 32-Bit Mikro-controller. Somit werden über ein Register mehrere Pins des Mikrocontrollers ver-waltet. Man fasst die Pins des Mikrocontrollers daher zusammen und bezeichnetsie als Port. Beim Mikrocontroller MB91F364 werden immer 8 Pins zu einem Portzusammengefasst. Insgesamt hat dieser Mikrocontroller 120 Pins. Ein Großteil

dieser Pins werden für IO-Zugriffe zur Verfügung gestellt (Bild 5.1).

Pin 1

Pin 120

Bild 5.1: Zuordnung der Pins zu Ports des Mikrocontroller MB91F364 /6/Die im vorlesungsbegleitenden Labor verwendete Hardware ist das „MechatronicEvaluation Board“, kurz MEB, welches eine Eigenentwicklung des Instituts fürMechatronik der Fachhochschule Braunschweig/Wolfenbüttel ist. Das Funktions-schema ist in der Anlage beschrieben.

Insgesamt stehen 3 Taster zur Verfügung, wobei 1 Taster in einem Drehcodier-schalter integriert ist. Der Drehcodierschalter schaltet beim Drehen zwei weitereSignale. Die Zuordnung der Signale ist dem Ausschnitt des Schaltplans in Bild 5.2zu entnehmen.

RegisterPinFunktionszuordnungPort

Page 30: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 30/84

26

S1

X1.E4 (INT6, PK6)

5V-D

R302k2

GND-D

C31100n50V

GND-D

IC7 (6)74HC14

1213

R312k2

X1.E5 (INT7, PK7)

S2

5V-D

R322k2

GND-D

R332k2 A B

C

1

2

S3

5V-D

R242k2

X1.E2 (INT5, PK5)

C2910n50V

GND-D

R252k2

C2810n50V

X1.E10 (IN3, PL3)

X1.E9 (IN2, PL2)

R262k2

C3010n50V

IC7 (2)74HC14

43

IC7 (3)74HC14

65

IC7 (4)74HC14

89

R272k2

R282k2

R292k2

Bild 5.2: Schaltplan zum Einlesen der Taster

Taster S1 ist im unbetätigten Zustand geöffnet. Über den Pull-Up-Widerstand wirdder Eingang des Schmitt-Triggers auf Zustand 1 (5V) gelegt. Da es sich um eineninvertierenden Schmitt-Trigger (dargestellt durch den Kreis am Ausgang) handelt,wird am Ausgang der Zustand 0 vorhanden sein, der über Port K, Bit 6 eingelesen

werden kann. Beim Betätigen des Tasters wird der Eingang des Schmitt-Triggersauf 0V gelegt, der Ausgang wird auf den Zustand 1 wechseln. Beim Taster S2 fehltder invertierende Schmitt-Trigger, so dass im unbetätigtem Fall der Zustand 1 undim betätigtem Fall der Zustand 0 am Port K, Bit 6 anliegt.

Der Drehcodierschalter betätigt beim Drehen die Schalter S3-ABC. Wird derDrehcodierschalter gedrückt, wird der Schalter S3-1/2 aktiviert. Der Drehcodier-schalter wird über den Port L, Bit 2, 3 und 5 eingelesen.

Die Registerzuordnung der Ports ist in Bild 5.3 dargestellt.

Port Adresse

H 0x0011

I 0x0012

J 0x0013

K 0x0014

L 0x0015

M 0x0016

N 0x0017

O 0x0018

P 0x0019

Q 0x001A

R 0x001B

S 0x001C

T 0x001D

Bild 5.3: Adresszuordnung zu IO-Ports

Demnach sind die einzelnen Schalter den Registern wie im Bild 5.4 beschriebenzugeordnet.

x x -x - - --

D0D7

0x0014

Adresse

S1: 1 – Taster betätigt

S2: 1 – Taster nicht betätigt

- - -- x - -x

D0D7

0x0015

Adresse

S3: Spur A des Drehcodierschalters

Port K

Port L

S3: 1 – Drehkodierschalter gedrückt

S3: Spur B des Drehkodierschalters

Bild 5.4: Schalterzuordnung zu Bits der entsprechenden Register

SchaltplanTasterPortzuordnung

Page 31: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 31/84

27

Als Besonderheit bietet der Debugger MDE der Firma accemic neben dem Spei-cherabbild ein Prozessorabbild (Bild 5.5).

Prozessorabbild Zustand Port K (Pins)

Detaillierung Port K

Inhalt Register für Port K

AktualisierungNach Taste F3

Bild 5.5: Prozessorabbild

Im Prozessorabbild wird der Zustand der zugehörigen Pins der einzelnen Portsdargestellt. Durch einen Doppelklick auf den zugehörigen Port wird eine Detaillie-rung des Ports dargestellt, der den Zustand der zugehörigen Bits und den entspre-chenden hexadezimalen Wert angibt.

HINWEIS: Wird ein Schalter betätigt, so ändert sich das Prozessorabbild zunächstnicht. Hierzu ist eine manuelle Aktualisierung über die Taste F3 erforderlich. DieAktualisierungszeit kann 1-2 Sekunden benötigen.

Wird gleichzeitig das Speicherabbild visualisiert, so kann bei Tastendruck eine

Änderung sowohl im Prozessorabbild als auch im Speicherabbild beobachtet wer-den.

AUFGABE: Verifizieren Sie, welche Werte sich beim Betätigen der Taster 1-3ergeben. Die Taster sollen einzeln betätigt werden. Stimmen die Werte mit den imBild 5.4 dargestellten Bits überein (Binärdarstellung)?

Ergebnis

Prozessorabbild

Page 32: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 32/84

28

Wie die Detaillierung des Prozessorabbild für den Port K zeigt, sind insgesamt 3Register für die Funktion dieses Ports zuständig. Im Register PDRK (port dataregister K) wird ein Abbild der Pins des Prozessors abgelegt. Die Bedeutung derRegister DDRK und PFRK zeigt Bild 5.6.

≥1

PDR

PFR

DDR

0

1Ausgang Fkt1

0

Pin

PDR lesen

Eingang Fkt

B u s

Bild 5.6: Konfiguration IO-Ports /6/

Über das DDR (data direction register) wird die Richtung des Port-Pins festgelegt.Wird im DDR-Register für den entsprechenden Pin eine 0 geschrieben, handelt essich um einen Eingang (Default-Einstellung), wird eine 1 geschrieben, wird der Pinzu einem Ausgang. Das Register PFR (port function register) kann dem Pin eineSonderfunktion zuweisen. Eine Sonderfunktion wäre z.B. ein analoger Eingang desA/D-Wandlers oder ein externer Interrupteingang (Erläuterung der Sonderfunktionfolgt in den nachfolgenden Kapiteln). Für den Port K sind die 3 Register und dieFunktionen in Bild 5.7 wiedergegeben.

PK6PK5PK4PK7 PK2PK1PK0PK3

D0D7

0x0014

Adresse

Pin 7: 1=high Pegel

PDRK

Pin 0: 1=highPegel

PK6PK5PK4PK7 PK2PK1PK0PK3

D0D7

0x0404

Adresse

Pin 7: 0=Eingnag, 1=Ausgang

DDRK

Pin 0: 0=Eingang, 1=Ausgang

PK6PK5PK4PK7 PK2PK1PK0PK3

D0D7

0x0414

Adresse

Pin 7: 0=allgemeiner Ein-/Ausgang, 1=Externer Interrupt

PFRK

Pin 0: 0=allgemeiner Ein/Ausgang, 1=Externer Interrupt

Bild 5.7: Register PDR, PFR, DDR für Port K

Wird ein Pin für eine Sonderfunktion konfiguriert, ist das DDR ohne Bedeutung.Die Funktionszuordnung stellt automatisch die Richtung (Ein- oder Ausgang) kor-rekt ein.

Hinweis: Wird ein Pin als Ausgang konfiguriert, muss dies elektrisch auch umge-setzt werden können. Die Ausgänge sind als Tri-State-Ausgänge ausgeführt, wasbedeutet, dass beim Zustand 1 5V über den internen Transistor an den Ausganggeschaltet wird. Ist allerdings an diesem Ausgang z.B. ein Schalter angeschlossen,der den Ausgang mit Masse verbindet, würde der interne Transistor des Mikrocont-rollers zerstört werden. Aus diesem Grund empfiehlt sich der Einbau eines Aus-

gangswiderstandes (Bild 5.2, R27-29, R31, R33), so dass eine Überlastung vermie-den wird.

PDRDDRPFR

Überlast AusgangWiderstand

Page 33: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 33/84

29

Wird der IO-Port als Ausgang konfiguriert, können damit dem Bediener Zustände,z.B. über LEDs angezeigt werden. Für den Port K steht hierfür eine SonderfunktionLED zur Verfügung.

105 (LED3, PJ3)

5V

R31K

R31K

LED 2

R31K

LED 1

R31K

LED 0

104 (LED2, PJ2) 103 (LED1, PJ1) 102 (LED0, PJ0)

LED 3

Bild 5.8: Schaltplan zur Ansteuerung der LEDs

AUFGABE: Steuern Sie über den Debugger die LED 0 und LED 2 an und schaltenSie die LED 1 und 3 aus. Welche Einstellungen müssen hierfür vorgenommenwerden?

Ergebnis

Beim Zugriff auf die Register innerhalb eines C-Programms ist es sinnvoll, dieseüber #define zu definieren. Hierzu dient der Header „mb91364ec.h“. Durch #inlcu-de „mb91364ec.h“ können die Definitionen in das eigene Programm übernommenwerden. Ein Zugriff auf die Register erfolgt dann über den entsprechenden Regis-ternamen. Ein Beispiel, welches die LED 0 einschaltet, zeigt Bild 5.9.

#include "irq.h" // Zugriff auf Funktion initIRQ()

#include "mb91364ec.h" // Zugriff auf Register

void main(void)

initIRQ(); // Freigabe Interrupt (Monitor-Programm

PFRJ = PFRJ | 0x0F; // Bit0…3 setzen, Sonderfunktion LED

while( 1 ) // Endlosschleife

PDRJ = ~0x01; // Bit0 auf low (LED 0 aktiv), Rest aus.

Bild 5.9: Programm zur Ansteuerung der LED 0

Page 34: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 34/84

30

AUFGABE: Schreiben Sie ein Programm, das ein kontinuierliches Lauflicht derLEDs (LED 0 - LED 1 - LED 2 - LED 3 - LED 0 -…) erzeugt. Nutzen Sie dabeiden Schiebebefehl (a = a << 1; Inhalt von Variable a wird um 1 Bit nach links ver-schoben)

Ergebnis

AUFGABE: Schreiben Sie eine Funktion (Übergabeparameter Wert 0…15), dieden Übergabewert binärcodiert mit den LEDs darstellt.

ACHTUNG: nicht benutzte Bits (PFRJ 4..7, PDRJ 4..7) dürfen nicht verändertwerden. Nutzen Sie die Funktion „Bit Setzen“, „Bit Löschen“ aus Kapitel 2.3.

Ergebnis

Page 35: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 35/84

31

AUFGABE: Schreiben Sie ein Funktion mit zwei Übergabeparameter mit den fol-genden Daten 1: Nummer der LED (0…3), Übergabeparameter 2: Zustand derLED (0 – aus, 1 – ein). Testen Sie diese Funktion und prüfen Sie, ob nicht benutzteBits verändert werden.

ACHTUNG: nicht benutzte Bits (PFRJ 4..7, PDRJ 4..7) dürfen nicht verändertwerden.

Ergebnis

Page 36: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 36/84

32

6 Strukturierte Programmierung

Elementares Kennzeichen zur Strukturierung von Programmen ist der Einsatz vonFunktionen. Funktionen werden verwendet, wenn es wiederkehrende Aufgabengibt. Funktionen sollten aber auch verwendet werden, um Informationen zu kap-seln. Hiermit ist gemeint, dass z.B. in der Hauptprogrammschleife kein Zugriff aufelementare Hardwareschnittstellen erfolgen soll.#include "irq.h" // Zugriff auf Funktion initIRQ()

#include "mb91364ec.h" // Zugriff auf Register

void writeLED(char cValue) // cValue: 0…15

char c;

c = PDRJ; // Zustand PDRJ lesen

c = c | 0x0F; // unteren 4 Bit ausschalten

cValue = cValue | 0xF0; // nur untere 4 Bit auswerten

c = c & ~cValue; // aktive Bits invertieren

PDRJ = c;

void main(void)

char c;

unsigned int i;

i=0;

c=0;

initIRQ(); // Freigabe Interrupt (Monitor-Programm)

PFRJ = PFRJ | 0x0F; // Bit0-3 setzen, Sonderfunktion LED

while( 1 ) // Endlosschleife

i++;

if (i>1000000) // nicht jeden Durchlauf ausfuerhen

i=0;writeLED(c); // Zustand ausgeben

c++;

if (c>0x000f)

c=0;

#include "irq.h" // Zugriff auf Funktion initIRQ()

#include "mb91364ec.h" // Zugriff auf Register

void initLED(void)

PFRJ = PFRJ | 0x0F; // Bit0-3 setzen, Sonderfunktion LED

void writeLED(char cValue) // cValue: 0…15

char c;

c = PDRJ; // Zustand PDRJ lesen

c = c | 0x0F; // unteren 4 Bit ausschalten

cValue = cValue | 0xF0; // nur untere 4 Bit auswerten

c = c & ~cValue; // aktive Bits invertieren

PDRJ = c;

void main(void)

char c;

unsigned int i;

i=0;

c=0;

initIRQ(); // Freigabe Interrupt (Monitor-Programm)

initLED(); // LEDs freigeben

while( 1 ) // Endlosschleife

i++;

if (i>1000000) // nicht jeden Durchlauf ausfuerhen

i=0;

writeLED(c); // Zustand ausgeben

c++;

if (c>0x000f)

c=0;

1

1

2

Bild 6.1: Verwendung von Funktionen in C

Das in Bild 6.1 links dargestellte Programm enthält die Funktion „writeLED“, wel-che die wiederkehrende Aufgabe der binärcodierten Ansteuerung übernimmt. Al-lerdings findet sich im Hauptprogramm links noch der Zugriff auf das PDRJ, wel-ches eine elementare Hardwareschnittstelle darstellt. Diese Information sollte übereine Funktion gekapselt werden, wie es im Bild 6.1 rechts dargestellt ist.

Eine weitere Möglichkeit zur Strukturierung von Programmen ist die Verwendungvon Modulen. Ein Modul ist eine separate Datei (datei.c), welche lediglich Funkti-onen beinhaltet. Die Beschreibung des Moduls erfolgt über den sogenannten Hea-der (datei.h). Dieser Header muss im Hauptprogramm eingebunden (#include „da-tei.h“) werden.

#include "irq.h" // Zugriff auf Funktion initIRQ()

#include "led.h" // Zugriff auf Register

void main(void)

char c;

unsigned int i;

i=0;

c=0;

initIRQ(); // Freigabe Interrupt (Monitor-Programm)

initLED(); // LEDs freigeben

while( 1 ) // Endlosschleife

i++;

if (i>1000000) // nicht jeden Durchlauf ausfuerhen

i=0;

writeLED(c); // Zustand ausgeben

c++;

if (c>0x000f)

c=0;

void initLED(void)

PFRJ = PFRJ | 0x0F; // Bit0-3 setzen, Sonderfunktion LED

void writeLED(char cValue) // cValue: 0…15

char c;

c = PDRJ; // Zustand PDRJ lesen

c = c | 0x0F; // unteren 4 Bit ausschalten

cValue = cValue | 0xF0; // nur untere 4 Bit auswerten

c = c & ~cValue; // aktive Bits invertieren

PDRJ = c;

main.c

void initLED(void); // Initialisierung LEDs

void writeLED(char cValue); // cValue: 0…15

led.h

led.c

Module sollten immer einen definierten Aufgabenbereich umfassen. Insgesamtsollte ein Modul als Richtlinie nicht mehr als 10 Funktionen umfassen, die vonextern aufgerufen werden können und im Header beschrieben sind. Intern kann einModul darüber hinaus weitere Funktionen aufweisen, die nicht im Header aufge-führt sind und dementsprechend nicht von extern aufgerufen werden können.

Komplexe Programme weisen eine Vielzahl von Modulen auf, die hierarchischaufeinander aufgebaut sein sollten. Dies bedeutet, dass ein hierarchisch höher ste-hendes Modul lediglich Funktionsaufrufe zu hierarchisch tieferstehenden Modulenaufweist, jedoch nicht umgekehrt. Ein Beispiel zeigt Bild 6.2 und 6.3.

Einsatz Funktionen- Wiederholung- Kapselung

Module

HierarchischerModulaufbau

Page 37: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 37/84

Page 38: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 38/84

34

Mikrocontroller verfügen in der Regel nur über einen geringen RAM-Speicher, sodass bei der Verwendung von Variablen auf die erforderliche Größe geachtet wer-den muss. Um sich dieses Problems bewusst zu werden, empfiehlt es sich, den Typder Variablen im Variablennamen zu verankern. Dies kann in eleganter Form durchdie ungarische Notation erfolgen. Hierbei setzt sich der Variablen- oder Funktions-namen zusammen aus einen Präfix (Tabelle 6.1) und dem Bezeichner. Eine Variab-le „value“ würde bei Repräsentierung als 16 Bit Wert mit Vorzeichen genannt wer-den: „iValue“.

GlobaleVariable

_

64 BitDoubled

32 BitFloat (Real)r

Pointerp

32 Bit mit VorzeichenLongl

32 BitUnsignedLong

ul

16 Bit mit VorzeichenIntegeri

16 BitUnsignedInteger

ui

8 BitByteb

HinweisTypPräfix

GlobaleVariable

_

64 BitDoubled

32 BitFloat (Real)r

Pointerp

32 Bit mit VorzeichenLongl

32 BitUnsignedLong

ul

16 Bit mit VorzeichenIntegeri

16 BitUnsignedInteger

ui

8 BitByteb

HinweisTypPräfix

Variable: Count als 16 Bit Wert ohne VorzeichenuiCount

Name der Variable

Präfix

Tabelle 6.1: Präfixe für Variablennamen und Beispiel zur Verwendung

Die in Tabelle 6.1 dargestellten Präfixe sind an die ungarische Notation angelehnt,sie haben sich in der Form in der Praxis bewährt.

Es ist zu berücksichtigen, dass z.B. ein Integer je nach Prozessortyp eine Repräsen-tierung in 16 oder 32 Bit haben kann. Bei der Erstellung von Programmen für Mik-rocontroller ist es wichtig, dass die Programme flexibel auf unterschiedliche Mik-rocontroller angepasst werden können. Aus diesem Grund sollte die Definition

einer Variablen über ein typedef erfolgen. Wird die Bitbreite des Mikrocontrollersgeändert, muss lediglich das Modul der Typdefinitionen angepasst werden. EinBeispiel eines solchen Moduls zeigt Bild 6.5. Im Programm wird general.h einge-bunden.

#include "general.h"

void main(void)

INT iCount;

BYTE bLED;

. . .

#ifndef _GENERAL_H

#define _GENERAL_H

// einheitliche Typbezeichner (Fujitsu 92F364 ist 32Bit Prozessor)

typedef unsigned char BYTE; // 8-Bit

typedef unsigned short UINT; // 16-Bit ohne Vorzeichen

typedef unsigned long ULONG; // 32-Bit ohne Vorzeichen

typedef short INT; // 16-Bit mit Vorzeichen

typedef int LONG; // 32-Bit mit Vorzeichen

// Booelan

#define TRUE 1

#define FALSE 0

#define ON 1

#define OFF 0

// Grenzen

#define MAX_INT 32767

#define MIN_INT -32768

#define MAX_UINT 65535

#endif // _GENERAL_H

main.c

general.h

Bild 6.5: Modul general.h und deren Verwendung

Da das Einbinden in jedes Modul erfolgen muss, würde es bei der Compilierungzur mehrfachen Definition kommen und einen Fehler erzeugen. Aus diesem Grund

wird ein #ifndef…#endif Konstrukt integriert, so dass die Definition nur ein einzi-ges Mal durchlaufen wird.

UngarischeNotation

general.h

Page 39: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 39/84

35

Häufig müssen Module initialisiert werden. Hier empfiehlt es sich einen einheitli-chen Funktionsnamen (initModulname) zu verwenden. Muss ein Modul je Durch-lauf der Hauptprogrammschleife einmal aufgerufen werden, um Informationen fürweitere Funktionen zu berechnen, sollte hierfür ebenfalls ein einheitlicher Funkti-onsname (handleModulname) verwendet werden. Ein Typisches Beispiel hierzuzeigt Bild 6.6.

#include "general.h"

void initTime(void)

...

void handleTime(void)

// darf nur 1x aufgerufen werden

...

UNIT uiReadTime(void)

// mehrmaliger Aufruf erlaubt

...

#include "general.h"

#include "time.h"

void main(void)

UINT uiTime;

initTime();

while(1)

handleTime();

uiTime=uiReadTime();

...

uiTime=uiReadTime();

...

#include "general.h"

void initTime(void);

void handleTime(void);

UNIT uiReadTime(void);

main.ctime.h

time.c

Bild 6.6: Initialisierung und zyklischer Aufruf eines Moduls

AUFGABE:

Im Folgenden soll ein Programm erstellt werden, in dem die oben dargestelltenElemente verwendet werden. Das Programm soll einen Tastendruck auswerten.

Wird eine der Tasten S1…S3 betätigt, wird ein Zähler hoch gezählt und binärco-diert auf den LEDs angezeigt. Es sollen insgesamt 3 Module programmiert werden:main, led und key. Ein allgemeiner Header soll eine unabhängige Typdefinition(Bild 6.5) beinhalten und in den einzelnen Modulen sollen Variablen gemäß derungarischen Notation zusammen mit den unabhängigen Typdefinitionen verwendetwerden. Variablen sind optimiert zu verwenden, d.h. es sollen nicht mehr Bits ge-nutzt werden, als zwingend notwenig. Im Hauptmodul main darf kein Zugriff aufHardwarekomponenten erfolgen. Kommentare sind für Module und Funktionen zuschreiben.

Zur Auswertung eines Tastendrucks muss die Änderung des Zustands erkannt wer-den. Hierzu ist der alte Zustand abzuspeichern und mit dem neuen Zustand zu ver-gleichen. Die Auswertung einer steigenden Flanke ist in Bild 6.7 dargestellt.

Taste nicht betätigt

Taste gedrückt

Auswertungszeitpunkte des Programms

Zeit

0 0 0 0 0 0 1 1 1 1 1 0 0

Zustandswechsel

Aktuell eingelesener Wert bAct

Flankenerkennung: Wert bAct hat sich zum vorherigen Wert b verändert (XOR: ^)→ steigende oder fallende FlankeVeränderung vorhanden und aktueller Wert bAct=1→ steigende Flanke

bEdge = (bAct ^ bOld) & bAct;

bOld = bAct;

E1 E2 A

0 0 00 1 11 0 11 1 0

Exklusiv Oder (XOR)

Bild 6.7: Auswertung eines Tastendrucks mit steigender Flanke

Tastenprellen

Page 40: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 40/84

36

Ein Effekt, der bei der Tastaturauswertung auftreten kann, ist das Tastenprellen.Wird eine Taste betätigt, so treffen 2 Metallteile aufeinander, die dabei Schwin-gungen ausführen können (Prellen). Hierdurch kann es zu fehlerhafter Auswertungdes Tastendrucks kommen (Bild 6.8).

Taste nicht betätigtTaste gedrückt

Auswertungszeitpunkte des Programms

Zeit

0 0 0 0 0 0 1 0 1 1 1 0 0

Zustandswechsel

Aktuell eingelesener Wert bAct

0 0 0 0 0 0 1 1 1 0 0 1 0 XOR (bAct ^ bOld)

0 0 0 0 0 0 1 0 1 0 0 0 0 AND (bAct ^ bOld)&bAct

Fehlerhafte Auswertung

0 0 1 1 0 Aktuell eingelesener Wert bAct

0 0 1 0 0 XOR (bAct ^ bOld)

0 0 1 0 0 AND (bAct ^ bOld)&bAct

Auswertungszeitpunkte des Programms

Bild 6.8: Tastenprellen

Eine Abhilfe kann entweder hardwaremäßig durch eine RC-Kombination (Bild 5.2,Schalter S1) oder softwaremäßig erfolgen, indem die Zykluszeit der Auswertungverlängert wird (Bild 6.8, unten). Da die Dauer des Prellvorgangs je nach Tastermehrere ms betragen kann, dürfte der Taster nur in einem größeren Zeitraum abge-fragt werden. Dies könnte dazu führen, dass ein sehr kurzer Tastendruck gar nichtmehr erkannt wird.

Ergebnis key.c

Page 41: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 41/84

37

Ergebnis led.c

Ergebnis main.c

Page 42: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 42/84

38

Bislang wurden nur kleinere Softwareprojekte betrachtet. Bei umfangreicherenProjekten sollte ein Softwareentwicklungsprozess zugrunde gelegt werden. DieserProzess umfasst im Entwurf die Schritte (Bild 6.9):

• Spezifikation• Grobentwurf

• Feinentwurf• Codierung

Spezifikation

Grobentwurf(Module)

Feinentwurf(Funktionen)

Codierung

Modultest(Funktionen)

Integrations-test (Module)

Systemtest

System-Entwurf Integration

Testdefinition

Qualitäterzeugen

Fehlertesten

Bild 6.9: V-Modell zur strukturierten Softwareentwicklung

In der Spezifikation werden sämtliche Anforderungen beschrieben, die das spätereProgramm umsetzen soll. Anschließend erfolgt der Grobentwurf, der die einzelnenModule festlegt. Die Funktionen, die in einem Modul zusammengefasst sind, wer-den im Feinentwurf definiert. Erst nach Grob- und Feinentwurf erfolgt die eigentli-che Programmierung, die sogenannte Codierung der Funktion. Auf der linken Seitedes V-Modells wird die Qualität des Programms maßgeblich beeinflusst. Ein Test

erfolgt im Anschluss an der Codierung. Hierbei orientieren sich die Testfälle an dieauf der linken Seite des V-Modelle definierten Funktionen. Zunächst werden alleFunktionen eines Moduls einzeln getestet, so dass zum Abschluss ein validiertesModul existiert. Im nächsten Schritt wird das Zusammenwirken der Module getes-tet, bevor abschließend der Systemtest erfolgt. Im Systemtest wird geprüft, ob alleAnforderungen der Spezifikation umgesetzt korrekt wurde.

Sollten in der Testphase viele Fehler gefunden entdeckt werden, so ist dies keines-wegs eine Garantie dafür, dass das Programm am Ende möglichst fehlerfrei ist.Vielmehr ist das Entdecken vieler Fehler ein Indiz dafür, dass die Qualität in derEntwurfsphase mangelhaft war, so dass mit noch weiteren Fehlern zu rechnen ist.Ein typischer Zeitplan eines Softwareprojektes, welches insgesamt 18 Wochenumfasst, zeigt Bild 6.10.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 181 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Spezifikation

Grobentwurf

Feinentwurf

3

1

3

7

4

Codierung

Test

Wochen

Meilenstein

Bild 6.10: Zeitplan eines Softwareentwicklungsprozesses

V-Modell derSoftwareentwicklung

Zeitplan einerSW-Entwicklung

Page 43: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 43/84

39

Zu erkennen ist, dass die eigentliche Codierung weniger als die Hälfte der gesam-ten Projektdauer umfasst. Spezifikation, Grob- und Feinentwurf benötigen bei einerqualitativ hochwertigen Software in etwa den gleichen Zeitraum.

Bislang wurde mit dem Compiler/Linker und Debugger lediglich die Werkzeugefür die Codierung vorgestellt. Als relativ einfaches, aber sehr effektives Programm

für die Verbindung zwischen Feinentwurf und Codierung kann das CASE-Tool(computer aided software engineering) EasyCode genutzt werden. EasyCode ist eingrafisches Werkzeug, mit dessen Hilfe Nassi-Schneidermann-Diagramme erstelltwerden können. Mit Hilfe dieser Diagramme werden im Feinentwurf zunächst dieFunktionen beschrieben. Erst nach dieser Festlegung erfolgt die eigentliche Codie-rung.

main

modul

FunktionenDefinition der ModuleFestlegung der FunktionenErstellung eines Modulplans

Spezifikation

Grobentwurf

Feinentwurf

Codierung

Detaillierung mitNassi-Schneidermann-Diagrammen

Bild 6.11: Feinentwurf mit Hilfe des CASE-Tools EasyCode

Ein wesentliches Element ist hierbei die Möglichkeit, einzelne Abschnitte grafisch

„tiefer zu lagern“, d.h. sie auf der obersten Ebene nur durch einen Kommentar da-zustellen.

1. markieren (linke Maustaste)2. rechte Maustaste, Auswahl „Tiefer lagern“

oberste Ebene 1. Unterebene

Ansicht Ebene tiefer:Doppelklick auf grauen Bereich

Ebene höher ansehen:Doppelklick außerhalb Funktion

Alternativ: Toolbar

1 2

Bild 6.12: Tiefer lagern von Programmabschnitten

Die wesentlichen Anweisungselemente sind in Bild 6.13 wiedergegeben.

CASE-ToolEasyCode

Tiefer lagern

Page 44: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 44/84

40

Anweisung

if-Anweisung

for-Schleife

switch-Verzweigung

Beispiel

while-Schleife

do while-Schleife

Bild 6.13: Anweisungselemente in EasyCode

Interessant ist aber auch die Möglichkeit, bereits vorhandene Programme mit Ea-syCode einzulesen. In der Praxis kann man feststellen, dass das V-Modell nur be-dingt chronologisch abläuft. Vielmehr handelt es sich gerade beim Grob-, Feinent-wurf und der Codierung um einen iterativen Prozess, wie er in Bild 6.11 dargestelltist. Daher ist es sinnvoll, dass Änderungen z.B. in der Codierung auch wieder imFeinentwurf zurückgespielt werden können.

Aufgabe: Laden Sie ihre Module main.c, led.c und key.c mit dem CASE-Tool Ea-syCode. Vergleichen Sie die Übersichtlichkeit der Darstellung.

HINWEIS: Ggf. ist die Schriftart einzustellen, siehe Bild 6.14.

1: Optionen/Einstellungen…

2: Schriften und Farbe

3: Schriftart wählen

4: Courier New

Bild 6.14: Einstellung der Schriftart in EasyCode

Elemente Nassi-Schneidermann-Diagramm

Page 45: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 45/84

41

7 Timer

Fast jeder Mikrocontroller stellt die Funktion „Timer“ zur Verfügung. Mit dieserFunktion können Zeiten gemessen werden. Häufig wird ein Timer zur Einhaltungeiner definierten Laufzeit der Hauptprogramm-Endlosschleife verwendet (Bild7.1).

Initialisierung

Start

HauptprogrammEndlosschleife

Initialisierung

Hauptprogramm

Endlosschleife

Zeit

Start

Initialisierung

HauptprogrammEndlosschleife

Zeit

Start

Ta Ta

T1 T2 T3

Wartezeit, bisZeit T abgelaufen

Bild 7.1: Feste Abtastzeit der Hauptprogramm-Endlosschleife durch Timer

Die Bearbeitungszeit des Hauptprogramms kann je nach Rechenaufwand unter-schiedlich lang sein (T1, T2, T3, …). Soll eine konstante Bearbeitungszeit Ta ein-gehalten werden, wird am Ende des Hauptprogramms auf den Ablauf eines Timersgewartet, bevor das Hauptprogramm erneut ausgeführt wird. Gerade in der Mess-und Regelungstechnik wird häufig die Forderung nach einer definierten Abtastzeit

Ta gestellt, die mit dieser Methode einfach realisiert werden kann. Hierbei ist si-cherzustellen, dass die Laufzeit des Hauptprogramms niemals die Abtastzeit über-schreitet.

Reload-Wert

Zähler (Counter)Taktgeber

(CLK)

Underflow (UF)

Reload-Wert ZR

T

TZählerstand Z

Tges=(ZR+1)·TUnderflow (UF)

• Prüfen, ob Underflow (UF)nicht gesetzt

• Wenn UF gesetzt, dannzurücksetzen

Zeit

Zeit

Bild 7.2: Prinzipielle Funktion eines Timers

Die grundsätzliche Funktionsweise eines Timers ist im Bild 7.2 dargestellt. EinZähler wird auf einen Ausgangswert (Reload-Wert) gesetzt und zählt mit jeder

steigenden Flanke eines Taktsignals den Zählerstand um ein Inkrement runter.Wenn der Zählerstand 0 erreicht ist und eine weitere Flanke am Taktsignal anliegt,würde ein „Underflow“ (UF) auftreten. Dies signalisiert der Timer über ein Bit.

Timer

KonstanteAbtastzeit Ta

Reload-WertTaktgeberUnderflow (UF)

Page 46: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 46/84

42

Gleichzeitig wird der Zähler wieder auf den Reload-Wert gesetzt und der Ablaufbeginnt erneut.

Die Hauptprogrammschleife wird lediglich um eine zweite While-Schleife ergänzt,in der auf den Ablauf des Timers, d.h. auf das Auftreten des UF gewartet wird. DieFunktion isTimerRunning() gibt ein TRUE zurück, solange das Bit UF noch nicht

gesetzt ist und der Zähler noch runter zählt. Wurde das Bit UF gesetzt, gibt dieFunktion FALSE zurück und die zweite While-Schleife wird verlassen, so dass dasdie erste While-Schleife mit dem Hauptprogramm wieder beginnt. Da das UF-Bitnicht selbständig zurückgesetzt wird, muss ein Rücksetzen in der Funktion isTi-merRunning() erfolgen, sobald das Bit gesetzt ist.

Die Abtastzeit Ta, mit der das Hauptprogramm durchlaufen wird, richtet sich dem-nach nach dem Timer, d.h. nach dem Setzen des UF-Bits. Das Setzen des UF-Bitserfolgt in Abhängigkeit des Reload-Wertes ZR und der Taktzeit T des Taktgebers:

T Z T Ra ⋅=

Die Taktzeit T kann aus der Taktfrequenz f berechnet werden zu

f T

1=

Beispiel:

Die Taktfrequenz beträgt 16MHz. Welcher Reload-Wert muss eingestellt werden,damit eine Abtastzeit T von 1ms eingehalten wird?

000161016101 163.ss f T

T

T Z a

a

R =⋅⋅⋅=⋅== −−

Der Mikrocontroller MB91F362 verfügt über 3 unabhängige 16-Bit Reaload-Timer. Die Einstellung jedes Timers erfolgt über jeweils 3 Register:

• TMRLR Timer Reload RegisterAdressen: TMRLR1-0x0048, TMRLR2-0x0050, TMRLR3-0x0058

• TMR Timer RegisterAdressen: TMR1-0x004A, TMR2-0x0052, TMR3-0x005A

• TMCSR Timer Control Status RegisterAdressen: TMCSR1-0x004E, TMCSR2-0x0056, TMCSR3-0x005E

16-Bit Reaload-Register (TMRLR)

A d r e s s - / D a t e n b u s 16-Bit Abwärtszähler (TMR)

Reload Enable (1=enable)

TRG

ControlStatus Register

(TMCSR)

0

1

2

3

4

5

6

7

8

9

1011

CSL1

CSL0 CSL Clock Source Setting

-

-

-

-

-

RELD

INTE Interrupt Request Enable (1=enable)

bit

UF Underflow

CTNE Count Enable (1=enable, 0=stop)

Trigger (1=TMRLR laden und starten)

Takt-Auswahl

CSL1 CSL0 Teiler0 0 /20 1 /81 0 /321 1 aus

CLKP IRQ

Reload

Bild 7.2: Blockdiagramm des Timers (nach /6/)

BerechnungAbtastzeit

Register TimerTMRLRTMRTMCSR

Page 47: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 47/84

43

Das TMRLR beinhaltet den Reload-Wert des Timers. Der aktuelle Zählerstandkann über das TMR gelesen werden. Zur Einstellung des Timers und für die Signa-lisierung des Zustands existiert das TMCSR.

Im TMCSR ist zunächst die Taktfrequenz, mit der der Timer dekrementiert wird,zu definieren. Ausgangsbasis ist der Takt CLKP (Clock Peripherie). Dieser wird

über accemic mde im Grundmenü (Bild 3.10) eingestellt. Der maximale Wert, derim Labor standardmäßig eingestellt ist, beträgt 32MHz. Über die Bits CSL0 undCSL1 des TMCSR kann ein Vorteiler (2, 8, 32, aus) definiert werden, so dass dieTaktfrequenz der Dekrementierung verringert wird.

Über das Bit RELD des TMCSR wird definiert, ob der Timer nur einmalig vomReload-Wert bis zum Wert 0 runter zählt und dann anhält (Single Shot Mode), oderob der Timer nach Erreichen des Werts 0 automatisch wieder mit dem Reload-Wertbeginnt (Reload Mode). Typischerweise wird dieses Bit aktiviert, um einen verzö-gerungsfreien Ablauf des Timers zu gewährleisten.

Das Bit UF befindet sich an Stelle 2 des TMCSR. Wird dieses Bit gesetzt und istüber das Bit INTE ein Interrupt freigegeben, wird automatisch ein Interrupt erzeugt

(zur Funktion des Interrupt siehe nächstes Kapitel).Der Timer kann angehalten werden, indem das Bit CTNE auf 0 gesetzt wird. DasSetzen des CTNE auf 1 startet den Timer nicht automatisch, sondern gibt lediglicheinen Trigger frei. Zum Starten des Timers ist das Bit TRG zu setzen. Wird diesesBit gesetzt, wird zunächst der Reload-Wert des Registers TMRLR in den Timergeladen und anschließend der Timer gestartet. Die Bits CTNE und TRG könnengleichzeitig gesetzt werden.

Durch Einbinden des Headers „mb91362ec.h“ kann direkt auf die Register zuge-griffen werden, z.B. in Form der Anweisung:

TMRLR1 =10000;

Weiterhin ist der Zugriff auf einzelne Bits möglich:TMCSR1_TRG = 1;

AUFGABE:

Es soll ein Modul „timer“ realisiert werden mit folgenden Funktionen:

• void initTimer(BYTE bNr, UINT uiTime);bNr gibt die Nummer 0…2 des Timers anuiTime gibt die Zeit in µs an, nach der der Timer abgelaufen istDie Funktion initialisiert den Timer mit automatischem Reload und startet

den Timer.• BYTE bIsTimerRunning(BYTE bNr)

bNr gibt die Nummer 0…2 des Timers anRückgabe der Funktion ist 1, wenn der Timer noch dekrementiert und 0,wenn der Timer abgelaufen ist. Gibt die Funktion den Wert 0 zurück, wirddas UF-Bit des Timers wieder zurückgesetzt.

Mit diesen Funktionen und dem Modul led soll eine Sekundenanzeige realisiertwerden, die die LED0 im Takt von 1 Sekunde an- und ausschaltet (0,5 SekundenLED ist an, 0,5 Sekunden LED ist aus). Zählen Sie 60 Zyklen und prüfen Sie miteiner Uhr, ob die 60 Zyklen in exakt einer Minute abgearbeitet wurden.

CLKPVorteiler CSL

RELD

INTE

CTNETRG

Zugriff auf Register

Zugriff auf Bits

Page 48: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 48/84

44

Ergebnis timer.c

Ergebnis main.c

Page 49: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 49/84

45

8 D/A-Wandler

Zur Ausgabe analoger Signale stehen bei Mikrocontroller häufig DA-Wandler zurVerfügung. Diese wandeln über ein R2R-Netzwerk eine digitale Bitkombination ineine analoge Spannung um.

0

1

2

3

4

5

6

7

8

9

A d r e s s - / D a t e n b u s

2R

2R

2R

R

R

R

R

R

R

R

R

R

2R

2R

2R

2R

2R

2R

2R

2RDADR0

UDA0 = 0…5V

MikrocontrollerURef

-

+

6

57

R6610k

R64100k

1

2

3

1 2 312V

X1.C10 (DA1)IC 16 (2)TL064

Elektronik

-

+

2

31

R6310k

R61100k

1

2

3

12

3

GND-A

12V

IC 16 (1)TL064

2

X3

X1.C9 (DA0)

4X3

0

1

2

3

4

5

6

7

8

9

2R

2R

R

R

R

R

R

R

R

R

R

2R

2R

2R

2R

2R

2R

2R

2RDADR1 URef

0

1

2

3

4

5

6

7

8

9

2R

2R

R

R

R

R

R

R

R

R

R

2R

2R

2R

2R

2R

2R

2R

2RDADR1 URef

Uout0 = -10…10V

UDA1 = 0…5V

Uout1= -10…10V

DAE0DAE1MODE-----DAE: DA enable= 1

MODE: 0=10bit, 1=8bit

DBL-------DBL: 0= Clock enableDDBL

DACR

Bild 8.1: Blockschaltbild D/A-Wandler und Ausgangsverstärkung

Der Mikrocontroller Fujtsu MB91F364 verfügt über zwei D/A-Wandler, derenAusgangsspannung an der Klemme X1, Pin C9 und C10 abgegriffen werden kön-nen (zur Lage der Klemmen und ICs siehe Anlage 10.1). Die Ausgangsspannung

erhält über einen invertierenden Verstärker einen Offset von -2,5V und wird umden Faktor 4 verstärkt, so dass sich eine Ausgangsspannung von -10V bei Ansteue-rung des D/A-Wandlers von 5V und von +10V bei Ansteuerung von 0V ergibt.

Zur Steuerung der beiden D/A-Wandler stehen insgesamt 4 Register zur Verfü-gung:

• DACR (DA control register), Adresse 0x00A5

• DADR0 (DA0 data register), Adresse 0x00A6/0x00A7

• DADR1 (DA1 data register), Adresse 0x00A8/0x00A9

• DDBL (DA clock control register), Adresse 0x00AB

Die Vorgabe des zu wandelnden Wertes stehen die Register DADR0 und DADR1zur Verfügung. Die Auflösung des D/A-Wandlers beträgt 10 Bit bzw. 8 Bit, je nachEinstellung im Register DACR, Bit MODE. Die oberen Bits des 16 Bit breitenDADR werden daher nicht ausgewertet.

Um einen analogen Ausgang ausgeben zu können, muss der Ausgang über dasDACR, Bit DAE0 und DAE1 (DA enable) freigegeben werden.

Im Register DDBL kann über das Bit DBL der Systemtakt für den D/A-Wandlerfreigegeben (Zustand 0) und gesperrt (Zustand 1) werden. Der Zustand nach demEinschalten ist standardmäßig 0 und sollte nicht verändert werden.

AUFGABE:

Testen Sie die Funktion des D/A-Wandlers über das Prozessorabbild in accemicmde. Stellen Sie eine Ausgangsspannung von 0V an Klemme X3 ein. Auf welchenWert muss D/A0 und D/A1 jeweils eingestellt werden (Auflösung 10 Bit)?

DA-Wandler

Ausgangselektronik

DADR

DACR

DDBL

Page 50: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 50/84

46

Ergebnis DADR0

Ergebnis DADR1

Die Aussteuerung einer neuen Ausgangsspannung am D/A-Wandler benötigt einedefinierte Dauer, die so genannte Wandlungszeit (conversion time). Diese Zeit istabhängig von der angeschlossenen kapazitiven Belastung. Beim MikrocontrollerMB91F362 beträgt die Wandlungszeit für eine kapazitive Last von 100pF:

tc = 3µs.

AUFGABE:Es soll ein Programm erstellt werden, welches über den D/A-Wandler 0 eine Si-nusspannung von +/-5V ausgibt. Um eine definierte Abtastzeit des Hauptpro-gramms sicherzustellen, soll das Modul timer verwendet werden. Die Laufzeit desHauptprogramms soll über eine Variable in main über den Debugger im Mikrose-kundenbereich einstellbar sein, um den Effekt der Wandlungszeit beobachten zukönnen. Da die Berechnung der Sinus-Funktion auf einem Mikrocontroller einegroße Rechenzeit benötigt, wird der Sinus häufig in Form eines Arrays (z.B. mit 10Stützpunkten sin[]= [0,….] vorab definiert. Aufgrund der Symmetrie der Sinus-Funktion ist die Abbildung einer 1/4-Periode ausreichend (Bild 8.2).

0,0

0,2

0,4

0,6

0,8

1,0

0 10 20 30 40 50 60 70 80 90 1,000090

0,984880

0,939770

0,866060

0,766050

0,642840

0,500030

0,3420200,173610

0,00000

1,000090

0,984880

0,939770

0,866060

0,766050

0,642840

0,500030

0,3420200,173610

0,00000

Bild 8.2: Abbildung der Sinusfunktion in einem Array

Hinweis:Da die Hauptschleife innerhalb weniger Mikrosekunden bearbeitet werden soll,muss die Bearbeitungszeit einzelner Anweisungen berücksichtigt werden, um dieRechenzeit nicht länger werden zu lassen wie die Abtastzeit. Im Folgenden werdendaher prinzipielle Laufzeiten des Mikrocontroller MB91F362 für Einzeloperatio-nen angegeben:Funktion Taktzyklen (Laufzeit)

f=64MHz, T=15,6ns

Variablen-Zuweisung 1 (15,6ns)

Integer-Addition 1 (15,6ns)

Integer-Multiplikation (16x16Bit) 3 (46,8ns)

Integer-Multiplikation (32x32Bit) 5 (78ns)

Integer-Division (32/32Bit) 36 (561,6ns)

Wandlungszeit

Umsetzung Sinus

Laufzeiten vonFunktionen

Page 51: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 51/84

47

Sonderfunktion:

Ist die Rechenzeit des Hauptprogramms länger als die vom Timer vorgegebeneAbtastzeit, soll die LED0 über das Modul led aktiviert werden. Wird die Abtastzeitanschließend wieder eingehalten, soll die LED0 nach einer Sekunde wieder deakti-viert werden.

Modul DA

main

Page 52: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 52/84

48

9 PWM Ansteuerung

Zur Ansteuerung von Aktoren wird häufig ein pulsweiten moduliertes (PWM) Sig-

nal verwendet. Als Einstellgröße eines PWM-Signals dienen die Frequenz f, dieüblicherweise auf einen festen Wert eingestellt wird, und die Pulsbreite b, die zwi-schen 0…100% variieren kann (Bild 9.1).

TPWMt

TEin

U0

Bild 9.1: PWM-Signal

Die Pulsbreite α ergibt sich zu

PWM

Ein

T

T =α mit

f T PWM

1=

Die Ansteuerung über ein PWM-Signal erfolgt vorzugsweise bei induktiven Las-ten, wie sie bei Elektromagneten in Ventilen oder bei Elektromotoren vorkommen.Da der Strom über die Induktivität geglättet wird, ergibt sich bei ausreichen hoherPWM-Frequenz ein quasistationäres Signal (Bild 9.2).

U0

I

U0

TPWM

IIm

Transistor ein, Diode sperrtTransistor aus, Diode leitet

Bild 9.2: Stromverlauf bei PWM-Ansteuerung einer induktiven Last

Je größer die PWM-Frequenz gewählt wird, desto geringer sind die Abweichungendes Stromes I vom Mittelwert Im.

Zur Ansteuerung von Gleichstrommotoren wird häufig eine Vollbrücke eingesetzt,mit der ein 4-Quadranten-Betrieb des Motors (Motor Rechtslauf, Linkslauf, Brem-se Rechtslauf, Linkslauf) möglich ist. Häufig existieren integrierte Bausteine, dieeine oder mehrere Vollbrücken zur Verfügung stellen. Im Labor wird der BausteinL6206 verwendet, der 2 Vollbrücken mit Freilaufdioden integriert. Das Block-schaltbild des Bausteins sowie die Verdrahtung zum Mikrocontroller sind im Bild9.3 dargestellt.

Liegt am Eingang EN (enable) 0V an, sind sämtliche Transistoren gesperrt, dieAusgänge O1 und O2 sind hochohmig geschaltet. Zur Aktivierung der Brücke istder Eingang EN auf high (5V) zu schalten. Anschließend werden über die Eingän-ge IN1 und IN2 die Transistoren geschaltet. Ist der Eingang IN1 auf Zustand 0

gelegt, schaltet den Transistor T3 und der Ausgang O1 liegt auf GND. Im Zustand1 schaltet der Transistor T1 und der Ausgang O1 liegt auf U0. Entsprechend verhältes sich mit dem Eingang IN2 und den Transistoren T2 und T4. Die Ausgänge O 1

PWM-SignalFrequenzPulsbreite

Stromverlauf beiInduktiver Last

Page 53: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 53/84

49

und O2 werden kurzgeschlossen, wenn an beiden Eingänge IN1 und IN2 der Zu-stand 0 liegt.

Bild 9.3: Vollbrückentreiber L6206 und Verdrahtung zum Mikrocontroller

Im einfachsten Fall wird über die Eingänge IN1 oder IN2 ein PWM-Signalg vorge-geben, so dass der Ausgang entweder ein positiv oder ein negativ geschaltetesPWM-Signal erzeugt (Bild 9.4).

T1

T3

T2

T4

D1

D3

D2

D4

M

T1

T3

T2

T4

D1

D3

D2

D4

M

IN2

IN1

U12

U12U12 U12U12

T1

T3

T2

T4

D1

D3

D2

D4

M

T1

T3

T2

T4

D1

D3

D2

D4

M

IN2

IN1

U12

U12U12 U12U12

T1 ein, T3 aus

T2 aus, T4 ein

T1 aus, T3 ein

T2 ein, T4 aus

T1 aus, T3 ein

T2 aus, T4 ein

Bild 9.4: Unipolare Signalansteuerung für Motor Rechts- und Linkslauf

Integrierter Vollbrü-ckentreiber L6206

AnsteuervariantenUnipolar/Bipolar

Page 54: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 54/84

50

Eine höhere Dynamik der Ansteuerung der Brücke kann erreicht werden, wenn dieEingänge IN1 und IN2 im Wechsel angesteuert werden (Bild 9.5).

T1

T3

T2

T4

D1

D3

D2

D4

M

T1

T3

T2

T4

D1

D3

D2

D4

M

IN2

IN1

U12

U12U12 U12U12

TV

T1 ein, T3 aus

T2 aus, T4 ein

T1 aus, T3 ein

T2 ein, T4 aus

Bild 9.5: Bipolare Signalansteuerung für Motor Rechts- und Linkslauf

Um zu verhindern, dass sich die Transistoren T1 und T3 bzw. T2 und T4 gleichzei-tig im leitenden Zustand befinden und damit einen Kurzschluss und eine Zerstö-rung der Transistoren zur Folge haben, sollte eine Verzögerungszeit Tv beim Um-schalten der Eingänge IN1 und IN2 eingehalten werden.

Die bipolare Ansteuerung erlaubt eine höhere Dynamik des Motors. Der Motorsteht, wenn die PWM-Ansteuerung 50% beträgt. Allerdings fließt im Stillstand beider bipolaren Ansteuerung ein größerer Ruhestrom als bei der unipolaren Ansteue-rung.

Der Baustein L6206 verfügt über eine integrierte Überstrom (>2,8A) und Über-temperaturüberwachung. Im Fehlerfall wird der Ausgang OCD auf Zustand 0 ge-legt. Über den Eingang PK.0 für die Brücke 1 bzw. PK.1 für die Brücke 2 wird derFehlerzustand über einen Inverter an den Mikrocontroller signalisiert. Im Fehlerfallsoll die Freigabe (Eingang EN, enable) der Brücke deaktiviert werden. Dies erfolgtüber den Open Collector Ausgang OCD und die Ansteuerung des Freigabe-Eingangs über einen Optokoppler. Der Freigabe-Eingang ist im Zustand 1, wennkein Fehler anliegt (Ausgang OCD im Zustand 1) und der Mikrocontroller über denAusgang PJ.4 bzw. PJ.5 den Optokoppler nicht durchsteuert (Zustand 1).

Zur Ansteuerung der Eingänge IN1 bzw. IN2 existiert auf Mikrocontrollern einBaustein, der prinzipiell gemäß Bild 9.6 funktioniert.

Reload-Wert ZR

Zähler (Counter)Taktgeber

(CLK)

Reload-Wert ZR

T

TZählerstand Z

Tges=(ZR+1)·T

Ausgang

Zeit

Zeit

Duty-Wert ZD

Ausgang

Duty-Wert ZD

TD=(ZD+1)·T

Bild 9.6: Prinzipielle Funktionsweise PWM-Signalgenerator

Die Basis zur Erzeugung eines PWM-Signals bildet ein Zähler, der wie der Timer-Baustein einen Wert mit jeder steigenden Flanke eines Taktsignals dekrementiert.Ist der Zählerstand bei 0 angekommen, wird bei einer weiteren Dekrementierung

PWM-Signalgenerator

Page 55: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 55/84

51

der Zähler auf den Ausgangswert (Reload-Wert) zurückgesetzt. Zusätzlich wirdüber einen Vergleichsbaustein der aktuelle Zählerwert mit einem Wert (Duty-Wert)vergliche. Ist der Zählerstand größer als der Duty-Wert, wird der Ausgang auf 0Signal gelegt. Erreicht der Zählerwert den Duty-Wert bzw. unterschreitet er diesen,wird der Ausgang auf 1 Signal gelegt.

Am Ausgang des Bausteins liegt demnach ein PWM-Signal vor. Die Frequenzf PWM des PWM-Signals wird über den Reload-Wert und der Taktfrequenz definiert:

( ) T Z T f

Rgew

PWM ⋅+

==1

11

Die Frequenz liegt typischerweise bei mechatronischen Systemen in einem Bereichzwischen 500Hz und mehreren KHz.

Die Pulsbreite α ergibt sich aus der Vorgabe des Verleichswertes (Duty-Wert) ZD.

1

1

+

+==

R

D

ges

D

Z

Z

T

T α

Da als Minimum ein Vergleichswert von ZD=0 eingestellt werden kann, kann einePulsbreite von 0% nicht realisiert werden. Eine Pulsbreite von 0% kann demnachnur eingestellt werden, wenn der Ausgang des PWM-Signalgenerator deaktiviertwird.

Bei der Wahl des Reload-Wertes ist ein Konflikt zu lösen. Soll eine möglichst hohePWM-Frequenz realisiert werden, muss der Reload-Wert bei gegebener Taktfre-quenz entsprechend klein gewählt werden. Für den Duty-Wert können aber nurganze Zahlen zwischen 0 und maximal dem Reload-Wert gewählt werden. Dem-nach entspricht der Reload-Wert auch gleichzeitig der Anzahl möglicher Inkremen-te.

Beispiel:

Gegebene Taktfrequenz MHz f 1= ,

gewünschte PWM-Frequenz: KHz f PWM 10=

Einzustellender Reload-Wert: 991 =−=PWM

R f

f Z

Als Duty-Wert können demnach nur Werte zwischen 0 und 99 gewählt werden.Dies entspricht einer Auflösung weniger als 7 Bit (7 Bit können 127 Inkrementeabbilden).

Die Erzeugung eines PWM-Signals erfolgt im Mikrocontroller MB91F364 überden PPG-Baustein (Programmable Purpose Generator, Bild 9.7). Es stehen insge-samt 4 Ausgänge zur Verfügung (OCPA0…OCPA3). Diese werden über 4 Zähler(PTMR0…PTMR3) mit den zugehörigen Reload-Werten (PCSR0…PCSR3) undden Duty-Werten (PDUT0…PDUT3) angesteuert.

Der Takt zum Dekrementieren des Zählers wird über CLKP (Defaulteinstellung 32MHz) vorgegeben und kann über das Control Register PCN0…3 mit den BitsCKS1 und CKS0 mit den Teilern 1, 4, 8, 64 geteilt werden.

Gestartet wird der Timer entweder per Software (Bit STGR im Control RegisterPCN0…3), durch Ablauf des Timers (zum Timer siehe Kapitel 7) und durch ein

Spezialregister GCN20, welches auch mehrere Timer gleichzeitig starten kann. DieAuswahl hierzu erfolgt über das Control Register GCN10.

Reload-/Duty-WertFrequenz/Pulsbreite

Auflösung

Page 56: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 56/84

52

Der HW-Ausgang OCP0…3 des Bausteins besitzt entweder normale (vergleicheBild 9.6) oder invertierte Polarität (Einstellung über PCNL0…3, Bit OSEL). Zu-sätzlich kann der Ausgang unabhängig von der PPG-Funktion auf einen definiertenAusgangswert gesetzt werden (Einstellung über PCNLH, Bit PGMS).

Der Timer kann in 2 Modi laufen: PWM oder Single Shot. Beim Modus PWM

wird der Timer nach Ablauf wieder erneut auf den Reload-Wert gesetzt und dasDekrementieren beginnt automatisch. Beim Modus Single Shot wird der Timer nureinmal vom Reload-Wert dekrementiert. Ein Neustart erfolgt erst nach einem er-neuten Start. Die Einstellung des Modus erfolgt im Control Register PCNH0…3,Bit MDSE.

Bild 9.7: Funktionsweise PPG-Baustein

Mit weiteren Bits kann der Zähler angehalten oder freigegeben werden (PCNH0..3,Bit CNTE) und ein erneuter Start mit Rücksetzen des Timers auf den Reload-Wertes im laufenden Betrieb freigegeben werden (PCNH0..3, Bit RTRG). Ein In-terrupt kann ebenfalls erzeugt werden, sobald dieser freigegeben wurde (PCNL0..3,Bit IREN) und die entsprechende Interruptquelle ausgewählt wurde (PCNH0..3, BitISR0 und ISR1). Das Auftreten eines Interrupts wird über das Bit IRQF im Regis-ter PCNH0..3 signalisiert. Dieses Bit muss in der Interruptfunktion zurückgesetztwerden.

Die Verdrahtung des PPG-Bausteins mit dem Treiber-Baustein L6206 ist im Bild9.8 dargestellt. Die Ausgänge OCP0…3 des PPG-Bausteins liegen auf dem Port P,Pin 0…3. Damit diese Pins als Ausgang des PPG-Bausteins genutzt werden kön-

nen, muss der Pin auf Sonderfunktion umgestellt werden (siehe Kapitel 5, Bild5.6).

Neben den Ausgängen des PPG-Bausteins wird der Port J, Pin 4 und 5 zur Freigabeder Brücke genutzt. Eine Rückmeldung, ob sich der Treiberbaustein in Überlastbefindet, erfolgt über Port K, Pin 0 und 1.

Die Ausgänge des Treiberbausteins befinden sich an Klemme X3, Stelle 1/2 bzw.3/4 (zur Lage der Klemme X3 siehe Bild 12.1 oder 12.2).

PPG-ModulMB91F364

Page 57: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 57/84

53

UBoot UBoot

10V 10V

Überstrom-

Temperatur-

Schutz

Ansteuerlogik

IN1

EN

IN2

OCD

5V

5V

EN I N1 I N2 O1 O 20 X X Z Z1 0 0 L L1 1 0 H L1 0 1 L H1 1 1 H H

U0

O1

O2

GND

1

1

1

PK.0 (X1.D1)

PJ.4 (X1.C13)

OCPA0 / PO0 (X1.A2)

OCPA1 / PO1 (X1.A3)

X5.1

X3.1

X3.2

X5.2

T1

T3

T2

T4

D1

D3

D2

D4

UBoot UBoot

10V 10V

Überstrom-

Temperatur-

Schutz

Ansteuerlogik

IN1

EN

IN2

OCD

5V

5V

EN I N1 I N2 O1 O 20 X X Z Z1 0 0 L L1 1 0 H L1 0 1 L H1 1 1 H H

O1

O2

1

1

1

PK.1(X1.D3)

PJ.5 (X1.C14)

OCPA2 / PO2 (X1.A4)

OCPA3 / PO3 (X1.B2)

X3.3

X3.4

T1

T3

T2

T4

D1

D3

D2

D4

Bild 9.8: Verdrahtung PPG des Mikrocontrollers mit dem Treiberbaustein L6206

AUFGABE:

Es soll ein Programm erstellt werden, welches folgende Funktion realisiert: Wirdim Stillstand die Taste S1 gedrückt, soll der Motor im Rechtlauf beschleunigen, bei

Betätigung der Taste S2 soll die Drehzahl reduziert werden. Wird im Stillstand dieTaste S2 betätigt, wird der Motor im Linkslauf beschleunigt, sowie bei Betätigungder Taste S1 wieder abgebremst. Der Überlastfall soll über die LED3 angezeigtwerden.

Welche Module werden benötigt? Zeichnen Sie den Modulplan.

Modulplan

Page 58: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 58/84

54

Realisieren Sie ein Modul PWM mit einer universellen Schnittstelle. Welche Funk-tionen werden in diesem Modul benötigt?

Funktionen Modul PWM

Muss ein Modul erweitert werden?

Ergebnis

Page 59: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 59/84

55

Modul PWM

Page 60: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 60/84

56

Modul main

Page 61: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 61/84

57

10 A/D-Wandler und Interruptfunktion

Damit analoge Spannungen, wie sie z.B. von einem Potenziometer oder einemSensor geliefert werden, von einem Mikrocontroller verarbeitet werden können,müssten diese Spannungen digitalisiert werden (Bild 10.1). Digitalisierung bedeu-tet eine Diskretisierung des Signals bezüglich der Spannung (Inkremente) und eineQuantisierung des Signals bezüglich der Zeit (Abtastzeit). Hierzu dient ein Analog-Digital-Wandler (A/D-Wandler).

4-Bit Wandler: 24=16 Inkremente

Eingangsspannung

Digitalisierter Verlauf

Abtastzeit

Inkrement

Zeit

Spannung

Bild 10.1: Digitalisierung analoger Spannungen

A/D-Wandler arbeiten nach unterschiedlichen Verfahren. A/D-Wandler, die imMikrocontroller implementiert sind, funktionieren häufig nach der Methode „Suk-zessive Approximation“ (Bild 10.2).

Logik

A/D-Wert

D/A-Wandler

FertigUAD

4-Bit Wandler: 24=16 Inkremente

1 2 3 4

Wandlungs-schritte

S geöffnetWandlungszeit

tAD

S

S geschlossen

C laden

C

Fertig

Abtastzeit TA

8

4

Sample& Hold

Bild 10.2: A/D-Wandler mit Sukzessiver Approximation

Voraussetzung für den Beginn einer A/D-Wandlung ist das Vorliegen einer Kon-stanten Spannung, was durch ein Sample & Hold sichergestellt wird. Während derZeit der Wandlung ist der Schalter S geöffnet, die Spannung am Kondensator ist

konstant. Zur Wandlung der Eingangsspannung wird diese mit einem Vergleichs-wert, der von einem D/A-Wandler generiert wurde, verglichen. Im ersten Schrittgibt der D/A-Wandler eine mittlere Spannung aus (z.B. bei einem 4-Bit-Wandlermit 16 Inkrementen werden die Hälfte, d.h. 8 Inkremente ausgegeben). Liegt dieEingangsspannung unterhalb der Spannung des D/A-Wandlers, wird im nächstenSchritt die nächste Hälfte zwischen 0 und der bisherigen Hälfte ausgegeben (imBeispiel bisherige Hälfte 8 Inkremente, neue Hälfte 4 Inkremente). Wäre die Ein-gangsspannung größer als die Spannung des D/A-Wandlers, würde als neuer Wertdie Hälfte zwischen der bisherigen Hälfte und dem Maximalwert ausgegeben wer-den. Dieses Verfahren wiederholt sich, bis das letzte Inkrement überprüft wurde.Ein n-Bit-Wandler benötigt demnach n Schritte, bis die Wandlung abgeschlossenist. Der Abschluss der Wandlung wird mit einem Signal „Fertig“ bzw. „Ready“

signalisiert. Anschließend wird der Schalter S geschlossen, so dass die Spannungam Kondensator wieder der Eingangsspannung folgt. Nach Ablauf der AbtastzeitTA beginnt der Vorgang erneut. Die Abtastzeit muss demnach größer sein als die

DigitalisierungAnaloger Signale

SukzessiveApproximationWandlungszeit

Page 62: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 62/84

58

Wandlungszeit des A/D-Wandlers zuzüglich einer Wartezeit, in der der Kondensa-tor wieder aufgeladen wird.

Gemäß des Shannonschen Abtasttheorems muss die Abtastfrequenz f A mindestensdoppelt so groß gewählt werden wie die höchste im System auftretende Frequenzf S:

S

A

A f T

f ⋅>= 21

.

In der Praxis wird häufig der Faktor 10 zwischen Abtastfrequenz und höchste Sys-temfrequenz gefordert.

Tritt im System eine höhere Frequenz auf als der nach dem Abtasttheorem zulässi-ge Wert, ist der Einsatz eines Filters erforderlich, um den Aliasing-Effekt (Bild10.3) auszuschließen.

-1

-0,5

0

0,5

1

180 360 540 720 900 1080 1260 1440 1620 1800 1980

Eingangsspannung

Digitalisierter Verlauf

Bild 10.3: Aliasing-Effekt bei zu geringer Abtastfrequenz

Als Anti-Aliasing-Filter dient häufig ein einfaches RC-Filter (Bild 10.4).

U

R

CSample & Hold

A/D-Wandler

Anti-Aliasing

Filter

Bild 10.4: Anti-Aliasing-Filter

Die Grenzfrequenz f G eines RC-Filters wird berechnet zu

C R f G

⋅⋅⋅=

π 2

1

In der Praxis sollte die Abtastfrequenz die Grenzfrequenz des Filters um den Faktor10 überschreiten.

Der im Mikrocontroller MB91F364 vorhandene A/D-Wandlerbaustein verfügt überinsgesamt 12 Eingänge, die über einen Umschalter (Multiplexer) auf den eigentli-chen A/D-Wandler geschaltet werden (Bild 10.4). Die Auswahl des zu wandelndenKanals erfolgt über das Register ADCH (AD channel setting). Die oberen 4 Bitsdes Register definieren den ersten Eingang, der gewandelt werden soll und dieunteren 4 Bits den letzten Eingang. Ist der Start- und Endeingang identisch ge-wählt, wird lediglich ein Eingang gewandelt.

Das Starten der Wandlung kann durch unterschiedliche Ereignisse (Software Bit

STRT des Registers ADCS, Hardware-Pin ATGX oder Timer 4, der in dieser Ver-sion des Mikrocontrollers jedoch nicht vorhanden ist. Die Auswahl des Ereignisseserfolgt im Register ADMD.

ShannonschesAbtasttheorem

Aliasing Effekt

Anti-AliasingRC-Filter

Page 63: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 63/84

59

Nach dem Start des Wandlers wird das Bit BUSY im Register ADCS gesetzt. Esbleibt solange gesetzt, bis der letzte Eingang gewandelt wurde. Sobald der ersteEingang vom A/D-Wandler verarbeitet wurde, wird das Bit INT (Register ADCS)gesetzt. Je nach eingestelltem Modus im Register ADMD wird zum Weiterschaltenauf den nächsten Eingang auf ein nächstes Triggerereignis (MOD1 = 1, Mod 0 = 1)gewartet oder automatisch der nächste zu wandelnde Eingang adressiert.

A d r e s s - / D a t e n b u s

LogikA/D-Wert

D/A-Wandler

S

C

Sample& Hold

ADCD

(Bit 9…0)

ANS3

ANS2

ANS1

ANS0

ANE3

ANE2

ANE1

ANE0

DBL-------DBL: 0= C lockenab leADBL

ADCD

MUX

Umschalter(Multiplexer)

0

11

Schreiben: Start-EingangLesen: aktuel ler Eingang

Schreiben: Letzter Eingang

0 0 0 00 0 0 10 0 1 0. . . .1 1 0 0

Eingang 0Eingang 1Eingang 2. . .Eingang 11

ADCH AD channel setting

AD conversion data(Bit 0…9)

-

-

-

0

MOD1

MOD0

STS1

STS0

MOD: Modus

0 0 Eingang autoinkr. mit Pause, kein Neustart0 1 Eingang autoinkr. mit Pause, Neustart möglich1 0 Eingang autoinkr. ohne Pause1 1 Eingang inkr. nach Start

STS: Start Source

0 0 So ftwa re0 1 E xt erne r Pi n1 0 Software oder Timer 4 (nicht vorhanden)1 1 Software, Timer 4 oder Pin

ADMD AD Mode

CLKP

ADBL_DBL

ADCS

BUSY

INT

INTE

PAUS

-

-

STRT

0 STRT Schreiben: 1=Software Star t

BUSY Lesen: 1= Kanäle werden gewandeltSchreiben: 0=Abbruch Wandlung

INTE Schreiben: 1=Interrupt Enable

INT Lesen: 1=Interrupt, Wandlung fertig

PAUS Schreiben: 1=Wandlung anhalten

Fertig

IRQ

PIN: ATGX (X1.A11)

Bild 10.4: Aufbau des A/D-Wandlers des MB91F364

Wird der zu wandelnde Eingang automatisch weitergeschaltet (autoinkr.), muss dasErgebnis der Wandlung rechtzeitig aus dem Register ADCD gelesen werden, bevordas nächste Wandlungsergebnis vorliegt.

Ein Ausschnitt eines Programms, welches die Eingänge 0 bis 4 hintereinander wan-delt, ist in Bild 10.5 dargestellt. In der Initialisierungsfunktion werden zunächstdie Pins 0 bis 7, die auf dem Port H liegen, auf die Sonderfunktion AD-Einganggestellt und der Takt für den A/D-Wandler freigegeben. Bevor die Einstellung desStart- und Endeingangs vorgenommen werden kann, muss der A/D-Wandler ge-stoppt werden, was über ein Schreiben einer 0 auf das Bits BUSY (Register ADCS)erfolgt. Sobald der A/D-Wandler gestoppt ist, werden die Kanäle eingestellt. AlsModus wird keine automatische Inkrementierung des Eingangskanals gewählt undals Startbedingung lediglich das Bit STRT im Register ADCS zugelassen. Ab-schließend wird das Bit INT (Register ADCS), welches eine abgeschlosseneWandlung signalisiert, zurückgesetzt.

In der Funktion main wird in der Hauptschleife „while (1)“ der A/D-Wandler ge-startet. Anschließend wird gewartet, bis die Wandlung abgeschlossen ist (while

ADCS_INT==0). Ist die Wandlung abgeschlossen, wird zunächst der gewandelteEingang ermittelt (bNo=ADCH>>4) und das Ergebnis aus dem Register ADCDausgelesen und in einem Array uiAD[] zwischengespeichert. Die Information, dassdie Wandlung fertig ist, wird wieder zurückgesetzt (ADCS=0). Solange noch nichtder letzte Kanal gewandelt wurde, wird die Schleife erneut ausgeführt. Wurden alleKanäle gewandelt, erfolgt die Verarbeitung der Daten. Am Ende der Hauptschleifewird auf den Ablauf des Timers gewartet, bevor die Schleife erneut ausgeführtwird.

A/D-Wandler desMB91F364

Page 64: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 64/84

60

Bild 10.5: Programm zum Auslesen der Eingänge 0 bis 4

Problematisch bei diesem Programm sind die Zeiten, in denen jeweils nur auf denAbschluss der A/D-Wandlung gewartet wird. Beim Mikrocontroller MB91F364

benötigt eine A/D-Wandlung eine Dauer von 5,6µs. Der Ablauf des Hauptpro-gramms ist im Bild 10.6 dargestellt.

5,6 µs: Warte auf AD-Wandler Eingang 0

<0,1µs: Ergebnis speichern und starten

<0,1µs: Starten

5,6 µs: Warte auf AD-Wandler Eingang 1

<0,1µs: Ergebnis speichern und starten

5,6 µs: Warte auf AD-Wandler Eingang 2

<0,1µs: Ergebnis speichern und starten

5,6 µs: Warte auf AD-Wandler Eingang 3

X µs: Verarbeitung

Y µs: Warte auf Ablauf Abtastzeit

<0,1µs: Ergebnis speichern und starten

Bild 10.6: Zeitlicher Ablauf der Hauptschleife

Bei 4 zu wandelnden Eingängen wird somit 4 x 5,6µs = 22,4µs gewartet und wäh-rend dieser Zeit lediglich ca. 5x 0,1µs = 0,5µs abgespeichert. Soll eine Abtastfre-quenz von 10KHz erreicht werden, beträgt die Abtastzeit lediglich 100µs. Bei demoben dargestellten Beispiel muss die Verarbeitung in einer Zeit von weniger als100µs – 22,9µs=81,1µs erfolgen.

Je mehr Eingänge verwendet werden, desto größer wird die Wartezeit. Bei Nut-zung aller 12 Eingänge beträgt die Wartezeit insgesamt 67,2µs und damit mehr als50% der zur Verfügung stehenden Abtastzeit.

DemoprogrammEinlesen A/D

ProblematischesZeitverhalten

Page 65: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 65/84

61

Das Problem unnötiger Wartezeiten kann durch die Verwendung der Interrupt-Funktionalität gelöst werden. In jedem Mikrocontroller können bestimmte Ereig-nisse Auslöser eines Interrupt (IRQ, Unterbrechung) sein. Tritt dieses Ereignis auf,wird das aktuell laufende Programm unterbrochen und die zu diesem Ereignis zu-gehörige Interruptfunktion (IRQ-Funktion) aufgerufen. Am Ende der IRQ-Funktion wird das Hauptprogramm an der unterbrochenen Stelle fortgeführt (Bild10.7).

Initialisierung

Start

HauptprogrammEndlosschleife

void main(void)

initIRQ();

initAD(0,3);

while( 1 )

//Verarbeitung

HauptprogrammEndlosschleife

Interruptfunktion

Ausführung Hauptprogramm Hauptprogramm mit Interrupt

Initialisierung

Start

Interruptereignis

Bild 10.7: Verwendung von Interruptfunktionen

Folgende Ereignisse können IRQs auslösen:

• Abschluss einer A/D-Wandlung (siehe Bild 10.4)

• PWM-Signalerzeugung (siehe Bild 9.7)

• Ablauf eines Timers (siehe Bild 7.2)

• Setzen eines externen Eingangs (z.B. Taste, siehe Bild 5.2)

• Capture/Compare-Timer• CAN-Bus

• RS232-Schnittstelle

Die IRQ-Funktion des A/D-Wandlers müsste lediglich das aktuelle Ergebnis desA/D-Wandlers, welches im Register ADCD liegt, zwischenspeichern und, soweitnoch nicht alle Eingänge gewandelt wurden, die nächste Wandlung starten.

In dem template der Laborübung sind sämtliche IRQ-Funktionen im Modul irq.czusammengefasst (Bild 10.8). Die IRQ-Funktion der RS232 Schnittstelle stehtnicht zur Verfügung, da diese vom Debugger accemic mde verwendet wird. Aufdie IRQ-Funktion der PWM-Signalerzeugung wurde ebenfalls verzichtet, da diese

nur in seltenen Fällen benötigt wird. Tritt ein IRQ auf, für die es keine IRQ-Funktion gibt, wird die Default-IRQ-Funktion aufgerufen.

Interrupt

Page 66: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 66/84

62

Bild 10.8: Modul irq.c

main

irq

IRQ ADCS_INT

ad

irqAd()

OnADC()

initAD()

uiReadAdNorm()

initIRQ()

Bild 10.9: IRQ-Funktion des AD-Wandlers und zugehörige Modulstruktur

Um die IRQ-Funktion des A/D-Wandlers zu aktivieren, muss der IRQ freigegebensein (Bild 10.4 Bit INTE des Registers ADCS), und dem IRQ muss eine Prioritätzugewiesen werden. Bei Auftreten eines IRQs wird die Funktion OnADC im Mo-dul irq aufgerufen. Um die erforderliche Modularität zu gewährleisten, sollte dieFunktion OnADC lediglich eine weitere Funktion irqADready des Moduls ad auf-rufen.

Tritt während der Bearbeitung einer IRQ-Funktion ein weiterer IRQ auf, so wirddie aktuelle Funktion unterbrochen, wenn der neue IRQ eine höhere Priorität auf-weist als der bisherige IRQ (Bild 10.10). Je niedriger der Prioritätswert, desto hö-her ist die Priorität. Tritt während der Bearbeitung einer IRQ-Funktion ein IRQ mit

gleicher Priorität auf, wird die laufende IRQ-Funktion nicht unterbrochen sondernerst nach Abschluss der laufenden IRQ-Funktion wird die nächste IRQ-Funktionaufgerufen.

Modul irq untIRQ-Funktionen

Page 67: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 67/84

63

Es ist zu beachten, dass der Sprung in eine IRQ-Funktion und auch der Rücksprungeine bestimmte Rechenzeit benötigt. In dieser Zeit werden Prioritäten und die zu-gehörige Funktion ermittelt, sowie Variablen zwischengespeichert. Je nach Prozes-sortyp liegen diese Zeiten bei wenigen ns bis zu einigen µs. Der hier verwendeteMikrocontroller MB91F364 benötigt für den Sprung zu einem IRQ eine Dauer vonca. 0,1µs.

IRQ-FunktionTimer 0

IRQ Timer 0Prio 20

IRQ AD-WandlerPrio 19

IRQ Timer 1

Prio 20

IRQ-Funktion

Timer 1

Hauptprogrammwhile (1)

IRQ-FunktionAD-Wandler

Bild 10.10: Auftreten mehrerer IRQs innerhalb einer IRQ-Funktion

Die Definition der Prioritäten erfolgt in der Funktion initIRQ() im Modul irq. Essind Prioritäten zwischen 16 (höchste Priorität) und 30 (niedrigste Priorität) ein-stellbar. Standardmäßig sind die Prioritäten aller IRQs auf 31 (inaktiv) vordefiniert,so dass eine IRQ-Funktion nicht aufgerufen wird.

ICR00

. . .

ICR08

ICR09. . .

ICR30

. . .

ICR47

ICR interrupt control register

Priorität Externer Eingang 0

Priorität „Timer 0“

Priorität „Timer 1“

Priorität „AD-Wandler“

0xFFFBC

. . .

0xFFF9C

0xFFF98. . .

0xFFF44

. . .

0xFFF000 0 0 00 0 0 10 0 1 0. . . .1 1 1 1

Prio 16Prio 17Prio 18. . .Prio 31

111.1

1 1 1 10 NMID3 D2 D1 D0D4

Adresse der IRQ-Funktion

_OnExtInt0

_OnReloadTimer0

_OnReloadTimer1

_OnADC

. . .

. . .

Eingang 0 (IRQ Nr. 0)

Timer 0 (IRQ Nr. 8)Timer 1 (IRQ Nr. 9)

AD-Wandler (IRQ Nr. 30)

. . .

. . .

Ermittlung Priorität

16: höchste Prio

30: niedrigste Prio

31: IRQ gesperrt

0

8

9

30

47

IRQ mit höchster Priorität (Nummer)

Festlegung der

Adressen in

irqadr.asm

void initIRQ(void)

. . .

// Definition IRQ-Priorität AD-Wandler

#define ICR_ADC 30

*((unsigned char*) &ICR00 + ICR_ADC) = 21;

irq.c

Bild 10.11: IRQ-Bearbeitung

Mit der Anweisung in Bild 10.11 unten wird dem Register ICR30 die Priorität 21zugewiesen. Hierzu wird die Adresse des Registers ICR00 ermittelt (&ICR00) und

zu dieser Adresse 30 (+ICR_ADC) Bytes (unsigned char *) addiert. Auf das soermittelte Register wird dann der Wert 18 geschrieben (*(…)=21). Das RegisterICR30 ist fest mit dem AD-Wandler verbunden. Die Funktion, die bei Auftreffendieses IRQs aufzurufen ist, steht an Adresse 0xFFF44. Diese Adresse wird im Mo-

Prioritäten von IRQs

Definition vonPrioritäten undIRQ-Funktionen

Page 68: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 68/84

64

dul irqadr.asm mit der Funktion _OnADC belegt. Ebenso sind die weiteren IRQsmit festen ICR verbunden und die Funktionen von dem Modul irqadr vordefiniert.

Um ein optimales Zeitverhalten in der Hauptschleife bei gleichzeitiger Verwen-dung des A/D-Wandlers zu gewährleisten, sollen zu Beginn der Hauptschleife dieaktuellen Ergebnisse der Wandlungen vorliegen. Dies kann erreicht werden, wenn

am Ende der Hauptschleife nicht auf den Ablauf eines Timers, sondern auf dieWandlung aller Eingänge gewartet wird. Um dennoch eine fest Abtastzeit zu ge-währleisten, muss die erste A/D-Wandlung über einen Timer gestartet werden(Bild 10.12).

VerarbeitungWarte bis alle Eingänge gewandelt

IRQ-Timer: Starte A/D-Wandler

IRQ-AD: Speichere Wert

Warte

IRQ AD

A/D-Wandlungszeit 5,6µs

IRQ Timer 0 IRQ Timer 0

IRQ AD

100µs Timer

Hauptprogrammschleife while (1)

Bild 10.12: Optimales Zeitverhalten bei Nutzung von IRQs für den A/D-Wandler

Zum Starten des A/D-Wandlers über einen Timer könnte der Timer 4 direkt ver-wendet werden (Bild 10.4, Register ADMD, Bits STS), so dass eine IRQ-Funktionnicht aktiviert werden müsste. Da der Timer 4 bei diesem Variante des Mikrocont-rollers nicht vorhanden ist, muss mit einem der vorhandenen Timer 0 bis 2 eineIRQ-Funktion aufgerufen werden, die wiederum den A/D-Wandler per Software(Bild 10.4, Register ADCS, Bit STRT) startet.

Die Verdrahtung der einzelnen A/D-Eingänge auf dem MEB ist im Bild 10.13dargestellt. Neben dem auf der Platine befindlichen Potenziometer P1 können 2weitere externe externe Signale an der Klemme X2 angeschlossen werden. DurchBereitstellung der Referenzspannung an Klemme X2.1 kann als externes Signalauch ein Potenziometer angeschlossen werden.

4

3

MUX

0X1.A6 (AN1, PH1)

10n

15K

15K

10n

1X2

2

3

4

5

5V-REFP110K

5V-REF

1

2

1 2

1 1

1 0

9

8

7

6

5

4

3

2

11 2

1 1

1 0

9

8

7

6

5

4

3

2

1

S3

P1

IC774HC14

I C 6

7 4 H C 2 4 1

I C 8

P E 1 2 0 2 4

IC5TLC274

LED3

X2

X4LED1

IC1174HC14

LED2

IC10HCPL2631

IC9HCPL2631

S1 S2 I C 1 6

T L 0 6 4

IC13L6206N

X3

LED4

LED5 I C 1 2

I L Q 6 1 5

I C 1 5

H C P L 7 5 2 0

I C 1 4

H C P L 7 5 2 0

X1CX1AX1DX1F

R 61 R 62

R 63 R 64

X5

LED-EVB0

LED-EVB1LED-EVB2

LED-EVB3

LED-EVB4

P1RS232

P3CAN

+-

X2.1

P1

X3.2/3

X3.4/5

15K

10n

1 1

11

15K

10n

10

10

0,05O

0,05O

0…5V

0…5V

0…5V

0…5V

0…5V

0…5V

0…5V

X1.A6 (AN1, PH1)

X1.A8 (AN2, PH2)

X1.A9 (AN3, PH3)

X1.A10 (AN4, PH4)

±0,25V

0,25V offset

±0,25V

0,25V offset

Bild 10.13: Anschlüsse der A/D-Eingänge

Die externen Eingänge sind mit Verstärkern zwischen dem Anti-Aliasing-Filterausgestattet. Da die Verstärker den Verstärkungsfaktor 1 aufweisen, dienen sielediglich zur Entkopplung.

Am Eingang 3 und 4 des A/D-Multiplexers besteht die Möglichkeit, den Stromdurch den Mittelzweig der Brücken des Bausteins L6206 zu messen. Im Mittel-zweig ist ein Shunt-Widerstand (R=0,05Ω) eingebaut, über den bei Stromfluss eine

Optimiertes Zeitver-halten des A/D-Wandlers mit IRQs

Analoge Eingängeder MEB

Page 69: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 69/84

65

geringe Spannung abfällt. Je nach Ansteuerung der Brücke kann diese Spannungpositiv oder negativ sein. Die zum Strom proportionale Spannung wird über einenVerstärker um den Faktor 10 verstärkt. Da Mikrocontroller nur Spannungen zwi-schen 0 und 5V messen können, wird eine negative Spannung durch Addition einesOffsets kompensiert. Fließt kein Strom durch die Brücke, liegt unter Berücksichti-gung des Offsets am Eingang des A/D-Wandlers eine Spannung von 2,5V an.

AUFGABE:

Welcher Strom muss durch die Brücke fließen, damit der A/D-Wandler voll ausge-steuert wird?

Welchen Strom repräsentiert ein Inkrement bei einem A/D-Wandler mit einer Auf-lösung von 10bit?

AUFGABE:

Es soll ein Programm erstellt werden, welches die Spannungen der 5 Eingänge desA/D-Wandlers misst. Die Spannung des ersten Eingangs soll über die 4 LEDs bi-närcodiert ausgegeben werden. Durch Betätigung des Tasters S3 wird auf dennächsten Eingang weitergeschaltet werden. Das Hauptprogramm main ist nachfol-gende gegeben.

#include “general.h“

#include “irq.h“

#include “timer.h“

#include “led.h“

#include “key.h“

#include “pwm.h“

void main(void)

BYTE bNo=0;

INT iPWM=0;

UINT uiTmp;

initIRQ();

initAD(0,4);

initTimer(0,1000);

initLED();

initKey();

initPWM(100);

while(bIsAdRunning()==1)

while(1)

handleKey();

uiTmp=uiReadAdNorm(bNo);

writeLED(uiTmp/625);

if(bReadKeyEdge(2)==1) bNo++;

if(bNo>4) bNo=0;

if((bReadKey(0)==1)&&(iPWM<1000)) iPWM++;

if((bReadKey(1)==1)&&(iPWM>-1000)) iPWM--;

writePWM(0,iPWM);

while(bIsAdRunning()==1)

Page 70: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 70/84

66

Kommentieren Sie die Zeilen der gegebenen Hauptfunktion.

Folgende Aufgaben müssen im umgesetzt werden:

• Die Funktion initTimer gibt zusätzlich einen IRQ des Timers 0 frei (BitINTE=1, Bild 7.2)

• In der Funktion initIRQ muss dem IRQ des Timers eine Priorität (z.B. 20)zugewiesen werden (Bild 10.11)

• Die Funktion OnReloadTimer0 im Modul irq.c ruft eine Funktion irqTi-mer0 im Modul timer auf.

• Die Funktion irqTimer0 im Modul timer startet den A/D-Wandler (BitSTRT, Bild 10.4) und löscht das Bit, welches den IRQ ausgelöst hat (BitUF, Bild 7.2). Da das Modul Timer nicht auf die Hardware des A/D-Wandlers zugreifen sollte, sollte zum Start des A/D-Wandlers eine Funkti-on im Modul ad zur Verfügung gestellt werden.

• Die Funktion initAD (Bild 10.5) gibt den IRQ des A/D-Wandlers frei (Bild

10.4, Bit INTE).• In der Funktion initIRQ muss dem IRQ des A/D-Wandlers eine Priorität

(z.B. 21) zugewiesen werden (Bild 10.11).

• Die Funktion OnADC im Modul irq.c ruft eine Funktion irqAd im Modulad auf (Bild 10.9).

• In der Funktion irqAd wird das aktuelle Ergebnis der aktuellen A/D-Wandlung (Bild 10.4, ADCD) gemäß des aktuellen Eingangs (ADCH, Bild10.4) gespeichert. Ist der aktuelle Eingang der in initAD definierte Endein-gang, wird eine globale Variable bAdReady gesetzt. Ist dies nicht der Fall,wird die Wandlung erneut gestartet. Am Ende der Funktion muss die In-

formation, dass die Wandlung abgeschlossen ist (Bild 10.4, Bit INT), zu-rückgesetzt werden

• Die Funktion bIsAdRunning prüft die globale Variable bAdReady. Ist dieglobale Variable gesetzt, die Wandlung sämtlicher Eingänge demnach ab-geschlossen, wird diese zurückgesetzt und die Funktion gibt den Wert 1zurück. Ist die globale Variable bADready nicht gesetzt, gibt die Funktion0 zurück.

• Die Funktion uiReadAdNorm liest das Ergebnis der Wandlung aus demglobalen Array uiAD[] gemäß des angegebenen Eingangs. Hierbei erfolgteine Normierung, so dass die Funktion einen Wert zwischen 0…10000 zu-rückgibt.

Page 71: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 71/84

67

11 Lösungen ohne Kommentar

Die Lösungen sollen als Hilfestellung dienen. Für das Labor/Projektarbeit müssen

die Lösungen mit Kommentarzeilen versehen sein, die jede Zeile beschreiben.general.h

#ifndef _GENERAL_H

#define _GENERAL_H

typedef unsigned char BYTE; // 8-Bit

typedef unsigned short UINT; // 16-Bit, ohne Vorzeichen

typedef unsigned long UDINT; // 32-Bit, ohne Vorzeichen

typedef short INT; // 16-Bit, mit Vorzeichen

typedef int DINT; // 32-Bit, mit Vorzeichen

#define TRUE 1

#define FALSE 0

#define OK 0

#define ERROR 1

#define ON 1

#define OFF 0

#define MAX_INT 32767

#define MIN_INT -32768

#define MAX_UINT 65535

#define NORM_MAX 10000

#define NORM_MIN -10000

#endif

led.c

#include "general.h"

#include "mb91364ec.h"

void initLed(void)

PFRJ = PFRJ | 0x0F;

PDRJ = PDRJ | 0x0F;

void setLED(BYTE bNo,BYTE bState)

BYTE bTmp=0x01;

bTmp=bTmp<<bNo;

if (bState==0) PDRJ=PDRJ|bTmp;

else PDRJ=PDRJ&(~bTmp);

void writeLED(BYTE bValue)

BYTE bTmp;

bTmp = PDRJ;

if (bValue > 15) bValue = 15;

bTmp = bTmp & 0xF0;

bValue = (~bValue) & 0x0F;

bTmp = bTmp | bValue;

PDRJ = bTmp;

Page 72: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 72/84

68

key.c

#include "general.h"

#include "mb91364ec.h"

BYTE _bKeyEdge=0;

void initKey(void)

_bKeyEdge = 0;

void handleKey(void)

static BYTE _bKeyStateOld=0;

BYTE bKeyState;

if(PDRK_PDK5) bKeyState = 1;

else bKeyState = 0;

bKeyState = bKeyState << 1;

if(!PDRK_PDK7) bKeyState = bKeyState | 1;

bKeyState = bKeyState << 1;

if(PDRK_PDK6) bKeyState = bKeyState | 1;

_bKeyEdge = bKeyState & (_bKeyStateOld ^ bKeyState);

_bKeyStateOld = bKeyState;

BYTE bReadKeyEdge(int iNo)

const BYTE cbTest[] = 1,2,4;

BYTE bReturn;

if(iNo < 3 )

if( _bKeyEdge & cbTest[iNo]) bReturn = 1;

else bReturn = 0;

else

bReturn = 0;

return bReturn;

BYTE bReadKey(int iNo)

BYTE bReturn;

switch( iNo )

case 0 :

if( PDRK_PDK6) bReturn = 1;

else bReturn = 0;

break;

case 1 :

if( !PDRK_PDK7) bReturn = 1;

else bReturn = 0;

break;

case 2 :

if( PDRK_PDK5) bReturn = 1;

else bReturn = 0;

break;

return bReturn;

Page 73: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 73/84

69

timer.c

#include "general.h"

#include "mb91364ec.h"

#include "ad.h"

void initTimer(BYTE bNo, UINT uiTime)

BYTE bReturn;

if (uiTime < 1) bReturn = 1;

else

switch(bNo)

case 0:

TMCSR0 = 0x0800;

TMRLR0 = uiTime-1;

TMCSR0 = 0x0813;

TMCSR0_INTE=1;

break;

case 1:

TMCSR1 = 0x0800;

TMRLR1 = uiTime-1;

TMCSR1 = 0x0813;

break;

case 2:

TMCSR2 = 0x0800;

TMRLR2 = uiTime-1;

TMCSR2 = 0x0813;

break;

BYTE bIsTimerRunning(BYTE bNo)

BYTE bReturn=0;

switch(bNo)

case 0:

if (TMCSR0_UF==0) bReturn=1;

break;

case 1:

if (TMCSR1_UF==0) bReturn=1;

break;

case 2:

if (TMCSR2_UF==0) bReturn=1;

break;

return (bReturn);

void irqTimer0(void)

startAd();

TMCSR0_UF = 0;

Page 74: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 74/84

70

da.c

#include "general.h"

#include "mb91364ec.h"

#define MAX_DA_CHANNEL 2

static UINT uiOldValue[MAX_DA_CHANNEL];

void initDa(void)

BYTE i;

DACR = 0x03;

DDBL = 0x00;

DADR0 = 0x01ff;

DADR1 = 0x01ff;

for (i=0;i<MAX_DA_CHANNEL;i++)

uiOldValue[i]=0xffff;

void writeDa(BYTE bNo,UINT uiValue)

switch (bNo)

case 0:

if (uiValue > 0x03ff) uiValue = 0x03ff;

uiValue = 0x03ff-uiValue;if (uiValue!=uiOldValue[0])

DADR0 = uiValue;

uiOldValue[0] = uiValue;

break;

case 1:

if (uiValue > 0x03ff) uiValue = 0x03ff;

uiValue = 0x03ff-uiValue;

if (uiValue!=uiOldValue[1])

DADR1 = uiValue;

uiOldValue[1] = uiValue;

break;

void writeDaNorm(BYTE bNo,INT iValue)

switch (bNo)

case 0:

if (iValue > 10000) iValue=10000;

if (iValue < -10000) iValue=-10000;

iValue = - iValue;

iValue = iValue * 0x1ff;

iValue = iValue / 10000;

iValue = iValue + 0x1ff;

if ((UINT)iValue!=uiOldValue[0])

DADR0 = (UINT) iValue;

uiOldValue[0] = (UINT) iValue;

break;

case 1:

if (iValue > 10000) iValue=10000;

if (iValue < -10000) iValue=-10000;

iValue = - iValue;

iValue = iValue * 0x1ff;

iValue = iValue / 10000;

iValue = iValue + 0x1ff;

if ((UINT)iValue!=uiOldValue[1])

DADR1 = (UINT) iValue;

uiOldValue[1] = (UINT) iValue;

break;

Page 75: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 75/84

71

pwm.c

#include "general.h"

#include "mb91364ec.h"

UINT uiTr = 0;

void initPWM(UINT uiT)

if (uiT>1000) uiT=1000; uiTr = 32*uiT -1;

PCSR0 = uiTr; PCSR1 = uiTr; PCSR2 = uiTr; PCSR3 = uiTr;

PCNL0 = 0x01; PCNL1 = 0x01; PCNL2 = 0x01; PCNL3 = 0x01;

PCNH0 = 0xD2; PCNH1 = 0xD2; PCNH2 = 0xD2; PCNH3 = 0xD2;

PFRO = 0x0f;

PFRJ = PFRJ|0x30;

PDRJ = PDRJ|0x30;

void writePWM(BYTE bNo,INT iValue)

DINT diTmp;

if (iValue>1000) iValue=1000;

if (iValue<-1000) iValue=-1000;

switch(bNo)

case 0:

if (iValue>0)

diTmp=((uiTr+1)*iValue)/1000-1;

PDUT0 = (UINT) diTmp;

PCNH1 = 0xD2;

PCNH0 = 0xD0;

else if (iValue<0)

diTmp=((uiTr+1)*iValue)/1000-1;

PDUT1 = (UINT) diTmp;

PCNH0 = 0xD2;

PCNH1 = 0xD0;

else

PCNH0 = 0xD2;

PCNH1 = 0xD2;

break;

case 1:

if (iValue>0)

diTmp=((uiTr+1)*iValue)/1000-1;

PDUT2 = (UINT) diTmp;

PCNH3 = 0xD2;

PCNH2 = 0xD0;

else if (iValue<0)

diTmp=((uiTr+1)*iValue)/1000-1;

PDUT3 = (UINT) diTmp;

PCNH2 = 0xD2;

PCNH3 = 0xD0;

else

PCNH2 = 0xD2;

PCNH3 = 0xD2;

break;

Page 76: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 76/84

72

ad.c

#include "general.h"

#include "mb91364ec.h"

#define MAX_AD_CHANNEL 12

static UINT _uiAD[MAX_AD_CHANNEL];static BYTE _bAdReady = 0;

static BYTE _bEndNo;

void initAD(BYTE bStart, BYTE bEnd)

PFRH=0xFF;

ADBL_DBL=0;

ADCS_BUSY=0;

while (ADCS_BUSY)

ADCH=(bStart<<4)|bEnd;

ADMD=0x0C;

ADCS_INT=0;

ADCS_INTE=1;

ADCS_STRT=1;

_bEndNo=bEnd;

void startAd(void)

ADCS_STRT=1;

BYTE bIsAdRunning(void)

BYTE bReturn;

if (_bAdReady==1)

bReturn=0;

_bAdReady=0;

else bReturn=1;return (bReturn);

UINT uiReadAdNorm(BYTE bNo)

UDINT ulResult;

ulResult=_uiAD[bNo];

ulResult=ulResult*10000;

ulResult=ulResult/1023;

return( (UINT) ulResult);

void irqAd(void)

BYTE bNo;

bNo=ADCH>>4;

_uiAD[bNo]=ADCD;

if(bNo==_bEndNo) _bAdReady=1;

else ADCS_STRT=1;

ADCS_INT=0;

Page 77: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 77/84

73

irq.c

#include "mb91364ec.h"

#include "timer.h"

#include "ad.h"

#define ICR_EXT_INT_0 0

#define ICR_EXT_INT_1 1#define ICR_EXT_INT_2 2

#define ICR_EXT_INT_3 3

#define ICR_EXT_INT_4 4

#define ICR_EXT_INT_5 5

#define ICR_EXT_INT_6 6

#define ICR_EXT_INT_7 7

#define ICR_RELOAD_TIMER_0 8

#define ICR_RELOAD_TIMER_1 9

#define ICR_RELOAD_TIMER_2 10

#define ICR_CAN_0_RX 11

#define ICR_CAN_0_TX 12

#define ICR_PPG01 19

#define ICR_PPG23 20

#define ICR_ICU_01 26

#define ICR_OCU_01 27

#define ICR_ICU_23 28

#define ICR_OCU_23 29

#define ICR_ADC 30

#define ICR_FREE_RUN_CNT_0 32

#define ICR_FREE_RUN_CNT_1 33

#define ICR_UART0_RX 37

#define ICR_UART0_TX 38

void initIRQ(void)

BYTE i;

for (i = 0; i< 47; i++)

if ((i != ICR_UART0_RX) && (i != ICR_UART0_TX))

*((unsigned char*) &ICR00 + i) = 31;

*((unsigned char*) &ICR00 + ICR_RELOAD_TIMER_0) = 20;

*((unsigned char*) &ICR00 + ICR_ADC) = 21;

__set_il(31);

__EI();

__interrupt void OnDefaultIRQHandler(void)

__interrupt void OnExtInt0 (void)

__interrupt void OnExtInt1 (void)

__interrupt void OnExtInt2 (void)

__interrupt void OnExtInt3 (void)

__interrupt void OnExtInt4 (void)

__interrupt void OnExtInt5 (void)

__interrupt void OnExtInt6 (void)

__interrupt void OnExtInt7 (void)

__interrupt void OnReloadTimer0 (void)

irqTimer0();

__interrupt void OnReloadTimer1 (void)

__interrupt void OnReloadTimer2 (void)

__interrupt void OnCAN0RX (void)

__interrupt void OnCAN0TX(void)

__interrupt void OnInputCapture01(void)

__interrupt void OnOutputCompare01(void)

__interrupt void OnInputCapture23(void)

__interrupt void OnOutputCompare23(void)

__interrupt void OnADC(void)

irqAd();

__interrupt void OnFreeRunningCounter0(void)

__interrupt void OnFreeRunningCounter1(void)

Page 78: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 78/84

74

Literatur

/1/ Wüst, K. Mikroprozessortechnik, Vieweg+Teubner,2009 (erhältlich unter Springer e-book)

/2/ U. Brinkschulte, T. Ungerer Mikrocontroller und Mikroprozessoren,Springer 2007 (erhältlich unter Springer e-book)

/3/ NN FR Family, Softune C/C++ Compiler Man-ual. Fujitsu, 2/2009http://www.fujitsu.com/downloads/MICRO/ fma/pdfmcu/softccmp-v6-cm81-00206-3e.pdf

/4/ NN FR Family, Softune Linkage Kit Manual.Fujitsu, 2/2009

http://www.fujitsu.com/downloads/MICRO/ fma/pdfmcu/softlnk-v6-cm71-00327-3e.pdf

/5/ NN Datenblatt AS7C3256A, 2/2009, http://docs-europe.electrocomponents.com/webdocs/0b7a/0900766b80b7ab75.pdf

/6/ NN FR 50 32-Bit Microcontroller, MB91360Series Hardware Manual, 3/2009http://mcu.emea.fujitsu.com/document/products_mcu/mb91360/documentation/ds91360-ds07-16401-4e.pdf

Page 79: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 79/84

75

12 Anlage

12.1 Funktionsschema Mechatronic Evaluation Board (MEB)

1 2

1 1

1 0

9

8

7

6

5

4

3

2

11 2

1 1

1 0

9

8

7

6

5

4

3

2

1

S3

P1

IC 774HC14

I C 6

7 4 H C 2 4 1

I C 8

P E 1 2 0 2 4

IC 5TLC274

LED3

X2

X4 LED1

IC 11

74HC14

LED2

IC 10HCPL2631

IC 9

HCPL2631

S1 S2 I C 1 6

T L 0 6 4

IC 13

L6206N

X3

LED4

LED5 I C 1 2

I L Q 6 1 5

I C 1 5

H

C P L 7 5 2 0

I C 1 4

H C P L 7 5 2 0

X1C X1AX1DX1F

R61 R62

R63 R64

X5

LED-EVB0

LED-EVB1

LED-EVB2

LED-EVB3

LED-EVB4

P1

RS 232

P3

CAN

+-

Bild 12.1: Aufbau der Platine und Zuordnung der wichtigsten Elemente

1

2

3

4

5

6

7

8

9

10

11

12

Vcc (5V, max. 10mA)

A/D 1 (0…5 V, 10Bit)

AGND

AGND

A/D 2 (0…5V, 10Bit)≈

UA

UB

U0

GND

5V Vcc (5V, max. 100mA)

UA (0/5V)

UB (0/5V)

U0 (0/5V)

GND-D

GND-D

Ux (0/5V)

UX

12

11

10

9

8

7

6

5

4

3

2

1

GND-P

UA1

UA2

UB1

UB2

GND-P

D/A 1 (+/- 10V, 10mA, 10Bit)

GND-A

GND-A

D/A 2 (+/-10V, 10mA, 10Bit)

M

M

U = 12V, Imax = 2 x 2,8ACurrent Sensing (10Bit)

max. 10 kHz

X2 X3

fmax = 1MHzINJECT (5V, max. 1mA)

GND-D

SPEED

Bild 12.2: Hardware-Schnittstellen an den Klemmen X2 und X3

Page 80: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 80/84

76

Aktor2

12..14V6A

EN

IN1

IN2

OCD

RS

L6206

EN IN1 IN 2 S 1 S2 S 3 S40 X X 0 0 0 01 0 0 0 1 0 11 1 0 1 0 0 11 0 1 0 1 1 01 1 1 1 0 1 0

EN IN1 IN2 S1 S2S3S40 X X 0 0 0 01 0 0 0 1 0 11 1 0 1 0 0 11 0 1 0 1 1 01 1 1 1 0 1 0

OCD: Overcurrent Detection

EN IN1 IN2 S1 S2S3S40 X X 0 0 0 01 0 0 0 1 0 11 1 0 1 0 0 11 0 1 0 1 1 01 1 1 1 0 1 0

EN IN1 IN2 S1 S2S3S40 X X 0 0 0 01 0 0 0 1 0 11 1 0 1 0 0 11 0 1 0 1 1 01 1 1 1 0 1 0

OCD: Overcurrent Detection

DC

DC

5V-P GND-P

5V/2,5A

LED5

OCPA2

OCPA3

INT1

AN4

5V-D

PJ5

PO2

PO3

PK1

PH4

GND-D

GND-A

+12V-A

HCPL-7520GND-A

5V-A

S1 S2

5V-R

S3

P K 6

P K 7

P J 0

P J 1

P J 2

P J 3

LED0 LED3

Counter

A 0 *

A 1 *

W D *

R R *

C S *

R S T *

P H 6

P H 7

P O 5

P O 6

P O 7

P O 4

D 0

. . 7

PR0..7

0 A B

P J 7

Aktor1

EN

IN1

IN2

OCD

RS

S1

S2

S3

S4

DC

DC

LED4

OCPA0

OCPA1

INT0

AN3

PJ4

PO0

PO1

PK0

PH3

GND-A

+12V-A

HCPL-7520GND-A

5V-A

L6206

I N 2

I N 3

I N T 5

P L 2

P L 3

P K 5

A B 0

P L 0

I N 0

5V-D

GND-D

Speed

I N T 6

I N T 7

P L 4

O U T 0

GND-A

Inject

MikrocontrollerFujitsu MB91F362

Poti

A N 0

P H 0

5V-D

GND-D

PE12016

PH1

PH2

AN1

AN2

AnalogInput 10…5V

AnalogInput 20…5V

DA0

DA1

DA0

DA1

AnalogOutput 10…±10V

GND-A

AnalogOutput 2

0…± 10V

5V-D

+12V/0,8A

-12V/0,1A

5V -Ref

5V-Ref

5V/10mA+12V-A

5V-R

AVSSAVRH

5V

5V-A

AVCC

5V-R

5V-R

5V

VDD

VSS

S1

S2

S3

S4

X4

X2

X2

X2

X4

X4

X3

X3

X2 X2 X3

X3

X3

X5

Bild 12.3: Zuordnung Hardware zu Ports des Mikrocontrollers

Page 81: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 81/84

77

12.2 Schaltplan Mechatronic Evaluation Board

Page 82: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 82/84

78

Page 83: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 83/84

79

Page 84: Umdruck Mikrocontroller 26-05-09

7/21/2019 Umdruck Mikrocontroller 26-05-09

http://slidepdf.com/reader/full/umdruck-mikrocontroller-26-05-09 84/84

80

12.3 Funktionsweise Up-/Down-Counter PE 12024