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