Voorwoord...I. Inhoudsopgave... II. Gebruikte symbolen en afkortingen...v. Lijst van figuren...vi. Lijst van tabellen...vii

Maat: px
Weergave met pagina beginnen:

Download "Voorwoord...I. Inhoudsopgave... II. Gebruikte symbolen en afkortingen...v. Lijst van figuren...vi. Lijst van tabellen...vii"

Transcriptie

1 Voorwoord Gedurende het afstudeerjaar kiezen alle laatstejaarsstudenten een eindwerk. Doorheen het jaar is de donderdag voorzien om dit eindwerk tot een goed einde te brengen. In januari is er tevens een week voorzien om hieraan te werken. Dit technisch rapport moet een duidelijke en volledige uitleg geven over de verschillende aspecten van dit eindwerk. Deze verhandeling wordt tevens naar voor gebracht waarbij een jury de inhoud beoordeelt. Een eindwerk tot een goed einde brengen is niet vanzelfsprekend, zeker niet zonder de hulp van een aantal mensen. Ik zou graag iedereen bedanken die me theoretisch, praktisch of moreel gesteund heeft om te slagen in dit project. Dit zijn in de eerste plaats mijn mentoren: Dhr. Windels Marc en Dhr. Samyn Benjamin. Zonder hen was er van dit eindwerk geen sprake. De interesse die ze toonden doorheen dit eindwerk was een drijfveer tot slagen. Op de steun van de docenten en assistenten van de afdeling elektronica kon ik ook steeds rekenen. Een speciaal dankwoord aan Dhr. Vantomme Wim en Dhr. Vanhoutte Xavier. Deze twee mensen waren steeds bereid mij te helpen wanneer ik het wat moeilijker had met praktische zaken. Ten slotte wil ik ook nog mijn ouders, klasmakkers en vrienden bedanken, die een grote steun waren doorheen dit project en mijn studies in het algemeen. Dubrul Stijn, 30 mei 2007 I.

2 Inhoudsopgave Voorwoord...I Inhoudsopgave... II Gebruikte symbolen en afkortingen...v Lijst van figuren...vi Lijst van tabellen...vii Lijst van formules... VIII Lijst van programmacodes... VIII Inleiding...IX 1 Opdrachtomschrijving Onderzoek EasyPIC Vermogentoepassing De PICmicro Wat is een microcontroller? Microchip Technology en andere fabrikanten Types & naamgeving Inwendige opbouw Architectuur Datageheugen: SFR & GPR Modules en I/O Speciale functies Minimale randcomponenten Het programmeerproces Assembleerprogramma Development bord EasyPIC Beschrijving Mogelijkheden EasyPIC Mogelijkheden 16F877A II.

3 4 Software EasyPIC Gevolgde strategie Digitale I/O Doel Instellen en lezen/schrijven van een pin Wachtroutines De 7-segment displays Externe interrupt op pin RB LCD Doel Werking Routines Voorbeeldprogramma s RS Doel De module Lezen en versturen Voorbeeldprogramma Een volledige zin versturen via een macro A/D-conversie Doel Werking Voorbeeldprogramma Voorbeeldprogramma via interrupt Timers Doel Vergelijking De WDT Timer Timer Timer PWM Doel Werking PWM met vaste duty-cycle PWM met variabele duty-cycle Data EEPROM Doel Routines Voorbeeldprogramma Reset-condities Doel Werkwijze Voorbeeldprogramma Opmerkingen Ervaringen met EasyPIC III.

4 5 Vermogentoepassing Keuze van de toepassing Enhanced PWM Hardware Elektrisch schema Opbouw De voeding De sturing De H-brug Printontwerp (PCB) Stuklijst Software Testprogramma halve brug Meetresultaten halve brug Gemoduleerde sinusgolf Implementatie in het programma Hoofdprogramma H-brug Meetresultaten H-brug Algemeen besluit Literatuurlijst Bijlagen IV.

5 Gebruikte symbolen en afkortingen µc MicroController ADC Analoog Digitaal Converter ASCII American Standard Code for Information Interchange BOR Brown-Out Reset CCP capture, compare & PWM CPU Central Processing Unit DIP Dual Inline Package DSC Digital Signal Controller EEPROM Electrical Erasable Programmable Read Only Memory FET Field Effect Transistor GPR General Purpose Register HSB highest significant bit I/O Input/Output IC Integrated Circuit ICD In-Circuit Debugger ICSP In-Circuit Serial Programming IDE Integrated Development Environment ISR Interrupt Service Routine LCD Liquid Crystal Display LSB least significant bit LVP Low-Voltage Programming MCLR Master clear MSSP Synchronous Serial Port OST Oscillator Start-up Timer PC Program Counter PCB Printed Circuit Board, printplaat PGD ProGram Data PGC ProGram Clock PIC microcontroller van Microchip POR Power-On Reset PSP Parallel Slave Port PWM puls width modulation PWRT PoWeR-up Timer RAM Random Acces Memory RISC Reduced Instruction Set Computer ROM Read Only Memory SFR Special Function Register TTL Transistor Transistor Logic USART Universal Synchronous/Asynchronous Receiver Transmitter WDT Watch Dog Timer V.

6 Lijst van figuren Figuur 1: een µc in DIP-behuizing... 3 Figuur 2: fabrikanten die µc's produceren... 4 Figuur 3: de Harvard-architectuur... 7 Figuur 4: blokschema van de PIC16F84A... 8 Figuur 5: geheugenmap van de 16F877A Figuur 6: pinaansluiting van de 16F877A Figuur 7: randcomponenten van een PIC Figuur 8: the Microchip design circle Figuur 9: MPLAB ICD2 programmer Figuur 10: het programmeerproces Figuur 11: het EasyPIC3 ontwikkelbord Figuur 12: EasyPIC3-driver in het Windows apparaatbeheer Figuur 13: PICflash 2 programmer Figuur 14: elektrisch schema van de onboard programmer Figuur 15: de PIC16F877A Figuur 16: flowchart wachtroutine Figuur 17: aansluitingen van de 7-segment displays Figuur 18: adresbepaling bij een computed goto Figuur 19: flowchart computed goto Figuur 20: flowchart 7-segment sturing Figuur 21: flowchart van een ISR Figuur 22: flowchart instructie naar LCD Figuur 23: flowchart data naar LCD Figuur 24: flowchart initialiseren LCD Figuur 25: tekst op het scherm van de LCD Figuur 26: elektrisch schema LCD met 8-bits databus Figuur 27: elektrisch schema LCD met 4-bits databus Figuur 28: Elektrisch schema RS Figuur 29: flowchart initialiseren RS Figuur 30: flowchart ontvangen van een char Figuur 31: flowchart versturen van een char Figuur 32: flowchart A/D-conversie Figuur 33: werking van de PWM-module Figuur 34: instellen van de PWM-module Figuur 35: opwekken van een periodiek signaal Figuur 36: Output van de EEPROM Figuur 37: geheugendump van de EEPROM Figuur 38: flowchart achterhalen oorzaak reset Figuur 39: uitvoer van het reset-programma Figuur 40: H-brug d.m.v. PWM met de PIC16F Figuur 41: voorstelling van een magische sinusgolf Figuur 42: blokschema van de enhanced PWM-module Figuur 43: forward en reverse mode Figuur 44: elektrisch schema van de voeding VI.

7 Figuur 45: elektrisch schema van de vermogenspanning Figuur 46: elektrisch schema van het stuurgedeelte Figuur 47: elektrisch schema van een halve brug Figuur 48: inwendige van de driver IR Figuur 49: foto van de vermogenprint Figuur 50: de halve brug belasten Figuur 51: oscilloscoopbeeld PWM-stuursginalen Figuur 52: oscilloscoopbeeld dode tijd Figuur 53: oscilloscoopbeeld gate-source spanningen Figuur 54: oscilloscoopbeeld drain-source spanningen Figuur 55: oscilloscoopbeeld output Figuur 56: oscilloscoopbeeld output Figuur 57: magische sinusgolf met 7 pulsen per kwadrant Figuur 58: spectrum van een magische sinusgolf Figuur 59: screenshot van de magic sinwave calculator Figuur 60: vertrekpunt programma Figuur 61: ophalen volgende duty-cycle Figuur 62: flowchart initialisatie Figuur 63: flowchart ISR Figuur 64: flowchart hoofdprogramma Figuur 65: voorstelling lookup-tables Figuur 66: oscilloscoopbeeld stuursignalen Figuur 67: oscilloscoopbeeld detail van de stuursignalen Figuur 68: oscilloscoopbeeld uitgangssignaal Figuur 69: oscilloscoopbeeld detail van het uitgangssignaal Figuur 70: oscilloscoopbeeld spectrum van het uitgangssignaal Figuur 71: RC-filter Figuur 72: oscilloscoopbeeld gefilterde uitgangsspanning Figuur 73: oscilloscoopbeeld detail gefilterde uitgangsspanning Lijst van tabellen Tabel 1: naamgeving bij PICs... 5 Tabel 2: jumper en dipswitch-instellingen op de EasyPIC Tabel 3: mogelijkheden van de PIC16F877A Tabel 4: de timer-modules Tabel 5: stuklijst vermogenprint VII.

8 Lijst van formules Formule 1: de tijdsduur van een instruction cycle Formule 2: het berekenen van de baudrate bij seriële communicatie.. 34 Formule 3: bittijd en conversietijd van de ADC Formule 4: berekenen van de tijd tot timer 0 interrupt Formule 5: berekenen van de tijd tot timer 1 interrupt Formule 6: berekenen van de tijd tot timer 2 interrupt Formule 7: formules voor PWM Formule 8: spanningsval over de stuurcondensator Formule 9: een puls in het Fourier-spectrum Formule 10: harmonischen van een puls Formule 11: stelsel van harmonischen Lijst van programmacodes Code 1: assembler template Code 2: instellen van digitale poorten Code 3: wachtroutine van 250µs Code 4: knipperlicht Code 5: computed goto routine bin2seg Code 6: interrupt-programma INT/RB Code 7: initialiseren van RS Code 8: ontvangen van een char Code 9: versturen van een char Code 10: voorbeeldprogramma loopback RS Code 11: macro om een string te versturen via RS Code 12: schema A/D met uitvoer via LED's Code 13: A/D-conversie met vaste samplefrequentie Code 14: ADC-module met interrupt: variabel looplicht Code 15: initaliseren van timer Code 16: periode update in ISR voor timer Code 17: PWM-signaal met variabele duty-cycle VIII.

9 Inleiding Ik heb gekozen voor het onderwerp Onderzoek en ontwikkeling van de Microchip PICmicro 16F-reeks. Microcontrollers hebben een breed toepassingsveld en krijgen steeds meer interne mogelijkheden en interfaces met de omgeving. Omdat ze overal aanwezig zijn, lijkt het me een boeiende en leerzame ervaring om deze eens van dichter te bekijken. Met deze gedachte heb ik besloten om dieper in te gaan op dit onderwerp. Dit is een intern eindwerk en bestaat hoofdzakelijk uit onderzoek en softwareontwikkeling voor de PICmicro van Microchip. Docent Marc Windels is van plan om de resultaten van dit eindwerk te gebruiken in de toekomstige labozittingen van het vak microcontrollers en vermogenelektronica. Hierbij wordt er geprogrammeerd in assembler. Een meer gedetailleerde opdrachtomschrijving volgt in het volgende hoofdstuk. Voor de duidelijkheid is dit rapport opgesplitst in een aantal deelaspecten die nader uitgewerkt zijn. In het eerste hoofdstuk wordt de precieze opdracht omschreven. Daarna volgt er een beknopte theoretische uiteenzetting omtrent de PICmicro. Het volgende deel vertelt wat meer omtrent het ontwikkelbord EasyPIC3, gevolgd door de ontwikkelde software voor dit bord. De vermogentoepassing wordt uitgebreid besproken in het daaropvolgende hoofdstuk. De resultaten worden geëvalueerd om zo te eindigen met de conclusies. IX.

10 1 Opdrachtomschrijving 1.1 Onderzoek EasyPIC3 In eerste instantie wordt er gewerkt met de EasyPIC3, een low-cost ontwikkelbord van de firma Mikroelektronika dat beschikbaar is in het labo. De 16F877A-microcontroller wordt hier als kern gebruikt. Alle interessante mogelijkheden van deze microcontroller worden uitvoerig onderzocht met behulp van het ontwikkelbord. In dit deel wordt er dus geen overkoepelend eindproduct ontwikkeld of iets totaal nieuws gemaakt. De bedoeling is hier dat de basismogelijkheden van de combinatie van de 16F877A en het ontwikkelbord onderzocht worden. Er wordt hier dus enkel software ontwikkeld, in de assembleertaal. De resultaten van deze opgave kunnen in volgende academiejaren als referentie of als naslagwerk gebruikt worden om verdere toepassingen te ontwikkelen. Om bepaalde routines en programmeerwijzen te verduidelijken wordt er gedocumenteerd a.d.h.v. flowcharts. De uitwerking van deze programma s is later in deze scriptie opgenomen. Concreet worden de volgende mogelijkheden bestudeerd: - digitale I/O o inlezen van drukknoppen en aansturen van LED s o aansturen van 4 gemultiplexte 7-segment displays o aansturen LCD-display d.m.v. een 4 of 8 bits databus - interrupts - A/D-conversie - seriële communicatie opzetten (RS232) - timers - pulsbreedte modulatie (PWM) - EEPROM - reset-condities Dubrul Stijn Master Elektronica-ICT 1.

11 1.2 Vermogentoepassing In het tweede deel van dit eindwerk wordt afgestapt van het ontwikkelbord en wordt er een concrete toepassing uitgewerkt voor het labo vermogenelektronica. Hier wordt er gebruik gemaakt van een andere microcontroller, namelijk de 16F690, die enkele verbeterde (enhanced) functies bevat. Vooral de enhanced capture and compare PWM-module wordt van dichtbij bekeken. Via pulsbreedte modulatie is het mogelijk om FETs gecontroleerd en precies te schakelen. Zo kun je vanuit een gelijkspanning (DC) een wisselspanning (AC) vormen, via de nodige PWM-signalen. Voor deze toepassing moet vanzelfsprekend een printplaat (PCB) ontwikkeld worden met de nodige randcomponenten. De precieze werking en opbouw van deze schakeling en de ontwikkelde software wordt later in deze scriptie besproken. In bijlage 1 is de projectfiche terug te vinden waar de opdracht en de beperkingen ervan besproken worden. Een concrete planning met mijlpalen is er ook in terug te vinden. Bijlage 2 bevat een informatieposter met een korte voorstelling van deze thesis. Een samenvatting van dit eindwerk is terug te vinden in bijlage 3. Dubrul Stijn Master Elektronica-ICT 2.

12 2 De PICmicro 2.1 Wat is een microcontroller? Een microcontroller (µc) is een informatieverwerkend systeem in 1 enkele chip dat gebruikt wordt om elektronische apparatuur te besturen. In tegenstelling tot een microprocessor die je in een PC terugvindt zijn deze chips op enkele randcomponenten na volledig op zichzelf werkend. Je vindt deze componenten terug in: magnetrons, wasmachines, telefoons en zelfs speelgoed. Een typische µc is onderaan deze pagina afgebeeld. De µc is ontworpen om toegewijde, specifieke taken uit te voeren (CPU), die hij uit zijn niet-volatiel programmageheugen (ROM) ophaalt. De nodige bewerkingen worden uitgevoerd (RAM) om zodoende gepast te reageren via een interface of via periferie (I/O). Een µc is (her)programmeerbaar, waardoor het een flexibele component is. Het zijn relatief goedkope IC s, waardoor ze wijdverspreid zijn. De meerderheid van de computersystemen die gebruikt worden vandaag zijn embedded systems. De µc valt ook onder deze categorie en is waarschijnlijk het eenvoudigste voorbeeld van een ingebed of geïntegreerd systeem. Ingebedde systemen hebben meestal minimale eisen qua geheugen en programmalengte, wat hen compact maakt. Deze systemen ondersteunen simpele, maar op het eerste zicht ongewone I/O. Een monitor, harde schijf of een printer van een PC kan niet zomaar aangesloten worden. Voorbeelden van I/O waar deze componenten wel goed mee overweg kunnen zijn: een relais, een schakelaar, een LED of zelfs een spanning. Deze systemen vindt je vanzelfsprekend terug in elektronische sturingen of regelkringen. Figuur 1: een µc in DIP-behuizing Dubrul Stijn Master Elektronica-ICT 3.

13 PIC s zijn bijzonder populair bij ontwikkelaars en hobbyisten door de volgende redenen: - lage kostprijs (enkele euro s per component) - hoge beschikbaarheid en ruim varianten aanbod - uitgebreide collectie van toepassingsnotities - lage kostprijs van de ontwikkeltools, veel software en compilers zijn gratis - gebruiksgemak omdat ze herprogrammeerbaar zijn, en dit in circuit Een PIC heeft heel wat mogelijkheden aan boord. Dit uit zich al wanneer je de datasheet van een willekeurige PIC bekijkt. Deze bedraagt een paar honderd bladzijden aan informatie. Merendeel van deze pagina s beschrijft de werking van de inwendige modules. Deze complexe en uitgebreide hardware is dan ook goed gedocumenteerd. De instructieset om deze modules aan te sturen is echter beperkt. We hebben dan ook te doen met een RISC-processor. 2.2 Microchip Technology en andere fabrikanten Er zijn heel wat fabrikanten die µcs vervaardigen. Bijna elke firma die halfgeleiders produceert, maakt ook µcs. In deze thesis worden enkel de PICs van Microchip bestudeerd. Voor de volledigheid is er hier een opsomming van de belangrijkste fabrikanten van µcs opgenomen: - Microchip Technology: de PICmicro en dspic-reeks - Intel: MCS-reeks - Ubicom: snelle PIC-klonen - Atmel: AVR en Dallas Maxim: low-power 16 bits RISC - Motorola: 68HC-reeks - Philips: Parallax: BASIC stamps Figuur 2: fabrikanten die µc's produceren Dubrul Stijn Master Elektronica-ICT 4.

14 Een hele lange tijd geleden produceerde de afdeling Microelectronics van de firma General Instruments een chip genaamd de PIC1650. Deze chip werd beschreven als een Programmable Intelligent Computer. Deze component is de moeder van alle PICmicro-chips. Zijn functionaliteit is vergelijkbaar met de huidige PIC16C54. Deze controller werd ingezet als randapparaat voor de CP1600-microprocessoren. Daarom wordt de afkorting PIC vaak ingevuld als Peripheral Interface Controller. In het jaar 1989 werd Microchip Technology opgericht door een groepering van gedurfde kapitalisten die de afdeling verworven van General Instruments. Er is echter geen informatie te vinden hoe Microchip tegenwoordig de afkorting PIC invult. Onlangs zijn ze gestart met een nieuwe benaming: PICmicro MCU, wat staat voor PICmicro Multi-Chip Unit. De benamingen PIC en PICmicro worden zowat door elkaar gebruikt en meestal weggelaten. Nog even opmerken dat Microchip op 8 november 2006 de verzending van zijn 5 miljardste PIC Microcontroller aankondigde. 2.4 Types & naamgeving De naamgeving van een PIC is gekoppeld aan het type maar is niet altijd even eenduidig of eenvoudig om te achterhalen. Er bestaan dan ook heel wat uitzonderingen. De volgende patronen zijn echter opmerkbaar: hoofdtype prefix programma geheugen type revisie temp. freq. behuizing PIC (L) (L) F C (R) (E) xxx (A) (B) - (I) (E) (04) (20) / PDIP SSOP Tabel 1: naamgeving bij PICs Voor de 8-bits MCUs wordt het hoofdtype aangeduid door de 3 letters: PIC. Er bestaan momenteel nog 2 hoofdtypes: de 16-bits MCUs (ook aangeduid als PIC) en de 16-bits DSCs (aangeduid als dspic). Deze letteraanduidingen worden echter vaak weggelaten. Dubrul Stijn Master Elektronica-ICT 5.

15 De prefix van een PIC bestaat uit 2 cijfers en heeft betrekking op het volgende: prefix 10: PICs met een 12-bits programmawoord en 6 of 8 pinnen prefix 12: 12 en 14-bits programmawoord met 8 pinnen prefix 16: 12 en 14-bits programmawoord met meer dan 8 pinnen prefix 18: 16-bits programmawoord Vervolgens wordt het type programmageheugen aangeduid: een L duidt aan dat het om een low-voltage variant gaat type F: flash, elektronisch herprogrammeerbaar type C : EPROM, slechts 1 maal programmeerbaar (OTP) of met een window type CR: in dit geval is de ROM voorgeprogrammeerd in de fabriek type CE: in dit geval is er een aparte EEPROM aanwezig in de chip Het type duidt alle varianten van de PICs aan en daarmee wordt de aanwezige inwendige hardware bedoeld. Het bestaat steeds uit 3 cijfers maar er is geen logica in terug te vinden. Na het type volgt er eventueel een letter die de revisie van de chip aanduid. Hierna volgt er eventueel een temperatuursaanduiding: I staat voor industrial en E staat voor extended. Deze kan ook gevolgd worden door een aanduiding van maximum klokfrequentie. Deze 2 aanduidingen worden enkel vermeld wanneer er van dezelfde PIC varianten zijn qua temperatuur of klokfrequentie. Als laatste volgt er informatie over het type behuizing (package). PICs komen in zowat alle types behuizingen voor. Deze structuur geldt voor het overgrote deel van de PICs maar zeker niet voor allemaal. Om maar een paar uitzonderingen op te noemen: PIC14000: dit is een mixed-signal PIC omdat het analoge functies aan boord heeft PIC16C85: heeft een EEPROM aan boord, vergelijkbaar met flash, toch staat er een C in zijn typenummer PIC16HV540: deze PIC heeft een ingebouwde spanningsregelaar de PIC17-reeks waren de voorlopers van de PIC18-reeks, ze zijn echter zonder succes uit productie gehaald Dubrul Stijn Master Elektronica-ICT 6.

16 Natuurlijk kun je alle soorten PICs op veel manieren gaan catalogeren. Hier werd geprobeerd om d.m.v. de naamgeving ze te catalogeren. Maar er zijn nog andere mogelijkheden: - grootte van het programmageheugen - grootte van de aanwezige RAM/ROM - aantal I/O-pinnen - interne mogelijkheden: ADC, timers, PWM, interne oscillator, max. klokfrequentie, - interfaces: USART, USB, CAN, ethernet, Meestal zal een combinatie van parameters uitmaken welke PIC het meest geschikt is voor een bepaalde applicatie. In deze thesis wordt met 2 types gewerkt. De 16F877A is een leuke PIC om mee te starten door het grote aantal pinaansluitingen. De 16F690 is gekozen om wat dieper in te gaan op de verbeterde mogelijkheden van de PWM-module. Eenmaal je het programmeren van 1 type PIC onder de knie hebt, is het makkelijk om over te stappen naar een ander type. 2.5 Inwendige opbouw Architectuur Alle PICs volgen de Harvard-architectuur zoals in onderstaande figuur. Dit wil zeggen dat het geheugen voor de programmacode en het geheugen voor de data gescheiden zijn. Er wordt ook geen gebruik gemaakt van pipelining, De meeste instructies zullen dus 1 klokcyclus (4 klokpulsen) duren. Er kan geen extern programmageheugen gebruikt worden bij een PIC want er is geen externe geheugenbus aanwezig. Er zijn hier echter een paar uitzonderingen op te vinden in de PIC18-reeks. Figuur 3: de Harvard-architectuur In volgende figuur is het blokdiagram van de inwendige opbouw van de PIC16F84A weergeven. Deze opbouw is voor alle PICs gelijkaardig maar soms nog een groot stuk uitgebreid met modules of I/O-pinnen. De belangrijkste delen zijn aangeduid met cijfers en worden verder besproken. Dubrul Stijn Master Elektronica-ICT 7.

17 Figuur 4: blokschema van de PIC16F84A Op de figuur is duidelijk zichtbaar dat programmacode (1) en datageheugen (4) gescheiden opgeslagen worden. We zien hier ook duidelijk dat de instructies 14-bits breed zijn. Het geheugen en de databussen zijn 8-bits breed. De instructies worden geselecteerd door middel van de programcounter (2). De programcounter is beïnvloedbaar door een aantal SFRs die in het datageheugen aanwezig zijn. Er is tevens een hardware stack (3) van enkele niveaus diep die vanzelfsprekend dezelfde breedte heeft als de programcounter. De stack houdt terugkeeradressen bij wanneer er gesprongen wordt naar een subroutine. De 2 belangrijkste onderdelen in dit blokdiagram zijn het W-register en de ALU (8). De data, waar bewerkingen op uitgevoerd moeten worden, wordt opgeslagen in het W-register. De bewerkingen zelf worden uitgevoerd door de ALU. Het resultaat is terug beschikbaar in het W- register. Dubrul Stijn Master Elektronica-ICT 8.

18 2.5.2 Datageheugen: SFR & GPR Het datageheugen (4) bevat 2 types registers: - Special Function Registers (SFR): Deze registers bepalen de werking van de inwendige apparatuur of geven informatie over de werking weer. De configuratie van de PIC vindt dus in deze registers plaats. - General Purpose Registers (GPR): Deze registers zijn vrije geheugenplaatsen en kunnen gebruikt worden om 8-bits variabelen op te slaan. Het datageheugen van een PIC is onderverdeeld in banken. Dit wil zeggen dat eerst de juiste bank geselecteerd moet worden vooraleer een register toegankelijk is. Deze selectiebits zijn aanwezig in het STATUS-register (6), dat over alle banken toegankelijk is. Naast deze directe methode is er ook een indirecte adresseermethode, die echter nog steeds de huidige waarde van de bankselectbit(s) gebruikt. Deze methode plaatst het adres (een pointer) van het te selecteren register in het FSR (file select register). De data is dan beschikbaar in het INDFregister (indirect file register). Merk op dat toegang tot de interne EEPROM (5) van een PIC ook via een aantal SFRs verloopt. Hier moet er dus ook indirect geadresseerd worden. De routine hiervoor is verder in deze thesis uitgewerkt. Een voorbeeld van een geheugenmap is op de volgende pagina opgenomen. Het gaat hier om de geheugenmap van de 16F877A. Deze heeft 4 geheugenbanken (0 t.e.m. 3). Bepaalde geheugenlocaties zijn niet geïmplementeerd of gereserveerd door het systeem (zwart). Sommige registers overlappen alle banken (geel). Voorbeelden van overlappingen zijn: STATUS, INTCON en het laatste deel van de GPRs. Registers kunnen overlappend zijn omdat ze steeds toegankelijk moeten zijn (zoals STATUS waar de bank gewijzigd kan worden) of omdat ze snel toegankelijk moeten zijn (zoals INTCON waar de interrupt-werking geregeld wordt). Een deel van het GPR-geheugen is ook overlappend. Deze variabelen zijn dus ook snel toegankelijk. Deze locaties zullen meestal gebruikt worden tijdens een ISR. Waarvoor elke bit uit elk register precies dient kan vanzelfsprekend teruggevonden worden in de datasheet van de PIC. Het heeft dan ook geen zin om dit over te nemen. De registers kunnen wel ingedeeld worden volgens hun functie. Veel van deze functies hebben rechtstreeks te maken met de modules die de PIC inwendig aan boord heeft. Dit is te zien op de volgende pagina. Dubrul Stijn Master Elektronica-ICT 9.

19 Figuur 5: geheugenmap van de 16F877A - algemeen: wit - I/O-poorten: rood - timer0/1/2: oranje - interrupts: lichtgroen - CCP1/2: donkerpaars - USART: donkergroen - MSSP: bruin - EEPROM: donkerblauw - ADC: lichtblauw - GPR: lichtpaars Dubrul Stijn Master Elektronica-ICT 10.

20 2.5.3 Modules en I/O Een PIC heeft altijd hardwaremodules aanwezig die eventueel verbonden zijn met bepaalde I/O-pinnen. De 16F87 heeft er maar 2: een timer (9) en een digitale I/O-port (10). Er kunnen er echter veel meer zijn. Hieronder een lijst met wat een PIC zo allemaal aan boord kan hebben: - digitale I/O-pinnen - interne klokoscillatoren - 8/16-bits timers - interne EEPROM - USART - MSSP (I²C en SPI) - PSP (Parallel Slave Port) - CCP: capture, compare en PWM - A/D-converters - USB - CAN - ethernet Deze lijst wordt in de toekomst zeker nog uitgebreid. Door het grote aantal modules die soms aanwezig zijn in één chip worden I/O-pinnen vaak gemultiplext. Tijdens de initialisatie van de PIC wordt dan daadwerkelijk bepaald wat de functie van een bepaalde pin is. Een voorbeeld daarvan zie je in de pinaansluitingen van de 16F877A in volgende figuur. Figuur 6: pinaansluiting van de 16F877A Speciale functies Een PIC heeft enkele speciale functies aan boord (7). Een groot deel ervan dient ingesteld te worden via het configuratiewoord van de PIC. Een opsomming van mogelijke speciale functies: - oscillator selectie: intern, extern, high speed of RC-kring - resetcondities: power-on (POR), brown-out (BOR), oscillator start up timer (OST) en power-up timer (PWRT). De oorzaak van een reset kan ook gedetecteerd worden. - meerdere interrupts Dubrul Stijn Master Elektronica-ICT 11.

21 - watchdog-timer (WDT): controlemechanisme die de PIC kan reseten na een bepaald tijdinterval - sleep-mode: de PIC in een energiezuinige toestand brengen - Codeprotectie - in-circuit serial programming (ICSP): De PIC programmeren terwijl hij nog aanwezig is in de schakeling - low-voltage programming (LVP): de PIC programmeren d.m.v. een lage spanning (een eenvoudigere programmer kan gebruikt worden) - in-circuit debugger: de PIC kan gedebugged worden in de schakeling. 2.6 Minimale randcomponenten De volgende figuur toont een aantal componenten rondom de PIC die noodzakelijk zijn. Figuur 7: randcomponenten van een PIC - een voeding: Zonder spanning kan een PIC vanzelfsprekend niet werken. De meeste PICs werken op 5V, sommige op 3,3V. Een ontkoppelcondensator is noodzakelijk. - een klok: meestal wordt een kristal gebruikt maar een RC-kring is ook mogelijk. Sommige PICs hebben intern een RC-kring aanwezig, deze zijn echter temperatuursafhankelijk - reset-circuit: een pull-up weerstand volstaat om de PIC te resetten bij het opkomen van de voedingsspanning. Er kan ook een schakelaar naar massa bijgeplaatst worden. - een RJ12-connector die toelaat om de PIC in zijn schakeling te programmeren is ook aangewezen. Deze aansluiting is gestandaardiseerd door Microchip en neemt slechts 5 draden in. Via de /MCLR-pin wordt de programmeerspanning aangebracht. PGD en PGC zijn respectievelijk de data en de klok. De voedingsspanning dient ook aangesloten te worden en kan eventueel geleverd worden door de programmer. Dubrul Stijn Master Elektronica-ICT 12.

22 2.7 Het programmeerproces Het programmeerproces start bij het kiezen van een programmeertaal. Er kan gekozen worden voor een high-level language zoals: C, BASIC, PASCAL of JAL. Kies je echter voor de assembleertaal sta je een stuk dichter bij de hardware. Assembler wordt dikwijls ook machinecode genoemd. Alle PICs hebben een gereduceerde instructieset (RISC). Concreet varieert het aantal instructies tussen de 35 à 70. In een korte tijdspanne zul je een uitgebreider programma met meer functionaliteit kunnen maken met een hogere programmeertaal. Een assembleerprogramma zal, indien voldoende tijd om het te programmeren, altijd sneller, kleiner in omvang zijn en efficiënter werken. De volgende stap is natuurlijk het programmeren zelf. De datasheet van de PIC met de beschrijving van de hardware en de instructieset zijn onmisbaar in deze stap. Een programma zal nooit in 1 keer van begin tot einde geschreven worden. Het is veeleer een opbouwend proces: een routine of een deel van de code schrijven, controleren, indien nodig wijzigen en implementeren in het geheel. Dit wordt mooi geïllustreerd in de design circle van Microchip. Figuur 8: the Microchip design circle Vervolgens wordt het programma gecompileerd naar machinecode waarna het gesimuleerd kan worden of geprogrammeerd in de PIC. Het volledige programmeerproces kan plaats vinden in de MPLAB IDE. Deze Integraded Development Enviroment bevat zowel: een editor, een assembler, een simulator en heel wat ondersteuning voor debuggers, emulators en programmers. Voor een handleiding omtrent MPLAB verwijs ik naar bijlage 4: Microchip MPLAB IDE user s guide. Dubrul Stijn Master Elektronica-ICT 13.

23 De laatste stap is de PIC programmeren. Deze stap wordt ook dikwijls burnen genoemd omdat de code als het ware in de PIC gebrand wordt. Hiervoor is een hardware tool nodig die we ook een programmer noemen. Er bestaan heel wat varianten op vlak van programmers en hun mogelijkheden (en kostprijs). Sommige kunnen naast programmen ook debuggen zoals de ICD2 van Microchip die hieronder afgebeeld is. Voor meer informatie omtrent deze programmer verwijs ik naar bijlage 5: MPLAB ICD2 In-Circuit Debugger User s Guide. Er zijn heel wat lowcost varianten en klonen beschikbaar maar de meeste programmers zijn voorzien om in-circuit te programmeren. Figuur 9: MPLAB ICD2 programmer Deze stappen worden mooi weergeven in de volgende figuur. Namelijk het omzetten van een assembler programma naar machinecode, om het vervolgens in de PIC te programmeren. Ik ga in deze scriptie niet in op locatieonafhankelijke code en linkers om het niet nodeloos ingewikkeld te maken. Deze mogelijkheden worden voornamelijk gebruikt bij hogere programmeertalen. Figuur 10: het programmeerproces Dubrul Stijn Master Elektronica-ICT 14.

24 2.8 Assembleerprogramma Een programma geschreven in assembler heeft zowat altijd dezelfde opbouw. Daarom gebruiken we een sjabloon om te starten aan een nieuw programma. Het volgende stuk code is de sjabloon die ook gebruikt wordt in de andere programma s in deze scriptie. Hierin komen voornamelijk directives voor en bijna geen instructies. Directives geven instructies door aan de compiler. Op de volgende pagina worden deze wat nader uitgelegd. TITLE PROCESSOR "template" 16F877A #include <p16f877a.inc> CONFIG _HS_OSC & _DEBUG_OFF & _WRT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_OFF & _WDT_OFF ;Disable message: Register in operand not in bank 0 ERRORLEVEL -302 ;RAM-variabelen CBLOCK 0x20 var1 var2 ENDC ;vectors ORG 0x0000 ;reset GOTO init ORG 0x0004 ;isr GOTO isr ;includes subroutines #include <subroutines.inc> ;initialiseren init ;start programma start GOTO start ;interrupt routine isr RETFIE ;return from interrupt END Code 1: assembler template Dubrul Stijn Master Elektronica-ICT 15.

25 1. TITLE De title van het programma. 2. PROCESSOR Deze directive geeft aan welke PIC er gebruikt wordt. 3. #include <p16f877a.inc> De include-directive zorgt ervoor dat de code aanwezig in een ander bestand hier ingevoegd wordt. Dit heeft hetzelfde effect al zou deze code echt op deze plaats staan. Op deze manier kunnen ook subroutines uit een ander bestand beschikbaar gesteld worden. 4. CONFIG Hiermee worden de configuratiebits van de PIC ingesteld. Dit is een combinatie van verschillende instellingen. Onder andere de oscillator wordt hier gekozen. 5. ERRORLEVEL -302 Dit is geen noodzakelijke directive maar heeft als doel om de berichten die de assembler genereert omtrent bankswitching te onderdrukken. Deze berichten zijn geen errors of warnings maar messages. 6. CBLOCK Door middel van CBLOCK kunnen we een naam geven aan bepaalde locaties in het RAM-geheugen. Dit gebruiken we dus om GPRs een naam te geven en gemakkelijk te kunnen gebruiken in ons programma. Dit kan ook verwezenlijkt worden d.m.v. de directive: EQU. 7. commentaar Er kan steeds commentaar in het programma gevoegd worden zolang er maar een puntkomma voor staat. 8. ORG Via ORG kan code op een bepaalde geheugenlocatie geplaatst worden. De code die volgt na deze instructie start dan op dit adres. De locaties die zeker ingevuld moeten worden, zijn de resetvector op aders 0x0000 en de resetvector op locatie 0x label Een label wordt steeds in de eerste kolom geplaatst. Deze labels kunnen dan aangeroepen worden d.m.v. een GOTO of een CALL. Instructies worden steeds in de 2 e kolom geplaatst. Operanden hoeven niet in de 3 e kolom geplaatst te worden, het zorgt echter voor een grotere leesbaarheid van de code. Labels zijn hoofdlettergevoelig. 10. END Hiermee wordt het einde van het programma aangeduid. Dubrul Stijn Master Elektronica-ICT 16.

26 3 Development bord EasyPIC3 3.1 Beschrijving Mikroelektronica is een officiële third-party partner en consultant van Microchip. Deze firma ontwikkelt o.a. low-cost ontwikkelborden en compilers voor verschillende soorten µcs. Het EasyPIC3 ontwikkelbord, zoals hieronder afgebeeld, is een bord met een groot aantal functies die speciaal ontwikkeld is om te werken met de Microchip PIC. Het is ontwikkeld om studenten en ingenieurs te laten oefenen en de mogelijkheden van PICs te bestuderen. Het laat toe om een PIC te interfacen met externe circuits. De gebruiker hoeft zich geen zorgen te maken omtrent deze externe circuits zodat deze zich kan concentreren op de ontwikkeling van de software. Dit bord wordt samen met de PIC16F877A en een kristal van 8 MHz geleverd. Het EasyPIC3 ontwikkelbord van deze firma is aangekocht door het labo elektronica. De kostprijs bedraagt ongeveer 100 wanneer het aangekocht wordt zonder extra compiler (C, PASCAL of BASIC). Ondertussen is er al een nieuwe versie van dit bord beschikbaar: de EasyPIC4. Dit is een geüpdate versie van dit bord met enkele kleine verschillen: - de onboard-programmer is nu ook een ICD - ondersteuning voor meer PICs (o.a. de 20-pins DIP wordt nu ook ondersteund) - kleine aanpassingen aan het bord zelf, voornamelijk instelmogelijkheden Figuur 11: het EasyPIC3 ontwikkelbord Dubrul Stijn Master Elektronica-ICT 17.

27 3.2 Mogelijkheden EasyPIC3 Het grote voordeel van dit ontwikkelbord (of van eender welk ontwikkelbord) is dat de volledige tijd gespendeerd kan worden aan het ontwikkelen van software. De volgende voorzieningen zijn getroffen qua hardware. De mogelijkheden die met een asterisk (*) aangeduid zijn, worden niet bestudeerd in deze thesis. - on-board USB 2.0 programmer volgens het ICSP-principe - ondersteuning voor PICs met volgende behuizingen: DIP8, 14, 18, 28 en 40 - spanning kan via de USB-poort geleverd worden of via een externe AC of DC-voeding - het kristal kan verwisseld worden - 2 potentiometers voor A/D-conversie - LEDs op alle PORT-pinnen - schakelaars op alle PORT-pinnen - alle PORT-pinnen kunnen ook extern benaderd worden - 4 gemultiplexte 7-segment displays - LCD-connector, aansturen d.m.v. 4 of 8-bits met regelbaar contrast - RS232-communicatie (TX en RX) - 1-wire temperatuurssensor DS1820(*) - GLCD (grafische LCD)(*) - USB-connector(*) - PS/2-connector voor een toetsenbord(*) Er zijn ook een aantal jumpers en DIP-switches aanwezig waarmee het volgende ingesteld kan worden: JP1 voeding via USB of extern JP13 pull-up/down PORTA & E JP2,3 selectie DIP-socket JP14 temperatuursensor: RA5 of RE2 JP4 selectie van PGM-lijn JP15 A/D-lijn aan RA2 JP5 RX: RB1, RB2 of RC7 JP16 A/D-lijn aan RA3 JP6 TX: RB2,RB5 of RC6 JP17 contrast LCD of GLCD JP7,8,9 USB aan/uit JP18 klokselectie voor DIP8 en JP10 pull-up/down PORTB JP19 DIP14 (omezijde) JP11 pull-up/down PORTC drukknoppen: actief hoog of JP20 JP12 pull-up/down PORTD actief laag SW1 SW2 pull-up/down weerstanden van PORTA en POR E aan of uit PORT LED s aan of uit + display selectielijnen aan of uit Tabel 2: jumper en dipswitch-instellingen op de EasyPIC3 De on-board programmer is een USB-apparaat en moet geïnstalleerd worden. De drivers hiervoor zijn aanwezig op de meegeleverde CD, maar kunnen ook gedownload worden op de website van MikroElektronica, Dubrul Stijn Master Elektronica-ICT 18.

28 Eenmaal het bord aangesloten is, kan er gecontroleerd worden of de correcte drivers gebruikt worden in het Windows apparaatbeheer. Onderstaande figuur toont dit. Indien dit niet het geval is, zal er een onbekend apparaat gedetecteerd worden. Figuur 12: EasyPIC3-driver in het Windows apparaatbeheer Naast een driver is er ook nog een software nodig om het gecompileerde programma naar de PIC te sturen, via de on-board programmer. Een screenshot van het programma is hieronder opgenomen. Deze software noemt PIC flash 2 programmer en is jammer genoeg niet rechtstreeks toegankelijk vanuit MPLAB. Het hexbestand moet geopend worden en dan wordt via write het programmeren gestart. Wanneer er opnieuw gecompileerd is geweest in MPLAB kan via file>reload de nieuwe versie opgehaald worden. Een andere mogelijkheid om via 1 toets te programmeren is een nieuwe snelkoppeling aan te maken met wat extra parameters. Volgende regel opent de software, leest de file C:\PIC\test.hex in en programmeert deze direct naar de PIC. "C:\...\PICFLASH2\PICFLASH2.exe" -w -f"c:\pic\test.hex" Figuur 13: PICflash 2 programmer Dubrul Stijn Master Elektronica-ICT 19.

29 Hieronder is het elektrisch schema van de on-board programmer opgenomen met zijn verbindingen naar het 40-pins socket. Zoals te verwachten loopt de PGD, de PGC en de /MCLR-lijn naar de PIC. Lowvoltage programmeren is ook mogelijk door de PGM-lijn. Opmerkelijk is echter dat de reset niet rechtstreeks aan de PIC aangesloten is maar via de programmer verbonden is. Dit is een industriële schakeling nooit het geval omdat de programmer niet aanwezig is op de print. Figuur 14: elektrisch schema van de onboard programmer Dubrul Stijn Master Elektronica-ICT 20.

30 3.3 Mogelijkheden 16F877A De 16F877A, die gebruikt wordt als kern in de hierop volgende programma s, is een uitgebreide PIC met veel mogelijkheden. Het is een handige PIC om mee te starten door het grote aantal I/O-pinnen en de grote hoeveelheid inwendig geheugen. Deze PIC voorziet dus veel vrijheid. Hieronder worden de belangrijkste mogelijkheden opgesomd. device package max. klokfrequentie werkingsspanning instructieset programmageheugen datageheugen (SRAM) EEPROM algemeen PIC16F877A 40-pin DIP 20 MHz (200 ns instuctie cycle) 2-5,5 V 35 instructies geheugen 8kb x 14-bits (8192 instructies) 368 x 8 bytes 256 x 8 bytes modules interrupt-bronnen 15 I/O-ports A,B,C,D,E = 33 pinnen timers 3 capture/compare/pwm 2 seriële communicatie MSSP & USART parallele communicatie 1 PSP A/D-module 10-bits, 8 kanaalen speciale functies ICSP & ICD-compatible ja reset-condities & timers POR, BOR, PWRT & OST watchdog timer WDT ja code protectie ja low-power sleep ja Tabel 3: mogelijkheden van de PIC16F877A De geheugenmap van deze PIC kan teruggevonden worden in punt Gedetailleerde informatie is terug te vinden in de datasheet die een 200-tal pagina s dik is en opgenomen is in bijlage 6. Een afbeelding van deze 40-pins controller is hieronder opgenomen (niet op ware grote). Figuur 15: de PIC16F877A Dubrul Stijn Master Elektronica-ICT 21.

31 4 Software EasyPIC3 4.1 Gevolgde strategie Om een bepaald probleem op te lossen heb je als eerste de datasheet van de PIC nodig waar alle informatie omtrent een bepaalde module terug te vinden is. Het schema van de EasyPIC3 is ook onmisbaar om te weten hoe alle elektrische verbindingen lopen, m.a.w. hoe alles precies aangesloten is aan de PIC. Voorbeelden van bepaalde routines zijn ook te vinden op internet. Op het forum van Microchip, en de codedatabase van Piclist, is heel wat informatie terug te vinden. De overkoepelende datasheet van de mid-range architectuur van Microchip bevat ook heel wat gedetailleerde informatie. Deze datasheet is opgenomen in bijlage 7. De volgende programma s zijn allemaal onafhankelijke problemen en staan dus ook los van elkaar. Soms kan er echter gebruik gemaakt worden van een vorige programma om bepaalde output te visualiseren. Dit zal meestal gedaan worden door gebruik te maken van RS232- output. Concreet wordt er per onderdeel aangegeven wat precies het doel is. De programmacode wordt steeds uitgelegd en waar nodig aangevuld met elektrische schema s en flowcharts. Er is gekozen om steeds met subroutines te werken en deze in aparte bestanden op te nemen, dit verhoogt de porteerbaarheid naar andere programma s. Alle programma s maken echter gebruik van het bestand registers.inc. In dit include bestand zijn alle GPR-registers (RAM-variabelen) opgenomen die gebruikt worden door de subroutines. Dit bestand voorzag dus de porteerbaarheid van routines binnen dit eindwerk. De broncode (asm) en de gecompileerde bestanden (hex) van de uitgewerkte programma s zijn steeds terug te vinden op de CD, in de map EasyPIC3, die bij dit eindwerk is bijgevoegd. Een overzicht van alle programma s en subroutines die gemaakt zijn is opgenomen in bijlage 8. Dubrul Stijn Master Elektronica-ICT 22.

32 4.2 Digitale I/O Doel - digitale I/O instellen om knoppen in te lezen en LEDs te sturen - enkele wachtroutines maken om bijvoorbeeld een knipperlicht aan te sturen - de 4 gemultiplexte 7-segment displays aansturen - een eerste programma met interrupt maken Instellen en lezen/schrijven van een pin De 16F877A heeft 5 poorten met in totaal 33 pinnen die elk afzonderlijk als input of als output ingesteld kunnen worden, indien deze pinnen niet voor een andere functie gebruikt worden. Alle pinnen bevinden zich tijdens het opstarten van de PIC in de hoog impedantie mode en zijn dus als input geschakeld. Uitzondering hierop is PORTA en PORTE: deze pinnen zijn tijdens het opstarten als analoge inputs geschakeld en moeten nog ingesteld worden als digitale I/O via het ADCON1-register. Een pin wordt als in- of output ingesteld door zijn corresponderende TRIS bit te setten (input=1) of te clearen (output=0). Het lezen of schrijven van een pin gebeurt via zijn PORT-register. Wanneer een PORT ingesteld wordt als output is zijn corresponderende uitgangswaarde steeds 0 (laag) bij initialisatie. Je kan geen waarde op voorhand opgeven doordat deze pinnen als input staan. Het stukje voorbeeldcode hieronder stelt de pinnen van PORTA in als input en de pinnen van PORTB in als output. De waarde van PORTA wordt steeds gelezen en op PORTB geplaatst. InitPortA BANKSEL ADCON1 ;PORTA en PORTE MOVLW 0x06 ;instellen als MOVWF ADCON1 ;digitale I/O BANKSEL TRISA MOVLW 0xFF MOVWF TRISA ;PORTA = input InitPortB CLRF TRISB ;PORTB = output Copy BANKSEL PORTA MOVFW PORTA ;PORTA waardes kopiëren naar W MOVWF PORTB ;W kopiëren naar PORTB GOTO Copy ;loop naar Copy Code 2: instellen van digitale poorten Dubrul Stijn Master Elektronica-ICT 23.

33 4.2.3 Wachtroutines Wachtroutines zijn noodzakelijk om de PIC even bezig te houden tussen een paar instructies in. Wanneer je bijvoorbeeld een LED wilt laten knipperen dient er gewacht te worden tussen het aan- en afleggen en tussen het af- en aanleggen van de LED zodat deze een bepaalde tijd opgelicht en een bepaalde tijd niet opgelicht blijft. Wachten doen we door de PIC instructies te laten uitvoeren. De precieze uitvoeringstijd van een instructie (1 instruction cycle) is gekend zodat we kunnen berekenen hoeveel instructies er gewacht moet worden om een tijdsperiode te overbruggen. Bijna alle instructies duren 1 instruction cyle, branches nemen er steeds 2 in. Merk op dat de tijd die een instructie inneemt rechtstreeks afhankelijk is van de snelheid van het de gebruikte klokfrequentie zoals te zien in onderstaande formule. 1 1 Tinst = 4 = 4 = 4 125ns = 500ns klokfrequentie 8MHz Formule 1: de tijdsduur van een instruction cycle Wachtroutines zijn steeds opgebouwd rond één of meerdere DECFSZinstructies. Door een register te laden met een waarde kunnen we het programma steeds laten aftellen tot dit register op 0 komt te staan. Pas dan wordt verder gegaan met de rest van het programma. Hieronder is de flowchart en routine opgenomen om 250µs (500 instruction cycles) te wachten met het kristal van 8 MHz. De DECFSZ-instructie is aangeduid d.m.v. een stippellijn. delay250us ;1x2IC ;(CALL) MOVLW D'163' ;1x1IC MOVWF d1 ;1x1IC delay250us_loop DECFSZ d1,1 ;166x1C ;(165->0) GOTO delay250us_loop ;1x2IC RETURN ;1x2IC Figuur 16: flowchart wachtroutine Code 3: wachtroutine van 250µs Dubrul Stijn Master Elektronica-ICT 24.

34 We werken op dezelfde manier verder om langer te wachten. We gebruiken een 2 e register samen met een DECFZ om deze wachtroutine een aantal keren te laten uitvoeren. In het bestand delay.inc zijn er wachtroutines uitgewerkt voor 250 µs, 1 ms, 10 ms, 50 ms en 1 sec. Onderstaand voorbeeldcode knipper.asm laat een LED knipperen aan een snelheid van ½ Hz (periode van 2 sec) door gebruik te maken van een wachtroutine. Init CLRF INTCON ;geen interrupts InitPortB BANKSEL TRISB CLRF TRISB ;PORTA = output start BANKSEL PORTB CLRF PORTB ;PORTB=O BANKSEL PORTB BSF PORTB,0 ;LED aan CALL delay1s ;wacht 1sec BCF PORTB,0 ;LED uit CALL delay1s ;wacht 1sec GOTO start Code 4: knipperlicht Opmerking: een wachtroutine houdt geen enkele rekening met eventuele interrupts die kunnen optreden. Bij het gebruik van geneste wachtroutines zal er ook altijd wel ergens wat tijd verloren gaan door CALLs of andere branches. Bij tijdskritische toepassingen zullen we dan ook eerder kiezen om met timer-modules te werken. Dubrul Stijn Master Elektronica-ICT 25.

35 4.2.4 De 7-segment displays Op het oefenbord zijn 4 gemultiplexte 7-segment displays aanwezig. Ze kunnen elk afzonderlijk geselecteerd worden door middel van PORTA[0:3]. De segmenten zelf zijn verbonden met de volledige PORTB zoals te zien op onderstaand schema. Figuur 17: aansluitingen van de 7-segment displays Het aansturen van de displays is op zich niet moeilijk. We moeten echter een stuk code voorzien die een binaire waarde omvormt naar de respectievelijke 7-segmentscode. We doen dit via een computed goto (ADDWF PCL), ook wel een lookup-table genoemd. Het doel is om de program counter (PC) te manipuleren. Door middel van een offset (hier de binaire waarde die we willen weergeven) springen we naar de juiste regel in een tabel (hier de respectievelijke 7-segmentscode). We moeten echter oppassen met paging. Wanneer we een offset bij PCL tellen passen we maar de laagste 8-bits van de volledige PC aan (die 13-bits breed is). Het PCH-register moet dus vooreerst aangepast worden, zij het dan indirect via het PCLATH-register omdat het PCH register niet gemapped is. De volgende figuur geeft grafisch weer wat er precies gebeurd bij een computed goto. Merk op dat deze pagingproblemen zick ook kunnen voordoen bij een CALL of een GOTO. Dubrul Stijn Master Elektronica-ICT 26.

36 Figuur 18: adresbepaling bij een computed goto Dit probleem duikt dus enkel op wanneer onze tabel zich bevindt op de grens van een 256-bytes blok programmageheugen (PCL is 8-bits breed). Hieronder is de flowchart en de programmacode van de lookuptable voor het omvormen van binair naar 7-segment opgenomen. Deze routine is terug te vinden in het bestand segment.inc. bin2seg MOVLW MOVWF high segment ;msb PCLATH MOVLW low segment ;lsb ADDWF index,w ;offset BTFSC STATUS,C ;overflow? INCF PCLATH,f ;ja: PCLATH++ MOVWF PCL ;spring segment RETLW 0x3F ;nul RETLW 0x06 ;een RETLW 0x5B ;twee RETLW 0x4F ;drie RETLW 0x66 ;vier RETLW 0x6D ;vijf RETLW 0x7C ;zes RETLW 0x07 ;zeven RETLW 0x7F ;acht RETLW 0x67 ;negen RETLW 0x77 ;A RETLW 0x7C ;B RETLW 0x58 ;C RETLW 0x5E ;D RETLW 0x79 ;E RETLW 0x71 ;F Figuur 19: flowchart computed goto Code 5: computed goto routine bin2seg Dubrul Stijn Master Elektronica-ICT 27.

37 Er is een voorbeeldprogramma 7segment.asm die de 4 displays aanstuurt met een vaste waarde. Dit programma stelt eerst de nodige poorten in als output waarna het 4 binaire waardes in het RAM laadt. Om beurten wordt een display geselecteerd. Om data op het display te tonen wordt eerst de binaire code omgevormd naar 7-segmentscode en deze wordt op PORTB geplaatst. Het display wordt geselecteerd en er wordt even gewacht. Het display wordt terug uitgeschakeld om zo over te gaan naar het volgende display. De volgende flowchart toont de werking van het programma. Een meer dynamisch programma dat de displays aanstuurt is opgenomen bij de timers. START stuur display PORTA[0:3] (selectie) en PORTB[0:7] (7-segmentcode) = output W = offset index 4 binaire waardes (0-15) naar RAM (var0:var3) bin2seg display0 PORTB = W (7 segmentcode) display1 selecteer display (bit PORTA[0:3]) display2 delay display3 leg display af volgend display Figuur 20: flowchart 7-segment sturing Dubrul Stijn Master Elektronica-ICT 28.

38 4.2.5 Externe interrupt op pin RB0 De eerste pin van PORTB is voorzien als externe interrupt. Deze interrupt reageert op een stijgende of dalende flank. Ideaal dus om te experimenteren met interrupts. Bij elke interrupt zijn er minimum 3 bits van belang: - GIE ofwel Global Interrupt Enable: met deze bit kun je alle (geselecteerde) interrupts doorlaten of tegenhouden. Deze bit zal gereset worden tijdens de initialisatie van de PIC. In een interruptroutine wordt deze vanzelf gereset om te verhinderen dat er een nieuwe interrupt komt. Deze bit zal geset zijn tijdens de normale werking van het programma. - de specifieke interrupt enable bit: deze bit zal een individuele interrupt doorlaten of tegenhouden - de interrupt flag: deze bit zal hoog worden wanneer een bepaalde interrupt zich voordoet. Deze vlag moet meestal zelf gereset worden op het einde van de interrupt service routine (ISR). Wanneer deze 3 bits hoog zijn wordt er automatisch naar de ISR gesprongen. Het adres van deze routine dient ingevuld te worden bij de interrupt-vector op adres 0x0004 d.m.v. een GOTO. De routine kan eventueel direct hier geplaatst worden. Deze routine staat los van het hoofdprogramma maar kan eventueel wel dezelfde registers gebruiken (registers zoals W en STATUS). Het is daarom gebruikelijk dat deze registers opgeslagen worden in het RAMgeheugen aan het begint van de ISR (PUSH). Op het einde worden ze dan terug geplaatst (POP of PULL). Indien er meerder interrupts kunnen optreden dient ook bepaald te worden wat de bron van de interrupt is d.m.v. de interruptvlaggen (er is maar 1 ISR aanwezig) pas dan kan de eigenlijke verwerking beginnen van de interrupt. Een ISR wordt ook altijd zo kort mogelijk gehouden zodat het hoofdprogramma niet te lang hoeft te wachten. De flowchart hiernaast geeft een algemeen beeld van een ISR. Figuur 21: flowchart van een ISR Dubrul Stijn Master Elektronica-ICT 29.

39 Het volgende programma INT.asm stelt INT/RB0 interrupt in op een stijgende flank. De ISR is uitgewerkt met alle stappen zoals hierboven omschreven. De PUSH en POP zijn puur illustratief omdat er hier niets uitgevoerd wordt in het hoofdprogramma. Er wordt binair geteld op PORTC om aan te tonen hoeveel maar de interrupt zich voorgedaan heeft. TITLE "demo INT/RB0" PROCESSOR 16F877A #include <p16f877a.inc> #include <registers.inc> CONFIG _HS_OSC & _DEBUG_OFF & _WRT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_OFF & _WDT_OFF ERRORLEVEL -302 ;Register in operand not in bank 0 ORG 0x0000 ;reset vector GOTO Init ORG 0x0004 ;interrupt vector GOTO Isr Init CLRF INTCON ;disable interrupts InitPORTC BANKSEL TRISC CLRF TRISC ;PORTC=output BANKSEL PORTC CLRF PORTC ;PORTC=0x00 InitINT BANKSEL TRISB MOVLW 0x01 MOVWF TRISB ;RB0/INT input BANKSEL OPTION_REG BSF OPTION_REG,INTEDG ;INT stijgende flank EnableINT BCF INTCON,INTF ;INT vlag clearen BSF INTCON,INTE ;enable INT BSF INTCON,GIE ;enable interrupts loop GOTO loop ;oneindige lus ;interrupt service routine Isr IsrPush MOVWF SavedW ;opslaan W MOVFW STATUS MOVWF SavedSTATUS ;opslaan STATUS IsrINT BANKSEL PORTC INCF PORTC ;tellen op PORTC BCF INTCON,INTF ;clear flag IsrPop MOVFW SavedSTATUS ;restore STATUS MOVWF STATUS MOVFW SavedW ;restore W RETFIE END Code 6: interrupt-programma INT/RB0 Dubrul Stijn Master Elektronica-ICT 30.

40 4.4 LCD Doel - LCD initialiseren d.m.v. een 4 of 8-bits databus - Tekst op de LCD plaatsen Werking Een LCD heeft steeds een controle-ic aan boord die het display stuurt. In dit geval is dit de LCM1602A. De datasheet van dit component is opgenomen in bijlage 9. Deze IC is dan op zijn beurt verbonden met de PIC. We kunnen zowel data als instructies naar deze IC sturen. Voorbeelden van instructies zijn: wis scherm, ga naar volgende regel, plaats de cursor op een locatie, leg scherm af en toon cursor. De IC weet via de RS-lijn of we een instructie (0) of data (1) sturen. Via een puls op de enable-lijn weet de IC dat de instructie of data geldig is. Het uitvoeren van een instructie of het plaatsen van data duurt enig tijd dus moet er steeds wat gewacht worden. De LCD moet vooraf geïnitialiseerd worden. Dit bestaat uit een opeenvolging van instructies die onder meer de controle-ic vertellen met hoeveel bits we werken en hoeveel lijnen er aanwezig zijn op het display. Sommige instructie vragen meer tijd dus moet er langer gewacht worden (1 ms is ruim voldoende). Er zijn naast de 3 controlelijnen ook 8 datalijnen beschikbaar. Op deze lijnen komen de instructies of de data terecht. Ofwel worden er instructies op deze lijnen geplaatst ofwel data. De data die we sturen zullen karakters zijn die we op het scherm wensen te plaatsen. De ASCII-tabel is grotendeels toepasbaar. Om I/O-lijnen uit te sparen kan er ook gewerkt worden met een 4-bits databus. De 4 hoogste bits van de databus worden in dit geval gebruikt. De instructieset ziet er net iets anders uit in dit geval. Data versturen verloopt in 2 stappen: eerst de meest significante nibble en daarna de minst significante nibble. Er is nog 1 verbinding aanwezig waarmee het contrast geregeld kan worden via een potentiometer. Dubrul Stijn Master Elektronica-ICT 31.

41 4.4.3 Routines Hieronder zijn de flowcharts van de routines om een instructie te plaatsen en een karakter te versturen opgenomen. Ze zijn juist hetzelfde opgebouwd alleen wordt in het ene geval een instructie verstuurd en in het andere geval een karakter. De toestand van de RSlijn bepaalt of het om een instructie of om data gaat. Ernaast is de routine om een LCD te initialiseren opgenomen. Deze routines zijn terug te vinden in het bestand LCD8.inc voor een 8- bits databus en in het bestand LCD4.inc voor een 4-bits databus. Het versturen van een karakter gebeurd in 2 stappen bij een 4-bits databus. Figuur 22: flowchart instructie naar LCD Figuur 23: flowchart data naar LCD Figuur 24: flowchart initialiseren LCD Er is in beide bestanden nog een extra routine opgenomen om een zin op het scherm te plaatsen via een lookup-table. Dubrul Stijn Master Elektronica-ICT 32.

42 4.4.4 Voorbeeldprogramma s De 2 voorbeeldprogramma s LCD4.asm en LCD8.asm plaatsen tekst op beide lijnen van de LCD. Eerst wordt er geïnitialiseerd waarna gebruik gemaakt wordt van de subroutines om een zin te plaatsen op de eerste lijn. Via een instructie wordt er naar de 2 e lijn gesprongen en wordt er nog een zin geplaatst. De uitvoer is zoals op onderstaande figuur. De aansluitingen van de 2 verschillende modes is ook opgenomen. Figuur 25: tekst op het scherm van de LCD Figuur 26: elektrisch schema LCD met 8-bits databus Figuur 27: elektrisch schema LCD met 4-bits databus Dubrul Stijn Master Elektronica-ICT 33.

43 4.5 RS Doel - RS232-communicatie initialiseren voor zowel lezen als versturen - subroutines maken voor zowel lezen als versturen - een eenvoudige loopback-toepassing - een subroutine maken die een volledige zin kan versturen De module De USART-module is 1 van de 2 seriële modules die aanwezig zijn in de PIC. Ze kan zowel synchroon als asynchroon ingesteld worden. Hier is het de bedoeling van RS232-communicatie op te zetten. Er wordt met andere woorden asynchroon gewerkt. Doordat RS232 niet met de standaard TTL-niveaus werkt is er op de EasyPIC3 een MAX232 voorzien. JP5 en JP6 dienen op de juiste TX en RX-lijn geplugd te worden (RC6 en RC7) zodat er connectie is me de PIC. Het schema ziet er als volgt uit. Merk op dat de TX en RX-lijn op het bord reeds gekruist zijn. Figuur 28: Elektrisch schema RS-232 De initialisatie van de module start met het bepalen van de gewenste baudrate. Het 8-bits register SPBRG en de bit TXSTA,BRGH bepalen de snelheid van communiceren en zijn zoals altijd in functie van de kloksnelheid. De formules staan hieronder. De keuze of we BRGH hoog of laag nemen is in functie van de fout die gemaakt wordt. We proberen deze natuurlijk zo laag mogelijk te nemen. baudrate(brgh = 0) = Fosc 64(SPBRG Fosc + 1) baudrate(brgh = 1) = 16(SPBRG + 1) Formule 2: het berekenen van de baudrate bij seriële communicatie Dubrul Stijn Master Elektronica-ICT 34.

44 De rest van de initialisatie gebeurt voornamelijk via 2 registers: TXSTA en RXSTA. Vooraleerst dient de directie van de TX en RX-pin ingesteld te worden via het TRISC-register. Eenmaal de baudrate ingesteld is wordt er geselecteerd in welke mode we werken (asynchroon). De seriële poort moet ingeschakeld worden alsook de transmit en de receive. Op het einde van de initialisatie legen we de ontvangstbuffer een aantal maal zodat er geen verkeerde data aanwezig kan zijn. Er zijn nog een aantal opties beschikbaar zoals 9-bits zenden en ontvangen. Dit kan bijvoorbeeld gebruikt worden om een pariteitsbit te genereren. Dit moet echter zelf geprogrammeerd worden. De onderstaande flowchart en programmacode toont de initialisatieroutine. Merk op dat de interrupts niet ingesteld worden in deze routine. Deze en de hier opvolgende routines zijn opgenomen in RS232.inc. initaliseren RS232 pinnen instellen TX = output RX = input baudrate instellen RS232init BANKSEL PORTC BCF PORTC,TX ;TX=output BSF PORTC,RX ;RX=input BANKSEL TXSTA BSF TXSTA,BRGH ;brgh=1 MOVLW d'51' ;9600baud BANKSEL SPBRG MOVWF SPBRG asynchrone mode selecteren BANKSEL TXSTA BCF TXSTA,SYNC ;asynchrone mode enable seriële poort BANKSEL RCSTA BSF RCSTA,SPEN ;serialport enable TX en RX activeren RX-buffer leegmaken (flush) BANKSEL TXSTA BSF TXSTA,TXEN ;transmit enable BANKSEL RCSTA BSF RCSTA,CREN ;receive enable MOVFW RCSTA ;flush MOVFW RCSTA ;flush MOVFW RCSTA ;flush EINDE Figuur 29: flowchart initialiseren RS-232 RETURN Code 7: initialiseren van RS-232 Dubrul Stijn Master Elektronica-ICT 35.

45 4.5.3 Lezen en versturen Voor zowel lezen als ontvangen kan er op 2 manieren gewerkt worden: polling of interrupt. Wordt er met interrupt gewerkt dan moet vanzelfsprekend de GIE-bit geset zijn maar ook de PEIE-bit. Voor seriële communicatie is dit RCIE en TXIE uit het PIE1-register. De vlaggen uit het PIR1 register zijn respectievelijk RCIF en TXIF. De RCIF wordt gereset na het uitlezen van de inputbuffer, de TXIF wordt vanzelf hoog wanneer de zendbuffer leeg is. Wil je met polling werken dan is er voor het zendgedeelte een bit beschikbaar TXST,TRMT die hoog wordt wanneer de zendbuffer leeg is. Voor het ontvangen is er enkel de interrupt-vlag. Er is geen ander bit aanwezig omdat het ook niet interessant is om het hoofdprogramma te laten wachten op een karakter die ontvangen is (het kan echter wel via deze vlag mocht dit toch nodig zijn). Uit het voorgaande kan dus afgeleid worden dat het ontvangen via een interrupt het interessants is en het versturen via het hoofdprogramma, zonder interrupt. Wil je namelijk het versturen ook via interrupt laten lopen dan zal er op zijn minst een buffer in het RAM-geheugen voorzien moeten worden waar het te versturen karakter klaar staat. De volgende 2 flowcharts en codes tonen hoe we een karakter ontvangen en versturen zonder interrupts. RS232get BANKSEL PIR1 BTFSS PIR1,RCIF ;char ontvangen? GOTO RS232get BANKSEL RCREG ;ontvangen char MOVFW RCREG ;char naar W RETURN Figuur 30: flowchart ontvangen van een char Code 8: ontvangen van een char Dubrul Stijn Master Elektronica-ICT 36.

46 RS232send BANKSEL TXSTA BTFSS TXSTA,TRMT ;buffer leeg? GOTO RS232send ;nee: loop BANKSEL TXREG MOVWF TXREG ;verstuur char NOP ;even wachten Figuur 31: flowchart versturen van een char RETURN Code 9: versturen van een char Voorbeeldprogramma In het volgende voorbeeldprogramma loopback.asm lezen we een char in via de ISR. Deze wordt dan terug verstuurd via de subroutine RS232send. Er is hier dus geen hoofdprogramma, enkel een ISR. Dit is zowat de eenvoudigste testmethode voor seriële communicatie. Je drukt op een toets in een terminal, deze wordt ontvangen door de PIC en terug verstuurd. Een soort van echo dus. isr init start ORG 0x0000 ;vectors GOTO init ORG 0x0004 BANKSEL RCREG MOVFW RCREG ;inlezen char cleart RCIF vlag! CALL RS232send ;versturen char RETFIE #include <RS232.inc> ;includes subroutines CLRF INTCON ;geen interrupts BANKSEL PIE1 CLRF PIE1 CLRF PIE2 CALL RS232init ;RS232 initialiseren BANKSEL PIE1 BSF PIE1,RCIE ;enable int RX BSF INTCON,PEIE ;peripheral int enable BSF INTCON,GIE ;enable global int GOTO start ;oneindige loop END Code 10: voorbeeldprogramma loopback RS232 Dubrul Stijn Master Elektronica-ICT 37.

47 4.5.5 Een volledige zin versturen via een macro Omdat het meestal wel wenselijk is van een volledige zin te versturen via RS232 i.p.v. karakter per karakter zou het wel handig zijn om daarvoor een routine te schrijven. Dit is mogelijk via een macro. Macro s zijn sequenties van instructies die ingevoegd kunnen worden in het assembleerprogramma door een macro oproep. Macro s hebben enkele voordelen t.o.v. normale subroutines. Eén van de grote voordelen is dat je argumenten kunt opgeven. Een macro dient vooraf gedefinieerd te worden en je kan ze oproepen in je programma. Ze worden dan door de compiler omgevormd naar de gewone assembleertaal. We gebruiken voor dit probleem een macro omdat we als argument een string willen opgeven. Via een lookup-table wordt de string dan karakter per karakter overlopen om verstuurd te worden. Er wordt teven een CR en een LF (een nieuwe lijn) verstuurd. Als laatste karakter staat een ETX (end of text). Met dit niet afdrukbaar ASCIIkarakter duiden we het einde van de string aan. Hieronder is de macro opgenomen. De code is zoveel als mogelijk uitgelegd. De werking van de lookup-table kan teruggevonden worden in hoofdstuk RS232string MACRO string local loop local getchar local tekst local einde ;string is het argument ;labels worden local gedefineerd BANKSEL index CLRF index ;positie reset: variabele aanwezig in ram loop CALL getchar ;char ophalen CALL RS232char ;versturen: routine aanwezig in rs232.inc NOP ;even wachten SUBLW ETX ;ASCII einde tekst BTFSC STATUS,Z ;einde string? GOTO einde ;ja INCF index,f ;nee:volgende char GOTO loop getchar MOVLW high tekst ;hoogste adresbits MOVWF PCLATH MOVLW low tekst ;laagste adresbits ADDWF index,w ;add offset index BTFSC STATUS,C ;overflow? (page cross?) INCF PCLATH,f ;ja: PCLATH++ MOVWF PCL tekst DT string,cr,lf,etx einde ENDM Code 11: macro om een string te versturen via RS232 Deze macro wordt in het programma simpelweg aangeroepen op volgende manier (zonder CALL!). RS232string dit is mijn string die ik wil versturen Dubrul Stijn Master Elektronica-ICT 38.

48 4.6 A/D-conversie Doel - de werking van de ADC-module bestuderen - een analoog signaal omzetten naar 10 digitale bits aan een vaste samplefrequentie - A/D via interrupt: een looplicht in snelheid regelen a.d.h.v. een potentiometer Werking De 16F877A beschikt over 8 analoge ingangen (PORTA en PORTE) die via 1 A/D-module geconverteerd kunnen worden naar 10 digitale bits. 2 van deze pinnen kunnen eventueel gebruikt worden als Vref+ en Vref-. Het resultaat van de conversie wordt opgeslagen in 2 registers ADRESH en ADRESL. Het resultaat kan links of rechts uitgelijnd worden. Belangrijk is dat de tijd per bitconversie (T ad ) gerespecteerd wordt. Dit moet minimum 1,6 µs zijn. De totale conversietijd (T cy ) duurt 12 T ad - perioden. Indien er een langere sampleperiode gewenst is, moet er zelf een voorziening getroffen worden om langer te wachten. Er kan gekozen worden voor een interne RC-klok (T ad 4µs) of uit een aantal vaste perioden van de klokfrequentie. Volgende berekening toont hoe de tijd per bitconversie en de totale conversietijd berekend wordt indien er gekozen wordt voor een aantal klokperioden. De flowchart toont hoe we nu precies te werk gaan tijdens het programmeren om 1 kanaal te converteren. Merk op dat er na de bewerkingen een stuk vroeger kan teruggegaan worden in de flowchart om bijvoorbeeld een ander kanaal of conversiesnelheid te kiezen. Vanzelfsprekend kan er ook met interrupts gewerkt worden om te weten wanneer een conversie klaar is. Tosc = 1 klokfrequentie = 1 8MHz = 125ns n = min.bittijd Tosc = 1,6µs 125ns = 12,8 16 Tcy = 12 n Tosc = ns = 24µs Formule 3: bittijd en conversietijd van de ADC Dubrul Stijn Master Elektronica-ICT 39.

49 Figuur 32: flowchart A/D-conversie Voorbeeldprogramma In het voorbeeldprogramma gaan we te werk zoals in de flowchart voorgesteld. We zullen gebruik maken van de interne RC-klok om de A/D-module te sturen. Na elke conversie zullen we het resultaat weergeven op PORTC (hoogste 2 bits) en PORTD (laagste 8 bits). Als input-kanaal gebruiken we AN2/RA2 en als referentie de voedingsspanningen. JP15 dient aanwezig te zijn en de pull-up van dit kanaal dient losgemaakt te worden (SW1). Het elektrisch schema is op de volgende pagina opgenomen. Dubrul Stijn Master Elektronica-ICT 40.

50 Code 12: schema A/D met uitvoer via LED's Bij de start van een conversie wordt B0 hoog geplaatst. Wanneer de data beschikbaar is op PORTC en PORTD wordt deze terug laag geplaatst. Door deze periode te meten met een oscilloscoop kan er exact achterhaald worden wanneer de gedigitaliseerde data beschikbaar is. De wachtlus vooraf kan dus aangepast worden om tot een exacte sampletijd te komen. In dit programma duurde het zonder wachtlus 47 µs voordat de data klaarstond. Er is 3 maal een wachtlus van 250 µs en 1 maal een wachtlus van 203 µs zodat we een sampleperiode van 1 ms bekomen. Er wordt in dit programma niet met interrupt gewerkt zodat deze periode constant blijft. De initialisatieroutine en het hoofdprogramma van ADC.asm zijn opgenomen. ;initialiseren Init CLRF INTCON ;disable interrupts InitPortsBCD BANKSEL TRISB CLRF TRISB ;portb=output CLRF TRISC ;portc=output CLRF TRISD ;portd=output BANKSEL PORTB CLRF PORTB ;portb=0 CLRF PORTC ;portc=0 CLRF PORTD ;portd=0 InitADC MOVLW 0xFF ;PORTA=input BANKSEL TRISA MOVWF TRISA Dubrul Stijn Master Elektronica-ICT 41.

51 MOVLW BANKSEL MOVWF MOVLW BANKSEL MOVWF B' ' ;rechts uitlijnen,rc-klok,all ADC inputs ADCON1 ADCON1 B' ' ;RC-klok,selecteer AN2/RA2,ADC-module aan ADCON0 ADCON0 ;start programma WachtADC BSF PORTB,0 ;ready indicator hoog CALL delay250us ;wacht 3*250us = 750us CALL delay250us CALL delay250us MOVLW MOVWF Delay203us DECFSZ GOTO 0x90 d1 d1 Delay203us ;wacht 203us StartADC BANKSEL ADCON0 BSF ADCON0,GO_DONE ;start conversie WachtKlaar BTFSC ADCON0,GO_DONE ;klaar? GOTO WachtKlaar BCF PORTB,0 BANKSEL ADRESH MOVFW ADRESH ;MSB MOVWF PORTC ;naar portc BANKSEL ADRESL MOVFW ADRESL ;LSB BANKSEL PORTD MOVWF PORTD ;naar portd BCF PORTB,0 ;ready indicator laag GOTO WachtADC Code 13: A/D-conversie met vaste samplefrequentie Voorbeeldprogramma via interrupt Via interrupt werkt de ADC-module juist hetzelfde. Enkel wordt er nu niet meer gewerkt met polling op de GO_DONE-bit maar is er een interruptvlag ADIF die ervoor zorgt dat er naar de ISR gesprongen wordt eenmaal de conversie klaar is. Deze vlag dient gecleard te worden in de ISR waarna de conversie opnieuw kan gestart worden. In volgend voorbeeldprogramma wordt er in het hoofdprogramma een looplicht aangestuurd. Er wordt telkens een aantal milliseconden gewacht volgens het dvar register. De ISR vult dit register met de 8 hoogste bits van het analoog signaal. Er wordt dus variabel gewacht tussen de 0 en de 255 ms. Hieronder is de programmacode opgenomen van het bestand ADC+ISR.asm. Dubrul Stijn Master Elektronica-ICT 42.

52 TITLE "ADC via isr: variabel looplicht" PROCESSOR 16F877A #include <p16f877a.inc> #include <registers.inc> CONFIG _HS_OSC & _DEBUG_OFF & _WRT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_OFF & _WDT_OFF ERRORLEVEL -302 ;warning Register in operand not in bank 0 ORG 0x0000 ;vectors GOTO Init ORG 0x0004 GOTO Isr ;subroutines #include <delay.inc> ;initialiseren Init CLRF INTCON ;disable interrupts BANKSEL PIE1 CLRF PIE1 ;disable periferie1 interupt InitPORTB BANKSEL TRISB CLRF TRISB ;PORTB=output BANKSEL PORTB CLRF PORTB ;PORTB=0 InitADC MOVLW 0xFF ;PORTA=input BANKSEL TRISA MOVWF TRISA MOVLW BANKSEL MOVWF B' ' ;links uitlijnen,rc-klok,all ADC inputs ADCON1 ADCON1 MOVLW B' ' ;RC-klok,selecteer AN2/RA2,ADC-module aan BANKSEL ADCON0 MOVWF ADCON0 InitIntAan BANKSEL PIR1 CLRF PIR1 ;clear ADC vlag BANKSEL PIE1 BSF PIE1,ADIE ;ADC interrupt aan BSF INTCON,PEIE ;periferie interrupt aan BSF INTCON,GIE ;global interrupt aan InitADCstart BANKSEL ADCON0 BSF ADCON0,GO_DONE ;ADCconversie aan ;hoofdprogramma StartLoop BCF STATUS,0 ;carry=0 (rotate throug carry) BANKSEL PORTB CLRF PORTB ;PORTB=0 BSF PORTB,0 ;RB0=1 Lopen CALL DelayVar ;wacht BANKSEL PORTB RLF PORTB,1 ;schuif BTFSC STATUS,0 ;carry? ->einde loop GOTO StartLoop ;terug naar begin Dubrul Stijn Master Elektronica-ICT 43.

53 GOTO Lopen ;verder lopen ;************************************************ ;subroutine DelayVar ;MSB ADC * delay 1 ms DelayVar MOVFW temp ;MSB ADC MOVWF dvar ;opsaan in dvar BTFSC STATUS,Z ;dvar=?0 INCF dvar,f ;dvar++ (fix voor DECFSZ: 0-1=0xFF) DelayVarLoop CALL delay1ms ;wacht 1 ms DECFSZ dvar,f ;dvar-- GOTO DelayVarLoop ;nogmaals wachten RETURN ;************************************************ Isr IsrPush BANKSEL SavedW MOVWF SavedW ;push W MOVFW STATUS MOVWF SavedSTATUS ;push status IsrADC BANKSEL ADRESH ;MSB ADC MOVFW ADRESH MOVWF temp ;opslaan in temp BANKSEL PIR1 CLRF PIR1,ADIF ;ADC interruptvlag clearen BSF ADCON0,GO_DONE ;conversie aan IsrPull MOVFW SavedSTATUS MOVWF STATUS ;pull status MOVFW SavedW ;pull W RETFIE ;return from isr END Code 14: ADC-module met interrupt: variabel looplicht Dubrul Stijn Master Elektronica-ICT 44.

54 4.7 Timers Doel - de verschillende timers met elkaar vergelijken - elke timer initaliseren en een kleine toepassing uitwerken - de werking van de watchdog timer (WDT) onderzoeken Vergelijking Er zijn 3 timers aanwezig en 1 WDT in de 16F877A. Hun werking is ongeveer hetzelfde maar toch zijn er verschillen in de opbouw van hun blokschema. In onderstaande tabel worden de belangrijkste verschillen vergeleken. WDT timer 0 timer 1 timer 2 timer ja ja ja ja counter nee ja ja nee telbreedte n.v.t. 8 bits 16 bits 8 bits prescaler postscaler externe klok interrupt overig nee vast 1:12/4/8/16 32/64/128 nee vast 1:2/4/8/16 32/64/128/256 nee flank selecteerbaar bij overflow: bij overflow reset postcaler en prescaler gedeeld Tabel 4: de timer-modules vast 1:1/2/4/8 nee ja bij overflow vast 1:1/2/8 instelbaar 1:1/2/3 15/16 nee bij gelijkheid na de postscaler De telregisters zijn steeds leesbaar en schrijfbaar (uitgezonderd de WDT) zodat een precieze timing verkregen kan worden. De timer maakt steeds gebruik van de interne klok. De couter maakt gebruik van een externe klok. Timer 0 en 1 genereren een interrupt bij een overflow van het telregister. Timer 2 vergelijkt steeds zijn waarde met een perioderegister en genereert een interrupt na zijn postcaler. De toepassingen van de timers zijn steeds het genereren van een precies tijdsinterval om op een gepaste tijd te reageren met bepaalde instructies. In de volgende voorbeeldprogramma s en formules wordt steeds gewerkt met de interne klok (timer mode). Dubrul Stijn Master Elektronica-ICT 45.

55 4.7.3 De WDT De WDT is een speciale timer die de mogelijkheid heeft om de PIC te resetten. Hij wordt aan of uit geschakeld via het configuratieregister. Er is een RC-oscillator aanwezig speciaal voor de WDT zodat deze ook werkt zelfs al is er geen klok aanwezig (in slaapmode bijvoorbeeld). De RC-oscillator is temperatuursafhankelijk zodat de tijd tot een reset kan verschillen. Typisch is deze ongeveer 7 tot 33 ms. Door de postscaler kan deze waarde oplopen tot maximum een 4-tal seconden. Wanneer de WDT ingeschakeld is moet de CLRWDT-instructie uitgevoerd worden op geregeld tijdstippen in het programma. Deze zorgt ervoor dat de WDT de PIC niet reset. De WDT is dus een controlemechanisme Timer 0 Timer 0 wordt ingesteld door 2 registers: het controleregister OPTION_REG en het perioderegister TMR0. De tijd tussen 2 interrupts wordt als volgt berekend: timer0interrupt = Tins prescaler ( 256- TMR0) Formule 4: berekenen van de tijd tot timer 0 interrupt In OPTION_REG kan de prescaler en zijn waarde toegekend worden aan de timer module. De periode wordt ingevuld in het TMR0-register. Wanneer er geschreven wordt in dit register wordt er voor 2 instructietijden niet geteld. Een aangepaste waarde weg schrijven in het TMR0-register verhelpt dit natuurlijk. De prescaler van deze timer is gedeeld met de postscaler van de WDT. Een voorbeeld van het gebruik van timer 0 is terug te vinden bij de PWM met variabele duty-cycle Timer 1 Timer 1 wordt ingesteld door 3 registers: het controleregister T1CON en de perioderegisters TMR1H en TMR1L die samen de 16-bits telwaarde vormen. De prescaler en de klokselectie worden ingesteld via het controleregister T1CON. Het 16-bits telregister kan ook ingesteld worden om de tijd tot overflow (en interrupt) korter te maken. Pas dan wordt de timer ingeschakeld via de bit T1CON,TMR1ON. Er wordt daadwerkelijk geteld in de registers TMR1H en TMR1L dus moeten ze in de ISR opnieuw ingevuld worden. Om nieuwe waarden in de telregisters te schrijven wordt de timer best gestopt. Wanneer deze aan het incrementeren is kan het schrijven onvoorspelbare waardes teweeg brengen. Om ze te lezen zonder dat er gestopt wordt moet men oppassen bij een rollover tussen het hoogste en laagste register. Dit kan gecontroleerd worden door het hoogste register 2 maal te lezen en deze 2 waardes dan te vergelijken. De tijd tussen 2 interrupts wordt als volgt berekend. Dubrul Stijn Master Elektronica-ICT 46.

56 timer1interrupt = Tins prescaler ( [ TMR1H: TMR1L] ) Formule 5: berekenen van de tijd tot timer 1 interrupt In het voorbeeldprogramma timer1.asm worden de 7-segmentdisplays aangestuurd in het hoofdprogramma zoals voordien. Door gebruik te maken van timer 1 kunnen we daadwerkelijk tellen i.p.v. een statische waarde te sturen. Er wordt een interrupt gegenereerd om de 100 ms. In de ISR wordt de timer gestopt zodat de nieuwe waarden in de telregisters kunnen geschreven worden. De ramvariabelen worden geüpdate zodat er geteld wordt op de displays. Hieronder is de code voor het initaliseren van de teller en het deel van de ISR waar de telregisters ingevuld worden opgenomen. InitTimer1 MOVLW b' ' ;pre=1/8,internal clock, timer off BANKSEL T1CON MOVWF T1CON MOVLW 0x9E ;telregisters BANKSEL TMR1H ;100ms = 4/8e6 * 8 * 0xFFFF 0x9E58 MOVWF TMR1H MOVLW 0x58 MOVWF TMR1L Timer1Start BANKSEL T1CON BSF T1CON,TMR1ON ;timer1 aan Code 15: initaliseren van timer 1 Isr IsrPull IsrTimerPeriode BANKSEL T1CON BCF T1CON,TMR1ON ;timer af MOVLW 0x9E ;telregisters updaten MOVWF TMR1H MOVLW 0x58 MOVWF TMR1L BSF T1CON,TMR1ON ;timer aan IsrUpdateTeller IsrClearVlag BANKSEL PIR1 BCF PIR1,TMR1IF ;timer 1 interrupt doorlaten IsrPull MOVFW SavedSTATUS MOVWF STATUS MOVFW SavedW RETFIE Code 16: periode update in ISR voor timer 1 Dubrul Stijn Master Elektronica-ICT 47.

57 4.7.6 Timer 2 Timer 2 wordt ingesteld door 2 registers: het controleregister T2CON en het perioderegister PR2. De pre- en postscaler worden ingesteld via T2CON, de 8-bits telwaarde in PR2. Pas als deze waarden ingesteld zijn mag de timer gestart worden door de bit T2CON,TMR2ON te setten. Net zoals timer 1 is de enable en de vlag voor de interrupt te bereiken via de PIE1 en PIR1-registers. De vlag moet op het einde van de routine zelf gecleard worden. De tijd tussen 2 interrupts wordt als volgt berekend. timer2interrupt = Tins prescaler PR2 postscaler Formule 6: berekenen van de tijd tot timer 2 interrupt In het voorbeeldprogramma timer2.asm worden er 8 frequenties gegenereerd op PORTB. We stellen de timer in met een prescaler van 4, een postscaler van 10 en het perioderegister met 250. Dit levert een periode op van 5 ms. Via de INCF-instructie wordt er telkens 1 bijgeteld op PORTB. Pin RB0 zal dus een frequentie genereren van 100 Hz (5 ms laag + 5 ms hoog). De frequenties op de volgende pinnen zullen steeds de helft lager zijn. Dubrul Stijn Master Elektronica-ICT 48.

58 4.8 PWM Doel - de werking van de PWM-module bestuderen - een PWM-signaal genereren met vaste duty cycle - een PWM-signaal genereren met variabele duty cycle Werking De 16F877A heeft 2 CCP-modules aan boord. Elke module heeft een controle register CCPxCON en 2 dataregisters CCPRxL en CCPRxH. Naast deze registers maken de modules ook gebruik van de timer 1 of de timer 2 module. De modules kunnen ingesteld worden als captureeenheid (meten van een tijd tot een gebeurtenis) of als compareeenheid (een gebeurtenis sturen op een bepaalde tijd). De interessantste mogelijkheid van deze module is de pulsbreedte modulatie (PWM). De PWM-module maakt het mogelijk om signalen met een variabele duty cycle te genereren. De werking is als volgt. Inwendig wordt er gebruik gemaakt van een set/reset-flipflop. Beide ingangen zijn verbonden met de uitgang van een comparator. De ene comparator staat in voor het bepalen van de periode (set) en de andere voor het bepalen van de duty-cyle (reset). Er wordt steeds vergeleken met de waarde van het timer 2 register en wanneer deze gelijk zijn wordt de set of de reset gestuurd. Er moet ingesteld worden hoelang een periode duurt (hoog+laag) en hoelang het signaal hoog blijft. De duty cycle heeft een maximum resolutie van 10-bits en is dubbel gebufferd. Dit is noodzakelijk om geen glitches op de uitgang te veroorzaken. De volgende figuren maken dit duidelijk. Dubrul Stijn Master Elektronica-ICT 49.

59 Figuur 33: werking van de PWM-module Volgende formules zijn noodzakelijk om de periode, de frequentie en de maximum resolutie te berekenen. Deze formules zijn voor eenvoudig gebruik uitgewerkt in een excel-bestand. Dit bestand is terug te vinden in bijlage 10. PWMperiode = (PR2 + 1) 4 Tosc Timer2prescaler Fosc log Fpwm PWMresolutie = bits log(2) [ ] PWMdutycyle = CCPR1L:CCP1CON 5:4 Tosc Timer2prescaler Formule 7: formules voor PWM PWM met vaste duty-cycle Een eerste testprogramma PWMvast.asm geneereert een vaste PWMfrequentie van 1 khz met een duty cycle van 50%. Het resultaat is hieronder te zien. Na meting met de scoop blijkt dat dit signaal bijzonder nauwkeurig opgewekt wordt. Het instellen van de PWMmodule is opgenomen in onderstaande flowchart. Merk op dat eens de PWM-module ingesteld is deze onafhankelijk (asynchroon) werkt van de rest van het programma. Interactie kan plaatsvinden d.m.v. de timer 2 interrupt. De routine om de module te initialiseren is hieronder opgenomen. Een code voorbeeld is in het programma PWMvar.asm terug te vinden. Dubrul Stijn Master Elektronica-ICT 50.

60 Figuur 34: instellen van de PWM-module Figuur 35: opwekken van een periodiek signaal PWM met variabele duty-cycle Als 2 e testprogramma genereren we opnieuw een frequentie van 1 khz maar dit keer met een traag variërende duty-cycle. Hiervoor maken we gebruik van timer 0 die telkens de duty-cyle bits verhoogt in de ISR. Eerst worden de 2 LSBs getest en eventueel geset of gereset. Pas daarna kunnen de 8 hoogste bits verhoogt worden. Naar mijn mening hadden de 2 hoogste MSBs beter apart gestaan zodat bij een lagere resolutie die eerst verloren gaan. Het resultaat van het programma PWMvar.asm is dat de LED traag oplicht en dan terug uit gaat. Met de scoop kan er gezien worden dat de duty-cycle langzaam wijzigt. De timer is zo ingesteld dat het 33,5 seconden duurt om van 0% naar 100% over te gaan. Er zijn 1024 timer 0 interrupts nodig die om de 32,7 ms opkomen. Het programma is op de volgende pagina opgenomen. De PWM-module en de timer 0 worden geïnitialiseerd. Het hoofdprogramma is een oneindige lus. Het wijzigen van de duty-cycle vindt plaats in de ISR. Dubrul Stijn Master Elektronica-ICT 51.

61 Init CLRF INTCON ;disable interrupts InitPin BANKSEL TRISC BCF TRISC,2 ;pin CCP1/RC2 = output InitPWM BANKSEL PR2 MOVLW d'124' ;PWM periode MOVWF PR2 BANKSEL CCPR1L ;PWM duty cycle 0% CLRF CCPR1L BCF CCP1CON,5 ;LSB1 BCF CCP1CON,4 ;LSB0 MOVLW b' ' ;timer2 prescaler MOVWF T2CON ;prescale 1/16 + timer enable BSF CCP1CON,CCP1M2 ;selecteer PWM BSF CCP1CON,CCP1M3 ;selecteer PWM InitTimer0 BANKSEL OPTION_REG MOVLW b' ' ;internal clock/4, pre 1:256 MOVWF OPTION_REG InitTimerInt BCF INTCON,TMR0IF ;vlag BSF INTCON,TMR0IE ;enable BSF INTCON,GIE ;enable Loop GOTO Loop ;hoofdprogramma: oneindige lus Isr TestLSB0 BANKSEL CCP1CON BTFSS CCP1CON,4 ;LSB0 GOTO SetLSB0 TestLSB1 BTFSS CCP1CON,5 ;LSB1 GOTO SetLSB1 SetMSB BCF CCP1CON,4 ;LSB0=0 BCF CCP1CON,5 ;LSB1=0 BANKSEL CCPR1L INCF CCPR1L,f ;MSBs GOTO IsrEnd SetLSB0 BSF CCP1CON,4 ;LSB0=1 GOTO IsrEnd SetLSB1 BSF CCP1CON,5 ;LSB1=1 BCF CCP1CON,4 ;LSB0=0 IsrEnd BCF INTCON,TMR0IF ;vlag clearen RETFIE END Code 17: PWM-signaal met variabele duty-cycle Dubrul Stijn Master Elektronica-ICT 52.

62 4.9 Data EEPROM Doel - leesroutine die 1 byte leest van het EEPROM geheugen op een gegeven adres - schrijfroutine die 1 byte schrijft naar het EEPROM geheugen op een gegeven adres - voorbeeldprogramma dat de werking illustreert en tevens het niet volatiele karakter ervan aantoont Routines Voor deze opdracht zijn er 2 routines gemaakt. Deze zijn opgenomen in het bestand EEPROM.inc. De ene routine schrijft een byte naar de EEPROM, de andere leest een byte van de EEPROM. Deze routines maken gebruik van een controle register EECON1, een dataregister EEDAT en een adresregister EEADR. Deze routines zijn overgenomen zoals ze vermeld staan in de datasheet. Merk op dat met deze registers ook kunnen gebruikt worden om het programmageheugen te benaderen. Dit is niet uitgewerkt in deze thesis Voorbeeldprogramma Het voorbeeldprogramma EEPROM.asm vult alle beschikbare 256 EEPROM-locaties met de getallen 0x00 tot 0xFF. De data van een locatie zal dus gelijk zijn aan zijn corresponderend adres. Eens gevuld worden alle locaties gelezen en uitgestuurd via RS-232. Onderstaande figuur toont de output van het programma. De eerste witregels zijn de tekens vanaf 0x00 tot 0x2F van de ASCII-tabel. Deze tekens zijn niet afdrukbare tekens. Figuur 36: Output van de EEPROM Dubrul Stijn Master Elektronica-ICT 53.

63 Indien we de PIC even niet van spanning voorzien en daarna de EEPROM uitlezen, kan aangetoond worden dat de EEPROM deze waarden onthoudt wanneer er geen spanning aangesloten is. Door achtereenvolgens Device>Read en dan Windows>EEPROM View te kiezen in PICFLASH2, krijgen we de inhoud van de EEPROM afgebeeld op het scherm. De onderstaande figuur toont deze inhoud. Figuur 37: geheugendump van de EEPROM Dubrul Stijn Master Elektronica-ICT 54.

64 4.10 Reset-condities Doel - bestuderen van de verschillende oorzaken van een reset - voorbeeldprogramma maken die deze demonstreert Werkwijze Een PIC kan gereset worden door één van de volgende mogelijkheden: - POR: normale opstart omdat de spanning opkomt - BOR: detectie van een te lage werkspanning, < 4,2 Volt - WDT-reset: de WDT reset de PIC - WDT-wake-up: de PIC is in SLEEP en ontwaakt door de WDT - MCLR: normale reset door het indrukken van de resetknop - MCLR-wake-up of interrupt-wake-up: de PIC ontwaakt uit SLEEP door middel van een externe rest of door een interrupt Het achterhalen van de oorzaak van een reset gebeurt door middel van 2 bits uit het STATUS-register: /POR en /BOR; en 2 bits uit het PCONregister (power control): /TO en /PD. De bits uit het STATUS-register dienen geset te worden bij het opstarten van de PIC. Ze worden gereset door ofwel een POR of door een BOR. Bij de bits van het STATUSregister is het iets moeilijker. Van deze bits dient een kopie opgeslagen te worden in het RAM-geheugen. Deze bits kunnen dan vergeleken worden met de vorige toestand om te achterhalen of we te maken hebben met een externe reset (unchanged). Door een andere combinatie van deze bits kan bepaald worden of we te maken hebben met de WDT of een wake-up vanuit slaaptoestand. De volgende flowchart toont het verloop hoe we controleren. Dubrul Stijn Master Elektronica-ICT 55.

65 START 0 1 /POR? 0 1 /POR? nee /TO en /PD gewijzigd? ja 1 0 /TO set bit /POR set bit /BOR set bit /BOR 1 0 /PD POR BOR normale MCLR wake-up (MCLR of INT) WDT reset WDT wake-up kopie STATUS naar RAM EINDE Figuur 38: flowchart achterhalen oorzaak reset Voorbeeldprogramma In het voorbeeldprogramma reset.asm is de voorgaande routine geïmplementeerd. Door middel van RS-232 wordt gevisualiseerd om welke reset het precies gaat. Belangrijk is dat BODEN_ON in het CONFIG-register ingeschakeld is. Door te experimenteren met de SLEEP en CLRWDT-instructie alsook de WDT in of uit te schakelen in het CONFIG-register worden er verschillende reset-oorzaken gegenereerd. De volgende figuur toont een mogelijke uitvoer. Dubrul Stijn Master Elektronica-ICT 56.

66 Figuur 39: uitvoer van het reset-programma Opmerkingen Dit programma detecteert elke reset correct, de eerste keer dat de reset zich voordoet. Echter wanneer er zich verschillende maal na elkaar een reset voordoet die gecontroleerd wordt door de /TO en /PDbits (wake-up of WDT) zal deze aangegeven worden als normale MCLR. Dit omdat een normale MCLR juist maar gedetecteerd kan worden door het niet wijzigen van deze bits. Wanneer 2 maal dezelfde reset van dit karakter zich voordoet zijn deze bits vanzelfsprekend ook dezelfde. Ik heb hiervoor geen oplossing gevonden. Dubrul Stijn Master Elektronica-ICT 57.

Microcontroller. De PIC 16F & 18F voor beginners. Drenth Automatic Electronics (DAE) Ismaêl Drenth. Document Versie : Ver 1.0 Plaats.

Microcontroller. De PIC 16F & 18F voor beginners. Drenth Automatic Electronics (DAE) Ismaêl Drenth. Document Versie : Ver 1.0 Plaats. (DAE) Microcontroller De PIC 16F & 18F voor beginners Opdracht Elecktronica Programmeren C in PIC`s Document Versie : Ver 1.0 Plaats : Groningen Ismaêl Drenth 2008 ISBN XX XXX XXXX X Eerste druk, eerste

Nadere informatie

De Arduino-microcontroller in de motorvoertuigentechniek (4)

De Arduino-microcontroller in de motorvoertuigentechniek (4) De Arduino-microcontroller in de motorvoertuigentechniek () E. Gernaat (ISBN 978-90-7930--6) De Atmel ATmega38/P microcontroller. Uitvoering De ATmega38 is een microprocessor van de Amerikaanse firma ATMEL

Nadere informatie

Peripheral Interface Controllers. BRAC clubavond 5-105 PE2WDO

Peripheral Interface Controllers. BRAC clubavond 5-105 PE2WDO Peripheral Interface Controllers -10 PE2WDO Programma Introductie Wat is een PIC Wat heb je nodig om te beginnen Praktijkopdrachten: Voorbeeld met uitleg Opdrachten pag. 2 Wat is een PIC Programmable Intelligent

Nadere informatie

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

Opgave Tussentijdse Oefeningen Jaarproject I Reeks 4: Lcd Interface & Files Opgave Tussentijdse Oefeningen Jaarproject I Reeks 4: Lcd Interface & Files 1 Introductie In deze oefening zal je je LCD display leren aansturen. Je controleert deze display door er instructies naar te

Nadere informatie

ES1 Project 1: Microcontrollers

ES1 Project 1: Microcontrollers ES1 Project 1: Microcontrollers Les 3: Eenvoudige externe hardware & hardware programmeren in C Hardware programmeren in C Inmiddels ben je al aardig op gang gekomen met het programmeren van microcontrollers.

Nadere informatie

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

AVR-DOPER MINI ASSEMBLAGE HANDLEIDING + LAYOUT. Geschreven door: Tom Vocke AVR-DOPER MINI ASSEMBLAGE HANDLEIDING + LAYOUT Geschreven door: Tom Vocke Datum: 28-09-2010 Inleiding: Dit document bevat alle hardware informatie betreffende de AVR-Doper mini. Het eerste deel zal zich

Nadere informatie

;OUTPUTS VOEDING EQU H'00' ; 12V voeding aan/uit A0 / 17 OPEN EQU H'01' ; raam open A1 / 18 DICHT EQU H'02' ; raam dicht A2 / 1

;OUTPUTS VOEDING EQU H'00' ; 12V voeding aan/uit A0 / 17 OPEN EQU H'01' ; raam open A1 / 18 DICHT EQU H'02' ; raam dicht A2 / 1 ; openen van raamservo ; na stroom aan (=laag) op RB8 uitgang RA0 hoog, na 5 sec. openen RA1 (60 sec hoog) dan ook RA1 laag; ; na stroom uit (hoog) op RB8 uitgang RA1 hoog, na 45 sec. sluiten RA2 (60 sec.

Nadere informatie

De Arduino-microcontroller in de motorvoertuigentechniek (8)

De Arduino-microcontroller in de motorvoertuigentechniek (8) De Arduino-microcontroller in de motorvoertuigentechniek (8) E. Gernaat (ISBN 978-90-79302-11-6) 1 Assembly (Assembleertaal) 1.1 Inleiding De Arduino kan ook in assembleertaal (assembly) worden geprogrammeerd.

Nadere informatie

ES1 Project 1: Microcontrollers

ES1 Project 1: Microcontrollers ES1 Project 1: Microcontrollers Les 5: Timers/counters & Interrupts Timers/counters Hardware timers/counters worden in microcontrollers gebruikt om onafhankelijk van de CPU te tellen. Hierdoor kunnen andere

Nadere informatie

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (4)

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (4) De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (4) Timloto o.s. / E. Gernaat / ISBN 978-90-79302-06-2 Op dit werk is de Creative Commens Licentie van toepassing. Uitgave: september 2012

Nadere informatie

VTI Sint-Laurentius De school voor Wetenschap, Techniek en Technologie Pr. Thuysbaertlaan 1 9160 Lokeren www.vti-lokeren.be info@vti-lokeren.

VTI Sint-Laurentius De school voor Wetenschap, Techniek en Technologie Pr. Thuysbaertlaan 1 9160 Lokeren www.vti-lokeren.be info@vti-lokeren. VTI Sint-Laurentius De school voor Wetenschap, Techniek en Technologie Pr. Thuysbaertlaan 1 9160 Lokeren www.vti-lokeren.be info@vti-lokeren.be GEÏNTEGREERDE PROEF Automatische schuifdeur Industriële informatie

Nadere informatie

EmSE presentatie. Starten met de ATtiny2313: Een RGB powerled driver Kees Moerman, 13 juli 2010

EmSE presentatie. Starten met de ATtiny2313: Een RGB powerled driver Kees Moerman, 13 juli 2010 EmSE presentatie Starten met de ATtiny2313: Een RGB powerled driver Kees Moerman, 13 juli 2010 Het probleem Ik wil een LED controller maken Voor zelfgemaakte RGB power-led lampjes Om aan mijn thuisnetwerk

Nadere informatie

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

Accelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368 Accelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368 Handleiding bij het gebruik van een microcontroller in het Accelerometerproject (Project II) Er zijn speciaal voor het Accelerometerproject

Nadere informatie

Microcontrollers Introductie INLMIC Jesse op den Brouw INLMIC/2014-2015

Microcontrollers Introductie INLMIC Jesse op den Brouw INLMIC/2014-2015 Microcontrollers Introductie INLMIC Jesse op den Brouw INLMIC/2014-2015 Microcontroller Uit Wikipedia A microcontroller (sometimes abbreviated µc or uc) is a small computer on a single integrated circuit

Nadere informatie

Tinyserir-RC5. Datasheet. Tinyserir-RC5 Page: 1 of 8

Tinyserir-RC5. Datasheet. Tinyserir-RC5 Page: 1 of 8 9600 bps RS-232 interface voor uitlezing van Ontvangen RC5 codes Led aanduiding bij ontvangst van Infrarood pulsen Led aanduiding goede werking Interne firmware Inwendige oscillator Weinig externe componenten

Nadere informatie

Arduino CURSUS. door Willy - 09-juni-2017

Arduino CURSUS. door Willy - 09-juni-2017 Arduino CURSUS door Willy - w2@skynet.be, 09-juni-2017 OVERZICHT (1) OVERZICHT (2) Historiek Microcontroller (1) Microcontroller (2) Specificaties - Arduino UNO bord Specificaties - ATmega328P chip LET

Nadere informatie

Microcontrollers Labo

Microcontrollers Labo Microcontrollers Labo 8051 based microcontroller ADuC832 from Analog Devices 06/2016 Roggemans M. (MGM) LES 0 Testen en verdelen van de hardware FTP site overlopen Installeren van software om thuis te

Nadere informatie

GEÏNTEGREERDE PROEF. VTI Sint-Laurentius. Pakketweegschaal. Industriële informatie & communicatietechnologie SCHOOLJAAR 2010-2011.

GEÏNTEGREERDE PROEF. VTI Sint-Laurentius. Pakketweegschaal. Industriële informatie & communicatietechnologie SCHOOLJAAR 2010-2011. VTI Sint-Laurentius De school voor Wetenschap, Techniek en Technologie Pr. Thuysbaertlaan 1 9160 Lokeren www.vti-lokeren.be info@vti-lokeren.be GEÏNTEGREERDE PROEF Pakketweegschaal Industriële informatie

Nadere informatie

Handleiding software USB PIC DEV. BOARD

Handleiding software USB PIC DEV. BOARD Handleiding software USB PIC DEV. BOARD V2.0 M.F. van Lieshout & J.G.W. Carpaij 21-03-2006 Handleiding software USB PIC DEV. BOARD Algemene informatie Hier volgt eerst wat algemene informatie over het

Nadere informatie

De Arduino-microcontroller in de motorvoertuigentechniek (2)

De Arduino-microcontroller in de motorvoertuigentechniek (2) De Arduino-microcontroller in de motorvoertuigentechniek (2) E. Gernaat (ISBN 978-90-79302-11-6) 1 Procescomputer 1.1 Microprocessoren algemeen De informatie-verwerking zoals is behandeld, is vrijwel geheel

Nadere informatie

Mechatronica Inleiding tot de PIC microcontroller. Kristof Goris VUB-MECH-R&MM

Mechatronica Inleiding tot de PIC microcontroller. Kristof Goris VUB-MECH-R&MM Mechatronica Inleiding tot de PIC microcontroller Kristof Goris VUB-MECH-R&MM 30 januari 2006 Inhoudsopgave 1 Inleiding 2 1.1 Wat is Mechatronica?...................... 2 1.2 Wat is een Microcontroller?...................

Nadere informatie

Wat is Arduino? Arduino = microprocessor (Atmel)

Wat is Arduino? Arduino = microprocessor (Atmel) Intro tot Arduino Wat is Arduino? Volgens de website: Arduino is an open-source electronics prototyping platform based on flexible, easy-to-use hardware and software. It's intended for artists, designers,

Nadere informatie

Mechatronica Inleiding tot de PIC microcontroller. Kristof Goris VUB-MECH-R&MM

Mechatronica Inleiding tot de PIC microcontroller. Kristof Goris VUB-MECH-R&MM Mechatronica Inleiding tot de PIC microcontroller Kristof Goris VUB-MECH-R&MM februari 2008 Inhoudsopgave 1 Inleiding 2 1.1 Wat is Mechatronica?...................... 2 1.2 Wat is een Microcontroller?...................

Nadere informatie

Hoofdstuk 7. Computerarchitectuur

Hoofdstuk 7. Computerarchitectuur Hoofdstuk 7 Computerarchitectuur 1 controlebus CPU MEMORY I/O databus adresbus Figuur 71 Schematische opbouw van een computersysteem 8 Figuur 72 Een busverbinding Buslijn Out E A In Out E B In Out E C

Nadere informatie

Inductiemeter via de parallelle poort

Inductiemeter via de parallelle poort K.T.A.1-Gent "De Lindenlei" Lindenlei 38 9000 Gent Tel: 09.225.33.04 en 09.225.43.42 Fax: 09.225.52.88 Geïntegreerde proef Inductiemeter via de parallelle poort Naam: Michaël Clinckspoor Richting: Industriële

Nadere informatie

Inleiding microcontrollers. Week 1 Introductie microcontroller Jesse op den Brouw (met dank aan Ben Kuiper) INLMIC/

Inleiding microcontrollers. Week 1 Introductie microcontroller Jesse op den Brouw (met dank aan Ben Kuiper) INLMIC/ Inleiding microcontrollers Week 1 Introductie microcontroller Jesse op den Brouw (met dank aan Ben Kuiper) INLMIC/2018-2019 Microcontroller Uit Wikipedia: A microcontroller (sometimes abbreviated µc or

Nadere informatie

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

Microcontrollers Week 4 Introductie microcontroller Jesse op den Brouw (met dank aan Ben Kuiper) INLMIC/ Microcontrollers Week 4 Introductie microcontroller Jesse op den Brouw (met dank aan Ben Kuiper) INLMIC/2018-2019 Week 3 Lussen Ontdenderen Stack Parameteroverdracht 2 Wachtlussen In een programma willen

Nadere informatie

Gebruiksaanwijzing AVR910 USB Programmer

Gebruiksaanwijzing AVR910 USB Programmer TECHNISCH INSTITUUT SINT-PAULUS Kruisven 25 2400 Mol Gebruiksaanwijzing Schooljaar 2007-2008 Studierichting EE Gebruiksaanwijzing AVR910 USB Programmer Geïntegreerd in AVR-DevL Board Jan Cools Projecten

Nadere informatie

Microcontrollers Week 1 Introductie microcontroller Jesse op den Brouw INLMIC/2014-2015

Microcontrollers Week 1 Introductie microcontroller Jesse op den Brouw INLMIC/2014-2015 Microcontrollers Week 1 Introductie microcontroller Jesse op den Brouw INLMIC/2014-2015 Computersysteem Een systeem dat rekenkundige operaties, data manipulaties en beslissingen kan uitvoeren, aan de hand

Nadere informatie

Stappenmotor Interface. Controller

Stappenmotor Interface. Controller Besturing In deze moderne tijd zal de besturing geheel elektrisch worden uitgevoerd. De bedoeling is dat er voor ieder afgaand spoor een wisseladres gebruikt worden. Dit betekend dan een reeks van 24 aansluitende

Nadere informatie

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (2)

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (2) De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (2) Timloto o.s. / E. Gernaat / ISBN 978-90-79302-06-2 Op dit werk is de Creative Commens Licentie van toepassing. Uitgave: september 2012

Nadere informatie

A Quick Start Guide: AVR programmeren

A Quick Start Guide: AVR programmeren A Quick Start Guide: AVR programmeren In deze guide wordt uitgelegd hoe men kan beginnnen met het programeren van een ATMEL AVR microcontroller. Er zal een testprogramma uit de software library AVRlib

Nadere informatie

Meervoudige Smart-Card Duplicator. Gebruiksaanwijzing

Meervoudige Smart-Card Duplicator. Gebruiksaanwijzing Meervoudige Smart-Card Duplicator Gebruiksaanwijzing Project Specificaties De Smart Card Duplicating PCB is kan zes verschillende type smartcards lezen en schrijven, die allemaal gebaseerd zijn op de microchip

Nadere informatie

De computer als processor

De computer als processor De computer als processor DE FYSIEKE COMPUTER Componenten van de computerconfiguratie Toetsenbord Muis Scanner Microfoon (Extern geheugen) Invoerapparaten Uitvoerapparaten Monitor Printer Plotter Luidspreker

Nadere informatie

Verslag: Computer. Naam: Tyrone Ste Luce. Klas: M4B

Verslag: Computer. Naam: Tyrone Ste Luce. Klas: M4B Verslag: Computer Naam: Tyrone Ste Luce Klas: M4B Inhoud 1. Inleiding 2. Binaire taal 3. Besturingssysteem 4. Hardware 5. Cmos en Bios 6. De processor 7. Internet 1. Inleiding Wanneer is de computer uitgevonden?

Nadere informatie

ES1 Project 1: Microcontrollers

ES1 Project 1: Microcontrollers ES1 Project 1: Microcontrollers Les 2: Architectuur ATmega32 en STK500 Door Hugo Arends, september 2012 Architectuur ATmega32 Een uitgebreide en gedetailleerde beschrijving van de ATmega32 microcontroller

Nadere informatie

16F877A development board cursus deel 1

16F877A development board cursus deel 1 16F877A development board cursus deel 1 Auteur: Stijn Coenen (Stynus) [0909-005] Een tijd geleden waren er development boardjes voor de PIC16F877A te koop. Er was toen beloofd eloofd dat er een cursus

Nadere informatie

ES1 Project 1: Microcontrollers

ES1 Project 1: Microcontrollers ES1 Project 1: Microcontrollers Les 1: Installeren en verifiëren van de SDE Door Hugo Arends, augustus 2012 Microcontrollers Een microcontroller is een elektronische component dat gebruikt wordt om (complexe)

Nadere informatie

EM2 Microcontroller Project. LED cube

EM2 Microcontroller Project. LED cube EM2 Microcontroller Project LED cube Door: Dennis Koster Klas: Tc202 Studentnummer: 536496 Docent: Jan Derriks & Ruud Slokker Versie 1.0 (12-1-2009) Inhoudsopgave Inleiding 3 De onderdelen 4 t/ m 6 Het

Nadere informatie

PIC Callgever Door PA1RUM

PIC Callgever Door PA1RUM PIC Callgever Door PA1RUM Aanleiding Tijdens de radiokampweek 2008 is deze callgever met veel enthousiasme gebouwd. Niet alleen omdat het een zeer eenvoudig en veelzijdig ontwerp is, maar ook omdat het

Nadere informatie

Technology, Innovation & Society Delft

Technology, Innovation & Society Delft Technology, Innovation & Society Delft VOORBLAD SCHRIFTELIJKE TOETSEN OPLEIDING TOETSCODE GROEP : ELEKTROTECHNIEK : MICPRG-sc1 : EQ1 TOETSDATUM : 25 JANUARI 2013 TIJD : 15.00 16.30 uur AANTAL PAGINA S

Nadere informatie

Sequentiële Logica. Processoren 24 november 2014

Sequentiële Logica. Processoren 24 november 2014 Sequentiële Logica Processoren 24 november 2014 Inhoud Eindige automaten Schakelingen met geheugen Realisatie van eindige automaten Registers, schuifregisters, tellers, etc. Geheugen Herinnering van week

Nadere informatie

Microcontrollers. Bart Kardinaal E204 221490 Verslag microcontrollers 28-11-06. Rev 1.0 Status definitief.

Microcontrollers. Bart Kardinaal E204 221490 Verslag microcontrollers 28-11-06. Rev 1.0 Status definitief. Microcontrollers Bart Kardinaal E204 221490 Verslag microcontrollers 28-11-06 Rev 1.0 Status definitief. Voorword. Dit verslag is geschreven in het kader van de opdracht, als onderdeel van het eerste studiejaar

Nadere informatie

Betaalbaar Home Control. Presentatie op bijeenkomst van EmSE: Embedded Systems Eindhoven

Betaalbaar Home Control. Presentatie op bijeenkomst van EmSE: Embedded Systems Eindhoven EmSE presentatie Betaalbaar Home Control Presentatie op bijeenkomst van EmSE: Embedded Systems Eindhoven Ad-hoc presentatie aan de hand van een project waar ik nog mee bezig ben... Nog niet alles is perfect

Nadere informatie

Wat is een busverbinding?

Wat is een busverbinding? Wat is een busverbinding? gemeenschappelijke verbinding tussen CPU, geheugen en I/O-schakelingen onderscheid tussen: databus/adresbus/controlbus intern/extern serieel/parallel unidirectioneel/bidirectioneel

Nadere informatie

De Arduino-microcontroller in de motorvoertuigentechniek (3)

De Arduino-microcontroller in de motorvoertuigentechniek (3) De Arduino-microcontroller in de motorvoertuigentechniek (3) E. Gernaat (ISBN 978-90-79302-11-6) 1 In- en uitgangssignalen van microprocessoren 1.1 Overzicht signalen Informatie van en naar een microprocessor

Nadere informatie

In- en uitgangssignalen van microprocessoren

In- en uitgangssignalen van microprocessoren In- en uitgangssignalen van microprocessoren E. Gernaat 1 Overzicht signalen Informatie van en naar een microprocessor kan parallel of seriëel gebeuren. Bij parallel-overdracht zal elke lijn (draad) een

Nadere informatie

Projectwerk microcontrollers:

Projectwerk microcontrollers: Projectwerk microcontrollers: Doel van het labo Kenmerken van microcontrollers bestuderen Zelfstandig bestuderen van onbekende componenten aan de hand van technische documentatie (datasheets, schema s,

Nadere informatie

Oefeningen Interpretatie I Reeks 6 : Registermachines

Oefeningen Interpretatie I Reeks 6 : Registermachines Oefeningen Interpretatie I Reeks 6 : Registermachines Deze oefeningenreeks behandelt het beschrijven van computationele processen aan de hand van registermachineprogrammaʼs. Registermachines manipuleren

Nadere informatie

Arduino. HCC Vlaanderen - Mechelen 7 februari 2011. Luc De Cock

Arduino. HCC Vlaanderen - Mechelen 7 februari 2011. Luc De Cock Arduino HCC Vlaanderen - Mechelen 7 februari 2011 Luc De Cock Inhoud Wat is Arduino? Wat hebben we nodig? Arduino IDE Voorbeelden Extra tools Uitbreidingen Wat is Arduino? Open source electronica platform

Nadere informatie

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

S88XPressNetLI v1.0. Installatie- en gebruikershandleiding en naslagwerk KDesign Electronics, PCB ontwerp door RoSoft S88XPressNetLI v1.0 Installatie- en gebruikershandleiding en naslagwerk. 2008 KDesign Electronics, PCB ontwerp door RoSoft 3.3 De S88XpressNetLI verbinden met de ROCO versterker Aangezien de S88XpressNetLI

Nadere informatie

2 Algemene opbouw van een computersysteem

2 Algemene opbouw van een computersysteem Procescomputer E. Gernaat 1 Microprocessoren algemeen Informatie-verwerking zoals behandeld is momenteel vrijwel geheel overgenomen door microprocessoren. Wanneer we voortborduren op het idee van combinatorische

Nadere informatie

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (3)

De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (3) De AT90CAN microprocessor van ATMEL in de motorvoertuigentechniek (3) Timloto o.s. / E. Gernaat / ISBN 978-90-79302-06-2 Op dit werk is de Creative Commens Licentie van toepassing. Uitgave: september 2012

Nadere informatie

ROBOTICS CCFZ 13/5/2009

ROBOTICS CCFZ 13/5/2009 ROBOTICS CCFZ Motorsturing Het is niet de bedoeling van onze programmeerwerkzaamheden om alleen maar een of meer lampjes te laten branden om ze daarna weer uit doen gaan. We willen een racerobot bouwen,

Nadere informatie

De CB channel controller TMS1022NL/NLL en TMS1023NL/NLL. ( Dit is een maskrom-programmed version van de Texas Instruments TMS1000 family)

De CB channel controller TMS1022NL/NLL en TMS1023NL/NLL. ( Dit is een maskrom-programmed version van de Texas Instruments TMS1000 family) De CB channel controller TMS1022NL/NLL en TMS1023NL/NLL ( Dit is een maskrom-programmed version van de Texas Instruments TMS1000 family) Ik begin even met een korte inleiding over de TMS1000. ( Wil je

Nadere informatie

Handleiding HCS VB5224

Handleiding HCS VB5224 Handleiding HCS VB5224 Digitale Uitgangsmodule met 4 uitgangen HCS Building Automation Kompasstraat 7, 2901AM Capelle a/d IJssel Postbus 182, 2900AD Capelle a/d IJssel Tel. +31(0)10 458 00 00 Fax +31(0)10

Nadere informatie

led 0 aan Opdracht: 1 Opdracht: 4

led 0 aan Opdracht: 1 Opdracht: 4 Opdracht: 1 Maak een set meetkabels zoals op foto blz.7 is aangegeven, lengte 60cm. Maak een programmeerkabel zoals op de foto van blz.5 is aangegeven. Houd je ook hier exact aan de kabel kleuren en posities

Nadere informatie

informatica. hardware. overzicht. moederbord CPU RAM GPU architectuur (vwo)

informatica. hardware. overzicht. moederbord CPU RAM GPU architectuur (vwo) informatica hardware overzicht moederbord CPU RAM GPU architectuur (vwo) 1 moederbord basis van de computer componenten & aansluitingen chipset Northbridge (snel) Southbridge ("traag") bussen FSB/HTB moederbord

Nadere informatie

1 graduaat Elektriciteit/elektronica KHLim - dep. IWT HALFGELEIDER-GEHEUGENS HALFGELEIDER GEHEUGENS STATISCH DYNAMISCH ROM PROM EPROM EEROM

1 graduaat Elektriciteit/elektronica KHLim - dep. IWT HALFGELEIDER-GEHEUGENS HALFGELEIDER GEHEUGENS STATISCH DYNAMISCH ROM PROM EPROM EEROM HALFGELEIDER-GEHEUGENS HALFGELEIDER GEHEUGENS WILLEKEURIG TOEGANKELIJK SERIEEL TOEGANKELIJK RAM ROM SRG CCD MBM STATISCH DYNAMISCH ROM PROM EPROM EEROM (ALLEEN-)LEES GEHEUGEN = ROM ROM = Read Only Memory:

Nadere informatie

Microcontrollers. Robert Langenhuysen, PA0RYL

Microcontrollers. Robert Langenhuysen, PA0RYL Microcontrollers Robert Langenhuysen, PA0RYL 1 RF Seminar B&D 2013 Eisen Niet al te ingewikkeld Kits, geschikt voor experimenteren, rapid prototyping, etc. I/O mogelijkheden HDMI, VGA, SD, analoog, digital,

Nadere informatie

18 Embedded systemen 1

18 Embedded systemen 1 18 Embedded systemen 1 r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15(pc) NZCV CPSR Figuur 18.1 ARM-programmeermodel Byte 0 Byte 1 Byte 2 Byte 3 Byte 3 Byte 2 Byte 1 Byte 0 Figuur 18.2 Endian conversie

Nadere informatie

Tentamen 17 augustus 2000 Opgaven Computerarchitectuur

Tentamen 17 augustus 2000 Opgaven Computerarchitectuur Tentamen 17 augustus 2000 Opgaven - 1 - Computerarchitectuur Tentamen Computerarchitectuur (213005) 17 augustus 2000 2 bladzijden met 5 opgaven 3 antwoordbladen Het raadplegen van boeken, diktaten of aantekeningen

Nadere informatie

Hoofdstuk 19. Embedded systemen

Hoofdstuk 19. Embedded systemen Hoofdstuk 19 Embedded systemen 1 r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15(pc) NZCV CPSR Figuur 19.1: ARM-programmeermodel. Byte 0 Byte 1 Byte 2 Byte 3 Byte 3 Byte 2 Byte 1 Byte 0 Figuur 19.2:

Nadere informatie

Vogelaar Electronics DRAFT DelphiStamp VE08201

Vogelaar Electronics DRAFT DelphiStamp VE08201 1 Vogelaar Electronics Dorpsstraat 90 3751 ES Bunschoten Netherlands Telefoon +31 (0)33 2980727 Fax +31 (0)847 115096 E-mail info@vogelaar-electronics.com DS_intro.doc 19-07-2005 DRAFT DelphiStamp VE08201

Nadere informatie

Meet the Arduino FAMILY

Meet the Arduino FAMILY www.arduino.cc Arduino is HARDWARE Meet the Arduino FAMILY Mega Lilypad Ethernet Mini En meer... Gemeenschappelijke kenmerken Printkaartje met een ATMEL microcontroller Digitale en analoge in- en/of uitgangen

Nadere informatie

Labo digitale technieken

Labo digitale technieken .. Het gebied "elektronica" is reeds geruime tijd onderverdeeld in twee specialiteiten, namelijk de analoge en de digitale technieken. Binnen analoge schakelingen gebeurt de signaalverwerking met lineaire

Nadere informatie

MODBUS remote I/O-unit type MODBUS4S110

MODBUS remote I/O-unit type MODBUS4S110 MODBUS remote I/O-unit type MODBUS4S110 Opvragen en aansturen van I/O via MODBUS RTU over RS232 of MODBUS IP of directe TCP/IP-socket. De MODBUS4S110 is een unit die als slave via MODBUS RTU (RS232) of

Nadere informatie

Workshop Arduino voor beginners deel 2

Workshop Arduino voor beginners deel 2 Workshop Arduino voor beginners deel 2 Voor deze workshop is het van belang dat je deel 1 van de workshop hebt afgerond. In deze workshop zitten meerdere opdrachten die elkaar niet allemaal op hoeven te

Nadere informatie

Besturingssystemen: WPO

Besturingssystemen: WPO Besturingssystemen: WPO PIC18F2455 24 februari 2015 Doel van de labo s Aan de hand van 6 labolessen zullen we de basisbegrippen van een ingebed systeem verkennen. Hiernaast zullen we ook de basisconcepten

Nadere informatie

Handleiding HCS VB5248

Handleiding HCS VB5248 Handleiding HCS VB5248 Analoge Uitgangsmodule met 8 uitgangen HCS Building Automation Kompasstraat 7a, 2901AM Capelle a/d IJssel Postbus 182, 2900AD Capelle a/d IJssel Tel. +31(0)10 458 00 00 Fax +31(0)10

Nadere informatie

Manual Debug software. VMC next

Manual Debug software. VMC next Manual Debug software VMC next Land: NL Ned Air bv maart 2012 Ver. 0.05 1 Algemeen... 3 2 Opbouw VMC next... 3 3 VMC Next Debugger... 4 4 Status... 7 5 Registers... 8 5.1 Knoppen... 9 5.1.1 Download...

Nadere informatie

Handleiding HCS VB5118

Handleiding HCS VB5118 Handleiding HCS VB5118 Digitale Ingangsmodule met 8 ingangen HCS Building Automation Kompasstraat 7, 2901AM Capelle a/d IJssel Postbus 182, 2900AD Capelle a/d IJssel Tel. +31(0)10 458 00 00 Fax +31(0)10

Nadere informatie

In deze mannual zal ik het voorbeeld van de Led cube gebruiken maar de principes zijn op alles toepasbaar.

In deze mannual zal ik het voorbeeld van de Led cube gebruiken maar de principes zijn op alles toepasbaar. Parallelle poort interface met Visual basic Waarom dit naslagwerk: Ik was zelf een beginner op dit vlak en heb dagen lopen zoeken naar correcte en up to date info inzake de aansturing van pc naar elektronica

Nadere informatie

Arduino : Morse Voltmeter

Arduino : Morse Voltmeter Arduino : Morse Voltmeter Ooit was ik begonnen met het leren programmeren van een PIC processor in assembler. Maar ja, dat ging niet zo vlot, er kwamen andere dringende zaken en de PIC vloog weer in de

Nadere informatie

Aan de slag met het E-blocks Starter Pack

Aan de slag met het E-blocks Starter Pack Aan de slag met het E-blocks Starter Pack Dit document is bedoeld om u op weg te helpen met E-Blocks en de daarbij behorende software. Na een controle of het geleverde pakket compleet is, zullen wij u

Nadere informatie

De PIC Microcontroller

De PIC Microcontroller 1 De PIC Microcontroller Wat is het en wat kun je er mee? November 2010, v0.9 Lex Peters PE1CVJ Ben Emons PB2BN Dick Bronsdijk PA3HBS Inhoud presentatie 2 Waarom starten met een PIC Microcontroller? hoe

Nadere informatie

MAKERKLAS WORKSHOP ARDUINO. Maandag 7 december 2015

MAKERKLAS WORKSHOP ARDUINO. Maandag 7 december 2015 1 MAKERKLAS WORKSHOP ARDUINO Maandag 7 december 2015 2 AAN DE SLAG! ONDERDELEN Je hebt de beschikking over een Arduino Starter Kit met een heleboel onderdelen. We gaan ze in de ze workshop niet allemaal

Nadere informatie

LocoServo Handleiding

LocoServo Handleiding LocoServo Handleiding HDM12 Disclaimer van Aansprakelijkheid: Het gebruik van alle items die kunnen worden gekocht en alle installatie-instructies die kunnen worden gevonden op deze site is op eigen risico.

Nadere informatie

K8048 PIC PROGRAMMER BOARD

K8048 PIC PROGRAMMER BOARD K8048 PIC PROGRAMMER BOARD K8048 2003 Velleman Components Velleman Kits Welcome to the exciting world of Velleman Kits. Velleman Kit is known all over the world for our High Quality electronic kits. Our

Nadere informatie

KAEDU : Outputs en inputs

KAEDU : Outputs en inputs KAEDU : Outputs en inputs LED Er zijn in totaal 6 LEDS (exclusief de IR) die je kan gebruiken. Hiervoor moeten de overeenkomstige jumpers wel in de juiste stand staan. Zoals je op onderstaande foto ziet

Nadere informatie

DDS chips. DDS = Direct Digital (frequency) Synthesis. Output = sinusvormig signaal. Maximum frequentie = ½ klokfrequentie

DDS chips. DDS = Direct Digital (frequency) Synthesis. Output = sinusvormig signaal. Maximum frequentie = ½ klokfrequentie www.arduino.cc Arduino en DDS DDS chips DDS = Direct Digital (frequency) Synthesis Output = sinusvormig signaal Maximum frequentie = ½ klokfrequentie Frequentie bepaald door tuning word Grootste fabrikant:

Nadere informatie

Microcontrollers PIC16F84. Inhoud

Microcontrollers PIC16F84. Inhoud Microcontrollers PIC16F84 Inhoud Korte handleiding Programmastructuren Het programmeermodel van de PIC16F84 Het statusregister I/O van de PIC16F84 Basisschema Looplicht met RC Oscillator In-Circuit Serial

Nadere informatie

Installatie handleiding

Installatie handleiding Installatie handleiding Pagina 2 van 7 1 Inleiding Vanwege de zeer uitgebreide elektronica op Porsche voertuigen is het noodzakelijk dat de diagnosesoftware enorm snel evolueert. De installatie en verdere

Nadere informatie

Geheugenbeheer. ICT Infrastructuren 2 december 2013

Geheugenbeheer. ICT Infrastructuren 2 december 2013 Geheugenbeheer ICT Infrastructuren 2 december 2013 Doelen van geheugenbeheer Reloca>e (flexibel gebruik van geheugen) Bescherming Gedeeld/gemeenschappelijk geheugen Logische indeling van procesonderdelen

Nadere informatie

Installeren software FSM2000 FSM2000. Anna van Schuurmanstraat 412 5344 TW OSS. www.hr-electronics.nl

Installeren software FSM2000 FSM2000. Anna van Schuurmanstraat 412 5344 TW OSS. www.hr-electronics.nl FSM2000 Anna van Schuurmanstraat 412 5344 TW OSS www.hr-electronics.nl Installeren FSM2000 Versie 1.05 Pagina 1 van 5 Document versie: 1.00 Met het programma FSM2000 versie 1.05 is het mogelijk om zelf

Nadere informatie

De Arduino-microcontroller in de motorvoertuigentechniek (6)

De Arduino-microcontroller in de motorvoertuigentechniek (6) De Arduino-microcontroller in de motorvoertuigentechniek (6) E. Gernaat (ISBN 978-90-79302-11-6) 1 De Arduino Programmeeromgeving (IDE) 1.1 Inleiding Als we naar de Arduino site gaan kunnen we daar de

Nadere informatie

LocoServo Handleiding

LocoServo Handleiding LocoServo Handleiding HDM12 Disclaimer van Aansprakelijkheid: Het gebruik van alle items die kunnen worden gekocht en alle installatie-instructies die kunnen worden gevonden op deze site is op eigen risico.

Nadere informatie

Locobuffer Handleiding

Locobuffer Handleiding Locobuffer Handleiding HDM09 Disclaimer van Aansprakelijkheid: Het gebruik van alle items die kunnen worden gekocht en alle installatie-instructies die kunnen worden gevonden op deze site is op eigen risico.

Nadere informatie

Programmering Tiny45 voor de DCC locdecoder

Programmering Tiny45 voor de DCC locdecoder Programmering Tiny45 voor de DCC locdecoder Dit is een beschrijving voor het programmeren van de Tiny45 van de locdecoder. Voor de eerste programmering is een programmer voor Atmel AVR mikrocontrollers

Nadere informatie

B3C 70cm converter besturing. v1.0 2010 PE5PVB www.het bar.net pe5pvb@het bar.net

B3C 70cm converter besturing. v1.0 2010 PE5PVB www.het bar.net pe5pvb@het bar.net B3C 70cm converter besturing v1.0 2010 PE5PVB www.het bar.net pe5pvb@het bar.net Deze schakeling en de bijbehorende software mag niet worden gedupliceerd voor commerciële verkoop zonder uitdrukkelijke

Nadere informatie

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

Van Poort tot Pipeline. Ben Bruidegom & Wouter Koolen-Wijkstra AMSTEL Instituut Universiteit van Amsterdam Van Poort tot Pipeline Ben Bruidegom & Wouter Koolen-Wijkstra AMSTEL Instituut Universiteit van Amsterdam Van Poort tot Pipeline Pipeline processor One cycle machine Calculator File of registers Assembly

Nadere informatie

Arduino. Arduino UNO. Sam Decoster. CoderDojo Roeselare. Sam Decoster

Arduino. Arduino UNO. Sam Decoster. CoderDojo Roeselare. Sam Decoster Arduino Arduino UNO Sam Decoster CoderDojo Roeselare Sam Decoster Inleiding Arduino is een open-source ontwikkelbord, waarmee het mogelijk wordt om informatica te koppelen aan fysieke objecten. Het is

Nadere informatie

Spanningdriver LEDVD5CH20A-V7 Real Time Clock met LCD scherm

Spanningdriver LEDVD5CH20A-V7 Real Time Clock met LCD scherm Spanningdriver LEDVD5CH20A-V7 Real Time Clock met LCD scherm Spanningdriver waarbij de uitgangen door de Real Time Clock worden ingesteld door middel van user interface print met LCD display De vijf kanalen

Nadere informatie

Inhoud. 1 De Microcontroller 1. 2 De taal C Declaraties Functies In- en uitvoer Voorwaardelijke opdrachten 41

Inhoud. 1 De Microcontroller 1. 2 De taal C Declaraties Functies In- en uitvoer Voorwaardelijke opdrachten 41 Inhoud 1 De Microcontroller 1 1.1 Embedded Systemen............................ 1 1.2 De architectuur van de microprocessor en de microcontroller. 4 1.3 Geheugens en geheugenstructuur...................

Nadere informatie

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

Besturing van de Miniatuurwereld RM-U. Gebruik van de Bootloader Besturing van de Miniatuurwereld RM-U Gebruik van de Bootloader Auteur: Leon J.A. van Perlo Versie: 1.0 Datum: 24 december 2012 Release beheer Deze handleiding is van toepassing op Print o RM-U Rev 00

Nadere informatie

Een intelligent DMX netwerk

Een intelligent DMX netwerk WORKSHOP STEPP Een intelligent DMX netwerk WORKSHOP STEPP Wat is DMX? Een intelligent DMX netwerk Demo opstelling Probleem oplossing Wat is DMX? Hoe is het DMX signaal ontstaan DMX in de praktijk Hoe

Nadere informatie

Klas : 5 Industriële ICT Herhalingsvragen reeks 1 PC-techniek

Klas : 5 Industriële ICT Herhalingsvragen reeks 1 PC-techniek Klas : 5 Industriële ICT Herhalingsvragen reeks 1 PC-techniek VTI St.- Laurentius Neem eerst de tekst in het boek door, doe dit enkele keren en probeer uiteraard te onthouden wat je leest. Los nadien de

Nadere informatie

Tentamen Computersystemen

Tentamen Computersystemen Tentamen Computersystemen baicosy6 2e jaar bachelor AI, 2e semester 21 oktober 213, 9u-11u OMHP D.9 vraag 1 Van een Single Cycle Harvard machine hebben de componenten de volgende propagation delay time:

Nadere informatie

RAM geheugens. Jan Genoe KHLim. Situering RAM-geheugens. Geheugens. Halfgeleider Geheugens. Willekeurig toegankelijk geheugen

RAM geheugens. Jan Genoe KHLim. Situering RAM-geheugens. Geheugens. Halfgeleider Geheugens. Willekeurig toegankelijk geheugen Jan Genoe KHLim Situering RAM-geheugens Geheugens Halfgeleider Geheugens Serieel toegankelijk geheugen Willekeurig toegankelijk geheugen Read Only Memory ROM Random Access Memory RAM Statische RAM SRAM

Nadere informatie

-Een stukje geschiedenis van de PC (personal computer)

-Een stukje geschiedenis van de PC (personal computer) -Een stukje geschiedenis van de PC (personal computer) De pc is bedacht in 1833 Door gebrek aan onderdelen kwam de eerst werkende PC 100 jaar later Gewicht: 35 ton (35.000 kilo!) en kamervullend. Zie de

Nadere informatie