Inhalt-AVR-Programmierung für Quereinsteiger

Werbung
Inhalt
Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Die Pins alphabetisch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
Kapitel 1 • Programmierung des ATmega8 und des ATmega328 . . . . . . . . . . . . . . 15
1.1 Was Sie auf den nächsten Seiten erwartet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.2 Was ist eine Micro Controller Unit (MCU)? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.3 Woraus besteht eine einfache CPU? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
1.3.1 Das Status-Register . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.4 Was braucht man um die CPU (nicht MCU) herum? . . . . . . . . . . . . . . . . . . . . . . . 26
1.4.1 Speicher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.4.2 Wie sieht die CPU den Speicher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.5 Wie bekommt man ein Programm in die MCU? . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1.5.1 Bootloader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
1.5.2 SPI (Serial Programming Interface) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
1.5.3 Parallele und HV-Programmierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.6 Das erste Programm zum Laufen bringen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.6.1 Das erste Assembler-Programm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
1.6.2 Das Gleiche noch einmal in C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
1.6.3 Eine kleine Vereinfachung der Arbeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
1.6.4 Arbeiten mit einem Mini-Entwicklungsboard . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Kapitel 2 • Die Register . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Kapitel 3 • Der Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Kapitel 4 • Programmieren in C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
4.1 Editor, Compiler, Linker, Loader, Debugger und IDE . . . . . . . . . . . . . . . . . . . . . . 53
4.2 Das Semikolon in C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
4.3 Die Programmiersprache C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.3.1 Die mitgelieferten Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.3.2 Defines, Makros und Include-Dateien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.3.3 Kommentare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
4.3.4 Blöcke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
4.3.5 Unterprogramme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
4.3.6 Arrays, Strings und Matrizen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
●5
AVR Programmierung DE 160929.indd 5
25-10-16 11:45
AVR-Programmierung für Quereinsteiger
4.3.7 Pointer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
4.3.8 Zusammengesetzte Typen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
4.3.9 Anweisungen in C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.3.10 Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
4.3.11 Goto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
4.3.12 return . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
4.3.13 continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
4.3.14 break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
4.4 Bit-Manipulationen in C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
4.5 Einführung in die AVR-libc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
4.6 Das 'Betriebssystem' des kleinen Mannes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Kapitel 5 • Interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
5.1 Nebeneffekte und Nested Interrupting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
5.2 Interrupt-Vektor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
5.3 Interrupts in C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
5.4 Externe Interrupts INT0 und INT1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
5.4.1 ATmega8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
5.4.2 ATmega328 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
5.5 PCINT (Pin Change INTerrupt) nur beim ATmega328 . . . . . . . . . . . . . . . . . . . . . 115
5.5.1 Die Register für PCINT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Kapitel 6 • Schlafmodi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
6.1 Schlafmodi des ATmega . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
6.1.1 Sleep-Mode im ATmega8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
6.1.2 Sleep-Mode im ATmega328 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Kapitel 7 • Paralleler Input/Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
7.1 ATmega, Register für die Nutzung der Parallelports . . . . . . . . . . . . . . . . . . . . . . 122
7.1.1 Parallelports im ATmega8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
7.1.2 Parallelports im ATmega328 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Kapitel 8 • Timer und Counter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
8.1 Waveform-Generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
8.1.1 Rechteckgenerator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
●6
AVR Programmierung DE 160929.indd 6
25-10-16 11:45
Inhalt
8.1.2 PWM und schneller PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
8.1.3 Phasenkorrekte PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
8.1.4 Input Capture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
8.1.5 Vergleichsregister . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
8.1.6 Race-Conditions bei Änderung der Werte im Vergleichsregister . . . . . . . . . . . . 131
8.1.7 Forced Output Compare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
8.2 Timer/Counter Interrupts im ATmega . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
8.2.1 ATmega8, Timer/Counter-Interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
8.2.2 ATmega328, Timer/Counter-Interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
8.3 Timer/Counter 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
8.3.1 ATmega8: Timer/Counter 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
8.3.2 ATmega328: Timer/Counter 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
8.4 Timer/Counter 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
8.4.1 ATmega8: Die Register des Timers/Counters 2 . . . . . . . . . . . . . . . . . . . . . . . 137
8.4.2 ATmega328: Die Register des Timers/Counters 2 . . . . . . . . . . . . . . . . . . . . . . 140
8.5 Timer/Counter 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
8.5.1 ATmega: Die Register des Timers/Counters 1 . . . . . . . . . . . . . . . . . . . . . . . . 144
8.5.2 ATmega8: Die Register des Timers/Counters 1 . . . . . . . . . . . . . . . . . . . . . . . 147
8.5.3 ATmega328: Die Register des Timers/Counters 1 . . . . . . . . . . . . . . . . . . . . . . 148
Kapitel 9 • Serielle Datenübertragungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
9.1 SPI (Serial Peripheral Interface) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
9.1.1 ATmega: Die Register für SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
9.2 TWI (Two Wire Interface) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
9.2.1 Takt- und Daten-Leitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
9.2.2 Arbitration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
9.2.3 Sleep Mode des TWI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
9.2.4 Allgemeine Erklärung der TWI-Funktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
9.2.5 TWI-Interrupt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
9.2.6 ATmega: Die Register für TWI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
9.2.7 ATmega328: Ein Register mehr für TWI . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
9.3 USART Universal Syn- & Asynchronous Receiver Transmitter . . . . . . . . . . . . . . . 166
●7
AVR Programmierung DE 160929.indd 7
25-10-16 11:45
AVR-Programmierung für Quereinsteiger
9.3.1 USART-Interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
9.3.2 MPCM (Multi Processor Communication Modus) . . . . . . . . . . . . . . . . . . . . . . . 171
9.3.3 ATmega8: Die Register des USART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
9.3.4 ATmega328: Die Register des USART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
9.4 ATmega328: SPI über den USART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
9.4.1 Register für SPI über den USART . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
Kapitel 10 • Analog-Digital-Konverter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
10.1 Noise Canceller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
10.2 ATmega328: Der Temperatursensor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
10.3 ATmega: Die Register des ADC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
10.4 Atmega328: ADC-Register, die nur der ATmega328 hat . . . . . . . . . . . . . . . . . . 187
Kapitel 11 • Analog Comparator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
11.1 ATmega: Die Register für den 'Analog Comparator' . . . . . . . . . . . . . . . . . . . . . 190
11.2 ATmega8: Die Register für den 'Analog Comparator' . . . . . . . . . . . . . . . . . . . . 191
11.3 ATmega328: Die Register für den 'Analog Comparator' . . . . . . . . . . . . . . . . . . 192
Kapitel 12 • Das gibt es nur im ATmega328 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
12.1 Clock Prescaler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
12.2 General Purpose I/O-Register . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
12.3 PRR (Power Reduction Register) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
12.4 debugWIRE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Kapitel 13 • Lock-Bits und Fuses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
13.1 ATmega: Lock-Bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
13.2 Fuses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
13.2.1 ATmega8: Fuses Low Byte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
13.2.2 ATmega328: Fuses Low Byte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
13.2.3 ATmega: Fuses High Byte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
13.2.4 ATmega8: Fuses High Byte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
13.2.5 ATmega328: Fuses High Byte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
13.2.6 ATmega328: Extended Fuse Bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Kapitel 14 • Programmierung des EEPROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
14.1 ATmega: Die Register, um das EEPROM zu programmieren . . . . . . . . . . . . . . . 202
●8
AVR Programmierung DE 160929.indd 8
25-10-16 11:45
Inhalt
14.1.1 ATmega8: Das EEPROM Controller Register . . . . . . . . . . . . . . . . . . . . . . . . . 203
14.1.2 ATmega328: Das EEPROM-Controller-Register . . . . . . . . . . . . . . . . . . . . . . . 204
14.2 EEPROM unter C programmieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Kapitel 15 • Watchdog-Timer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
15.1 Watchdog Timer im ATmega8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
15.2 Watchdog Timer im ATmega328 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Kapitel 16 • Taktversorgung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Kapitel 17 • Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Kapitel 18 • Simulatoren und (In Circuit) Debugging . . . . . . . . . . . . . . . . . . . . . . 214
18.1 Ein kleines Hardware-Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
18.2 Hterm.exe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
18.3 Der Simulator des Atmel Studios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
18.4 Zusammenfassung: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Kapitel 19 • Hoffentlich hilfreiche Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Kapitel 20 • Glossar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Kapitel 21 • Register alphabetisch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Kapitel 22 • Alle Register-Bits alphabetisch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Kapitel 23 • Fuses und Lock-Bits alphabetisch . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
●9
AVR Programmierung DE 160929.indd 9
25-10-16 11:45
Herunterladen