Embedded Systems 1
15.11.2016
Embedded Systems I Themen am 15.11.16 (ES1_16_V6): AD-C, Analog-Digital-Converter, Grundrechenarten auf der MCU und Umwandlung in verschiedene Daten-Formate, LC-Displays. Beachten Sie bitte die zusätzlichen Infos auf Proki und Tafel!
© Ulrich Schaarschmidt FH Düsseldorf, WS 2016/17
Literaturhinweise
(unbewertete Reihenfolge!)
Datenblätter der Fa. Atmel, ATmega16.pdf Application Notes der Fa. Atmel (s.a. Web) [1] Schmidt, Gerhard: Anfängerkurs zum Erlernen der Assemblersprache von Atmel-AVRMikroprozessoren http://www.avr-asm-tutorial.net
[2] nn.: AVR Butterfly Evaluation Kit – User Manual Application Notes der Fa. Atmel (s.a. CD / Web) www.dwelch.com/avr http://www.mollo.de/_avr.htm#avr-gcc http://www.rnwissen.de/index.php/Hallo_Welt_für_AVR_(LED_blinken)
15.11.2016
HS Düsseldorf
(c) U.Schaarschmidt
Prof. Dr. U.G. Schaarschmidt
2
1
Embedded Systems 1
15.11.2016
Literaturhinweise
(unbewertete Reihenfolge!)
[3] Schmitt, Günter: Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie 3. Auflage, 2007, Oldenbourg Wissenschaftsverlag [4] Pardue, Joe: C Programming for Microcontrollers Featuring ATMEL's AVR Butterfly and the free WinAVR Compiler www.SmileyMicros.com (Eigenverlag) Pardue, Joe: Virtual Serial Port Cookbook (FTDI FT232R, UART, C#, VB) www.SmileyMicros.com (Eigenverlag) Schäffer, Florian: AVR (Hardware und C-Programmierung in der Praxis) 2. Aufl. 2008, Elektor-Verlag, Aachen, http://www.ladyada.net/learn/avr/
15.11.2016
Prof. Dr. U.G. Schaarschmidt
Literaturhinweise
3
(unbewertete Reihenfolge!)
http://www.mikrocontroller.net/articles/AVR-GCCTutorial/Die_Timer_und_Zähler_des_AVR http://www.cplusplus.de/cms/modules.php?op=modload&name=Downl oads&file=index&req=viewsdownload&sid=3 http://www.rn-wissen.de/index.php/Kategorie:Quellcode_C http://thomaspfeifer.net Atmel – App-Notes: AVR120: ADC Characteristics and Calibration, AVR400: Low Cost A/D Converter, AVR401: 8-Bit Precision A/D Converter 15.11.2016
HS Düsseldorf
(c) U.Schaarschmidt
Prof. Dr. U.G. Schaarschmidt
4
2
Embedded Systems 1
15.11.2016
Zahlen (Datentypen) in C [3]
15.11.2016
Prof. Dr. U.G. Schaarschmidt
5
Bitmanipulationen um das ADC-Ergebnis zu wandeln Aus dem ADC kommen 10 Bits, die in 2 Bytes (ADlow, ADhigh) ausgelesen werden. Durch die Ungenauigkeit des/der letzten (LSB) Bits von ADlow verzichten wir gleich darauf und haben so die gute Möglichkeit aus 2 Bytes eines zu machen. Hierzu wird das LSB des oberen Byte in das C-Bit geschoben und danach in das oberste Bit des unteren Bytes rotiert. 15.11.2016
HS Düsseldorf
(c) U.Schaarschmidt
Prof. Dr. U.G. Schaarschmidt
6
3
Embedded Systems 1
15.11.2016
Programmauszug dazu in ADlow, ADCL ;unteres Byte einlesen in ADhigh, ADCH ;oberes Byte einlesen lsr ADhigh ;ein Bit nach rechts ins C ror ADlow ;aus C ins MSB rotieren ; das ins C rotierte LSB wird überschrieben lsr ADhigh ;nächstes Bit ins C schieb ror ADlow ;aus C ins MSB rotieren ; Jetzt befindet sich das anzuzeigende Byte in Adlow. 15.11.2016
Prof. Dr. U.G. Schaarschmidt
7
Anmerkung zu Schieben und Rotieren LSL schiebt den Inhalt des betroffenen Registers um eine Position nach links- von rechts wird die freigewordene Position mit 0 aufgefüllt, die links herausgeschobene geht ins C-Bit. Rechts herum genauso. Soll für negative Zahlen das MSB erhalten bleiben (z.B. Division durch 2) ist die arithmetische Version des Befehls zu benutzen ASR (0 geht an Position 6!). 15.11.2016
HS Düsseldorf
(c) U.Schaarschmidt
Prof. Dr. U.G. Schaarschmidt
8
4
Embedded Systems 1
15.11.2016
Anmerkung zu Schieben, Rotieren und Co Schieben von binären Zahlen um eine Position entspricht, je nach Richtung, einer Multiplikation (links) oder einer Division (rechts) durch 2. BsP.: LSL R1; R1: 00001000 (8) 00010000 (16) Sollen oberes und unteres Nibbel eines Bytes vertauscht werden, so ist der Befehl swap geeignet. swap R1 ;vertauscht Bit 0-3 mit Bit 4-7 15.11.2016
Prof. Dr. U.G. Schaarschmidt
9
Manipulation einzelner Bits ;T-Bit des Statusregisters soll 1 oder 0 sein SET ;T-Bit wird gesetzt (auf 1) CLT ;T-Bit wird rückgesetzt (auf 0) ; damit ein Einzelbit (hier Bit 2) in einem Register manipuliert werden kann. BST r2, 2 ;BitStore des T-Bits an ;Position 2 im Register r2 15.11.2016
HS Düsseldorf
(c) U.Schaarschmidt
Prof. Dr. U.G. Schaarschmidt
10
5
Embedded Systems 1
15.11.2016
Manipulation ganzer Bytes Alle Bits eines Registers auf 1 setzen: SER Rd Alle Bits eines Registers auf 0 setzen: CLR Rd Mehrere ausgewählte Bits auf 1 oder 0 setzen. Bit 1,3,5,7 in r16 unabhängig vom aktuellen Inhalt auf 1 setzen (Rest wie vorher): LDI r16, 0b10101010 ; Wunschbyte laden OR r17, r16 ; verknüpfen ORI r17, 0b10101010 ;erlaubt dies direkt 15.11.2016
Prof. Dr. U.G. Schaarschmidt
11
Maskieren Ein Teil eines Registers soll erhalten bleiben, ein anderer Teil auf 0 rückgesetzt werden. ANDI r16, $F0 ;oberes Nibbel bleibt wie vorher, unteres wird gelöscht - geht auch mit Inhalt eines anderen Registers: AND r16, r17 Geht ähnlich auch mit EOR, oberes Nibbel bleibt erhalten, unteres wird invertiert (nicht immediate): EOR r16, r17 ; r17 = 0b00001111 15.11.2016
HS Düsseldorf
(c) U.Schaarschmidt
Prof. Dr. U.G. Schaarschmidt
12
6
Embedded Systems 1
15.11.2016
Rechnen, Addition, Subtrakion usw. Da das Addieren mehrbytiger Zahlen die 1-ByteOperationen inkludiert, werden nur einige größere gezeigt. In r1 und r2 befinden sich high-Byte und low-Byte der ersten Zahl, in r3 und r4 der zweiten Zahl: ADD r2, r4 ;addieren der low-Bytes ADC r1, r3 ;addieren der high-Bytes mit CarryÜbernahme aus dem low-Ergebnis. Bei der Weiterverarbeitung muss ein evtl. aufgetretenes Carry des Gesamtergebnisses berücksichtigt werden. 15.11.2016
Prof. Dr. U.G. Schaarschmidt
13
Rechnen, Addition, Subtrakion usw. Das Subtrahieren mehrbytiger Zahlen. In r1 und r2 befinden sich high-Byte und low-Byte der ersten Zahl, in r3 und r4 der zweiten Zahl: SUB r2, r4 ;subtrahieren der low-Bytes SBC r1, r3 ;subtrahieren der high-Bytes mit Carry-Übernahme aus dem low-Ergebnis. Bei der Weiterverarbeitung muss ein evtl. aufgetretenes Carry des Gesamtergebnisses berücksichtigt werden. 15.11.2016
HS Düsseldorf
(c) U.Schaarschmidt
Prof. Dr. U.G. Schaarschmidt
14
7
Embedded Systems 1
15.11.2016
Bit – und Zahlenmanipulation in C [3]
15.11.2016
Prof. Dr. U.G. Schaarschmidt
Maskierung in C
15.11.2016
HS Düsseldorf
(c) U.Schaarschmidt
Prof. Dr. U.G. Schaarschmidt
15
[3]
16
8
Embedded Systems 1
15.11.2016
Bitpositionen in C
15.11.2016
[3]
Prof. Dr. U.G. Schaarschmidt
17
Einzelbitabfrage in C #define TASTER 7 if(!(PINB & (1