De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (5)

Vergelijkbare documenten
De Arduino-microcontroller in de motorvoertuigentechniek (8)

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (4)

De Arduino-microcontroller in de motorvoertuigentechniek (6)

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (3)

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (8)

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (2)

De Arduino-microcontroller in de motorvoertuigentechniek (3)

Microcontrollers Week 4 Introductie microcontroller Jesse op den Brouw (met dank aan Ben Kuiper) INLMIC/

Het programmeren van de 68HC11

In- en uitgangssignalen van microprocessoren

De Arduino-microcontroller in de motorvoertuigentechniek (2)

2 Algemene opbouw van een computersysteem

A Quick Start Guide: AVR programmeren

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (6)

De Arduino-microcontroller in de motorvoertuigentechniek (4)

led 0 aan Opdracht: 1 Opdracht: 4

ES1 Project 1: Microcontrollers

HANDLEIDING. Dit document beschrijft de installatie, configuratie en gebruik van de Netduino Plus 2 monitoring oplossing

Constructie van het klokcircuit voor de processor en het spanningsdetectie circuit

Opgave Tussentijdse Oefeningen Jaarproject I Reeks 4: Lcd Interface & Files

ES1 Project 1: Microcontrollers

ATtiny13. Versie 01 : augustus Many van Krieken Page 1

Antwoorden vragen en opgaven Basismodule

Accelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368

Installatie-instructies

Installatie handleiding

Besturing van de Miniatuurwereld RM-U. Gebruik van de Bootloader

Oefeningen Interpretatie I Reeks 6 : Registermachines

AVR-DOPER MINI ASSEMBLAGE HANDLEIDING + LAYOUT. Geschreven door: Tom Vocke

Veiligheid,comfort en communicatie (1)

Handleiding software USB PIC DEV. BOARD

VANTEK Discovery set. N. B. De OPITEC bouwpakketten zijn gericht op het onderwijs. N991240#1

scc = b) CD AB

ES1 Project 1: Microcontrollers

THEORIE TALSTELSELS. 1 x 10 0 = 1 (een getal tot de macht 0 = 1) 8 x 10 1 = 80 2 x 10 2 = x 10 3 = Opgeteld: 9281d(ecimaal)

Motormanagement simulatie MegaSquirt Hoofdstuk 3

Repaircenter Leidsekade BH Leidschendam Tel: Fax:

HANDLEIDING INFOBOARD SOFTWARE

Locobuffer Handleiding

H A N D L E I D I N G D A Z A T O O L S - O N T V A N G E R

Colofon. Joost van den Brink - 2 -

Voeler ingang van de ilog recorder. Stop de temperatuurvoeler

S88XPressNetLI v1.0. Installatie- en gebruikershandleiding en naslagwerk KDesign Electronics, PCB ontwerp door RoSoft

DIGITALE MODE MET POWER SDR

Snel op weg met de PepperPlayer.

Besturing van de Miniatuurwereld TM-H. Gebruik van de Bootloader

Watcheye AIS op ipad

Snel aan de slag met de Mini Squirrel datalogger

SNEL HANDLEIDING KIT-2BNVR2W

Handleiding. Vanaf BFC Software Versie: MTD Hardware Versie: 5.2 Document Versie: van 16 Handleiding BFC Versie:

Hoe werkt een computer precies?

MegaSquirt motormanagement-simulatie Hoofdstuk: Inleiding

Bouwbeschrijving UniSAI

TRUST AMI MOUSE 250S OPTICAL

Handleiding voor installatie en gebruik van

Van Poort tot Pipeline. Ben Bruidegom & Wouter Koolen-Wijkstra AMSTEL Instituut Universiteit van Amsterdam

Midi PDF Bladmuziek lezer

Voeler ingang van de ilog recorder. Stop de temperatuurvoeler

SenBox Handleiding. Versie: juli

Hoe werkt een rekenmachine?

Besturing van de Miniatuurwereld UCCI. Gebruik van de Bootloader

Hanwell temperatuur / vocht logger handleiding

Handleiding ISaGRAF. Wil men het programma bewaren, dan is het verstandig een back-up te maken: C9 Back-up / Restore

7,6. Samenvatting door A woorden 12 april keer beoordeeld. Natuurkunde. Natuurkunde Systemen. Systemen

Installeren van het stuurprogramma USB-Audiostuurprogramma Installatiehandleiding (Windows)

HANDLEIDING INFOGRAPHIC SOFTWARE Versie 2.3 / jan 2014

Microcontrollers Labo

Handleiding. Voor het programmeren/configureren van de. CBD4-5-6 controlebox

Technology, Innovation & Society Delft

The Nike+ SportWatch GPS Powered by TomTom

Hallo. Ik snap het Ik kan uitleggen via welke stappen ik een programma maak en dit op de micro:bit zet.

Tool Gebruikershandleiding E46 Mods

Inhoud 1. Minimale systeem vereisten.. pagina Installatie Sissel Silencium Data Analyse Software. pagina 01

Priva Blue ID Network scanner / Syslog Tool

Repaircenter Leidsekade BH Leidschendam Tel: Fax:

Deze handleiding geeft uitleg over de installatie van hard- en software van HTvision V.O.F.

Beknopte handleiding SQ Vieuw software

2 Elementaire bewerkingen

Computerarchitectuur en netwerken. Memory management Assembler programmering

F O R E S T S H U T T L E S / L

Hoofdstuk 7. Computerarchitectuur

Het SDT200 en SDT270-stuurprogramma installeren

Printerproblemen oplossen

1. Onderdelen en functies

Manual Debug software. VMC next

Installatie handleiding PowerSDR-IQ v SV1EIA voor het gebruik met de LIMA-SDR

Inhoud vandaag. Interrupts. Algemeen ARM7 AIC

Samsung Auto Backup FAQ

Handleiding Sportlink Club

Een schone installatie van Windows 10 uitvoeren met een hulpprogramma

Gebruik van de TI-83/84 Plus

Installatie- en gebruikershandleiding Arseus barcode scanner

Handmatig je lokale mailbox migreren

Gebruikershandleiding

Overzicht kaarten. Ontdek met de Explorerkaarten wat de micro:bit allemaal kan. Lees verder aan de andere kant

Netwerk Interfacing Data Logging.

Print Manager USB. Handleiding NL. BRICON nv Europark Oost 15C, 9100 Sint-Niklaas, Belgium. Tel: Fax:

Aanvullende gebruiksaanwijzing Chicago 390 USB Deze aanvullende gebruiksaanwijzing hoort bij de gebruiksaanwijzing van de Chicago 390 USB.

Softphone Installatie Handleiding

Transcriptie:

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (5) Timloto o.s. / E. Gernaat / ISBN 978-90-79302-06-2 Op dit werk is de Creative Commens Licentie van toepassing. Uitgave: september 2012 1 Het programmeren van de AT90CAN32 Om de AT90CAN32 microcontroller te laten werken moet een programma in het flash geheugen van de controller worden gebracht. We moeten hiervoor een programma schrijven. Om een programma te maken en vervolgens naar de AT90CAN32 te downloaden hebben we nodig: de AT90CAN32 microcontrollerset van Elektor-Timloto; een 9V voeding voor de AT90CAN32; een download ISP-interface; een personal computer (PC); een AT90CAN32 assembleerprogramma (AVR Studio4 van Atmel voor Windows); (Assembleren en downloaden onder Linux is ook goed mogelijk, maar wordt hier niet behandeld) 1.0.1 Het installeren van de software AVR Studio4 is gratis te downloaden van de AVR-site. Zie hiervoor www.atmel.com/products/avr/. Kijk vervolgens onder Tools en Software. Na het downloaden kan de.exe file worden geactiveerd. Let op dat de USB-driver mee wordt geïnstalleerd. AVR Studio 4 is dan klaar voor het gebruik. Zet alle Timloto oefenprogramma s als projects in een aparte map. 1.0.2 Het gereedmaken van de hardware We gaan uit van de opstelling van fig. 1. De ISP-interface is al aangesloten op de controllerprint. Er is (nog) geen hardware aangesloten op de 34-polige flat cable. Moet de hardware nog in elkaar worden gesoldeerd raadpleeg dan de bijlage (hoofdstuk 10). Ook wanneer de ISP-interface voor de eerste maal wordt gebruikt dient hoofdstuk 10 te worden geraadpleegd. In volgorde: 1

Figuur 1: De Elektor-Timloto AT90CAN32 oefencontroller. De dipswitches kunnen worden vervangen door de grotere schakelaars. De controller heeft ook een aansluiting voor de CAN-bus. we sluiten de 9V voeding adapter aan. Een rode led op de controllerprint licht dan op. Is dit niet het geval controleer dan de draadbrug (K3) bij de led. De voorste twee pinnen moeten zijn doorverbonden. we sluiten de USB-interface kabel aan op een USB-ingang van de PC. De groene led op de ISP-interface licht dan op. de hardware is nu klaar voor het gebruik en de AVR studio 4 kan vanuit de PC worden opgestart. In deze opstelling kunnen de basis programma s 1 t/m 10 worden uitgevoerd. Extra hardware is nodig voor programma 6 (de 7-segment display volgens de bijlage van hoofdstuk 10) en voor programma 10 (een functiegenerator). 2 PROGRAMMA 1 We zullen nu het eerste programma met de naam PROGRAM1.ASM vanuit de PC in de AT90CAN controller downloaden. We gaan er vanuit dat alle projectprogramma s naar een aparte map zijn gekopiëerd bijv. met de naam CodeAVR. De programma s zijn te downloaden van de Timloto site (www.timloto.org). Kijk dan onder Onderwijsmatrix. Na het opstarten van het programma AVR Studio 4 kiezen we voor Project en kiezen voor Open Project. Zonodig selec- 2

teren we eerst de map CodeAVR en kiezen daaruit PROGRAM1. Als alles goed gaat komt het volgende op het scherm te staan: 3

/* Programma naam: PROGRAM1.ASM Programma voor de AT90CAN32 Elektor-Timloto print. Poort A output, poort C input (wordt hier niet gebruikt). Het programma zet led0 op de print aan. Er wordt gebruik gemaakt van AVR Studio 4 Het programma draait vanuit het Flash-geheugen */.DEVICE AT90CAN32.INCLUDE can32def.inc.include timlotodef.inc ; definitie poorten in aparte file ; eigen initialisaties /* INITIALISATIE in include files */ /* HOOFDPROGRAMMA */ LDI R17,0x01 OUT PORTA,R17 /* Vragen en opgaven ; i.p.v. 0x01 ook 01 of 0b00000001 ; zet led0 aan 1. Assembleer en download het programma en controleer of het werkt. 2. Verander nu het programma zodanig dat led7 oplicht. 3. Verander het programma zodanig dat de leds om en om oplichten. Dus 1 led aan, de volgende uit etc. Er zijn twee mogelijkheden. Welke? Gebruik hiervoor zowel de hexadecimale als de binaire aanduiding. 4. Zet nu een het getal 7Bh op de leds. Welke leds lichten nu op? / Nu moet het programma geassembleerd worden waardoor de eigenlijke machinecode wordt aangemaakt en vervolgens worden gedownload. Voor het assembleren gaan we vanuit AVR Studio 4 naar Build en klikken Build aan. Als alles goed gaat verschijnt onderin het scherm Assembly complete, 0 errors, 0 warnings. We kunnen nu gaan downloaden. Dit doen we door op AVR-ikoontje te klikken. Er verschijnt dan een scherm met verschillende opties. We kiezen voor Program en dan Flash. Bij de Input HEX file moeten we eerst het juiste project selecteren. We klikken op de drie puntjes (...) en selecteren PROGRAM1. Met openen zien we dat nu de file PROGRAM1.hex klaar is om te worden gedownload. Druk nu op Program en we zien dat het programma wordt gedownload en meteen wordt uitgevoerd. Let op: Wanneer we deze procedure bij een nieuwe controller voor de eerste maal wordt uitgevoerd moeten de Fuses en de ISP settings worden ingesteld. Zie de juiste bijlage in het laatste hoofdstuk voor meer informatie. 2.0.3 Verklaring bij PROGRAM1.ASM Voor de uitleg van het programma hebben we aan het programma regelnummers toegevoegd. De informatie over het programma hebben we ingekort. 4

1. /* Programma naam: PROGRAM1.ASM */ 2.DEVICE AT90CAN32 3..INCLUDE can32def.inc ; definitie poorten in aparte file 4..INCLUDE timlotodef.inc ; eigen initialisaties 5. /* INITIALISATIE in include files */ 6. /* HOOFDPROGRAMMA */ 7. LDI R17,0x01 ; i.p.v. 0x01 ook 01 of 0b00000001 8. OUT PORTA,R17 ; zet led0 aan Regel 1 is informatie en begint met (/*) en wordt afgesloten met (*/). Alles tussen deze twee tekens wordt als informatie beschouwd en wordt niet mee gecompileerd. Regel 2 geeft aan dat we te maken hebben met de AT90CAN32. Regel 3 en 4 geeft aan dat een gedeelte van het programma niet wordt weergegeven maar zich in een file bevindt onder de naam can32def.inc en timlotodef.inc. De.inc(lude) files bevatten algemene afspraken en de initialisatie van het programma. Deze include-files zijn op dit moment niet interessant, maar kunnen zonodig met AVR-Studio worden bekeken en worden gewijzigd. Regel 5 en 6 geven weer (misschien wat overbodige) informatie. Het eigenlijke programm omvat slechts twee regels. Regel 7 en 8. De eerste instructie luidt: LDI R17,0x01 (LDI = Laad Immediate). Dit betekent: laad register R17 met het hexadecimale getal 01. De 0x voor het eigenlijke getal geeft aan dat het getal dat volgt hexadecimaal is. Elke instructie kan van commentaar worden voorzien. Het ; teken geeft aan dat hierna het commentaar volgt. Het commentaar behoeft in dit geval niet te worden afgesloten omdat het maar tot het einde van de regel geldt. Opgemerkt wordt dat behalve hexadecimaal we het getal ook decimaal resp. binair kunnen weergeven. Geen extra informatie voor decimaal en voor de binaire weergave beginnen we met 0b. De tweede en laatste instructie luidt: OUT PORTA,R17. Daar staat in SMS-stijl (mnemonics genoemd): Stuur de inhoud van register R17 via poort A naar buiten. Nu zijn op poort A de leds aangesloten, dus het getal 01 hexadecimaal of 00000001 binair wordt op de leds gezet. Het resultaat is dat led0 (de eerste led van rechts) oplicht. Het kan nu niet moeilijk zijn om de bij het programma behorende vragen en opdrachten uit te voeren. 5

3 PROGRAMMA 2 Na deze toelichting gaan we de overige programma s uitproberen. Het is niet nodig om elk programma tot in de details te begrijpen. De programma s omvatten toelichting en vragen. Laad nu het project PROGRAM2, programma PROGRAM2.ASM in AVR Studio. Zoals reeds opgemerkt zijn de zinnen die voorafgegaan worden door een sterretje /* of ; toelichting op het programma. Ze maken dus eigenlijk geen deel uit van het programma. Hier volgt het tweede programma. We hebben waarnodig regelnummers toegevoegd. /*Programma naam: PROGRAM2.ASM Programma voor de AT90CAN32 Elektor-Timloto print. Poort A output, poort C input Het programma leest de schakelaars in en zet deze op de leds. Er wordt hier gebruik gemaakt van AVR Studio 4 Het programma draait vanuit het Flash-geheugen */.DEVICE AT90CAN32.INCLUDE can32def.inc.include timlotodef.inc ; definitie poorten in aparte file ; eigen initialisaties /* HOOFDPROGRAMMA */ 1. LDI R16,0x00 ; niet strikt noodzakelijk 2. OUT PORTA,R16 ; zet leds uit, mooi begin 3. BEGIN: IN R16,PINC ; lees schakelstand in 4. OUT PORTA,R16 ; schakelstand op poort A 5. RJMP BEGIN ; spring naar adres met label BEGIN /*Vragen en opgaven 1. Assembleer en download het programma en controleer of het werkt. 2. Verwijder de eerste twee regels (1 en 2) uit het hoofdprogramma. Probeer het programma uit. Verklaar waarom de eerste twee regels van het hoofdprogramma niet echt nodig zijn. 3. Zoek met behulp van de *.lst file de machinecode op voor de instructies IN R16,PINC en RJMP BEGIN Opm: Ga eventueel naar Project, kies voor Assembler Options en vink Create List File aan 4. Met welk adresnummer begint nu het label BEGIN? */ 6

3.0.4 Toelichting bij programma 2 In regel 1 en 2 zorgen de instructies ervoor dat na het laden van het R16 register met 0x00, de inhoud van het R16 register naar de leds wordt gestuurd. De nullen zorgen ervoor dat de leds uitgaan. Vervolgens zien we dat door de instructie op de 3e regel (PINC = Inputpoort C) de inhoud van poort C in het R16 register terecht komt (We letten even niet op het woord BEGIN ). Hardwarematig zijn de schakelaars aangesloten op de pinnen van de C-poort. Het gevolg is dat de elektrische stand van de schakelaars (zijn de schakelaars verbonden met de plus of de min?) in het R16-register wordt gezet. Stel dat de eerste vier schakelaars (S0 t/m S3) tegen de plus staan en de overigen vier tegen de min, dan zou na uitvoering van deze instructie, 00001111 in het R16 register staan. In regel 4 wordt de inhoud van het R16 register op de A-poort gezet. Op poort A zijn de leds aangesloten, dus de leds worden aangestuurd volgens de inhoud van het R16 register. Resultaat: de stand van de schakelaars wordt op de leds gezet. Wanneer we nu voortdurend de schakelstand in willen lezen en op de leds willen zetten dan moet het programma continu worden uitgevoerd. Dit gebeurt door de RJMP (Relatieve JuMP) instructie op regel 5. RJMP BEGIN betekent dat het programma weer naar het begin-adres springt dat hier aangeduid wordt met het label BEGIN. Het programma is nu in een eindeloze lus terechtgekomen en controleert voortdurend de stand van de schakelaars en zet het resultaat daarvan op de leds. Het lijkt net of de schakelaars en leds met draadjes zijn doorverbinden. Assembleer en download het programma. Voer nu de opdrachten die bij het programma behoren uit. We kunnen dan verder met programma 3. 7

4 PROGRAMMA 3 /*Programma naam: PROGRAM3.ASM Programma voor de AT90CAN32 Elektor-Timloto print. Poort A output, poort C input. Het programma leest de schakelaars in, telt bij de schakelstand 1 op en zet het resultaat op de leds. Het programma demonstreert op deze wijze data-manipulatie. Er wordt hier gebruik gemaakt van AVR Studio 4.*/.DEVICE AT90CAN32.INCLUDE can32def.inc.include timlotodef.inc ; definitie poorten in aparte file ; eigen initialisaties /* HOOFDPROGRAMMA */ 1. LDI R16,0x00 ; zet leds uit 2. OUT PORTA,R16 3. BEGIN: IN R16,PINC ; lees schakelstand in 4. LDI R17,0x01 ; data manipulatie! ; zet een 1 in register 17 5. ADD R16,R17 ; tel 1 op bij de schakelstand 6. OUT PORTA,R16 ; schakelstand op poort A 7. RJMP BEGIN ; spring naar adres met label BEGIN /* Vragen en opgaven 1. Assembleer en download het programma en controleer of het werkt. 2. Zet de schakelaars in de volgende standen en controleer het antwoord op de leds. 01010101 binair (stand schakelaars) 00000001 binair (tel op) +... situatie leds 11111111 00000001 +... situatie leds 3. Vervang de instructie LDI R17,0x01 door LDI R17,0x03 en verklaar wat er gebeurt. Denk erom dat het programma opnieuw moet worden 8

geassembleerd en worden gedownload. 4. Vervang nu eens de optelinstructie ADD door de aftrekinstructie SUB. Controleer of het resultaat klopt met uw eigen berekening. 5. Leg de relatie uit met dit voorbeeld programma en een echt autotechnisch regelprogramma. */ 4.0.5 Toelichting bij programma 3 We hebben in het programma weer regelnummers toegevoegd. Het programma vertoont veel overeenkomsten met het vorige programma. Regel 4 en 5 zijn ingevoegd. In regel 4 wordt het getal 1 in register R17 geplaatst. ADD R16,R17 in regel 5 betekent: tel het getal dat zich in register R17 bevindt (het getal 1 dus) op bij de inhoud van het R16 register. Het resultaat van deze optelling wordt vervolgens op de leds gezet. Hoewel het programma eenvoudig is, is het begrip wat hier ontstaat uiterst belangrijk. Het geeft namelijk principiëel weer wat besturingscomputers doen, namelijk het manipuleren of bewerken van data. Het programma laat zich als het volgt verklaren: De schakelaars kunnen worden beschouwd als sensoren die de veranderingen in het proces registreren. De leds kunnen worden gezien als de actuatoren of de corrigerende organen die invloed uitoefenen op het procesverloop. Wanneer we een automatische versnellingsbak van een auto als voorbeeld nemen, dan kunnen de schakelaars de snelheid simuleren en de leds de magneetkleppen. De magneetkleppen bekrachtigen vervolgens de nodige koppelingen en rembanden om de bij de snelheid behorende versnelling in te schakelen. De digitale informatie die de sensoren leveren, moet dus omgezet worden in nieuwe digitale informatie die op de relaiskleppen wordt gezet. De data moet dus worden bewerkt. Dit bewerken gaat uiteraard volgens bepaalde regels die in de regeltechniek gelden. Hier tellen we, uitsluitend als voorbeeld van datamanipulatie, eenvoudig 1 op bij de schakelstand. Stel: vier schakelaars staan tegen de + en de overige tegen de -. Na het inlezen staat in het R16-register 00001111 binair. Wanneer we daar 00000001 (binair) bij optellen, ontstaat: 0000 1111 b 0000 0001 b - + /* 1b + 1b = 10b! */ 0001 0000 b Als we in regel 6 het resultaat van de eerste vier schakelaars tegen de plus via poort-a naar de leds sturen, dan licht uitsluitend led4 op. De stand van de schakelaars is veranderd in nieuwe, bij de besturing behorende, informatie. Assembleer en download het programma en voer de bij het programma behorende opgaven uit. We gaan dan verder met programma 4. 9

5 PROGRAMMA 4 /*Programma naam: PROGRAM4.ASM Programma voor de AT90CAN32 Elektor-Timloto print. Poort A output, poort C input. Het programma leest de schakelaars in, selecteert schakelaar 0, manipuleert data en zet het resultaat op de leds. Door een getal op te tellen kan elke willekeurige ledcombinatie bij de schakelstand worden gekozen. Er wordt hier gebruik gemaakt van AVR Studio 4.*/.DEVICE AT90CAN32.INCLUDE can32def.inc.include timlotodef.inc ; definitie poorten in aparte file ; eigen initialisaties /* HOOFDPROGRAMMA */ 1. BEGIN: IN R16,PINC ; lees schakelstand in 2. ANDI R16,0x01 ; selecteer schakelaar S0, AND R16 met 0x01 3. CPI R16,0x00 ; vergelijk met 00, niet nodig, wel duidelijk 4. BRNE LEDAAN ; antwoord ongelijk 0, dan naar LEDAAN ; anders: 5. LDI R18,0x00 ; zet leds uit 6. OUT PORTA,R18 7. RJMP BEGIN ; spring naar adres met label BEGIN 8. LEDAAN: LDI R19,0x01 ; zet een 1 in register 19 9. ADD R16,R19 ; tel 1 op bij de schakelstand 10. OUT PORTA,R16 ; schakelstand op poort A 11. RJMP BEGIN ; spring naar adres met label BEGIN /*Vragen en opdrachten 1. Controleer de werking van het programma. 2. Zet nu met schakelaar 0 de led 1, 3 en 5 aan. 3. Selecteer nu schakelaar 2 die led 5 aan- en uitzet. 4. Selecteer schakelaar 3 die led 5 en 6 aan- en uitzet. Voorbeeld en hulp: 0000 0001 ; geselecteerde binaire schakelstand xxxx xxxx ; zoek uit welk getal moet worden opgeteld + 1100 0000 ; om de gewenste ledstand te verkrijgen*/ 10

Toelichting programma 4 Het programma controleert de stand van één schakelaar (S0). In de nulstand gebeurt er niets en in de andere stand lichten er leds naar keuze op. In regel 1 worden alle schakelaar door de IN R16,PINC instructie ingelezen. Stel dat alle schakelaars tegen de plus staan dan zit na afloop van de instructie 1111 1111 in het R16-register. Nu willen we in dit programma alleen schakelaar 0 gebruiken. De stand van de andere schakelaars is niet van belang. We halen de stand van de niet gewenste schakelaars eruit met een ANDI 0x01 instructie (regel 2). Bijv. er zit 1111 1111 in R16 na de IN PINC instructie. Nu ennen we met 0000 0001 binair. Het resultaat hiervan zal zijn dat er 0000 0001 in het R16-register zit. Uitgewerkt: 1111 1111 ; voorbeeld stand schakelaars 0000 0001 ; getal waarmee ge and wordt ; ANDI bewerking 0000 0001 ; resultaat van de ANDI operatie Als we deze ANDI-operatie bekijken dan valt op dat, wat we ook doen met de stand van de schakelaars, er na afloop van de ANDI-instructie in het R16-register alleen maar 0000 0000 of 0000 0001 zit. De schakelaars 1 t/m 7 zijn gemaskeerd en doen niet meer mee. De stand van S0 wordt echter doorgegeven. In regel 3 wordt de inhoud van het R16-register, waar alleen maar 0000 0001 of 0000 0000 in kan zitten op 0000 0000 gecontroleerd. Dit gebeurt met de compare (vergelijk) instructie: CPI R16,0x00. De hierop volgende instructie (regel 4) reageert hierop. Als er geen nullen in R16 zitten dan wordt er naar het programmadeel LEDAAN gesprongen. BRNE betekent: BRanch Not Equal zero. Vrij vertaald: Spring naar LEDAAN als het antwoord van de compare instruktie ongelijk nul is. Later zullen we zien dat de CPI-instructie eigenlijk niet nodig is. Is het R16-register echter gevuld met binaire nullen dan gaat het programma gewoon door en worden de leds uitgezet door regel 5 en 6 waarna het programma naar BEGIN springt en opnieuw de schakelstand controleert. Als schakelaar S0 echter een logische 1 produceert dan sprint het programma naar LEDAAN en kan er een getal naar keuze (regel 8 en 9) bij R16 worden opgeteld. Het getal naar keuze zetten we in R19 (had ook R17 of R18 mogen zijn). Afhankelijk van het keuzegetal kunnen we nu leds naar keuze doen oplichten. Wanneer programma s ingewikkelder worden kan een stroomdiagram (flowchart) het programmaverloop verduidelijken. Zie hiervoor fig. 2. Voer nu de vragen en opdrachten van programma 4 uit waarna we met programma 5 verder gaan. 11

lees schakelstand in selecteer schakelaars nee S0 = 0? leds uit ja bereken led getal tel op bij schakelstand resultaat op leds Figuur 2: Flowchart van programma 4. Een beslissingsblok wordt voorgesteld door een ruit. 12

6 PROGRAMMA 5 /*Programma naam: PROGRAM5.ASM Programma voor de AT90CAN32 Elektor-Timloto print. Poort A output, poort C input. Het programma leest de eerste 4 schakelaars in en zet de bijbehorende waarde vauit de geheugentabel op de leds. Er wordt hier gebruik gemaakt van AVR Studio 4. Programma en data in het Flash geheugen Denk aan de juiste stand van de schakelaars!!! */.DEVICE AT90CAN32.INCLUDE can32def.inc.include timlotodef.inc ; definitie poorten in aparte file ; eigen initialisaties 1.BEGIN:IN R16,PINC ;lees schakelstand in 2. LDI R17,0b00001111 3. AND R16,R17 ; gebruik eerste vier schakelaars 4. LDI ZH,high(TABEL<< 1) ;maak de adrespointer 5. LDI ZL,low (TABEL<< 1) 6. ADD ZL,R16 ;tel stand schakelaars op bij de pointer 7. LPM R19,Z ;voor program memory, inhoud van adres in R19 ;LPM = Load Program Memory 8. OUT PORTA,R19 ;schakelstand op poort A 9. RJMP BEGIN ;spring naar adres met label BEGIN /* De data in program memory */ 10..ORG 0x0100 ; begin bij adres 0x0100*/ 11. TABEL:.DB 0b10101010,0b01010101,0b10110011,0b10110000.DB 0b00011000,0b11010101,0b11001111,0b11110000.DB 0b00101010,0b01010001,0b10000011,0b10110110.DB 0b01011001,0b01000111,0b11101111,0b01011100 ;aantal moet even zijn /* Vragen en opgaven 1. Assembleer en download het programma en controleer de werking 2. Vul de bij de stand van de schakelaars oplichtende leds in. Gebruik de tabel en maak de tabel af. Controleer de oplichtende leds met de opzoektabel 13

van het programma. schakelstand oplichtende leds XXXX0000... XXXX0001... XXXX0010... XXXX0011... XXXX0100... XXXX0101... XXXX0110... XXXX0111... XXXX1000... XXXX1001... XXXX1010... XXXX1011... XXXX1100... XXXX1101... XXXX1110... XXXX1111... 3. Verander nu het programma zodanig dat de leds volgens de tabel oplichten. Controleer of na het assembleren en downloaden het programma ook volgens de tabel werkt schakelstand oplichtende leds XXXX0000 01010101 XXXX0001 11111111 XXXX0010 10011010 XXXX0011 00000000 XXXX0100 00110011 XXXX0101 11110000 XXXX0110 00001111 XXXX0111 10011001 XXXX1000 00110011 XXXX1001 11101110 XXXX1010 01100001 XXXX1011 01110111 XXXX1100 10001100 XXXX1101 11100001 XXXX1110 10000001 14

XXXX1111 11101110 4. Hoe groot zou de opzoektabel worden wanneer we alle schakelaars willen gebruiken? 5. Het programma simuleert een (autotechnisch) kenveld. Leg dit uit. 6. Verander naar eigen inzicht de opzoektabel en controleer vervolgens de werking. 7. Met vier schakelaars kunnen we van 0 naar 15 tellen door ze achtereenvolgens in de juiste stand te zetten. Dit is gedaan in kolom 1 en 2. tel schakelstand toerental 0 0000 0 1 0001 300 2 0010 600 3 0011 900 4 0100 1200 5 0101 1500 6 0110 1800 7 0111 2100 8 1000 2400 9 1001 2700 10 1010 3000 11 1011 3300 12 1100 3600 13 1101 3900 14 1110 4200 15 1111 4500 Stel dat elke stand een motortoerental voorstelt. Dit is ingevuld in de 3e kolom van de tabel. Nu willen we dat bij een oplopend motortoerental de ontsteking steeds vroeger komt. Bij een laag toerental moet het meest rechtse ledje oplichten en bij een hoger toerental moet de oplichtende led naar links verschuiven. toerental led stand...... Voorbeeld: 900 t/min 0000 0001 1200 t/min 0000 0010...... 4200 t/min 0100 0000 Maak nu zelf een ontstekingskenveld en controleer of bij het juiste toerental ook het door jou gekozen ontstekingstijd komt. 15

8. In de bijlagen (laatste hoofdstuk) bevindt zich het project 7segmentsdisplay. Lees dit project door en vul de bijbehorende tabel in. 9. Een 7-segments display kan nu op de flat cable van de AT90CAN32 worden aangesloten om te controleren of de tabel van de vorige vraag goed werkt. PROGRAM6.asm geeft de software maar de tabel is nog niet geheel correct. Verbeter de tabel en controleer het geheel door het progarmma te downloaden.*/ 6.0.6 Toelichting programma 5 We hebben weer regelnummers ingevoegd. Het programma leest de stand van de eerste vier schakelaars in en zoekt in een (opzoek)tabel op bij welke schakelstand, welke leds moeten oplichten. De inhoud van de tabel is hier volkomen willekeurig. We bekijken hier het principe van een kenveld. Wanneer we de inhoud van de opzoektabel zien als de ontstekingstijdstippen en de stand van de schakelaars als een binaire weergave van het motortoerental dan hebben we een kenveld-ontstekingsverstelling gemaakt. We concentreren ons op de opzoektabel. De opzoektabel begint bij adres 100h, hetgeen in het programma aangegeven wordt door ORG 0x0100. De inhoud van de opzoektabel wordt binair weergegeven. DB (Define Byte) voor de tabel betekent dat de assembler alleen maar de adressen hoeft te vullen met de aangegeven getallen en dat de getallen geen instructies voorstellen. In regel 1 t/m 3 worden de eerste 4 schakelaars geselecteerd. We ennen nu door het AND-getal eerst in R17 te zetten. Vervolgens zetten we in het grote 16 bits Z-register het eerste adres van de opzoektabel (regel 4 en 5) en tellen daar vervolgens de stand van de schakelaars bij op (regel 6). Er ontstaat dan een nieuw adres. Nu wordt met de LPM-instructie de inhoud van het adres dat door de schakelaars wordt gevormd in R19 gezet en vervolgens via poort A naar buiten gestuurd (regel 7 en 8). Probeer de werking van het programma uit door het programma op de bekende wijze de assembleren en te downloaden. Maak dan de vragen en opgaven. Hier volgt nog programma 6 voor de 7-segment display: /*Programma naam: PROGRAM6.ASM Programma voor de AT90CAN32 Elektor-Timloto print. Poort F en A output, poort C input. Denk om het ontkoppelen van de potmeter (JP1)! Het programma leest de schakelaars in en zet het binaire resultaat decimaal op de 7-segments display. Dit programma is het antwoord. Er wordt hier gebruik gemaakt van AVR Studio 4. */.DEVICE AT90CAN32.INCLUDE can32def.inc.include timlotodef.inc ; definitie poorten in aparte file ; eigen initialisaties 16

/*initialisatie poortf */ LDI R16,0xFF OUT DDRF,R16 ;all pins of portf on output ;DDRA=Data-Directie-register /* HOOFDPROGRAMMA */ BEGIN: IN R16,PINC LDI R17,0b00001111 AND R16,R17 OUT PORTA,R16 ;lees schakelstand in ;gebruik eerste vier schakelaars ;stand schakelaars op leds LDI ZH,high(TABEL<< 1) ;maak de adrespointer LDI ZL,low (TABEL<< 1) ADD ZL,R16 LPM R19,Z OUT PORTF,R19 RJMP BEGIN ;tel stand schakelaars op bij de pointer ;voor program memory, inhoud van adres in R19 ;schakelstand op poort F, 7segment display op poortf ;spring naar adres met label BEGIN /* De data in program memory */.ORG 0x0100 ; begin bij adres 0x0100 /*tabel nog niet geheel correct ingevuld*/ TABEL:.DB 0b11100111,0b00100010,0b10110101,0b10110011.DB 0b01110010,0b11010011,0b11100111,0b00110100.DB 0b11110111,0b11110110,0b11110101,0b11000111.DB 0b01100011,0b10010111,0b11100011,0b11100001 ;aantal moet even zijn /* Vragen en opgaven Denk aan het loskoppelen van de potmeter op de print! 1. Maak zelf de opzoektabel af en vraag de 7-segment print aan de docent. 2. Probeer het geheel uit */ We gaan verder met programma 7 waarin we kennis maken met een subroutine. 7 PROGRAMMA 7 /*Programma naam: PROGRAM7.ASM Programma voor de AT90CAN32 Elektor-Timloto print. 17

Poort A output, poort C input. Schakelaar S0 maakt van LED0 een knipperled Er wordt hier gebruik gemaakt van AVR Studio 4. Programma en data in het Flash geheugen*/.device AT90CAN32.INCLUDE can32def.inc.include timlotodef.inc ; definitie poorten in aparte file ; eigen initialisaties /*HOOFDPROGRAMMA*/ 1. BEGIN: LDI R16,0x00 2. OUT PORTA,R16 ;zet leds uit 3. RCALL WACHT1 ;spring naar WACHT1 4. START: IN R16,PINC ;lees schakelstand in 5. ANDI R16,0b00000001 ;gebruik eerste schakelaar 6. BREQ START 7. LDI R16,0x01 8. OUT PORTA,R16 ;zet led 0 aan 9. RCALL WACHT1 10. RJMP BEGIN /*SUBROUTINE WACHT*/ 11.WACHT1: LDI R20,0x0F ;0x0F (01 voor debugger) 12.WACHT: LDI R18,0xFF ;0xFF (01 voor debugger) 13.WEER: LDI R19,0xFF ;0xFF (01 voor debugger) 14.LUS: SUBI R19,0x01 15. BRNE LUS 16. SUBI R18,0x01 17. BRNE WEER 18. SUBI R20,0x01 19. BRNE WACHT 20. RET ; keer terug naar het hoofdprogramma /*Vragen en opgaven: 18

1. Assembleer en download het programma en controleer of het werkt. 2. Verander het programma zodanig dat de led sneller gaat knipperen. 3. Verander het programma zodanig dat de led langzamer gaat knipperen. 4. Verwijder nu eens de instructie LDI R16,0x01. Assembleer en download het programma. Werkt het programma nog goed? Zo ja, hoe kan dit dan? 5. Herstel het programma en verander het programma zodanig dat schakelaar S7 led7 doet knipperen. 6. Verander het programma zodanig dat S0 twee leds laat knipperen.*/ We hebben weer regelnummers toegevoegd. Het programma leest in regel 4 de schakelaars in, selecteert schakelaar 0 in regel 5 en afhankelijk van de schakelstand zal led0 al dan niet gaan knipperen. Het knipperen wordt verkregen door een 1 resp. een 0 naar bit0 van poort A te sturen. Omdat de knipperfrequentie duidelijk waarneembaar moet zijn wordt er gewacht tussen het aan en uit zetten van led0. Er zitten een aantal nieuwe elementen in het programma. De eerste twee regels zetten alle leds van de A-poort uit. Om het knippereffect te krijgen zal er gewacht worden voordat we led0 aanzetten. We hebben hiervoor een apart programmadeel gemaakt dat we de naam WACHT1 hebben gegeven. We springen met regel 3 RCALL WACHT1 (Relative Call to Subroutine) er naar toe. Regel 11 t/m 20 laat het aparte programmadeel zien. Zo n programma dat steeds weer door een hoofdprogramma kan worden opgeroepen, noemt men een subroutine. De RCALL-instructie (Call to Subroutine) in regel 3 en 9 zorgt ervoor dat er naar de subroutine wordt gesprongen. Het hoofdprogramma wordt dan tijdelijk verlaten, de wachtlus wordt uitgevoerd en de RET instructie op regel 20 (Return from Subroutine) zorgt ervoor dat er naar het hoofdprogramma wordt teruggekeerd. Het wachten zelf gebeurt door een herhaalde aftrekking. De R18,19 en 20 registers worden met FFh resp. 0F geladen (regel 11 t/m 13) en vervolgens wordt daar steeds 1 van afgetrokken (regel 14,16,18) totdat er 00h in de registers zit. Omdat een microprocessor erg snel telt moet er erg lang worden geteld voordat een redelijke vertraging wordt bereikt. Een standaard register kan maximaal met FFh 0f 255 decimaal worden geladen hetgeen voor een redelijke vertraging beslist onvoldoende is. Er wordt dan ook een programmeertruc uitgehaald nl. door het register weer te vullen op het moment dat het register op nul is gekomen. De flowchart van fig. 3 maak dit wachtproces duidelijk. Het hoofdprogramma controleert de stand van één schakelaar (S0). In de nulstand gebeurt er niets en in de andere stand gaat de led knipperen. Het knipperen gaat net zo lang door totdat S0 weer op de nulstand wordt gezet. Staat de schakelaar tegen de min, dan zorgt de BREQ instructie op regel 6 ervoor dat er naar START wordt gesprongen en dat het programma in een lus terechtkomt die net zolang duurt totdat de schakelaar verzet wordt. 19

WACHT 0Fh in R20 FFh in R18 FFh in R19 R19 = R19 1 nee R19 = 0? ja R18 = R18 1 nee R18 = 0? ja R20 = R20 1 nee R20 = 0? ja return hoofdprogramma Figuur 3: Flowchart van de wachtlus in programma 7. Er wordt geteld tot 255 x 255 x 15 = 975375 (bijna een miljoen). 20

7.0.7 De program-counter en het stack-gegeugen Een microprocessor voert op het ritme van de processor-klok de instructies na elkaar uit. Een telregister met de naam program counter houdt dat intern allemaal bij. Wanneer de processor de instructie RCALL tegenkomt dan wordt deze program counter met het eerste adres van de subroutine gevuld waarna de processor naar de subroutine springt. Maar hoe weet de processor nu naar welk adres teruggekeerd moet worden wanneer de RET-instructie wordt bereikt? Wel, tegelijk met de RCALL-instructie wordt ook het terugkeeradres opgeslagen. Dit gebeurt in een apart stukje geheugen dat door de programmeur toegewezen wordt. Dit stukje geheugen wordt de STACK genoemd. Het terugkeeradres wordt dus op de stack geplaatst. De RET-instructie laadt dan het terugkeeradres in de program counter op het moment dat de subroutine verlaten wordt en het hoofdprogramma moet worden vervolgd. De initialisatie van de stack staat in de timlotodef.inc file. De opgaven van programma 7 kunnen nu worden uitgevoerd. Het volgende programma, programma 8 laat de schakelaar kiezen tussen een knipperende led0 of 7. Er ontstaat dan en clignoteurautomaat. De wachtlus is uitgebreid en wel zodanig dat de wachttijd ook verlengd kan worden. De schakelaar kent nu geen nulstand maar kiest tussen links en rechts. Assembleer en download het programma en controleer de werking. Beantwoord vervolgens de vragen. Hier volgt het programma en ga dan door met programma 9. 8 PROGRAMMA 8 /*Programma naam: PROGRAM8.ASM Programma voor de AT90CAN32 Elektor-Timloto print. Poort A output, poort C input. Het programma geeft het principe van een clignoteurautomaat weer. Schakelaar S0 kiest (knipper)led0 of 7. Er wordt hier gebruik gemaakt van AVR Studio 4. Programma en data in het Flash geheugen */.DEVICE AT90CAN32.INCLUDE can32def.inc.include timlotodef.inc /*HOOFDPROGRAMMA*/ ; definitie poorten in aparte file ; eigen initialisaties BEGIN: LDI R16,0x00 OUT PORTA,R16 RCALL WACHT1 ;zet leds uit START: IN R16,PINC ;lees schakelstand in 21

LDI R17,0x01 AND R16,R17 ;gebruik eerste schakelaar BREQ KNIPL LDI R16,0x01 OUT PORTA,R16 ;zet led aan KNIPL: RCALL WACHT1 RJMP BEGIN LDI R16,0x80 OUT PORTA,R16 RCALL WACHT1 RJMP BEGIN /*SUBROUTINE WACHT*/ ;zet led links aan WACHT1: LDI R20,0x0F ;0x0F (01 voor debugger) WACHT: LDI R18,0xFF ;0xFF (01 voor debugger) WEER: LDI R19,0xFF ;0xFF (01 voor debugger) LUS: SUBI R19,0x01 BRNE LUS SUBI R18,0x01 BRNE WEER SUBI R20,0x01 BRNE WACHT RET ; keer terug naar het hoofdprogramma /* Vragen en opgaven 1. Assembleer en download het programma en controleer of het werkt. 2. Laat de leds wat langzamer knipperen. 3. Simuleer de clignoteurlichten voor en achter door twee extra leds er bij te betrekken. 4. Betrek een 2e schakelaar bij het programma en wel zo dat de leds nu ook kunnen worden uitgezet. 5. Betrek een 3e schakelaar bij het programma waardoor de leds links en rechts gaan knipperen (alarmlichten). Let op: alarmlichten hebben prioriteit en moeten altijd kunnen worden aangezet. 6. Maak een stroomdiagram (flowchart) van het programma.*/ 22

9 PROGRAMMA 9 /*Programma naam: PROGRAM9.ASM Programma voor de AT90CAN32 Elektor-Timloto print. Leds van poort A output vormen een looplicht (scanner). Er wordt hier gebruik gemaakt van AVR Studio 4. Programma en data in het Flash geheugen*/.device AT90CAN32.INCLUDE can32def.inc.include timlotodef.inc /*HOOFDPROGRAMMA*/ LDI R16,0x01 OUT PORTA,R16 RCALL WACHT ; definitie poorten in aparte file ; eigen initialisaties ;led0 licht op NOG: LDI R17,0x08 ;telregister R17 op 8 AGAIN: DEC R17 ;R17=R17-1 BREQ TERUG ;indien 0 naar TERUG LSL R16 ;schuif naar links OUT PORTA,R16 ;inhoud R16 op leds RCALL WACHT RJMP AGAIN ;herhaal totdat R17=0 TERUG: LDI R17,0x08 ;telregister R17 op 8 STEEDS: DEC R17 ;R17=R17-1 BREQ NOG ;Indien 0 naar NOG LSR R16 ;schuif naar rechts OUT PORTA,R16 ;inhoud R16 op leds RCALL WACHT RJMP STEEDS ;herhaal totdat R17=0 /*SUBROUTINE WACHT*/ WACHT: LDI R18,0xFF ;0xFF (01 voor debugger) WEER: LDI R19,0xFF ;0xFF (01 voor debugger) LUS: SUBI R19,0x01 BRNE LUS SUBI R18,0x01 BRNE WEER RET 23

/* Vragen en opgaven 1. Bestudeer het programma, probeer het uit en verklaar de werking. 2. Vertraag het programma zodanig dat de werking (het schuiven) goed zichtbaar wordt. 3. Versnel het programma zodanig dat het lopen van de leds nog net met het oog zichtbaar is. 4. Breid het programma uit met een schakelaar waardoor naar keuze een langzaam en een snel scaneffect kan worden verkregen. */ 9.0.8 Toelichting programma 9 Het programma demonstreert een looplicht. Het bevat een tweetal nieuwe instructies. Deze instructies LSL en LSR schuiven de bits naar links en naar rechts. We vervolgen met programma 10. 10 PROGRAMMA 10 Programma 10 demonsteert hoe toerentallen door de computer worden ingelezen. We gebruiken hiervoor een functiegenerator die een 5 V puls op TTLniveau genereert. Toerentallen worden bepaald door de periodetijd of een gedeelte hiervan te meten. De tijd wordt vastgesteld door de controller te laten tellen gedurende de tijd dat de puls (bijv.) hoog is. Het resultaat wordt dan niet in seconden uitgedrukt maar in een tijdseenheid die van de kloksnelheid afhankelijk is. Men spreekt over het aantal counts. De aansluiting en het signaal van de functiegenerator worden in fig. 4 weergegeven. Het aantal tellen bepaalt de tijd dat het signaal hoog is. We bestuderen programma 10. Er zijn regelnummers toegevoegd. periode 34 polige connector PF7 GND 2 34 1 K6 AT90CAN32 33 hoog laag functiegenerator Figuur 4: De blokpuls van de functiegenerator en de aansluiting van de functiegenerator op de 34-polige connector. 24

/*Programma naam: PROGRAM10.ASM Programma voor de AT90CAN32 Elektor-Timloto print. Het programma demonstreert op welke wijze het toerental door een computer wordt vastgesteld. De TTL-output van een functiegenerator wordt aangesloten op de PF-poort bit7 en de min of op pin 32 en 34 van de 34-polige connector. De leds op poort A geven de periodetijd (aantal counts) weer ongeveer tussen de 10-30 Hz. Er wordt hier gebruik gemaakt van AVR Studio 4. Programma en data in het Flash geheugen.*/.device AT90CAN32.INCLUDE can32def.inc.include timlotodef.inc ; definitie poorten in aparte file ; eigen initialisaties /*HOOFDPROGRAMMA*/ /*init PORTF*/ 1. LDI R16,0xFF ;activeer de pull-up weerstanden 2. OUT PORTF,R16 ;door enen te schrijven naar de inputpoort 3. LDI R17,0x00 ;zet alle pinnen van poort F op input 4. OUT DDRF,R17 ;niet strikt noodzakelijk (default waarde) 5. NOP /*HOOFDPROGRAMMA*/ 6. LDI R18,0x00 ;R18 telregister op 0 (niet echt nodig) 7. BEGIN: IN R16,PINF ;lees puls in 8. LDI R17,0b10000000 ;selecteer PF7 9. AND R16,R17 10. BREQ BEGIN ;wacht todat puls hoog wordt 11. TEL: INC R18 ;R18=R18+1 12. RCALL WACHT 13. IN R16,PINF ;lees puls in 14. AND R16,R17 15. BRNE TEL 16. OUT PORTA,R18 ;aantal counts op led 17. LDI R18,0x00 ;teltegister weer op nul 18. RJMP BEGIN 25

/*SUBROUTINE WACHT ; stelt het telbereik in*/ 19. WACHT:LDI R19,0xB0 ;0xB0, 0x01 voor debugger 20. LUS: DEC R19 21. BRNE LUS 22. RET /* Vragen en opgaven 1. Bestudeer het programma en verklaar de werking. 2. Sluit de functiegenerator aan en stel deze in op ongeveer 15Hz,TTL-puls. Assembleer en download het programma en controleer de werking door het toerental van de functiegenerator te variëren tussen de 15 en 35 Hz. Noteer de uitlezing (stand van de leds) in de tabel. frequentie bin.stand leds hex.weergave decimale weergave 15......... 20......... 25......... 30......... 35......... 3. Bij toename van de frequentie wordt de uitlezing lager. Verklaar dit. 4. Geef eens aan op welke wijze dit in het programma verandert zou kunnen worden. Maak gebruik van de formule: frequentie = 1/T 5. Geef in een eigen grafiek het verband weer tussen frequentie en de decimale weergave (het aantal counts) Hulp: Bereken de frequentie door: frequentie = 5000 / aantal counts.*/ 10.0.9 Toelichting programma 10 Voor de werking van het programma maken we weer gebruik van een flowchart of stroomdiagram (fig. 5). Controleer dit stroomdiagram aan de hand van de programma-beschrijving. We hebben weer regelnummers toegevoegd. Regel 1 t/m 5 zetten poort F op input. Deze programmaregels behoren nog tot de initialisatie van het programma en zijn voor ons niet interessant. In regel 6 wordt R18 als telregister gebruikt. In dit register wordt de telstand bijgehouden. We zetten dit register bij aanvang op 00h. Regels 7 t/m 10 van het hoofdprogramma zorgen ervoor dat de puls bekeken wordt en dat er wordt gewacht totdat de puls hoog wordt. Wordt er 0 ingelezen dan wordt er naar BEGIN teruggesprongen. Wordt een 1 ingelezen dan gaat het programma verder. In regel 11 is geconstateerd dat de puls hoog is en kan er met het tellen worden begonnen. INC R18 betekent dat de inhoud van het R18 register met 1 wordt verhoogd. Nu moet de telsnelheid worden ingesteld. We kunnen immers maar 26

initialisatie controller lees puls in ja puls laag? nee verhoog telregister wacht even lees puls in ja puls hoog? nee counts op leds Figuur 5: Het stroomdiagram van het programma 10 tellen tot 255. Hierna is het register vol en ontstaat er een overflow. Dit doen we met behulp van een wachtlus. Het programma springt dan ook met regel 12 naar de wachtlus WACHT. Er moet net zo lang worden doorgeteld totdat de puls weer laag wordt. Regel 13 t/m 15 controleren of de puls nog steeds hoog is. Is de puls nog steeds hoog dan wordt er naar TEL teruggesprongen (regel 15) waarna het R18-register weer met 1 wordt verhoogd. Op het moment dat de TEL-lus (regel 11 t/m 15) detecteert dat de inhoud van het R18-register 0 is, dan is de hoog tijd van het signaal voorbij en kan de inhoud van het telregister op de leds worden gezet (regel 16). Vervolgens moet het telregister op 0 worden gezet (regel 17) en kan weer worden gewacht totdat de lage puls weer hoog wordt. Dit gebeurt door terug te springen naar BEGIN in regel 18. Maak nu de vragen en voer de opdrachten uit die bij dit programma behoren. In het volgende hoofdstuk maken we kennis met de meer bijzondere programma s 27