Inhoud - Wim Dolman · 20 Analog-to-Digital Converter 323 20.1 Analoog-digitaalconversie. . . . . ....

6

Click here to load reader

Transcript of Inhoud - Wim Dolman · 20 Analog-to-Digital Converter 323 20.1 Analoog-digitaalconversie. . . . . ....

Page 1: Inhoud - Wim Dolman · 20 Analog-to-Digital Converter 323 20.1 Analoog-digitaalconversie. . . . . . . . . . . . . . . . . . . . . . . .324 20.2 De opbouw van de ADC bij de Xmega ...

Inhoud

1 De Microcontroller 1

1.1 Embedded Systemen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 De architectuur van de microprocessor en de microcontroller . 41.3 Geheugens en geheugenstructuur . . . . . . . . . . . . . . . . . . . 61.4 Harvard-architectuur . . . . . . . . . . . . . . . . . . . . . . . . . . . 71.5 RISC en CISC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81.6 De keuze voor een microcontroller . . . . . . . . . . . . . . . . . . 9

2 De taal C 11

2.1 Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.2 Het compilatietraject . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.3 Compilers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.4 Foutmeldingen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3 C in het kort 19

3.1 Variabelen, declaraties en initialisatie . . . . . . . . . . . . . . . . . 203.2 Datatypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223.3 Samengestelde datatypen: arrays en strings . . . . . . . . . . . . . 233.4 Rekenkundige bewerkingen . . . . . . . . . . . . . . . . . . . . . . . 243.5 Afdrukken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.6 Voorwaardelijke opdrachten . . . . . . . . . . . . . . . . . . . . . . . 253.7 Herhalingsopdrachten . . . . . . . . . . . . . . . . . . . . . . . . . . . 273.8 Voorbeelden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

4 Functies 31

4.1 Verdeel en heers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324.2 De opbouw van een functie . . . . . . . . . . . . . . . . . . . . . . . 344.3 Formele en actuele parameters . . . . . . . . . . . . . . . . . . . . . 384.4 De scope van functies en variabelen . . . . . . . . . . . . . . . . . . 384.5 Call by reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404.6 Blokschema’s, stroomdiagrammen, pseudocode en algoritmes . 414.7 Voorbeeld: cijferprogramma . . . . . . . . . . . . . . . . . . . . . . . 444.8 Het verschil tussen == en = . . . . . . . . . . . . . . . . . . . . . . . . 474.9 Functies en programmeervaardigheden . . . . . . . . . . . . . . . . 48

Page 2: Inhoud - Wim Dolman · 20 Analog-to-Digital Converter 323 20.1 Analoog-digitaalconversie. . . . . . . . . . . . . . . . . . . . . . . .324 20.2 De opbouw van de ADC bij de Xmega ...

vi

5 In- en uitvoer 495.1 Geformatteerde uitvoer . . . . . . . . . . . . . . . . . . . . . . . . . . 505.2 Geformatteerde invoer . . . . . . . . . . . . . . . . . . . . . . . . . . 525.3 Voorbeeld: invoer gegevens cijferprogramma . . . . . . . . . . . . 545.4 Ongeformatteerde in- en uitvoer . . . . . . . . . . . . . . . . . . . . 555.5 Alternatief voor het invoerprobleem . . . . . . . . . . . . . . . . . 585.6 Argumenten doorgeven aan een programma . . . . . . . . . . . . 595.7 Declaratie en het gebruik van strings . . . . . . . . . . . . . . . . . 62

6 Voorwaardelijke opdrachten 676.1 Het if-statement: de if-vorm . . . . . . . . . . . . . . . . . . . . . . . 686.2 De bloktoewijzing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 696.3 Het if-statement: de if-else vorm . . . . . . . . . . . . . . . . . . . . 706.4 Het nesten van if-statements . . . . . . . . . . . . . . . . . . . . . . . 706.5 Het if-statement: de if-else-if vorm . . . . . . . . . . . . . . . . . . . 726.6 Het switch-statement . . . . . . . . . . . . . . . . . . . . . . . . . . . 726.7 Definities en macro’s . . . . . . . . . . . . . . . . . . . . . . . . . . . 776.8 De conditionele operator . . . . . . . . . . . . . . . . . . . . . . . . . 80

7 Herhalingsopdrachten 817.1 De for-lus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817.2 De komma-operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . 847.3 De while-lus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 847.4 De do-while-lus of do-lus . . . . . . . . . . . . . . . . . . . . . . . . . 857.5 Het break-statement en het continue-statement . . . . . . . . . . 86

8 Structuur en Opmaak 898.1 Commentaar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908.2 Opmaak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918.3 Naamgeving . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

9 Datatypen en Operatoren 959.1 Gehele getallen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 969.2 Typecasting bij gehele getallen . . . . . . . . . . . . . . . . . . . . . 979.3 Gebroken getallen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009.4 Typecasting bij gebroken getallen . . . . . . . . . . . . . . . . . . . 1019.5 Constanten bij gebroken getallen . . . . . . . . . . . . . . . . . . . 1039.6 Hexadecimaal, octaal en binair . . . . . . . . . . . . . . . . . . . . . 1049.7 Rekenkundige operatoren . . . . . . . . . . . . . . . . . . . . . . . . 1059.8 Het karaktertype char en de speciale karakters . . . . . . . . . . . 1069.9 Boolean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1079.10 De relationele bewerkingen . . . . . . . . . . . . . . . . . . . . . . . 1079.11 Logische operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1089.12 Bitbewerkingen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1089.13 Verkorte schrijfwijze bij toekenningen . . . . . . . . . . . . . . . . 1099.14 Bewerkingsvolgorde operatoren . . . . . . . . . . . . . . . . . . . . 1109.15 Voorbeeld: afdrukken binaire waarden . . . . . . . . . . . . . . . . 1129.16 Meer over operatoren, datatypen en declaraties . . . . . . . . . . 113

Page 3: Inhoud - Wim Dolman · 20 Analog-to-Digital Converter 323 20.1 Analoog-digitaalconversie. . . . . . . . . . . . . . . . . . . . . . . .324 20.2 De opbouw van de ADC bij de Xmega ...

vii

10 Arrays 119

10.1 De getallen van Fibonacci en de Gulden Snede . . . . . . . . . . . 11910.2 Berekenen getallen van Fibonacci en de Gulden Snede . . . . . . 12110.3 Declaraties van arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . 12210.4 Toewijzingen bij arrays . . . . . . . . . . . . . . . . . . . . . . . . . . 12310.5 Lezen buiten het bereik van een array . . . . . . . . . . . . . . . . 12310.6 Schrijven buiten het bereik van een array . . . . . . . . . . . . . . 12410.7 Meerdimensionale arrays . . . . . . . . . . . . . . . . . . . . . . . . . 12410.8 De driehoek van Pascal . . . . . . . . . . . . . . . . . . . . . . . . . . 12710.9 Berekening driehoek van Pascal en getallen van Fibonacci . . . 12710.10 Dynamische geheugenallocatie . . . . . . . . . . . . . . . . . . . . . 130

11 Pointers 131

11.1 Declaraties van pointers . . . . . . . . . . . . . . . . . . . . . . . . . 13211.2 Toewijzingen met pointers . . . . . . . . . . . . . . . . . . . . . . . . 13211.3 Rekenen met pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . 13311.4 Fouten met pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13411.5 Getallen van Fibonacci en Gulden Snede met pointers . . . . . . 13511.6 Toepassingen pointers . . . . . . . . . . . . . . . . . . . . . . . . . . . 13811.7 Voorbeelden met pointers . . . . . . . . . . . . . . . . . . . . . . . . 13911.8 Dynamische geheugenallocatie bij eendimensionale arrays . . . 14111.9 VLA: variable length array . . . . . . . . . . . . . . . . . . . . . . . . 14211.10 Dynamische geheugenallocatie bij tweedimensionale arrays . . 144

12 Strings 151

12.1 Declaratie van en toekenningen aan strings . . . . . . . . . . . . . 15212.2 Op veilige wijze strings gebruiken . . . . . . . . . . . . . . . . . . . 15412.3 Stringfuncties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15512.4 Array van strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157

13 Advanced C 159

13.1 Lezen en schrijven naar bestanden . . . . . . . . . . . . . . . . . . . 15913.2 Recursie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16813.3 Pointers naar functies . . . . . . . . . . . . . . . . . . . . . . . . . . . 17613.4 Samengestelde datatypes . . . . . . . . . . . . . . . . . . . . . . . . . 17713.5 Datastructuren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18113.6 Functies met een variabele argumentenlijst . . . . . . . . . . . . . 18513.7 Preprocessoropdrachten of compiler directives . . . . . . . . . . . 186

14 De Xmega 189

14.1 De opbouw van de Xmega . . . . . . . . . . . . . . . . . . . . . . . . 19014.2 De behuizing van de Xmega . . . . . . . . . . . . . . . . . . . . . . . 19314.3 De geheugenorganisatie bij de Xmega . . . . . . . . . . . . . . . . . 19414.4 De systeemklok en klokopties . . . . . . . . . . . . . . . . . . . . . 19614.5 Het programmeren van de Xmega . . . . . . . . . . . . . . . . . . . 19714.6 De ontwikkelomgeving voor de Xmega . . . . . . . . . . . . . . . 198

Page 4: Inhoud - Wim Dolman · 20 Analog-to-Digital Converter 323 20.1 Analoog-digitaalconversie. . . . . . . . . . . . . . . . . . . . . . . .324 20.2 De opbouw van de ADC bij de Xmega ...

viii

15 Generieke IO 199

15.1 De schakeling voor Led Blink . . . . . . . . . . . . . . . . . . . . . . 20115.2 De software voor Led Blink . . . . . . . . . . . . . . . . . . . . . . . 20115.3 De generieke IO van de Xmega . . . . . . . . . . . . . . . . . . . . . 20215.4 De organisatie van de registers bij de Xmega: de Xmega-stijl . . 20515.5 De registers bij de verouderde ATmega-stijl . . . . . . . . . . . . . 20715.6 Bitbewerkingen en de read-write-modify-methode . . . . . . . . . 20815.7 Vertragingstijden en de macrodefinitie F_CPU . . . . . . . . . . . . 21215.8 De generieke IO als ingang gebruiken . . . . . . . . . . . . . . . . 21315.9 Het aan- en uitzetten van een led met een drukknop . . . . . . . 21415.10 Contactdender . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21515.11 Hardwarematige antidendermaatregelen . . . . . . . . . . . . . . . 21615.12 Softwarematige antidendermaatregelen . . . . . . . . . . . . . . . . 217

16 Interrupts 221

16.1 Het interruptmechanisme . . . . . . . . . . . . . . . . . . . . . . . . 22216.2 De interrupts en het interruptmechanisme bij de Xmega . . . . 22316.3 Een voorbeeld met externe interrupt 0 . . . . . . . . . . . . . . . . 22416.4 Timer/counters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22916.5 Een tijdvertraging maken met een timer/counter . . . . . . . . . 23216.6 Een antidenderalgoritme met een externe interrupt en TCE0 . . 23716.7 Groepsconfiguratie, groepsmasker, groepspositie, bitmasker en

bitpositie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239

17 Displays 243

17.1 De ledbar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24417.2 Aansturing leds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25017.3 Een tweedimensionale ledarray of dotmatrix . . . . . . . . . . . . 25117.4 Cijfers afbeelden op een dotmatrix . . . . . . . . . . . . . . . . . . 25317.5 Cijfers afbeelden op een dotmatrix met interrupt en timer . . . 25517.6 Cijfers afbeelden op een dotmatrix met de gegevens in flash . . 25817.7 Een 4-digit 7-segmentdisplay aansturen . . . . . . . . . . . . . . . . 26017.8 Het uitlezen van zes drukknoppen . . . . . . . . . . . . . . . . . . 26317.9 Conclusie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266

18 Liquid Crystal Display 267

18.1 Het aansluiten van een HD44780 op de Xmega . . . . . . . . . . 26818.2 Het karaktergeoriënteerde display op basis van HD44780 . . . . 27018.3 Toepassing LCD met 8-bit modus en tijdvertraging . . . . . . . . 27718.4 Toepassing met bewegende tekst . . . . . . . . . . . . . . . . . . . . 27918.5 Toepassing LCD met 4-bit modus en busy flag . . . . . . . . . . . 28018.6 Toepassing met een LCD-bibliotheek . . . . . . . . . . . . . . . . . 28318.7 Geformatteerd afdrukken op een LCD . . . . . . . . . . . . . . . . 28618.8 Het weergeven van gebroken getallen op een LCD . . . . . . . . 287

Page 5: Inhoud - Wim Dolman · 20 Analog-to-Digital Converter 323 20.1 Analoog-digitaalconversie. . . . . . . . . . . . . . . . . . . . . . . .324 20.2 De opbouw van de ADC bij de Xmega ...

ix

19 UART 29119.1 Opbouw USART en het instellen van baudsnelheid . . . . . . . 29319.2 Instelling protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29619.3 Ontvangen en verzenden van data . . . . . . . . . . . . . . . . . . . 29719.4 Het versturen van karakters via USART1 van poort D . . . . . 29819.5 Het ontvangen, converteren en versturen van karakters . . . . . 30019.6 Toepassing met gebruik van een interrupt . . . . . . . . . . . . . . 30119.7 Het gebruik van een circulaire buffer . . . . . . . . . . . . . . . . . 30319.8 Circulaire buffers bij de communicatie met een UART . . . . . 30519.9 De USART-driver van Atmel en een bijbehorende wrapper . . 30719.10 Het versturen van getallen via de UART . . . . . . . . . . . . . . . 31419.11 Het creëren van een stream voor printf en scanf . . . . . . . . . . 31419.12 Een vaste stream voor USART0 van poort F . . . . . . . . . . . . 319

20 Analog-to-Digital Converter 32320.1 Analoog-digitaalconversie . . . . . . . . . . . . . . . . . . . . . . . . 32420.2 De opbouw van de ADC bij de Xmega . . . . . . . . . . . . . . . . 32720.3 De conversiemethoden . . . . . . . . . . . . . . . . . . . . . . . . . . 33320.4 Fouten bij AD-conversie . . . . . . . . . . . . . . . . . . . . . . . . . 33520.5 Toepassing: handmatige unsigned single-ended conversie . . . . 33720.6 Toepassing: handmatige signed single-ended conversie . . . . . . . 34120.7 Toepassing: handmatige conversie met differentiële modus . . . 34420.8 Toepassing: differentiële conversie met behulp van een interrupt 34520.9 Toepassing: differentiële conversie op vaste tijdstippen . . . . . . 34720.10 Toepassing: differentiële conversie in de freerunningmodus . . 35120.11 Kalibratie van de ADC . . . . . . . . . . . . . . . . . . . . . . . . . . 35120.12 Resumé ADC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352

21 Seriële communicatie 35321.1 SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35421.2 Toepassing: aansturing van een extern EEPROM via de SPI . . 35721.3 Toepassing: aansturing van een schuifregister via een SPI . . . . 35921.4 De USART als SPI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36221.5 I2C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36421.6 I2C of TWI voor de Xmega . . . . . . . . . . . . . . . . . . . . . . . 36621.7 Eenvoudige I2C-bibliotheek voor de Xmega in mastermodus . 36721.8 Toepassing: eenvoudige I2C-bibliotheek bij een DS3232 . . . . . 37021.9 Levelshifting voor I2C . . . . . . . . . . . . . . . . . . . . . . . . . . 37421.10 De TWI-masterdriver van Atmel . . . . . . . . . . . . . . . . . . . . 37521.11 De TWI-slavedriver van Atmel . . . . . . . . . . . . . . . . . . . . . 37821.12 Resumé TWI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382

22 Pulsbreedtemodulatie 38322.1 De timer/counters van de Xmega . . . . . . . . . . . . . . . . . . . 38522.2 Bespreking PWM-mogelijkheden . . . . . . . . . . . . . . . . . . . 38722.3 De single-slope-modus: intensiteitsregeling voor een led . . . . . 39422.4 De single-slope-modus: intensiteitsregeling voor een rgb-led . . 39522.5 De dual-slope-modus: een robotwagen met DC-motoren . . . . 397

Page 6: Inhoud - Wim Dolman · 20 Analog-to-Digital Converter 323 20.1 Analoog-digitaalconversie. . . . . . . . . . . . . . . . . . . . . . . .324 20.2 De opbouw van de ADC bij de Xmega ...

x

22.6 De dual-slope-modus: aansturing servomotor . . . . . . . . . . . 40122.7 AWeX: advanced waveform extension . . . . . . . . . . . . . . . . 40322.8 De frequentiemodus: het afspelen van muziek . . . . . . . . . . . 404

23 Nog meer Xmega 40923.1 Digitaal-analoogconverter . . . . . . . . . . . . . . . . . . . . . . . . 41023.2 Direct Memory Access . . . . . . . . . . . . . . . . . . . . . . . . . . 41523.3 Analoge comparator . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42023.4 Input capture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42723.5 Het kloksysteem van de Xmega . . . . . . . . . . . . . . . . . . . . 43523.6 De realtime-counter . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43923.7 Het EEPROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44123.8 Flash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44523.9 De slaapstanden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44823.10 De mogelijkheden om de Xmega256a3u te herstarten . . . . . . 45123.11 Watchdog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45223.12 Het atomic block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455

Bijlagen

A Stroomdiagrammen 457

B RS232 463

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