Post on 28-Aug-2019
Mikrocontroller-KursMikrocontroller-KursDARC - Ortsverband H13DARC - Ortsverband H13
Gerrit Buhe, DL9GFAMai 2012 – Juni 2013
2 MC-Kurs H13 DL9GFA
Inhalt Mikrocontroller-KursInhalt Mikrocontroller-Kurs
● Mikrocontroller● Einsatz, Aufbau und Funktionsweise● Zahlendarstellung und Binärarithmetik● Programmiermodell (Kern, Register, Speicher)
● Programmierung● Assembler, 'C' und Maschinensprache● Übersetzung Mensch → Maschine
● Einführung in die Programmiersprache 'C' (in Übungen)● Aufbau eines Programms● Variablen und Datentypen● Operanden und Boolesche Algebra● Ablaufsteuerung● Funktionen
● Programmierung einfacher Peripherie● Digitale Ein- und Ausgänge (LED-Blinker, Taster, Würfel)● Darstellung von Buchstaben (LC-Display)
3 MC-Kurs H13 DL9GFA
Inhalt Mikrocontroller-KursInhalt Mikrocontroller-Kurs
● Spezialgebiet Energiesparen● Stromspararchitektur● Taktsystem● Energiesparmodi – Low Power Modes● Ereignisorientierung - Interrupts● Programmablauf mit Ereignisorientierung
● Programmierung erweiterter Peripherie● Timer / Counter (Uhr, PWM, Servo)● Digital-Analog-Wandler durch PWM● Analog-Digital-Wandler (Poti, NTC-Thermometer)● Multiplexen / Charlieplexen mit Timer● Timer im Capture-Modus (Ultraschallabstandssensor)● Timer als Frequenzzähler bis 30MHz● Serielle Schnittstelle USCI (SPI, I²C, UART)
● Embedded Software Architekturen● Round-Robin● Round-Robin mit Interrupts● Function Queue Scheduling● Real-Time Operating System● Vergleich
4 MC-Kurs H13 DL9GFA
EinführungEinführung
● Was sind Mikrocontroller (auch μC, MCU, MC) ?● Kleine programmierbare Halbleiterchips, die neben einem Prozessor auch
Peripheriefunktionen beinhalten, wie z.B.● Analog-Digital- und Digital-Analog-Wandler● Timer, Counter● LCD-Controller● Serielle Schnittstellen (USB, UART, IIC, SPI)● Ethernet-Schnittstelle● Programm- und Arbeitsspeicher (ROM, RAM)
● MCs sind quasi Ein-Chip-Computersysteme
● Wo werden sie eingesetzt?● Heutzutage fast überall und oft unbemerkt
● Radio, TV, CD-/DVD-Player, IR-Fernbedienungen● Handy, Uhr, Chip-Karte (Telefon-, Geldkarte)● Auto: Steuergeräte für Airbag, ABS, ESP, Motor, Instrumente, Sitz, Fensterheber,...● Tastatur, Maus, Drucker, Monitor, Scanner● u.v.m
● Da MCs oft kostengünstiger sind als Elektromechanik, verdrängen sie sogar einfache elektromechanische Lösungen
● Bimetall zur Temperaturregelung im Bügeleisen● Entprellen von Tastern, um diese mechanisch einfacher aufzubauen
5 MC-Kurs H13 DL9GFA
DigitaltechnikDigitaltechnik
● Mikrocontroller sind digitale Bausteine
● Digital (lat. digitus, „Finger“)● Abgestufter und begrenzter Wertevorrat● Digitalsignale sind wert- und zeitdiskret● Anwendungen:
● Abakus (Rechenmaschine)● Schrift und Sprache (diskrete Symbole,
begrenzter Zeichenvorrat)● Geld (es wird kein Gold mehr aufgewogen)● Erbgut ist diskret kodiert
● Alle Signale im MC liegen digital vor, ggf. muß Analog-Digital-gewandelt werden● Verarbeitung der Informationen erfolgt binär (Binär-, Dual- oder Zweiersystem)
● 1 oder 0● High oder Low (H/L, Spannung)● Relais oder Transistor ist offen oder geschlossen● Vorteil: hohe Störsicherheit!
● Erste Computer wurden mechanisch gebaut (1937, Zuse1) und dann mit Relais (1939, Zuse2)
6 MC-Kurs H13 DL9GFA
ZahlendarstellungZahlendarstellung
● Dezimale Darstellung von Zahlen
● Binäre Darstellung
● Hexadezimale Darstellung
214=2⋅1021⋅1014⋅100
214=1⋅271⋅260⋅251⋅24
0⋅231⋅221⋅210⋅20
214=1101 0110b
214=D6h=0xD6
23 22 21 20 Dez Hex
0 0 0 0 0 0
0 0 0 1 1 1
0 0 1 0 2 2
0 0 1 1 3 3
0 1 0 0 4 4
0 1 0 1 5 5
0 1 1 0 6 6
0 1 1 1 7 7
1 0 0 0 8 8
1 0 0 1 9 9
1 0 1 0 10 A
1 0 1 1 11 B
1 1 0 0 12 C
1 1 0 1 13 D
1 1 1 0 14 E
1 1 1 1 15 F
7 MC-Kurs H13 DL9GFA
Binäre ArithmetikBinäre Arithmetik
● Addition 11 0001 1 0011 3 +1100 +12 +1011 +11 1101 13 1110 14
● Multiplikation
0011 3 x 0101 x 5 0011 0000 0011 0000 0001111 8+4+2+1=15
(n bits) mal (m bits) ergeben bis zu (n+m) bits!
23 22 21 20 Dez Hex
0 0 0 0 0 0
0 0 0 1 1 1
0 0 1 0 2 2
0 0 1 1 3 3
0 1 0 0 4 4
0 1 0 1 5 5
0 1 1 0 6 6
0 1 1 1 7 7
1 0 0 0 8 8
1 0 0 1 9 9
1 0 1 0 10 A
1 0 1 1 11 B
1 1 0 0 12 C
1 1 0 1 13 D
1 1 1 0 14 E
1 1 1 1 15 F
8 MC-Kurs H13 DL9GFA
Aufbau MC - CPUAufbau MC - CPU● Zentrale Recheneinheit (Central Processing Unit – CPU)
● Bekommt Takt (MCLK) als Herzschlag - Holt sich über Adress- und Datenbus Befehle aus Programmspeicher - Holt sich zu verarbeitende Daten in Register - Verarbeitet Daten inALU (Arithmetic Logic Unit), Schreibt Ergebnis wieder zurück in Register oder Speicher-bereich, Hält Statusinformationen in Register, Greift über Adress- und Datenbus auf alle anderen peripheren Einheiten zu (In/Out-Schnittstellen=Ports, AD/DA-Wandler, Timer, Speicher)
MCLK
Register
9 MC-Kurs H13 DL9GFA
Aufbau MC - CPU-RegisterAufbau MC - CPU-Register
● 16 Register je 16 Bit Wortbreite
● R0...R3 haben Spezialfunktionen● Programm Counter● Stack Pointer● Status Register● Constant Generator für häufig nötige
Konstanten wie 0, 1, -1, 2, 4, 8
● R4...R15 können frei verwendet werden● Jedes kann als Quelle oder Ziel dienen
MA
B –
Mem
o ry
Add
ress
Bus
MD
B –
Mem
o ry
Dat
a B
us
. . . . . . .
. . . . . . .
. . . . . . .
10 MC-Kurs H13 DL9GFA
Befehle der MSP430-CPUBefehle der MSP430-CPU
● RISC - Architektur (Reduced Instruction Set Computer)● CPU kennt nur 27 Grundbefehle● 24 weitere werden durch Grund-
befehle emuliert
● Ein binärer Maschinenbefehl setzt sich wie in Tabelle unten zusammen
● Op-Code – Befehl aus der Tabelle● S-Reg – Quellregister (Source)● As – Adressierungsart Quellregister● D-Reg – Zielregister (Destination)● Ad – Adressierungsart Zielregister● BW – Byte oder Wort (8bit/16bit)
Format IQuelle,
Ziel
Format IIEinzel-operant
Format III+/- 9bit Offset
add(.b) call jmp
addc(.b) swpb jc
and(.b) sxt jnc
bic(.b) push(.b) jeq
bis(.b) reti jne
bit(.b) rra(.b) jge
cmp(.b) rrc(.b) jl
dadd(.b) jn
mov(.b)
sub(.b)
subc(.b)
xor(.b)
15
14
13
12
11
10
9 8 7 6 5 4 3 2 1 0 Bit imBefehl
Op-Code S-Reg Ad
Bw
As D-Reg I
0 0 0 1 0 0 Op-Code
Bw
Ad D-Reg II
0 0 1 Condition 10bit PC Offset III
11 MC-Kurs H13 DL9GFA
Befehle der MSP430-CPUBefehle der MSP430-CPU
● Befehle werden unverlierbar in den (Flash-)ROM programmiert und von CPU dort abgeholt
● Einige Beispielbefehle (Quelle und Ziel können Register oder Speicheradressen sein):
CPU-Befehl Erklärung
ADD Quelle, Ziel Addiert Quelle zum Ziel (-Register)
CMP Quelle, Ziel Vergleicht Quelle mit Ziel, Ergebnis in Status-Flags
JNE Ziel Springe zur Adresse Ziel, wenn wenn nicht gleich
MOV Quelle, Ziel Schreibe Quelle in Ziel
BR Ziel Springe an Adresse Ziel
CALL Ziel Rufe Subroutine bei Adresse Ziel auf
RET Springe zurück von Subroutine (zur alten Adresse)
RLA Ziel Rotiere Bits von Ziel links herum arithmetisch (mal 2)
XOR Quelle, Ziel Bitweise Exklusiv-ODER-Operation von Quelle mit Ziel
12 MC-Kurs H13 DL9GFA
Aufbau MSP430G2553Aufbau MSP430G2553
13 MC-Kurs H13 DL9GFA
Memory MappingMemory Mapping
● Adressbereiche über die auf Register und Speicher zugegriffen wird
● Startadresse des Flash und End-adresse des RAM ist abhängig von Größe (MSP430-Derivat)
● Informationsspeicher enthält Kalibrier-daten des Oszillators (DCO) und Temperatur-sensors
● Anmerkung:● Linker kümmert sich nach Angabe
des Derivates automatisch darum● Insbesondere bei C-Programmierung
muß man keine Adresse selbst kennen(aber endliche Größe!)
● Beim Debuggen ggf. wichtig
Interupt Vector Table
Flash
InformationMemory
RAM
16-bitPeripherals
8-bitPeripherals
8-bit Special FunctionRegisters
0Fh
0h
0FFh010h
01FFh0100h
03FFh0200h
FFDFh0C000h
0FFFFh0FFE0h
MSP430G2553
010FFh01000h
14 MC-Kurs H13 DL9GFA
Pinbelegung MSP430G2553Pinbelegung MSP430G2553
● Die meisten Pins können mehrere verschiedene Funktionen haben● Sehr hohe Flexibilität● Kann bei Schaltungsdesign verwirren (Fehlerquelle!)● Müssen vor Verwendung in Software konfiguriert werden
● Minimalbeschaltung (Vcc=1.8V...3.6V):
47k
Vcc
1n5
Vcc
100n
Debug
15 MC-Kurs H13 DL9GFA
Zugriff auf Peripherie – PortsZugriff auf Peripherie – Ports● Konfiguration und Nutzung der Peripherie erfolgt über spezielle Funktionsregister
● Diese sind über definierte Namen/Adressen lese- und schreibbar● Funktion oder Bedeutung jedes Bits muß nachgeschlagen werden
● Allgemeine digitale Ein- und Ausgänge - Ports● Unabhängig Pin für Pin programmierbar (In, Out, Interrupteingang mit wählbarer Flanke)● Individuell programmierbare integrierte pull-up- und pull-down-Widerstände● Die meisten Pins sind als kapazitiver Touch-Sensor betreibbar (Pin-Oszillator)
● Beispiel: paralleler Port 1 – 8 Bit pro Register, jedes steht für das zugehörige IO-Pin
Register Adresse Erklärung
P1IN 20h Zeigt Zustand der Eingangs-Pins (0/1 bei low/high-Pegel am Pin)
P1OUT 21h Hier schreibt man gewünschten Ausgangszustand hinein (0/1 → L/H)
P1DIR 22h Gibt Richtung der Pins an, 0 → Eingang, 1 → Ausgang
P1IFG 23h Zeigt Interrupt-Flags an
P1IES 24h Steuert Interrupt-Reaktion bei steigender oder fallender Flanke
P1IE 25h Aktiviert Interrupt-Funktion für jedes Pin einzeln
P1SEL 26h Wählt alternative Funktion des Pins (z.B. AD-Wandler, Timer-input)
P1SEL2 41h Wählt ebenfalls altern. Funktion des Pins (wg. vieler Möglichkeiten)
P1REN 27h Aktiviert Pull-up oder Pull-down-Widerstand pro Pin
16 MC-Kurs H13 DL9GFA
Programmierung - AssemblerProgrammierung - Assembler
● Programm beschreibt Ablauf von Aktionen, um ein Ziel zu erreichen● Der MC versteht nur Befehle aus Nullen und Einsen: 0101 0011 0111 0101b● Mit Assembler kann etwas lesbarer sehr Hardware-nah programmiert werden
● Architektur des MC und der konkrete Befehlssatz müssen sehr gut bekannt sein● Hohe Anforderungen an Wissen um numerische Methoden (z.B. Wurzelziehen, Sinus)● Relativ mühsam
17 MC-Kurs H13 DL9GFA
Programmierung – 'C'Programmierung – 'C'
● Hochsprache 'C' erlaubt abstrakteres Programmieren● Gut lesbare und strukturierte Programme● Sehr gute Wiederverwendung von fertigem Code (Portierbarkeit von/auf andere Plattformen)● Bereits viele Funktionen in Bibliotheken mitgeliefert (z.B. mathematische: sin(), cos(), sqrt())
18 MC-Kurs H13 DL9GFA
Übersetzung für den MCÜbersetzung für den MC
● Das Übersetzen von in Assembler und/oder 'C' geschriebenen Programmen in für den MC verständliche Maschinensprache übernimmt der Compiler und Assembler
● Das Einbinden fertiger Bibliotheksfunktionenund Platzieren der Maschinen-Code-Befehlein den MC-Speicher erfolgt durch den Linker
● Den Aufruf dieser Werkzeuge mit den korrekten Parametern nimmt uns die Entwicklungsumgebung ab (IDE, hier CCS)
● Das Ausführen des generierten Programms zur Fehlersuche (ggf. im Einzelschritt) nennt man Debuggen (engl. entwanzen)
19 MC-Kurs H13 DL9GFA
Unser erstes ProgrammUnser erstes Programm
● LaunchPad kann direkt über USB an Notebook angeschlossen werden
● Starte die Entwicklungsumgebung Code Composer Studio (CCS)● Lege ein neues Projekt an (z.B. mit dem Namen Blinky)
● Aufgabe:
● Programmiere ein Blinklicht mit der LED1 an Port 1.0 in Assembler
● Variiere die Blinkfrequenz● Programmiere das gleiche in 'C'● Modifiziere zum Wechselblinker mit LED2
LEDs
20 MC-Kurs H13 DL9GFA
Blinky.cBlinky.c
21 MC-Kurs H13 DL9GFA
Datentypen in 'C'Datentypen in 'C'
● Nicht alle „Arbeitsdaten“ können gleichzeitig in Registern gehalten werden → sie werden als Variablen im RAM gespeichert
● Der Wertebereich von Variablen muß vor der ersten Verwendung definiert werden, damit die Speichergröße im RAM festgelegt werden kann (Deklaration des Datentyps)
Datentyp Kleinster Wert Größter Wert Größe in Bit
bool 0 1 8
(signed) char -128 127 8
unsgined char 0 255 8
(singed) int -32.768 32.767 16
unsigned int 0 65.535 16
(signed) long -2.147.483.648 2.147.483.647 32
unsigned long 0 4.294.967.295 32
float 3.4E-38 3.4E+38 32
double 1.7E-308 1.7E+308 64
22 MC-Kurs H13 DL9GFA
Boolesche AlgebraBoolesche Algebra
● In Mikrocontrollern werden oft nur einzelne Bits abgefragt (Status) oder zum Steuern manipuliert
● Dazu werden logische Operationen mit Hilfe von Bitmasken bitweise angewendet
NOT 0111 Bsp. 'C' P1OUT = ~P1OUT; Wechselt alle Bits = 1000 //P1OUT vorher 11010010b
// nachher 00101101b
0101 Bsp. 'C' P1OUT = P1OUT & 11001111b; Löscht BitsAND 1001 //P1OUT vorher 11010010b = 0001 // nachher 11000010b
0101 Bsp. 'C' P1OUT = P1OUT | 00100100b; Setzt BitsOR 0011 //P1OUT vorher 11010010b = 0111 // nachher 11110110b
0101 Bsp. 'C' P1OUT = P1OUT ^ 00000011b; Schaltet Bits umXOR 0011 //P1OUT vorher 11010010b = 0110 // nachher 11010001b
23 MC-Kurs H13 DL9GFA
ÜbungenÜbungen
● Optimiere Blinky.c durch Einsatz Boolescher Algebra
● Erstellung eigener Funktionen und Programmablauf (PC, SP)
● Auslagerung eigener wiederverwendbarer Funktionen in separate Datei
● Auswertung von Tastern
● Entwickle einen elektronischen Würfel
24 MC-Kurs H13 DL9GFA
Elektronischer WürfelElektronischer Würfel
25 MC-Kurs H13 DL9GFA
Darstellung von BuchstabenDarstellung von Buchstaben
● Prozessoren verstehen nur (binäre) Zahlen
● ASCII Code ist die numerische Darstellung von Buchstaben und Steuerzeichen
● Dabei wird für jeden Buchstaben genau ein Byte (Datentyp char ) verwendet (2^8 → 0...255)
● Beispiel● Ein großes 'A' wird wird durch das
Datenbyte 65 bzw. 41h repräsentiert
● Wörter und Sätze werden als String bezeichnet und in Anführungszeichen angegeben:
char MeinText [26]=“das ist meine Zeichenkette“;
● Die Zeichen von 0...127 sind genormt, aber bei 128...255 gibt es gelegentlich Abweichungen
26 MC-Kurs H13 DL9GFA
LC-DisplayLC-Display
● LCDs werden unterschieden für Darstel-lung von
● Text (Zeichensatz intern vorhanden)● Grafik (jedes Pixel anzusteuern)
● Industriestandard-LCD mit HD44780-Controller ist sehr verbreitet weil einfach zu benutzen
● Interner MC kümmert sich um Ansteuerung jedes einzelnen Pixels
● Anschluß über ● 4 od. 8 Datenleitungen● Enable● Read/Write● Register Select● Kontrastspannung● Betriebsspannungen
27 MC-Kurs H13 DL9GFA
LCD-AnschlußLCD-Anschluß
P2.0...P2.3P1.4 P1.5
5V
10k
Mikrocontroller-Kurs bei H13
● Wir wollen das LC-Display im 4-Bit-Mode betreiben
● Da nur schreibend zugegriffen werden muß, kann R/W fest auf GND gelegt werden
● Damit umgehen wir auch das Problem 5V → 3.3V
● Interne Steckbrettverdrahtung beachten!
28 MC-Kurs H13 DL9GFA
LCD-AnschlußLCD-Anschluß
P2.0...P2.3P1.4 P1.5
5V
10k
Mikrocontroller-Kurs bei H13
● 5V von USB-Buchse (auf eigene Gefahr!, alternativ ext. Netzteil einsetzen)
29 MC-Kurs H13 DL9GFA
LCD-BefehleLCD-Befehle
30 MC-Kurs H13 DL9GFA
LCD-FunktionsbibliothekLCD-Funktionsbibliothek
● Fertige LCD-Bibliothek erspart „das Neuerfinden des Rades“● Nach dem Einbinden können die fertigen Funktionen verwendet werden
#include „lcd.h“
vLCD_init( maxX); //Initialisiert und stellt Anzahl Zeichen pro Zeile ein
vLCD_clear(); //löscht Display, Cursor auf 0,0vLCD_gotoxy( X, Y); //setzt Cursor in Spalte/Zeile
vLCD_putchar( X); //schreibt Zeichen an aktuelle Pos.vLCD_puts( Strg_adr); //schreibt String an aktuelle Pos.vLCD_putui( X); //schreibt Zahl 0...65535vLCD_puti( X); //schreibt Zahl -32768...32767
31 MC-Kurs H13 DL9GFA
LCD – Hello World!LCD – Hello World!
32 MC-Kurs H13 DL9GFA
Energiesparer MSP430 Energiesparer MSP430 II
● Geringe Betriebsspannung (1.8V...3.6V)
● Jede Subeinheit auf MC ab- und zuschaltbar
● Performance des AD-Wandlers zugunsten der Energieeffizienz skalierbar
33 MC-Kurs H13 DL9GFA
Energiesparer MSP430 Energiesparer MSP430 IIII
● Flexibles Taktsystem (geringerer Takt → weniger Energie)
● Konfigurierbarer RC-Oszillator integriert (kalibrierte Werte für 1, 8, 12, 16 MHz hinterlegt)
34 MC-Kurs H13 DL9GFA
Energiesparer MSP430 Energiesparer MSP430 IIIIII
● Fünf Stromspar-Modi (Low Power Modes - LPM)
● Super schnelles „Aufwachen“ < 1us!
35 MC-Kurs H13 DL9GFA
Energiesparer MSP430 Energiesparer MSP430 IVIV
● Starke Ereignisorientierung durch viele Interrupts mit verschiedenen Prioritäten
● Analoge Komparatoren für Interrupts bei bestimmten Sensordaten (ohne AD-Wandlung!)
36 MC-Kurs H13 DL9GFA
InterruptInterrupt
● Unterbricht die Abarbeitung des „normalen“ Programms, um Interrupt-Service-Routine (ISR) sofort auszuführen
● Nach Abschluß der ISR wird das vorherige Programm an unterbrochener Stelle fortgesetzt
● Zur Reaktion auf zeitkritische Ereignisse geeignet, z.B. seriell empfangenes Byte
37 MC-Kurs H13 DL9GFA
Polling vs. InterruptsPolling vs. Interrupts
● Es gibt verschiedene Strategien, auf Ereignisse, z.B. Eingaben, zu reagieren● Polling: MC prüft regelmäßig, z.B. in einer Schleife, ob sich etwas getan hat
+ Einfach zu implementieren und zu debuggen- Ineffizient, insbesondere wenn Ereignisse selten stattfinden
● Interrupts: MC wird unterbrochen (wobei auch immer) durch ein Ereignis+ Sehr zeiteffizient, weil nicht andauernd nachgesehen werden muß, obwohl nichts passiert ist+ Sehr energieeffizient, weil MC „schlafen“ kann, solange nichts passiert- manchmal schwerer zu debuggen
Interrupt
Polling
38 MC-Kurs H13 DL9GFA
Interrupt - AblaufInterrupt - Ablauf
● Interrupt-Latenz ist 6 CPU-Zyklen vom Request bis zum Start der ISR
● Interruptlogik zu Beginn● Aktuelle Instruktion wird zu ende bearbeitet● Programm Counter PC, der auf nächste Instruktion zeigt, wird auf
Stack gelegt● Status Register SR wird auf den Stack kopiert● Interrupt mit höchster Prio wird ausgewählt, wenn mehrere warten● Interrupt Request Flag wird automatisch zurückgesetzt
(nur Single-Source Flags, Multiple-Source bleiben gesetzt)● SR wird gelöscht → Low Power Modes beendet, alle Interrupts
gesperrt (GIE=0)● Adresse von Interrupt Vektor wird in PC geladen → Routine wird nun
abgearbeitet
● Interruptlogik nach Abarbeitung● Interrupt Service Routine beendet mit RETI (Return from ISR)● Benötigt 5 CPU-Zyklen (3 bei CPUx)● SR wird wieder vom Stack auf alten Inhalt gesetzt → LPM, GIE
alles wie zuvor● PC wird wieder vom Stack geladen → Abarbeitung ab Befehl zu dem
Unterbrechung erfolgte
WhileInterrupt
BeforeInterrupt
AfterInterrupt
39 MC-Kurs H13 DL9GFA
Interrupt - QuellenInterrupt - Quellen
40 MC-Kurs H13 DL9GFA
Interrupt Vektor TabelleInterrupt Vektor Tabelle
● Hauptprogramm steht im Flash ab Adresse C000h
● Verschiedenen Interrupt-Quellen sind jeweils feste Speicheradressen in Vektortabelle zugeordnet
● Vektoren (Zeiger) zeigen auf Interrupt-Service-Routine im Flash, die abgearbeitet werden soll, wenn Interrupt auftritt
Interupt Vector Table
Flash
InformationMemory
RAM
16-bitPeripherals
8-bitPeripherals
8-bit Special FunctionRegisters
0Fh
0h
0FFh010h
01FFh0100h
03FFh0200h
FFDFh0C000h
0FFFFh0FFE0h
MSP430G2553
010FFh01000h
Interrupt
41 MC-Kurs H13 DL9GFA
Typische SW-ArchitekturTypische SW-Architektur
42 MC-Kurs H13 DL9GFA
Timer / CounterTimer / Counter
3x
43 MC-Kurs H13 DL9GFA
Timer – Continuous ModeTimer – Continuous Mode
Wenn konfiguriert, werden Interrupts ausgelöst.
44 MC-Kurs H13 DL9GFA
Timer – Up ModeTimer – Up Mode
Wenn konfiguriert, werden Interrupts ausgelöst.
45 MC-Kurs H13 DL9GFA
Timer – Up/Down ModeTimer – Up/Down Mode
Wenn konfiguriert, werden Interrupts ausgelöst.
46 MC-Kurs H13 DL9GFA
Timer – Anwendung UhrTimer – Anwendung Uhr
47 MC-Kurs H13 DL9GFA
Uhr – Strom über ZeitUhr – Strom über Zeit
● Strom mit Oszi über 1kOhm-Widerstand gemessen: 100mV entspricht daher 100uA
● Im Mittel werden 130uA bei 2.8V benötigt (0.364mW, nur bei Verwendung DOG-Display!)
48 MC-Kurs H13 DL9GFA
Timer – Ein- und Ausgangs-PinsTimer – Ein- und Ausgangs-Pins
● Timer kann ohne CPU direkt externe Pins einlesen bzw. ansteuern(Zweitfunktion der entsprechenden Pins wählen!)
MSP430G2553
49 MC-Kurs H13 DL9GFA
Timer – Output ModesTimer – Output Modes
● Pins werden automatisch gesetzt, zurückgesetzt oder gekippt (toggle) je nach „Outmode“
● Auf diese Weise kann PWM – Puls-Weiten-Modulation – ohne CPU(!) erzeugt werden
50 MC-Kurs H13 DL9GFA
Timer – ServoTimer – Servo
● Servo-Motoren werden über eine PWM gesteuert
● Stellbereich von 1ms bis 2ms, Mittelstellung bei 1.5ms (oft erweiterte Grenzen 0.7...2.5ms)
● Max. Drehwinkel und Zeiten weichen je nach Modell ab
PWM - orange5V - rot
GND - braun
Anschluß
51 MC-Kurs H13 DL9GFA
Timer – PWMTimer – PWM
● Timer erzeugt PWM – Puls-Weiten-Modulation – und CPU aktualisiert nur Register
● Mit einem folgendem Tiefpaß können einfach analoge Signale (grün) generiert werden
52 MC-Kurs H13 DL9GFA
ADC10 des MSP430ADC10 des MSP430
Sample-Takt
Interner ADC-Takt
53 MC-Kurs H13 DL9GFA
ADC-FunktionsbibliothekADC-Funktionsbibliothek
● Nach Einbinden der Bibliothek muß man nur noch die Funktionen aufrufen (Bsp.-Bibliothek unterstützt bei weitem nicht alle Möglichkeiten!)
#include „ADC10.h“
vADC_init( ucADC_ch); //Initialisiert ADC10 für Einzelmessungen und stellt angegebene Pins als Analogeingang ein
uiADC_read( uiCH); //Führt AD-Wandlung durch und gibt Ergebnis zurück
54 MC-Kurs H13 DL9GFA
Aufgabe AD-WandlerAufgabe AD-Wandler● Wandle die Werte eines analogen Potentiometers mit dem AD-Wandler
und stelle den Wert auf dem LC-Display dar!
TXD/RXD-Jumper an J3 entfernen,
wenn A1 oder A2 verwendet wird!
55 MC-Kurs H13 DL9GFA
Thermometer mit NTCThermometer mit NTC
● NTC - Negative Temperature Coefficient● Mit steigender Temperatur nimmt Widerstand ab● Spannungsabfall kann daher als
Maß für Temperatur verwendet werden● Linearisierung durch Spannungsteiler + Software
Untc zum ADC
100kOhm
100kOhm @25°C
56 MC-Kurs H13 DL9GFA
Thermometer mit NTCThermometer mit NTC
● Kennlinie kann als Tabelle abgelegt, oder z.B. mit Geradengleichung angenähert werden
57 MC-Kurs H13 DL9GFA
Thermometer mit NTCThermometer mit NTC
58 MC-Kurs H13 DL9GFA
Multiplexen von EingängenMultiplexen von Eingängen
● Erlaubt Einsparung von vielen Eingangs-Pins
● Tastenmatrix: 2n Pins erlauben Auswertung von n² Tasten – (hier 8 für 16)
● Auswertung:● Spalten treiben LOW, Zeilen sind Eingänge (Interrupts aktiviert)● Taster gedrückt → Interrupt auf einer Zeile● Spalten werden nun reihum einzeln
auf LOW geschaltet, um gedrückte Taster auf Zeile zu identifizieren
● Es können mehrere gleichzeitig gedrückte Taster unterschieden werden
59 MC-Kurs H13 DL9GFA
Multiplexen von Ausgängen Multiplexen von Ausgängen
Gegen GND
Geg
en P
ull-
up
● Ist wie bei Eingängen möglich, durch zeitlichen Versatz der Ansteuerung einzelner LEDs
● LED-Matrix: 8 Pins erlauben Ansteuerung von 16 LEDs – (Pins: 2n, LEDs: n²)
● Ablauf:● Eine Zeile (A-D) nach der anderen wird kurz HIGH geschaltet● Wenn eine LED dieser Zeile leuchten soll, wird Spalte zeitgleich auf LOW durchgeschaltet
● Einschaltzeit bestimmt Helligkeit → je mehr LEDs in Matrix, desto dunkler ● 100Hz Aktualisierungsrate ist guter Richtwert gegen Flackern
60 MC-Kurs H13 DL9GFA
Mux von 7-Segment-Anzeigen Mux von 7-Segment-Anzeigen
● 7-Segmentanzeigen bestehen aus LEDs mit gemeinsamer Anode ODER gem. Kathode
● Gemeinsamer Anschluß wird oft per Transistor geschaltet, um mehr Strom zu treiben
● Helligkeitsverlust durch geringere ON-Zeit wird durch höhere Stromimpulse kompensiert
61 MC-Kurs H13 DL9GFA
CharlieplexingCharlieplexing
● 1995 von Charlie Allen (Fa. Maxim) vorgeschlagene Technik, die mit noch weniger Pins zum Ansteuern von LED-Matrizen auskommt – n Pins für n(n-1) LEDs
● Trick ist die Nutzung der Sperrrichtung von LEDs und des Tri-States der MC-Pins
2 P
ins
– 2
LE
Ds
3 P
ins
– 6
LE
Ds
5 P
ins
– 20
LE
Ds
Pins LEDs
1 0
2 2
3 6
4 12
5 20
6 30
7 42
8 56
9 72
10 90
n n²-n
62 MC-Kurs H13 DL9GFA
Übung: Charlieplexing n=3Übung: Charlieplexing n=3
● Realisiere ein Lauflicht mit nur 3 Pins Ansteuerung (nutze P2.0, P2.1 und P2.2)
● Folgende Bedingungen führen zum Leuchten der jeweiligen LED:
P2.0
P2.1
P2.2
LED P2.0DIR P2.1DIR P2.2DIR P2.0OUT P2.1OUT P2.2OUT
A out out in 1 0 x
B out out in 0 1 x
C out in out 1 x 0
D out in out 0 x 1
E in out out x 1 0
F in out out x 0 1
63 MC-Kurs H13 DL9GFA
Übung: Charlieplexing SchleifeÜbung: Charlieplexing Schleife
64 MC-Kurs H13 DL9GFA
Übung: Charlieplexing TimerÜbung: Charlieplexing Timer
65 MC-Kurs H13 DL9GFA
Ultraschall-Sensor SR04Ultraschall-Sensor SR04
8 x 40kHz-Burst
Laufzeit
Achtung, ohne 10k Zerstörung möglich!
P1.1P1.7
10k
● Mißt die Laufzeit des Schalls bei 40kHz zur Ermittlung der Distanz
● Technische Daten:● Spannungsversorgung 5V / <2mA ● Beam-Breite <15° (3dB)● Entfernung 2cm...5m● Auflösung 3mm
● Schnittstelle des Sensors● 1 – Vcc● 2 – Trigger● 3 – Echo● 4 – GND
66 MC-Kurs H13 DL9GFA
Ultraschall-Sensor - SchleifeUltraschall-Sensor - Schleife
8 x 40kHz-Burst
Laufzeit
67 MC-Kurs H13 DL9GFA
Timer - Capture-ModusTimer - Capture-Modus
3x
Trigger
Übernahme TAR-Kopie zum Triggerzeitpunkt
Externes Ereignis
Takt
68 MC-Kurs H13 DL9GFA
Timer – Ein- und Ausgangs-PinsTimer – Ein- und Ausgangs-Pins
● Timer kann ohne CPU direkt externe Pins einlesen bzw. ansteuern(Zweitfunktion der entsprechenden Pins wählen!)
MSP430G2553
69 MC-Kurs H13 DL9GFA
Ultraschall-Sensor - TimerUltraschall-Sensor - Timer
8 x 40kHz-Burst
Laufzeit
Interrupt Service Routine
Initialisierung
70 MC-Kurs H13 DL9GFA
Timer/Counter als FrequenzzählerTimer/Counter als Frequenzzähler
● Zählt Anzahl der Perioden pro Zeitintervall → Frequenz f = n / t
● Beobachtungszeitraum heißt Tor-Zeit oder Gate-Zeit● Bestimmt die Genauigkeit; je mehr Perioden beobachtet werden, desto genauer die
Messung
● Im SW-Beispiel wird ACLK mit 32.768kHz als Referenz für Tor-Zeit verwendet und wahlweise der DCO-Takt mit 16MHz, oder ein extern angelegter an P1.0 gemessen
71 MC-Kurs H13 DL9GFA
Watch Dog Timer - WDTWatch Dog Timer - WDT
● WDT kann auch als Interval-Timer eingesetzt werden
● Damit spart man oft einen wertvollen TimerA/B mit viel flexiblerer Funktionalität
● Im SW-Beispiel wird ACLK mit 32.768kHz und eine Tor-Zeit von 250ms (f_in>900kHz) oder 1s (f_in<800kHz) verwendet
72 MC-Kurs H13 DL9GFA
Timer – Ein- und Ausgangs-PinsTimer – Ein- und Ausgangs-Pins
● Meßsignal gelangt als TA0CLK (Zweitfunktion P1.0) zum TimerA und inkrementiert dort den Zähler TAR mit jeder Periode
● WDT getaktet von ALCK (32.768kHz Quarz) startet und stoppt das Zählen (Tor-Zeit)
MSP430G2553
73 MC-Kurs H13 DL9GFA
FrequenzzählerFrequenzzähler
● TimerA kann im Capture-Modus die Perioden des Meßsignals zählen, während Watch Dog Timer (WDT) als Interval-Timer die lange Tor-Zeit bestimmt (250ms oder 1s)
74 MC-Kurs H13 DL9GFA
Serielle Schnittstellen - SPISerielle Schnittstellen - SPI
● Haben große Bedeutung wegen geringen Hardware-Aufwandes
● Es gibt synchrone (z.B. SPI, I²C) und asynchrone (z.B. UART) serielle Schnittstellen
● Einige unterstützen mehrere Teilnehmer über eine Verbindung, andere nur zwei
● SPI - Serial Peripheral Interface
● SPI-Signale● MOSI – Master Out Slave In● MISO – Master In Slave Out● SCLK – Serial Clock● Mehrere /SSx – Slave Selects
● Eigenschaften SPI● Kann sehr schnell betrieben werden● Serieller Bit-Strom kann als Kette
über/durch mehrere Slaves geleitet werden● Sehr einfache Interface-Software
75 MC-Kurs H13 DL9GFA
Serielle Schnittstellen - I²CSerielle Schnittstellen - I²C
● I²C – Inter Integrated Circuit Bus von Philips/NXP, heute von viele HL-Herstellern unterstützt (mit anderem Namen, aber kompatibel)
● I²C-Signale (bi-directional!)● SDA – Serial Data ● SCL – Serial Clock
● Eigenschaften:● Multimasterfähig mit Bus-Arbitrierung● Geschwindigkeitsklassen 100kHz, 400kHz, 1MHz● Bus-Leitungen benötigen Pull-up und alle arbeiten mit Open-Drain-Anschlüssen am Bus● Bei voller geforderter Funktionalität aufwändige Interface-Software Vcc
76 MC-Kurs H13 DL9GFA
Serielle Schnittstellen - UARTSerielle Schnittstellen - UART
● UART – Universal Asynchronous Receiver Transmitter
● UART-Signale● RXD – Receiver Data (mit TXD auf Gegenseite verbunden)● TXD – Transmitter Data (mit RXD auf Gegenseite verbunden)● Weitere optionale zur Flußkontrolle (DTR, RTS, CTS)
● Eigenschaften:● Einsatz bei RS232 mit zusätzlichen Pegelwandlern, Voll-Duplex-fähig● Standard-Geschwindigkeiten [bit/s]: 1k2, 2k4, 9k6, 19k2, 38k4, 57k6, 115k2, …● Es gibt auch Multi-Point Abwandlungen mit Auto-Baud-Detection usw.
Achtung, logische Pegel vor und nach Pegelwandler invertiert!
77 MC-Kurs H13 DL9GFA
USCI - USCI - Universal Serial Communication InterfaceUniversal Serial Communication Interface
RXD
TXD
● Unterstützt verschiedene serielle Schnittstellen
● Zwei USCI-Typen: USCI_Ax und USCI_Bx (x=0,1,... je nach Anzahl vorhandener Module)
● USCI_Ax-Module unterstützen● UART mit autom. Baudraten für LIN● IRDA● SPI
● USCI_Bx-Module unterstützen● I²C● SPI
78 MC-Kurs H13 DL9GFA
UART_HW - FunktionsbibliothekUART_HW - Funktionsbibliothek
● Nach Einbinden der Bibliothek muß man nur noch die Funktionen aufrufen (DCO @ 1MHz!)
#include „UART_HW.h““
vUART_HW_init( ); //Initialisiert HW-UART,9600Bd,8N1 TXD an P1.2 (UCA0TXD) RXD an P1.1 (UCA0RXD)
vUART_HW_putc( char); //Sendet Einzelzeichen über UARTvUART_HW_puts(„Hallo“); //Sendet „Hallo“ über UARTvUART_HW_puts(cText); //Sendet Inhalt von cText[] über UART (char cText[20] definieren!)
79 MC-Kurs H13 DL9GFA
USCI - USCI - Universal Serial Communication InterfaceUniversal Serial Communication Interface
● Achtung! ● Die Pins für RXD und TXD des MSP430G2553 vertauschen sich, wenn zwischen HW-
und SW-Implementierung der UART gewechselt wird!● Beachte die Jumper auf J3! (SW-UART 1+2 und 3+4, HW-UART 1+3 und 2+4)
● Das hängt mit den Timer-Eingängen zusammen, die für die geschickte Software-Implementierung verwendet werden
PC-Seite Launchpad-Seite
80 MC-Kurs H13 DL9GFA
UART_SW - FunktionsbibliothekUART_SW - Funktionsbibliothek
● Nach Einbinden der Bibliothek muß man nur noch die Funktionen aufrufen (DCO @ 1MHz!)
#include „UART_SW.h“
vUART_SW_init( ); //Initialisiert SW-UART,9600Bd,8N1 TXD an P1.1 (Timer0_A.OUT0) RXD an P1.2 (Timer0_A.CCI1A)
vUART_SW_putc( char); //Sendet Einzelzeichen über UARTvUART_SW_puts(„Hallo“); //Sendet „Hallo“ über UARTvUART_SW_puts(cText); //Sendet Inhalt von cText[] über UART (char cText[20] definieren!)
81 MC-Kurs H13 DL9GFA
UART-TestprogrammUART-Testprogramm
82 MC-Kurs H13 DL9GFA
Embedded-SW-ArchitekturenEmbedded-SW-Architekturen
● Wichtigste Kriterien● Wie viele verschiedene Ereignisse müssen verarbeitet werden?● Welchen Verarbeitungsaufwand erfordern die einzelnen Ereignisse?● Welche Reaktionszeiten sind nötig?● Welche Ressourcen stehen zur Verfügung (Rechenkapazität u. Geschwindigkeit MC)?● Wie kritisch ist mein Energie-Budget?
Bild: Willert Software Tools
83 MC-Kurs H13 DL9GFA
Round-Robin Round-Robin (RR)(RR)
● Merkmale● Hauptschleife fragt alle Zustände/Peripherie der Reihe nach ab (polling) und bearbeitet die,
die etwas zu bearbeiten haben● Keine Interrupts
● Vorteil● Einfachste denkbare Architektur
● Nachteil● Wenn ein Device schnellere Behandlung
benötigt als die maximale Durchlaufzeit A-Z inkl. Bearbeitung, dann funktioniert es nicht mehr zuverlässig!
● Aber: Ungleiche Aufruffrequenz möglich: Device A, C, B, C, D, C, E, C, F, ...
● Beispiele● Nur geeignet für sehr einfache Geräte wie
Multimeter, Digitaluhr, Mikrowellenofen
84 MC-Kurs H13 DL9GFA
Round-Robin Round-Robin (RR)(RR)
● Beispiel Multimeter
85 MC-Kurs H13 DL9GFA
Round-Robin mit Interrupts Round-Robin mit Interrupts (RRI)(RRI)
● Merkmale● Interrupts bearbeiten die zeitkritischen Ange-
legenheiten der HW und setzen Flags● Hauptschleife fragt Flags ab und nimmt Nach-
bearbeitung vor● Effektiv hat alle Bearbeitung in den Interrupt-
Routinen höhere Prio gegenüber Hauptschleife● Prioritäten unter den Interrupts erlauben
weitere Prioritätsebenen● Vorteil
● Schnelle Reaktionszeit auf Ereignisse● Guter Einfluß auf Prioritäten der Abarbeitung
● Nachteil● Shared-Data-Problem wenn Interrupt-Routinen
und Hauptschleife gleichzeitig auf gemein-same Daten zugreifen (z.B. Ints sperren!)
● Alle Main-Tasks auf selber Priorität● Beispiel
● Interrupt holt seriell empfangenes Byte und schreibt in Queue, um Überlauf zu vermeiden
● Hauptroutine verarbeitet Daten aus Queue
86 MC-Kurs H13 DL9GFA
Round-Robin mit Interrupts Round-Robin mit Interrupts (RRI)(RRI)
87 MC-Kurs H13 DL9GFA
Function-Queue-Scheduling Function-Queue-Scheduling (FQS)(FQS)
● Merkmale● Interrupt-Routinen bearbeiten zeitkritische
Angelegenheiten und legen Funktions-vektoren in eine Queue
● Hauptschleife liest diese Queue und ruft Funktionen auf
● Aufruf muß dabei nicht in Reihenfolge der Interrupts erfolgen
● Scheduler sortiert Queue nach Prio, oder Interrupts selbst legen Aufruf „vorn“ hinein
● Vorteil● Hohe Flexibilität ● Sehr guter Einfluß auf Prioritäten
● Nachteil● Max. Reaktionszeit höchst-priorer Task ist
durch längste Task von allen gegeben → in mehrere Sub-Tasks zerlegen die jeweils die nächste wieder in Queue eintragen
● Reaktionszeit von nieder-prioren Tasks kann sehr lang (bis unendlich) werden
88 MC-Kurs H13 DL9GFA
Real-time Operating System Real-time Operating System (RTOS)(RTOS)
● Merkmale● Interrupt-Routinen bearbeiten zeitkritische
Angelegenheiten und signalisieren, daß Arbeit für Task anliegt
● Signalisierung wird von RTOS behandelt (keine gemeinsamen Variablen dazu)
● Keine Hauptschleife entscheidet mehr über zu erledigende Arbeit, sondern RTOS
● RTOS kennt Tasks und deren Prio, kann jederzeit eine Task stoppen, um eine andere laufen zu lassen
● Vorteil● Reaktionsgeschwindigkeit von Tasks und
Interrupts frei wählbar● Worst-case Wartezeit der höchst-prioren
Task quasi Null● Reaktionszeiten auch nach Erweiterung des
Programms sehr stabil (vgl. RR, RRI, FQS)● RTOS frei und käuflich zu erwerben →
„Programmierer hat all seine Probleme gelöst“● Nachteil
● RTOS benötigt auch Ressourcen
89 MC-Kurs H13 DL9GFA
Embedded-SW-ArchitekturenEmbedded-SW-Architekturen
● Zusammenfassung● Anforderungen an die Reaktionszeit bestimmen oft die nötige SW-Architektur● Generell sollte immer die einfachste geeignete Architektur verwendet werden● Manchmal macht eine hybride Architektur zwischen den aufgeführten Sinn
(z.B. Polling von langsamer Peripherie trotz RRI-Architektur)
Priorisierung vorhanden?
Schlechteste Reaktionszeit für Task
Stabilität der Reaktionszeit nach Code- Änderungen
Komplexität
Round-Robin Nein Ausführzeit aller Tasks
Schlecht Sehr einfach
Round-Robin mit Interrupts
Interrupts in Prio-Reihenfolge, dann alle Tasks mit selber Prio
Ausführzeit aller Tasks+Interrupt-Routinen
Gut für Interrupt-Routinen, schlecht für Tasks
Shared-data-Problem zwischen Ints und Tasks zu lösen
Function-Queue-Scheduling
Interrupts in Prio-Reihenfolge, dann Tasks in Prio-Reihenfolge
Ausführzeit der längsten Einzel-Task+Interrupt-Routinen
Relativ gut Shared-data-Problem zu lösen, kleveres FQS zu schreiben
Real-Time Operating System
Interrupts in Prio-Reihenfolge, dann Tasks in Prio-Reihenfolge
Null+Interrupt-Routinen
Sehr gut Am höchsten, aber vieles davon in OS selbst
Praktische BeispielePraktische Beispielezur Lösung typischer Aufgabenzur Lösung typischer Aufgaben
91 MC-Kurs H13 DL9GFA
Inhalt – Praktische BeispieleInhalt – Praktische Beispiele
● Erzeugung von Tönen und Melodien● Wiederholung Timer● Wie Töne und Melodien entstehen (Bsp. 17)
● Tasteneingaben auswerten wie ein Profi● Entprellen per Timer-Interrupt● Auswertung von kurzem und langem Drücken, sowie
Auto-Wiederholung (Bsp. 18)
● Zustandsautomaten zur Realisierung zeitlicher Abläufe● Funktion und Implementierung endlicher Automaten● Beispiel Einstellen einer Uhr● Beispiel Multiplexen von 7-Segment-Anzeigen
● Praktische Anwendung von Tönen, Tasten und Automaten ● Uhr / Wecker mit Setup-Funktion (Bsp. 19)● Elbug - Elektronische Morsetaste (Bsp. 20)
92 MC-Kurs H13 DL9GFA
Timer / CounterTimer / Counter
3x
2 Timer-Interrupts: #1 für TACCR0#2 für alle anderen (TAI, TACCR1, TACCR2)
93 MC-Kurs H13 DL9GFA
Timer – Continuous ModeTimer – Continuous Mode
Wenn konfiguriert, werden Interrupts ausgelöst.
94 MC-Kurs H13 DL9GFA
Timer – Up ModeTimer – Up Mode
Wenn konfiguriert, werden Interrupts ausgelöst.
95 MC-Kurs H13 DL9GFA
Timer – Output ModesTimer – Output Modes
● Pins werden automatisch gesetzt, zurückgesetzt oder gekippt (toggle) je nach „Outmode“
● Auf diese Weise kann PWM – Puls-Weiten-Modulation – ohne CPU(!) erzeugt werden
96 MC-Kurs H13 DL9GFA
Noten und Melodien ausgebenNoten und Melodien ausgeben
● Um bestimmte Noten zu „treffen“, muß deren Frequenz so genau wie möglich mit demTimer realisiert werden
● Je höher der Eingangstakt des Timers, desto feiner ist die mögliche Tonfrequenzauflösung
● RTTTL – Ring Tone Text Transfer Language – Textformat zum Beschreiben von Klingeltönen
● Viele Melodien im Internet verfügbar: JingleBell:d=8,o=5,b=112:32p,a,a,4a,a,a,4a,a,c6, ...
Bsp. 17
97 MC-Kurs H13 DL9GFA
Wdh. Entprellung beim WürfelWdh. Entprellung beim Würfel
98 MC-Kurs H13 DL9GFA
Entprellung von Tasten wie ProfiEntprellung von Tasten wie Profi
● Portiert von „Tasten entprellen – Bulletproof“ (Peter Dannegger)● Gesamter Port wird geschickt mit Timer-Interrupts entprellt (8 Tasten!)● Nach dem Einbinden können die fertigen Funktionen verwendet werden
#include „keys.h“
get_key_press( uiKey_mask); //Basisroutine die Druck einer Taste anzeigt, wird von folgenden genutzt
get_key_short( uiKey_mask); //zeigt kurzen Tastendruck nach(!) Lösen an
get_key_long( uiKey_mask); //zeigt langen Tastendruck nach„Lang“-Zeit, vor Lösen, an
get_key_rpt( uiKey_mask); //ermöglicht automatischesWiederholen, nicht gleich-zeitig mit get_key_long()!
99 MC-Kurs H13 DL9GFA
Zustandsmaschine / -automatZustandsmaschine / -automat
● Eine Zustandsmaschine ist keine verrückte Maschine, sondern eine bestimmte Art, Programme zu schreiben
● Sie dient der Umsetzung von zeitlichen Abläufen
● Besteht aus Zuständen, Z.-Übergängen und Aktionen● Zustand
● Speichern Information über Vergangenheit (reflektiert Änderung der Eingabe seit Systemstart bis zum aktuellen Zeitpunkt)
● Zustandsübergang● Zeigt Änderung des Zustandes und wird durch
logische Bedingungen beschrieben● Aktionen
● Eingangsaktion wird beim Eintreten in Zustand ausgeführt
● Ausgangsaktion wird beim Verlassen des Zustandes ausgeführt
● Eingabeaktion abhängig von aktuellem Zustand und Eingabe
● Übergangsaktion abhängig vom Zustandsübergang
100 MC-Kurs H13 DL9GFA
Zustandsmaschine / -automatZustandsmaschine / -automat
● Implementierung ● Erstellen einer Zustandsvariable zum
Speichern des aktuellen Zustands● Definition der verschiedenen auf-
tretenden Zustände● Zuordnen der verschiedenen
Aktionen zu den Zuständen● Definition der Reihenfolge der Zu-
stände und Bedingungen zum Übergang
● Dekodieren der Zustandsvariable, um in Zustände zu kommen
● Programmierung mit Switch-Case-Konstrukt
101 MC-Kurs H13 DL9GFA
Bsp. Mux von 7-SegmentanzeigenBsp. Mux von 7-Segmentanzeigen
● TimerA1-Interrupt kümmert sich um das Zuschalten der vier Digits reihum
● Die ON-Zeiten sowie die Umlaufzeitbestimmen Helligkeit der Anzeigen
● Anwendung muß nur anzuzeigende Zeichen in ucDisplayData[ ] schreiben
● Gemeinsamer 7-Seg-Anschluß wird i.d.R. über Transistor geschaltet und Serien-Rs sind nicht unbedingt nötig (quasi PWM-Dimmung)
102 MC-Kurs H13 DL9GFA
Bsp. Mux von 7-SegmentanzeigenBsp. Mux von 7-Segmentanzeigen
103 MC-Kurs H13 DL9GFA
Watch Dog Timer für UhrWatch Dog Timer für Uhr
● WDT kann auch als Interval-Timer eingesetzt werden
● Damit spart man oft einen wertvollen TimerA/B mit viel flexiblerer Funktionalität
● Nun soll der WDT als Sekunden-Zähler für eine Uhr verwendet werden
104 MC-Kurs H13 DL9GFA
Watch Dog Timer für UhrWatch Dog Timer für Uhr
105 MC-Kurs H13 DL9GFA
Übung: Setup für UhrÜbung: Setup für Uhr
● Uhrzeit soll manuell eingestellt werden können
● Verwende dazu mindestens 2, oder besser 3 Tasten● KeySetup, KeyUp und ggf. KeyDown● Nutze die Timer-Entprellung aus „keys.c“
● Markiere die zu verstellende Zahl durch Blinken
● Erweitere die Uhr zum Wecker
● Implementiere als Alarm eine Melodie
● Erweitere den Wecker um eine Snooze-Funktion(wiederholtes Wecken z.B. nach 4 Minuten)
● Achte bei allem auf das Energie-Budget!!!
106 MC-Kurs H13 DL9GFA
Software-Architektur EAG WeckerSoftware-Architektur EAG Wecker
107 MC-Kurs H13 DL9GFA
Übung: ElbugÜbung: Elbug
● Squeeze-Taste mit automatischer Erzeugung vonPunkten, Strichen und alternierenden Sequenzen
● Ausgang schaltet Transistor gegen GND (open Collector)
● Mithörton zum Üben
● Über 2 Taster soll Geschwindigkeit verstellbar sein
● Achte bei allem auf das Energie-Budget!!!
C Q D E D L 9 G F A
108 MC-Kurs H13 DL9GFA
Übung: ElbugÜbung: Elbug
EndeEnde