Inhoud - Wim Dolman

advertisement
Inhoud
1
De Microcontroller
1.1
1.2
1.3
1.4
1.5
1.6
2
.
.
.
.
.
.
Hello World . . . . . .
Het compilatietraject
Compilers . . . . . . .
Foutmeldingen . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Variabelen, declaraties en initialisatie . . . .
Datatypen . . . . . . . . . . . . . . . . . . . . .
Samengestelde datatypen: arrays en strings
Rekenkundige bewerkingen . . . . . . . . . .
Afdrukken . . . . . . . . . . . . . . . . . . . . .
Voorwaardelijke opdrachten . . . . . . . . . .
Herhalingsopdrachten . . . . . . . . . . . . . .
Voorbeelden . . . . . . . . . . . . . . . . . . . .
12
14
16
17
19
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Functies
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
1
4
6
7
8
9
11
C in het kort
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
4
Embedded Systemen . . . . . . . . . . . . . . . . . . . . . . . . . . .
De architectuur van de microprocessor en de microcontroller
Geheugens en geheugenstructuur . . . . . . . . . . . . . . . . . .
Harvard-architectuur . . . . . . . . . . . . . . . . . . . . . . . . . .
RISC en CISC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
De keuze voor een microcontroller . . . . . . . . . . . . . . . . .
De taal C
2.1
2.2
2.3
2.4
3
1
Verdeel en heers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
De opbouw van een functie . . . . . . . . . . . . . . . . . . . . . .
Formele en actuele parameters . . . . . . . . . . . . . . . . . . . .
De scope van functies en variabelen . . . . . . . . . . . . . . . . .
Call by reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Blokschema’s, stroomdiagrammen, pseudocode en algoritmes
Voorbeeld: cijferprogramma . . . . . . . . . . . . . . . . . . . . . .
Het verschil tussen == en = . . . . . . . . . . . . . . . . . . . . . . .
Functies en programmeervaardigheden . . . . . . . . . . . . . . .
20
22
23
24
25
25
27
28
31
.
.
.
.
.
.
.
.
.
32
34
38
38
40
41
44
47
48
vi
5
In- en uitvoer
5.1
5.2
5.3
5.4
5.5
5.6
5.7
6
Commentaar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Opmaak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Naamgeving . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
89
90
91
93
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Het if-statement: de if-vorm . . . . .
De bloktoewijzing . . . . . . . . . . .
Het if-statement: de if-else vorm . .
Het nesten van if-statements . . . . .
Het if-statement: de if-else-if vorm .
Het switch-statement . . . . . . . . .
Definities en macro’s . . . . . . . . .
De conditionele operator . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
De for-lus . . . . . . . . . . . . . . . . . . . . . . . . .
De komma-operator . . . . . . . . . . . . . . . . . .
De while-lus . . . . . . . . . . . . . . . . . . . . . . .
De do-while-lus of do-lus . . . . . . . . . . . . . . .
Het break-statement en het continue-statement
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Structuur en Opmaak
8.1
8.2
8.3
9
.
.
.
.
.
81
81
84
84
85
86
.
.
.
.
.
.
.
Herhalingsopdrachten
7.1
7.2
7.3
7.4
7.5
8
.
.
.
.
.
.
.
.
67
68
69
70
70
72
72
77
80
Geformatteerde uitvoer . . . . . . . . . . . . . .
Geformatteerde invoer . . . . . . . . . . . . . .
Voorbeeld: invoer gegevens cijferprogramma
Ongeformatteerde in- en uitvoer . . . . . . . .
Alternatief voor het invoerprobleem . . . . .
Argumenten doorgeven aan een programma
Declaratie en het gebruik van strings . . . . .
Voorwaardelijke opdrachten
6.1
6.2
6.3
6.4
6.5
6.6
6.7
6.8
7
.
.
.
.
.
.
.
49
50
52
54
55
58
59
62
Datatypen en Operatoren
9.1
9.2
9.3
9.4
9.5
9.6
9.7
9.8
9.9
9.10
9.11
9.12
9.13
9.14
9.15
9.16
Gehele getallen . . . . . . . . . . . . . . . . . . . . .
Typecasting bij gehele getallen . . . . . . . . . . .
Gebroken getallen . . . . . . . . . . . . . . . . . . .
Typecasting bij gebroken getallen . . . . . . . . .
Constanten bij gebroken getallen . . . . . . . . .
Hexadecimaal, octaal en binair . . . . . . . . . . .
Rekenkundige operatoren . . . . . . . . . . . . . .
Het karaktertype char en de speciale karakters .
Boolean . . . . . . . . . . . . . . . . . . . . . . . . . .
De relationele bewerkingen . . . . . . . . . . . . .
Logische operatoren . . . . . . . . . . . . . . . . . .
Bitbewerkingen . . . . . . . . . . . . . . . . . . . . .
Verkorte schrijfwijze bij toekenningen . . . . . .
Bewerkingsvolgorde operatoren . . . . . . . . . .
Voorbeeld: afdrukken binaire waarden . . . . . .
Meer over operatoren, datatypen en declaraties
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
95
96
97
100
101
103
104
105
106
107
107
108
108
109
110
112
113
vii
10 Arrays
10.1
10.2
10.3
10.4
10.5
10.6
10.7
10.8
10.9
10.10
119
De getallen van Fibonacci en de Gulden Snede . . . . . . . .
Berekenen getallen van Fibonacci en de Gulden Snede . . .
Declaraties van arrays . . . . . . . . . . . . . . . . . . . . . . . .
Toewijzingen bij arrays . . . . . . . . . . . . . . . . . . . . . . .
Lezen buiten het bereik van een array . . . . . . . . . . . . .
Schrijven buiten het bereik van een array . . . . . . . . . . .
Meerdimensionale arrays . . . . . . . . . . . . . . . . . . . . . .
De driehoek van Pascal . . . . . . . . . . . . . . . . . . . . . . .
Berekening driehoek van Pascal en getallen van Fibonacci
Dynamische geheugenallocatie . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11 Pointers
11.1
11.2
11.3
11.4
11.5
11.6
11.7
11.8
11.9
11.10
131
Declaraties van pointers . . . . . . . . . . . . . . . . . . . . . . .
Toewijzingen met pointers . . . . . . . . . . . . . . . . . . . . . .
Rekenen met pointers . . . . . . . . . . . . . . . . . . . . . . . . .
Fouten met pointers . . . . . . . . . . . . . . . . . . . . . . . . . .
Getallen van Fibonacci en Gulden Snede met pointers . . . .
Toepassingen pointers . . . . . . . . . . . . . . . . . . . . . . . . .
Voorbeelden met pointers . . . . . . . . . . . . . . . . . . . . . .
Dynamische geheugenallocatie bij eendimensionale arrays .
VLA: variable length array . . . . . . . . . . . . . . . . . . . . . .
Dynamische geheugenallocatie bij tweedimensionale arrays
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
12 Strings
12.1
12.2
12.3
12.4
Declaratie van en toekenningen aan strings
Op veilige wijze strings gebruiken . . . . . .
Stringfuncties . . . . . . . . . . . . . . . . . . .
Array van strings . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Lezen en schrijven naar bestanden . . . . . . . .
Recursie . . . . . . . . . . . . . . . . . . . . . . . . .
Pointers naar functies . . . . . . . . . . . . . . . .
Samengestelde datatypes . . . . . . . . . . . . . .
Datastructuren . . . . . . . . . . . . . . . . . . . .
Functies met een variabele argumentenlijst . .
Preprocessoropdrachten of compiler directives
De opbouw van de Xmega . . . . . . . . .
De behuizing van de Xmega . . . . . . . .
De geheugenorganisatie bij de Xmega . .
De systeemklok en klokopties . . . . . .
Het programmeren van de Xmega . . . .
De ontwikkelomgeving voor de Xmega
152
154
155
157
159
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
14 De Xmega
14.1
14.2
14.3
14.4
14.5
14.6
132
132
133
134
135
138
139
141
142
144
151
13 Advanced C
13.1
13.2
13.3
13.4
13.5
13.6
13.7
119
121
122
123
123
124
124
127
127
130
159
168
176
177
181
185
186
189
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
190
193
194
196
197
198
viii
15 Generieke IO
15.1
15.2
15.3
15.4
15.5
15.6
15.7
15.8
15.9
15.10
15.11
15.12
199
De schakeling voor Led Blink . . . . . . . . . . . . . . . . . . . .
De software voor Led Blink . . . . . . . . . . . . . . . . . . . . .
De generieke IO van de Xmega . . . . . . . . . . . . . . . . . . .
De organisatie van de registers bij de Xmega: de Xmega-stijl
De registers bij de verouderde ATmega-stijl . . . . . . . . . . .
Bitbewerkingen en de read-write-modify-methode . . . . . . .
Vertragingstijden en de macrodefinitie F_CPU . . . . . . . . . .
De generieke IO als ingang gebruiken . . . . . . . . . . . . . .
Het aan- en uitzetten van een led met een drukknop . . . . .
Contactdender . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Hardwarematige antidendermaatregelen . . . . . . . . . . . . .
Softwarematige antidendermaatregelen . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
16 Interrupts
16.1
16.2
16.3
16.4
16.5
16.6
16.7
221
Het interruptmechanisme . . . . . . . . . . . . . . . . . . . . . . . .
De interrupts en het interruptmechanisme bij de Xmega . . . .
Een voorbeeld met externe interrupt 0 . . . . . . . . . . . . . . . .
Timer/counters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Een tijdvertraging maken met een timer/counter . . . . . . . . .
Een antidenderalgoritme met een externe interrupt en TCE0 . .
Groepsconfiguratie, groepsmasker, groepspositie, bitmasker en
bitpositie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17 Displays
17.1
17.2
17.3
17.4
17.5
17.6
17.7
17.8
17.9
De ledbar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Aansturing leds . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Een tweedimensionale ledarray of dotmatrix . . . . . . . . . .
Cijfers afbeelden op een dotmatrix . . . . . . . . . . . . . . . .
Cijfers afbeelden op een dotmatrix met interrupt en timer .
Cijfers afbeelden op een dotmatrix met de gegevens in flash
Een 4-digit 7-segmentdisplay aansturen . . . . . . . . . . . . . .
Het uitlezen van zes drukknoppen . . . . . . . . . . . . . . . .
Conclusie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Het aansluiten van een HD44780 op de Xmega . . . . . . .
Het karaktergeoriënteerde display op basis van HD44780 .
Toepassing LCD met 8-bit modus en tijdvertraging . . . . .
Toepassing met bewegende tekst . . . . . . . . . . . . . . . . .
Toepassing LCD met 4-bit modus en busy flag . . . . . . . .
Toepassing met een LCD-bibliotheek . . . . . . . . . . . . . .
Geformatteerd afdrukken op een LCD . . . . . . . . . . . . .
Het weergeven van gebroken getallen op een LCD . . . . .
222
223
224
229
232
237
239
243
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
18 Liquid Crystal Display
18.1
18.2
18.3
18.4
18.5
18.6
18.7
18.8
201
201
202
205
207
208
212
213
214
215
216
217
244
250
251
253
255
258
260
263
266
267
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
268
270
277
279
280
283
286
287
ix
19 UART
19.1
19.2
19.3
19.4
19.5
19.6
19.7
19.8
19.9
19.10
19.11
19.12
Opbouw USART en het instellen van baudsnelheid . . . . .
Instelling protocol . . . . . . . . . . . . . . . . . . . . . . . . . . .
Ontvangen en verzenden van data . . . . . . . . . . . . . . . . .
Het versturen van karakters via USART1 van poort D . . .
Het ontvangen, converteren en versturen van karakters . . .
Toepassing met gebruik van een interrupt . . . . . . . . . . . .
Het gebruik van een circulaire buffer . . . . . . . . . . . . . . .
Circulaire buffers bij de communicatie met een UART . . .
De USART-driver van Atmel en een bijbehorende wrapper
Het versturen van getallen via de UART . . . . . . . . . . . . .
Het creëren van een stream voor printf en scanf . . . . . . . .
Een vaste stream voor USART0 van poort F . . . . . . . . . .
291
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
20 Analog-to-Digital Converter
20.1
20.2
20.3
20.4
20.5
20.6
20.7
20.8
20.9
20.10
20.11
20.12
323
Analoog-digitaalconversie . . . . . . . . . . . . . . . . . . . . . . . . 324
De opbouw van de ADC bij de Xmega . . . . . . . . . . . . . . . . 327
De conversiemethoden . . . . . . . . . . . . . . . . . . . . . . . . . . 333
Fouten bij AD-conversie . . . . . . . . . . . . . . . . . . . . . . . . . 335
Toepassing: handmatige unsigned single-ended conversie . . . . 337
Toepassing: handmatige signed single-ended conversie . . . . . . . 341
Toepassing: handmatige conversie met differentiële modus . . . 344
Toepassing: differentiële conversie met behulp van een interrupt 345
Toepassing: differentiële conversie op vaste tijdstippen . . . . . . 347
Toepassing: differentiële conversie in de freerunningmodus . . 351
Kalibratie van de ADC . . . . . . . . . . . . . . . . . . . . . . . . . . 351
Resumé ADC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
21 Seriële communicatie
21.1
21.2
21.3
21.4
21.5
21.6
21.7
21.8
21.9
21.10
21.11
21.12
353
SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Toepassing: aansturing van een extern EEPROM via de SPI .
Toepassing: aansturing van een schuifregister via een SPI . . .
De USART als SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . .
I 2C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
I2C of TWI voor de Xmega . . . . . . . . . . . . . . . . . . . . . .
Eenvoudige I2C-bibliotheek voor de Xmega in mastermodus
Toepassing: eenvoudige I2C-bibliotheek bij een DS3232 . . . .
Levelshifting voor I2C . . . . . . . . . . . . . . . . . . . . . . . . .
De TWI-masterdriver van Atmel . . . . . . . . . . . . . . . . . . .
De TWI-slavedriver van Atmel . . . . . . . . . . . . . . . . . . . .
Resumé TWI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
22 Pulsbreedtemodulatie
22.1
22.2
22.3
22.4
22.5
293
296
297
298
300
301
303
305
307
314
314
319
De timer/counters van de Xmega . . . . . . . . . . . . . . . . .
Bespreking PWM-mogelijkheden . . . . . . . . . . . . . . . . .
De single-slope-modus: intensiteitsregeling voor een led . . .
De single-slope-modus: intensiteitsregeling voor een rgb-led
De dual-slope-modus: een robotwagen met DC-motoren . .
354
357
359
362
364
366
367
370
374
375
378
382
383
.
.
.
.
.
.
.
.
.
.
385
387
394
395
397
x
22.6
22.7
22.8
De dual-slope-modus: aansturing servomotor . . . . . . . . . . . 401
AWeX: advanced waveform extension . . . . . . . . . . . . . . . . 403
De frequentiemodus: het afspelen van muziek . . . . . . . . . . . 404
23 Nog meer Xmega
23.1
23.2
23.3
23.4
23.5
23.6
23.7
23.8
23.9
23.10
23.11
23.12
Digitaal-analoogconverter . . . . . . . . . . . . . . . . . .
Direct Memory Access . . . . . . . . . . . . . . . . . . . .
Analoge comparator . . . . . . . . . . . . . . . . . . . . . .
Input capture . . . . . . . . . . . . . . . . . . . . . . . . . .
Het kloksysteem van de Xmega . . . . . . . . . . . . . .
De realtime-counter . . . . . . . . . . . . . . . . . . . . . .
Het EEPROM . . . . . . . . . . . . . . . . . . . . . . . . . .
Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
De slaapstanden . . . . . . . . . . . . . . . . . . . . . . . . .
De mogelijkheden om de Xmega256a3u te herstarten
Watchdog . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Het atomic block . . . . . . . . . . . . . . . . . . . . . . . .
409
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
410
415
420
427
435
439
441
445
448
451
452
455
Bijlagen
A Stroomdiagrammen
457
B
463
RS232
C JTAG
469
D SD-kaart
473
E
Draadloze module
479
F
CMOS
489
G Headerbestanden
503
H Application notes
511
I
ASCII
513
J
Xmega-bord
515
Index
519
Download