Wat is een Microcontroller? Studenten Gids
VERSIE 2.2
Inhoudstabel · Pagina i
GARANTIE Parallax geeft een garantie op defecten van de goederen en materialen en werkuren voor een periode van 14 dagen. Als u een defect ontdekt, zal Parallax, volgens hun optie, herstellen, vervangen of de aankoopprijs terugbetalen. Bel naar het “Return Merchandise Authorization (RMA)” nummer, schrijf het nummer op de buitenkant van de doos en stuur het terug naar Parallax. Gelieve uw naam, telefoonnummer, adres en probleemomschrijving erbij te voegen. Parallax zal uw aankoop of de vervanging ervan terugsturen, met dezelfde methode zoals u het naar Parallax stuurde.
14-DAGEN GELD TERUG GARANTIE Als binnen de 14 dagen dat u uw product heeft gekocht, u constateert dat het uw verwachtingen niet vervult, dan kan u het product terugsturen en een volledige terugbetaling verwachten. Parallax zal de aankoopprijs van het product terugbetalen, uitgezonderd vervoer, transpoort en inpak kosten. Dit geldt niet voor producten die beschadigd of aangepast zijn. Gelieve de website te bekijken voor de allerlaatste garantie formatie.
COPYRIGHTS EN TRADEMARKS Dit document is kopierecht beschermd in 2003-2004 door Parallax, Inc. Bij downloaden of printen van dit document of software gaat u akkoord dat het exclusief gebruikt wordt met Parallax producten. Alle andere gebruik is niet toegestaan en kan een schending van het copyright van Parallax zijn. Dit kan lijden tot een wettelijke veroordeling volgens het kopierecht of het eigendomsrecht. Elke duplicatie van dit document voor commerciële doeleinden is uitdrukkelijk verboden door Parallax Inc. Duplicatie voor onderwijs is toegestaan onder volgende condities: Parallax Inc. geeft de toestemming aan de gebruiker om dit document te downloaden, te kopiëren en te verdelen zonder de toestemming van Parallax. Dit recht is gebaseerd op volgende voorwaarden: de tekst, of gelijk welk deel, mag niet gedupliceerd worden voor commercieel gebruik, het mag enkel gebruikt worden voor onderwijs doelstellingen en als het alleen samen gebruikt wordt met de Parallax producten. De gebruiker mag enkel de kost van duplicatie aan de student aanrekenen. Deze tekst is gedrukt te verkrijgen bij Parallax Inc. Aangezien we de tekst in grote oplages drukken, is de verkoopprijs dikwijls lager dan de typische duplicatie kosten. BASIC Stamp, Stamp in Class, Board of Education en SumoBot zijn een geregistreerd merk van Parallax Inc. HomeWork Board, Boe-Bot en Toddler zijn een geregistreerd merk van Parallax Inc. Als u beslist om de naam BASIC Stamp, Stamps in Class, Board of Education, HomeWork Board, Boe-Bot of Toddler op uw website of in gelijk welk drukwerk, dient u te vermelden: “BASIC Stamp is een geregistreerd merk van Parallax, Inc.” “Stamps in Class is een geregistreerd merk van Parallax, Inc.”, “Board of Education is een geregistreerd merk van Parallax, Inc.”, “SumoBot is een geregistreerd merk van Parallax, Inc.” “HomeWork Board is een geregistreerd merk van Parallax, Inc.”, “Boe-Bot is een geregistreerd merk van Parallax, Inc.”, of “Toddler is een geregistreerd merk van Parallax, Inc.” Ander product namen en merken of geregistreerde merken behoren tot hun rechtmatige eigenaars.
ISBN 1-928982-02-6 AANSPRAKELIJKHEIDS-ONTKENNING Parallax, Inc. is niet verantwoordelijk voor speciale, toevallige of gelijk welke andere productie schade onder gelijk welke garantie, of geldende theorie, inclusief verlies van winst, tijdsverlies, goodwill, beschadiging van, of vervanging van uitrusting en eigendom, geen enkele kost voor herstelling, herprogrammeren of herproduceren van data in of door gebruikt door Parallax producten. Parallax is niet verantwoordelijk voor gelijk welke persoonlijke schade, inclusief gezondheid en levensproblemen komende van gelijk wel product. U neemt volledige verantwoordelijkheid voor uw BASIC Stamp en robot toepassing, hoe levensgevaarlijk deze ook moge zijn.
Pagina ii · Wat is een Microcontroller?
WEB SITE EN DISCUSSIE LIJSTEN De Parallax Inc. Web site (www.Parallax.com) heeft verschillende download, producten, gebruikers applicaties en online bestellingmogelijkheden van de onderdelen gebruikt in deze tekst. We onderhouden ook verschillende e-mail discussie lijsten voor personen geïnteresseerd in het gebruikt van Parallax producten. Deze lijst is toegankelijk op www.Parallax.com via Support → Discussion Groups menu. Dit zijn de lijsten die we in stand houden:
BASIC Stamps – Met meer dan 4,000 ingeschrevenen is deze lijst ruim benut door ingenieurs, hobbyisten en studenten die hun BASIC Stamp project meedelen en vragen stellen. Stamps in Class – Gemaakt voor onderwijzers en studenten, deze lijst heeft ongeveer 650 ingeschrevenen die schrijven over Stamps in Class curriculum in hun lessen . Deze lijst geeft zowel studenten als onderwijzers de kans vragen te stellen en antwoorden te krijgen. Parallax Educators – Exclusief voor onderwijzers die de Stamps in Class ontwikkelingen verspreiden. Parallax heeft deze groep gemaakt om feedback te krijgen en een forum van onderwijzers te voorzien. Parallax Translators – Bestaat uit ongeveer 40 personen, waarvan het doel is Parallax documentatie te vertalen vanuit het Engels naar andere talen. Parallax voorziet aanpasbare Word documenten om het vertalen te vereenvoudigen en probeert de vertaling te coördineren met nieuwe publicaties. Toddler Robot – Een gebruiker maakte dit forum om te schrijven over applicaties en programmering van de Parallax Toddler robot. SX Tech – Discussie over programmering van de SX microcontroller met Parallax samenstelling, talen en gebruiksvoorwerpen en 3e stap BASIC en C compilators. Ongeveer 600 leden. Javelin Stamp – Discussie over applicatie en ontwerp gebruik makende van de Javelin Stamp, een Parallax module dat te programmeren is doormiddel van een onderdeel van de Sun Microsystemen’ Java® programma taal. Ongeveer 250 leden.
ERRATA Er is heel veel aanacht aan de correctheid van de tekst besteed, maar toch kunnen er nog fouten zijn. Indien u een fout vindt, laat het ons weten door een e-mail te sturen naar
[email protected]. We streven continu naar verbetering van al onze materialen voor onderwijsdoelstellingen, documentatie en het frequent verbeteren van onze teksten. Af en toe zal er een errata lijst met gekende fouten en verbeteringen gezet worden op de website, www.parallax.com. Gelieve dan ook regelmatig een kijkje te nemen op de gratis download pagina.
Inhoudstabel · Pagina iii
Inhoudstabel Voorwoord...................................................................................................................7 Publiek ............................................................................................................................7 Support en Discussie Groepen.......................................................................................7 Onderwijs Gids ...............................................................................................................8 De Stamps in Class Curriculum......................................................................................8 Vertalingen......................................................................................................................9 Speciale Bijdragen........................................................................................................10
Hoofdstuk #1: Aan de Slag ........................................................................................1 Hoeveel Microcontrollers Heeft u Vandaag Gebruikt?....................................................1 De BASIC Stamp 2 - Uw Nieuwe Microcontroller ...........................................................1 Hardware en Software ....................................................................................................5 Activiteit #1: Getting the Software...................................................................................5 Activiteit #2: Installerne van de Software........................................................................9 Activiteit #3: Set Up van de Hardware en Testen van het Systeem .............................12 Activiteit #4: Eerste Programma ...................................................................................19 Activiteit #5: Antwoorden Opzoeken.............................................................................26 Activiteit #6: Introductie van ASCII Code......................................................................29 Activiteit #7: Indien u Klaar Bent...................................................................................31 Samenvatting................................................................................................................32
Hoofdstuk #2: Lichten Aan – Lichten Uit ...............................................................37 Indicatie Lichten............................................................................................................37 Een Licht Emitting Diode (LED) ....................................................................................37 Activiteit #1: Bouwen en Testen van een LED Circuit ..................................................38 Activiteit #2: Aan/Uit Sturing met de BASIC Stamp ......................................................46 Activiteit #3: Tellen en Herhalen ...................................................................................52 Activiteit #4: Bouwen en Testen van een tweede LED Circuit......................................56 Activiteit #5: Stroomrichting Gebruiken om dubbelkleurige LEDs te sturen .................60 Samenvatting................................................................................................................67
Hoofdstuk #3: Digitale Input - Druktoetsen ...........................................................71 Te Vinden op rekenmachines, spelletjes e.a. ...............................................................71 Ontvangen en Zenden van Hoge en Lage Signalen.....................................................71 Activiteit #1: Testen van een DrukToets met een LED Circuit......................................71 Activiteit #2: Lezen van een Druktoets met de BASIC Stamp ......................................75 Activiteit #3:Druktoetsen besturen een LED Circuit......................................................80 Activiteit #4: Twee Druktoetsen besturen Twee LED Circuits ......................................83 Activiteit #5: Reactietijd Test.........................................................................................88 Samenvatting................................................................................................................96
Pagina iv · Wat is een Microcontroller?
Hoofdstuk #4: Bewegingssturing......................................................................... 103 Microgestuurde Beweging .......................................................................................... 103 Aan/Uit Signalen en Motor Bewegingen..................................................................... 103 Activiteit #1: Aansluiten en Testen van de Servo ....................................................... 103 Activiteit #2: Positiesturing met uw Computer ............................................................ 118 Activiteit #3: Omzetten van Positie naar Beweging .................................................... 124 Activiteit #4: Druktoetsbestuurde Servo ..................................................................... 127 Samenvatting.............................................................................................................. 133
Hoofdstuk #5: Bewegingen Meten ....................................................................... 137 Aanpassen van draai en BewegingsMachines........................................................... 137 De Variabele Weerstand – Een Potentiometer........................................................... 137 Activiteit #1: Bouwen en Testen van het Potentiometer Circuit.................................. 139 Activiteit #2: Meten van Weerstand door Tijdsmetingen ............................................ 141 Activiteit #3: Lezen van de Dial met de BASIC Stamp ............................................... 147 Activiteit #4: Sturen van Servo's met een Potentiometer ........................................... 150 Samenvatting.............................................................................................................. 158
Hoofdstuk #6: Digitale Display ............................................................................. 163 De Alledaagse Digitale Display .................................................................................. 163 What’s a 7-Segment Display? .................................................................................... 163 Activiteit #1: Bouwen en Testen van de7-Segment LED Display ............................... 165 Activiteit #2: Besturen van de 7-Segment LED Display.............................................. 169 Activiteit #3: Weergeven van Digits ............................................................................ 172 Activiteit #4: Weergeven van de Draai Positie............................................................ 179 Samenvatting.............................................................................................................. 184
Hoofdstuk #7: Licht Meten .................................................................................... 187 Toestellen die Lichtsensoren Bevatten....................................................................... 187 Introductie van de Photoweerstand ............................................................................ 187 Activiteit #1: Bouwen en Testen van een Licht Meter................................................. 188 Activiteit #2: Licht Metingen omzetten in een Grafiek................................................. 191 Activiteit #3: Licht Volgsysteem .................................................................................. 195 Activiteit #4: Simpele Licht Meter ............................................................................... 201 Samenvatting.............................................................................................................. 213
Hoofdstuk #8: Frequentie en Geluid .................................................................... 217 Uw dag en Elektronische Beeps................................................................................. 217 Microcontrollers, Luidsorekers, Beeps and Aan/Uit Signalen..................................... 217 Activiteit #1: Bouwen en Testen van de Luidspreker.................................................. 218 Activiteit #2: Actie Geluiden........................................................................................ 220 Activiteit #3: Musikale Noten en Eenvoudige Liedjes ................................................. 225 Activiteit #4: Microcontroller Muziek ........................................................................... 231 Activiteit #5: Mobiele Telefoon RingTones ................................................................. 243
Inhoudstabel · Pagina v
Samenvatting..............................................................................................................255
Hoofdstuk #9: Electronic Building Blocks...........................................................259 Die Kleine Zwarte Chips .............................................................................................259 Uitbreiden van Projecten met "Peripheral Integrated Circuits" ...................................260 Activiteit #1: Controle van Stroom met een Transistor ...............................................261 Activiteit #2: Introductie van de Digitale Potentiometer ..............................................263 Samenvatting..............................................................................................................273
Hoofdstuk #10: Draaien van de Gehele Show .....................................................277 Subsysteem Integratie ................................................................................................277 Activiteit #1: Bouwen en Testen van elk DruktoetsCircuit ..........................................278 Activiteit #2: Bouwen en Testen van elk RC-Tijd Circuit.............................................281 Activiteit #3: Subsysteem Integratie Voorbeeld ..........................................................283 Activiteit #4: Ontwikkeling en Bijvoegen van een Software Subsysteem ...................287 Samenvatting..............................................................................................................293
Appendix A: USB naar Seriële Adapter................................................................297 Appendix B: Onderdelen en Stukken Lijst...........................................................299 Appendix C: BASIC Stamp en Carrier Board Componenten en Functies ........303 Appendix D: Batterij en Stroomvoorziening........................................................307 Appendix E: Probleem- Oplossing .......................................................................311 Appendix F: Meer Omtrent Elektriciteit ................................................................315 Appendix G: RTTTL Formaat Samenvatting........................................................323 Index ........................................................................................................................325
Voorwoord · Pagina vii
Voorwoord Deze tekst beantwoordt de vraag “Wat is een microcontroller?” door aan studenten te tonen hoe ze hun eigen ontwerp en intelligente uitvindingen met Parallax Inc. BASIC Stamp® microcontroller module kunnen maken. De activiteiten in deze tekst bevatten een variatie van leuke en interessante experimenten ontwikkelt om de student zijn verbeelding te laten aanspreken door gebruik te maken van beweging, licht, geluid, en tactische feedback. Deze activiteiten introduceren de student in een variëteit van basis principes in de branche van programmering, elektriciteit en elektronica, wiskunde en fysica. Meerdere van deze activiteiten faciliteren presentaties van praktische ontwerpen, gebruikt door ingenieurs en techniekers in het creëren van moderne machines en applicaties met behulp van standaard goedkope onderdelen.
PUBLIEK Deze tekst is zo gestructureerd dat het kan gebruikt worden door een grote variëteit van studenten en vrije studenten. Middelbare schoolstudenten kunnen aan de hand van de voorbeelden in deze tekst in een begeleide manier simpel volgen en de instructies markeren. Aan de andere hand van het spectrum, pre-enginieur studenten hun verstaanbaarheid en problem-solving talent kan getest worden met de vragen, oefeningen en projecten (met oplossingen) in elke hoofdstuk samenvatting. De vrije student kan werken op zijn eigen tempo en hulp krijgen van het Stamps in Class® Yahoo Groep forum hieronder geciteerd.
ONDERSTEUNING EN DISCUSSIE GROEPEN De volgende twee Yahoo! Discussie Groepen zijn ter beschikking voor diegene die ondersteuning wensen in het gebruik van de tekst. Deze groepen zijn bereikbaar via www.parallax.com onder Discussion Groups on the Support menu. Stamps In Class Group: Open voor studenten, onderwijzers en vrije studenten, dit forum laat toe om de leden elkaar vragen op te lossen en antwoorden te delen met anderen over hun werk, project, activiteit, oefeningen in deze tekst. Parallax Educator’s Group: Dit geleide forum voorziet ondersteuning van onderwijzers en staat open voor feedback om de Stamps in Class curriculum te optimaliseren. Om bij deze groep aan te sluiten, moet u een bewijs van onderwijzer kunnen voorleggen aan Parallax. Het onderwijzers boek voor deze tekst is gratis te downloaden vanop het forum.
Pagina viii · Wat is een Microcontroller?
Educational Support:
[email protected] Contacteer het Parallax Stamps in Class Team rechtstreeks indien u moeilijkheden hebt met inschrijven op een van deze 2 Yahoo! Groepen, of indien u vragen heeft over het materiaal in deze tekst, onze Stamps in Class Curriculum, onze educator’s Courses, of gelijk welke vraag over ons onderwijsdiensten. Educational Sales:
[email protected] Contacteer ons verkoopsteam voor informatie rond onderwijs kortingen en klaspaketten voor de Stamps in Class kits en andere producten. Technical Support:
[email protected] Contacteer ons technisch ondersteuningsteam voor algemene vragen over set-up van om het eender welk hardware of software produkt.
ONDERWIJS GIDS Elk Hoofdstuk samenvatting bevat een reeks vragen, oefeningen en projecten met bijhorende oplossingen. Een onderwijsgids is ook te verkrijgen in tekst formaat, het bevat een extra set van opgeloste vragen, oefeningen en projecten, evenals uitgebreidere en alternatieve oplossingen. De onderwijsgids is ook vrij te verkrijgen in word en pdf formaat als u zich aansluit bij de Parallax Onderwijsgroep op Yahoo of een e-mail stuurt naar
[email protected]. Om deze bestanden te verkrijgen dient er wel een bewijs van onderwijzer voorgelegd te worden.
DE STAMP IN CLASS CURRICULUM Wat is een microcontroller? Is de opening voor de Stamps in Class curriculum. Na het uitvoeren van deze tekst, kan u uw studies voortzetten met gelijk welke Studenten Gids die hieronder is vermeld. Alle boeken hieronder zijn gratis te downloaden van www.parallax.com. De versies hieronder waren de actuele versies tijdens het opmaken van deze tekst. Gelieve onze website te controleren op de laatste versies; we streven er continu naar om deze te verbeteren, www.parallax.com of www.stampsinclass.com. Stamps in Class Studenten Gids: Voor een volledige introductie in praktische ontwerpen voor moderne machines zijn gidsen hoog aanbevolen.
Voorwoord · Pagina ix
“Applied Sensors”, Student Guide, Version 1.3, Parallax Inc., 2003 “Basic Analog and Digital”, Student Guide, Version 1.3, Parallax Inc., 2004 “Industrial Control”, Student Guide, Version 1.1, Parallax Inc., 1999 “Robotics with the Boe-Bot”, Student Guide, Version 2.0, Parallax Inc., 2003 Meer Robotica Kits: Sommigen komen de Stamps in Class curriculum tegen door de Robotics with the BoeBot Studenten Gids. Na deze afgewerkt te hebben, zal u klaar zijn om volgende meer gevorderde teksten en kits: “Advanced Robotics: with the Toddler”, Student Guide, Version 1.2, Parallax Inc., 2003 “SumoBot”, Manual, Version 2.0, Parallax Inc., 2004 Onderwijs project Kits: Elements of Digitale Logic, Understanding Signals en Experiments with Renewable Energy legt de nadruk meer op elektronica onderwerpenfocus, terwijl StampWorks een variëteit van projecten brengt die nuttig zijn voor de hobbyist, uitvinders en product designers geïnteresseerd in projecten. “Elements of Digital Logic”, Student Guide, Version 1.0, Parallax Inc., 2003 “Experiments with Renewable Energy”, Student Guide, Version 1.0, Parallax Inc., 2004 “StampWorks”, Manual, Version 1.2, Parallax Inc., 2001 “Understanding Signals”, Student Guide, Version 1.0, Parallax Inc., 2003 Referenties Dit boek is een essentiële referentie voor alle Class Student Gidsen. Het zit boordevol informatie over de BASIC Stamp series en microcontroller modules, onze BASIC Stamp Editor, en de PBASIC programmeertaal. “BASIC Stamp Manual”, Version 2.0c, Parallax Inc., 2000
VERTALINGEN Parallax onderwijzers tekst worden vertaald, met onze toestemming (e-mail
[email protected]). Als u van plan bent om een vertaling te maken, neem
Pagina x · Wat is een Microcontroller?
contact met ons op en we sturen u voorgeformateerde MS Word documenten, foto’s, etc. We onderhouden ook de discussie groep voor Parallax vertalers die u kunt aansluiten. De Parallax Translators Yahoo-groep, en aanwijzingen hoe aan te sluiten staan in deze tekst onder de paragraaf met als titel: WEB SITE EN DISCUSSIE LIJST na de titelpagina.
SPECIALE BIJDRAGEN Het Parallax team dat samengesteld is om deze tekst te schrijven, evenals erbij: curriculum ontwerp en technisch schrijven door Eny Lindsay, illustraties door Rich Allred, kaft ontwerp door Jen Jacobs en Larissa Crittenden, algemene consultant bij Aristides Alvarez en Jeff Martin, Elektromechanische consultant bij John Barrowman, technisch nazicht en oplossingen door Kris Magri, technische aanpassingen door Staphanie Lindsay, en comité nazicht door Rich Allred, Gabe Duran, Staphanie Lindsay, en Kris Magri. Wat is een microcontroller? Student Guide Versie 2.2 is geschreven door Eny Lindsay na verzameling van observaties en onderwijs feedback op doortocht in “nation teaching Parallax Educators” Lessen. Eny studeerde Ingenieur elektriciteit en elektronica in California State University, Sacramento, en dit is zijn derde Stamps in Class Student Gids. Hij neemt ook deel in het schrijven van verschillende artikels met als onderwerp microcontrollers in pre-engineering curricula. Als Eny geen onderwijs boeken schrijft dan doet hij product ontwikkeling voor Parallax. Parallax wil StampsInClass Yahoo Group member Robert Ang bedanken voor zijn grondige herziening en gedetailleerde input, en veteran engineer en in acht genomen klant Sid Weaver voor zijn inzichtvolle herziening. Dank aan alle Stamps in Class auteurs Tracy Allen (Applied Sensors), en Martin Hebel (Industrial Control) voor hun herziening en aanbevelingen. Eny Lindsay wil zijn vader Mashall en schoonbroer Kubilay voor hen uitstekende muzikale adviezen en suggesties. Stamps in Class is gesticht door Ken Gracey, en Ken wil iedereen van de Parallax medewerkers bedanken voor hun goed werk. Elke en iedere Parallaxian heeft meegeholpen aan deze en aan elke Stamps in Class tekst.
Hoofdstuk #1: Aan de Slag · Pagina 1
Hoofdstuk #1: Aan de Slag HOEVEEL MICROCONTROLLERS HEEFT U VANDAAG GEBRUIKT? Een microcontroller is een soort van miniatuur computer die je overal kan vinden. Hierbij enkele voorbeelden van veelgebruikte, alledaagse producten die ingebouwde microcontrollers hebben, zie Figuur 1-1. Indien het knoppen en een digitale display heeft, dan is het zo goed als zeker dat er een programmeerbare microcontroller in zit.
Figuur 1-1 Alle daagse voorbeelden van toestellen met een Microcontrollers
Probeer een lijst op te stellen en tel eens hoeveel apparaten een microcontroller je gebruikt op een typische dag. Hier enkele voorbeelden: als uw klok radio afgaat, en je op de snoezen toets drukt, ... een paar minuten in de ochtend en het eerste wat je doet is werken met een microcontroller. Opwarmen van wat eten in de microgolf oven en bellen met uw mobieltje gaat ook samen met het gebruik van microcontrollers. Dit is nog maar het begin. Nog enkele voorbeelden: aanzetten van de T.V. met een afstandsbediening, een computerspelletje, een rekenmachine, een digitaal polshorloge... Al deze toestellen waarmee u communiceert, hebben een microcontroller.
DE BASIC STAMP 2 – UW NIEUWE MICROCONTROLLER Parallax, Inc.’s BASIC Stamp® 2 module getoond in Figuur 1-2 heeft een ingebouwde microcontroller. Het is de zwarte met de letters “PIC16C57”. De rest van de componenten in de BASIC Stamp module zijn gevonden in applicaties die we elke dag gebruiken. Alles tezamen, ze zijn zo gezegd een “embedded computer systeem”. Die naam is bijna altijd verkort naar “embedded systeem”. Meestal worden deze modules “microcontrollers” genoemd. De activiteiten in deze tekst zullen u door het bouwen van circuits leiden die gelijkaardig zijn aan diegene die in de hightech gizmos. U zult ook een computer programma schrijven dat de op de BASIC Stamp module zal draaien. Dit programma zal de BASIC
Pagina 2 · Wat is een Microcontroller?
Stamp module de sturing maken van de circuits opdat ze hun nuttige functies kunnen uitvoeren. Figuur 1-2 De BASIC Stamp® 2 Microcontroller Module BASIC Stamp 2 modules zijn de meest populaire microcontrollers gemaakt door Parallax, Inc.
In deze tekst, verwijst “BASIC Stamp” naar Parallax Inc.’s BASIC Stamp® 2 microcontroller module. Dat zijn andere BASIC Stamp modules, enkele zijn er getoond in Figuur 1-3. Elke BASIC Stamp module heeft een kleurencode. De BASIC Stamp 2 is groen. De BASIC Stamp 2e is rood. De BASIC Stamp 2SX is blauw, en de BASIC Stamp 2p is goud kleurig. Elke variatie op de BASIC Stamp 2 is een klein beetje anders, hogere snelheid, meer geheugen, extra functies, of een combinatie van extras.
Figuur 1-3 BASIC Stamp® Modules Van Links naar Rechts: BASIC ® Stamp 2, 2e, 2SX, en 2p
ONGELOOFLIJKE UITVINDINGEN MET BASIC STAMP MICROCONTROLLERS Gebruikers applicaties zijn niet het enige waarin microcontrollers zitten. Robots, machines, ruimtevaart en andere hightech toestellen zijn ook gebouwd met microcontrollers. Laten we even kijken naar enkele voorbeelden die zijn gemaakt met BASIC Stamp modules.
Hoofdstuk #1: Aan de Slag · Pagina 3
De robots zijn getekend om alles te doen om studenten te kunnen helpen om meer over microcontrollers te leren, van gras maaien tot oplossen van complexe mechanische problemen. Figuur 1-4 toont 2 voorbeeld robots. Op elke robot hebben studenten de BASIC Stamp 2 gebruikt om sensoren te lezen, motoren te besturen, en om de communicatie met de computers te verzorgen. De linker robot is de Parallax Inc.’s BoeBot™. De projecten in “Robotics with the Boe-Bot” tekst kunnen aangepakt worden gebruik nadat dit document is afgewerkt. De rechter robot is gebouwd door een groep studenten die hebben meegedaan aan de eerste Robotica wedstrijd. Het doel is elk jaar anders. In dit voorbeeld was het doel om te zien welke robot het snelst gekleurde “hoops” kon sorteren. Figuur 1-4 Educative Robots Parallax Boe-Bot™ (links) Eerste Competitie Robot (rechts)
Andere robotten lossen complexe problemen op, zoals deze autonoom vliegende robot op de linker kant van Figuur 1-5. Deze robot is gebouwd en getest door student ingenieurs mechanica aan de University of California, Irvine. Ze gebruikten een BASIC Stamp module om te communiceren met een satelliet globaal positionering systeem (GPS) zodat de robot zijn positie en hoogte kent. De BASIC Stamp leest ook hoogte sensors en controleert de motor sturing om de robot goed te laten vliegen. De mechanische robot op de rechter kant is ontwikkeld door een professor at Nanyang Technical University, Singapore. De robot heeft meer dan 50 BASIC Stamp modules, en ze communiceren allen met elkaar in een netwerk dat helpt de controle in goede banen te leiden voor elke beweging van de poten. Robots zoals deze helpen ons niet alleen de natuur te begrijpen, maar ze kunnen misschien uiteindelijk leiden tot het vanop afstand verkennen van plaatsen of misschien zelf andere planeten. Figuur 1-5 Voorbeelden van Onderzoek Robots die Microcontrollers bevatten Autonoom vliegende robot van UC Irvine (links) en duizendpoot project aan de Nanyang Universiteit (rechts)
Pagina 4 · Wat is een Microcontroller?
Met de hulp van microcontrollers, zullen robots dag-tot-dag taken kunnen uitvoeren, zoals grasmaaien. De BASIC Stamp module zit in deze robotgestuurde grasmaaier zoals in Figuur 1-6. De BASIC STAMP helpt de grasmaaier tussen de boorden te blijven, en d.m.v. sensoren detecteert het obstakels en worden de motoren gestuurd om er omheen te bewegen.
Figuur 1-6 Robotica Grasmaaier Prototype door Robot Shop
Microcontrollers worden ook gebruikt in de wetenschap, hoogtechnologische en ruimtevaartprojecten. Het weerstation getoond op de linker Figuur 1-7 wordt gebruikt voor milieu data te relateren aan koraalrif aftakeling. De BASIC Stamp module leest de data binnen van een reeks sensoren en slaat deze op om ze later door de wetenschappers eruit te laten halen. De duikboot in het midden, is een onderwater vaartuig, de aandrijving, camera’s en lichten zijn allemaal door een BASIC Stamp microcontrollers gestuurd. De raket op de rechter kant, is een van de competities om een privé raket in de ruimte te schieten. Niemand won de competitie, maar deze raket was er bijna! De BASIC Stamp stuurde ongeveer alle aspecten voor de lancering sequentie. Figuur 1-7 Hoog technologisch en Ruimtevaart Microcontroller Voorbeelden Ecologische data collectie door het EME Systeem (links), duikboot voor onderzoek door het Harbor Branch Instituut (midden), en JP ruimtevaart test (rechts)
Van gewone huishoud applicaties tot wetenschappelijke en ruimtelijke toepassingen, de microcontroller basis die u nodig heeft om te starten in een project zoals voorgenoemde, worden hier geïntroduceerd. Door de activiteiten in dit boek af te werken, zal u experimenteren met, leren hoe en wat de verschillende bouwblokken zijn die er voor al deze hoogtechnologische uitvinding nodig zijn. U zult circuits bouwen voor displays,
Hoofdstuk #1: Aan de Slag · Pagina 5
sensoren en bewegingen sturen. U zult leren hoe verbinding te maken met deze circuits naar de BASIC Stamp 2 module, en dan een computer programma schrijven dat de sturing toont op de displays, data verzamelt van de sensoren, en bewegingssturingen. Onderweg zult u verschillende belangrijke elektronische en computer programmeerconcepten en technieken tegenkomen. Tegen dat u klaar bent, kan je jezelf misschien al betrappen op het bedenken van je eigen uitvinding.
HARDWARE EN SOFTWARE Aan de slag gaan met de BASIC Stamp microcontroller modules is gelijkaardig als aan de slag gaan met een nieuwe computer of laptop. Het eerste dat de meeste mensen dienen te doen bij de aankoop van een nieuwe PC of laptop is het uit de doos nemen, aansluiten en installeren en wat software testen doen, misschien ook zelf software schrijven gebruik makende van een programmeertaal. Als dit de eerste keer is dat u een BASIC Stamp module gebruikt, dan zal je exact dezelfde dingen dienen te doen. Als u in de klas bent, is de hardware waarschijnlijk al opgezet. Als dit het geval is kan het zijn dat uw leraar andere instructies heeft. Zoniet, zal dit hoofdstuk de eerste stappen meegeven om uw nieuwe BASIC Stamp microcontroller aan de praat te krijgen.
ACTIVITEIT #1: DE SOFTWARE OPHALEN De BASIC Stamp Editor (versie 2.0 of hoger) is software die u in de meeste gevallen zal gebruiken voor de activiteiten in de projecten en deze tekst. U zult deze software gebruiken om een programma te schrijven om de BASIC Stamp module te sturen. U kunt deze software ook gebruiken om berichten op de display te tonen om te helpen begrijpen wat de BASIC Stamp aan het doen is. The BASIC Stamp Editor is gratis software, en de twee gemakkelijkste manieren om het op te halen zijn: • Downloaden van het Internet: Zoek naar “BASIC Stamp Windows Editor versie 2.0…” op de www.parallax.com → Download → BASIC Stamp Software pagina. •
Te vinden op de Parallax CD: Volg de software link op de welkomstpagina. Controleer of de CD van 2003 of later is.
Gehaast? Neem uw kopie van de BASIC Stamp Windows Editor version 2.0 (of hoger ) en Installeer het op uw PC of laptop. Ga naar Activiteit #3: Hardware opstelling en Systeem test. Als u vragen hebt tijdens uw zoektocht, Activiteit #1 kan gebruikt worden als een stap voor stap referentie om de software op te halen en Activiteit #2 kan gebruikt worden als referentie voor de installatie procedure.
Pagina 6 · Wat is een Microcontroller?
Computer Systeem Benodigdheden
U hebt een PC of laptop computer nodig met de BASIC Stamp Editor software. Starten met de BASIC Stamp programmeren is het gemakkelijkste als uw PC of laptop de volgende eigenschappen heeft: Microsoft Windows 95® of nieuwer besturingssysteem Een seriële of USB poort Een CD-ROM drive, World Wide Web toegang, of beide
• • •
USB Poort Adapter Als u computer enkel een USB poort heeft, dan zal u een USB naar Seriële poort adapter nodig hebben. Zie Appendix A: USB naar Seriële Adapter voor details en installatie instructies.
Downloaden van de Software van het Internet
Het is makkelijk om de BASIC Stamp Editor software te downloaden van de Parallax web site. De web pagina getoond in Figuur 1-8 het kan er iets anders uitzien dan de web pagina die u zul zien als u de website bezoekt. Niettemin, zouden de volgende stappen voor het downloaden van de software dezelfde dienen te zijn. Voor de personen: √ √ √
Die een webbrowser gebruiken, surf naar www.parallax.com ( Figuur 1-8) Ga naar het Downloads menu en toon de opties. Selecteer de BASIC Stamp Software link en klik erop.
Figuur 1-8 De Parallax Web Site: www.parallax.com
Hoofdstuk #1: Aan de Slag · Pagina 7
√
Als u op de BASIC Stamp Software pagina bent, vindt u de meest recente versie van de BASIC Stamp Windows Editor met versienummer 2.0 of hoger.
√
Klik het Download icoon. In Figuur 1-9, het download icoon ziet eruit als een map icoon rechts van de beschrijving “BASIC Stamp Windows Editor version 2.0 Bèta 1 (6MB)”.
Figuur 1-9 De Parallax Web Site Download Pagina
√ √
Indien het File Download venster tevoorschijn komt zoals in Figuur 1-10, selecteer: Save this program to disk. Klik op de OK toets.
Figuur 1-10 File Download Window
Figuur 1-11 toont het “Save As” venster dat vervolgens tevoorschijn komt. Je kan het Save in veld gebruiken om naar uw harde schijf te surfen en de juiste plaats te selecteren om het bestand te plaatsen. √
Nadat u de plaats heeft gekozen, klik the Save Toets.
Pagina 8 · Wat is een Microcontroller?
Figuur 1-11 Save As venster Selecteer een plaats om het bestand op te slaan
√
Wacht totdat het BASIC Stamp Editor installatie programma volledig is gedownload(Figuur 1-12). Dit kan even duren als u een modem verbinding hebt. Als het downloaden volledig is, laat het venster getoond in Figuur 1-13 open, terwijl u naar de volgende paragraaf gaat - Activiteit #2: Installeren van de Software.
√
Figuur 1-12: Download status venster
Figuur 1-13: Download volledig
Vinden van de Software op de Parallax CD
U kunt ook de BASIC Stamp Editor installeren vanaf de Parallax CD, mar het dient een te zijn van mei 2003 of nieuwer, opdat u een compatibele versie van de BASIC Stamp Editor nodig heeft om de voorbeelden in de tekst te kunnen volgen. U kunt de maand en het jaar op de Parallax CD’s op de voorkant van de CD label terugvinden. √
Plaats de Parallax CD in u computer’s CD speler. De Parallax CD Welkoms applicatie getoond in Figuur 1-14 dient vanzelf te draaien van zodra u de CD in de CD speler hebt geladen.
Hoofdstuk #1: Aan de Slag · Pagina 9
√
Indien de Welkoms applicatie niet direct automatisch verschijnt, dubbelklik My Computer, dan dubbelklik op uw CD drive, kies dubbelklik Welcome.
Figuur 1-14 De Parallax CD Browser
√ √ √ √ √
Klik op de Software link zoals in Figuur 1-14. Klik op de +volgende voor de BASIC Stamps folder zoals in Figuur 1-15. Klik op de +volgende voor de Windows folder. Klik op de floppy diskette icoon “Stamp 2/2e/2sx/2p/2pe (stampw.exe)”. Ga voort met Activiteit #2: Installeren van de Software. Gratis downloads op de Parallax web site staan op de Parallax CD, maar enkel tot op de dag dat de CD gemaakt werd. De datum op de voorkant van de CD toont wanneer deze gemaakt is. Indien de CD enkele maanden oud is, bezit het waarschijnlijk de meest recente gegevens. Indien de CD al wat ouder is, overweeg om een nieuwe te vragen bij Parallax of download de nodige bestanden van de Parallax web site.
ACTIVITEIT #2: INSTALLEREN VAN DE SOFTWARE Tot nu toe hebt u ofwel het gedownloade BASIC Stamp Editor Installatie bestand van de Parallax web site of van de Parallax CD. Laten we nu de BASIC Stamp Editor Installeren.
Pagina 10 · Wat is een Microcontroller?
Installeren van Software Stap voor Stap
√
Indien u het te installeren BASIC Stamp Editor bestand van Internet heeft, klik op de Open knop als het Downloaden volledig is zoals in Figuur 1-16.
Figuur 1-15 Download Complete Window Klik op de Open toets.
√
Indien u de software van de Parallax CD hebt, klik op Install knop zoals in Figuur 1-17.
Figuur 1-16 De Parallax CD Browser Installatie toets bevindt zich beneden in het venster.
√
Als de BASIC Stamp Editor InstallShield Wizard venster opent, klik op Next zoals in Figuur 1-18.
Figuur 1-17 InstallShield Wizard voor de BASIC Stamp Editor Klik Next.
Hoofdstuk #1: Aan de Slag · Pagina 11
√ √
Selecteer Typical setup type zoals in Figuur 1-19. Klik op de Next toets.
Figuur 1-18 Setup Type Kies Typical, dan klik op de Next toets.
√
Als de InstallShield Wizard u meedeelt: “Ready to Install the Program”, klik op Install toets zoals in Figuur 1-20.
Figuur 1-19 Klaar om te Installeren. Klik op de Install toets.
√
Als de InstallShield Wizard u meedeelt: “InstallShield Wizard Completed”, zoals in Figuur 1-21, klik Finish.
Pagina 12 · Wat is een Microcontroller?
Figuur 1-20 InstallShield Wizard Completed: Klik de Finish toets.
ACTIVITEIT #3: SET UP VAN DE HARDWARE EN TESTEN VAN HET SYSTEEM De BASIC Stamp module dient voorzien te zijn van elektriciteit. Ook dient de module verbonden te zijn met de PC om te kunnen programmeren. Na het maken van de verbindingen, kan u de BASIC Stamp Editor testen. Deze paragraaf zal u tonen hoe dit dient te gebeuren. Introductie van BASIC Stamp®, Board of Education®, and HomeWork Board™
Parallax Inc.’s Board of Education® carrier board zijn tentoongesteld in Figuur 1-22 naast de BASIC Stamp module. Zoals vroeger vermeld, is de BASIC Stamp een zeer kleine computer, die in het Board of Education draagbord kan aangebracht worden. U zult onmiddellijk zien dat het Board of Education het heel makkelijk is om een verbinding met stroomvoorziening en seriële kabel met de BASIC Stamp module te maken. In latere activiteiten zal u zien hoe het Board of Education het gemakkelijk maakt om circuits en connecties met uw BASIC Stamp module te leggen.
Figuur 1-21 BASIC Stamp® 2 Microcontroller Module (links) en Board of Education ® Carrier Board (rechts)
Hoofdstuk #1: Aan de Slag · Pagina 13
Parallax, Inc.’s BASIC Stamp HomeWork Board™ is getoond in Figuur 1-23. Dit bord is zoals het Board of Education met een ingebouwde BASIC Stamp 2 module. Het is op de oppervlakte gemonteerd en alle componenten zijn op de linker kant van het bord te vinden. U kunt of het Board of Education met de BASIC Stamp module of het BASIC Stamp HomeWork Board gebruiken voor uw projecten als platform voor de activiteiten in deze tekst.
Figuur 1-22 BASIC Stamp® HomeWork Board™ Project Platform.
Leer meer over de mogelijkheden, onderdelen en functies van de BASIC Stamp modules, Board of Education, en het HomeWork Board project platform in Appendix C: BASIC Stamp en Carrier Board Componenten en Functies op pagina 303.
Nodige Hardware
(1) BASIC Stamp 2 module EN (1) Board of Education - of (1) BASIC Stamp HomeWork Board (1) 9 V batterij (1) strip van 4 rubberen voeten (1) Seriële kabel
Pagina 14 · Wat is een Microcontroller?
Start met een nieuw volledig opgeladen 9 V batterij. Je Vermijd zo alle verwarringen die een platte batterij kan veroorzaken. Start met een nieuwe alkaline batterij of een heroplaadbare batterij die recent is opgeladen.
OPGELET! Voordat u de AC adapter gebruikt, “batterij vervanger ”, of DC voeding: √ Ga naar Appendix D: Batterijen en voeding om er zeker van te zijn dat de u voeding juist gebruikt voor de komende activiteiten.
Aansluiten van de Hardware
Zowel met het Board of Education en het BASIC Stamp HomeWork Board worden er een strip met vier adhesie rubberen voeten meegegeven. Deze rubberen voeten zijn getoond in Figuur 1-24, en dienen geplaatst te worden aan de onderkant van uw Board of Education of uw BASIC Stamp HomeWork Board. Figuur 1-23 Rubberen Voeten
√
Verwijder elke rubberen voet van de adhesie strip en maak hem vast op uw bord zoals in Figuur 1-25. In u het Board of Education gebruikt, zijn er cirkels voorzien aan de onderkant die aanduiden waar de rubberen voeten dienen geplaatst te worden. Voor het HomeWork Board, plaats de voeten juist naast elk gat op elke hoek.
Figuur 1-24 Rubberen voeten aangebracht op de onderkant van het Board of Education (links) en het HomeWork Board (rechts)
Vervolgens dient het Board of Education of het BASIC Stamp HomeWork Board aangesloten te worden op u PC of laptop door middel van een seriële kabel.
Hoofdstuk #1: Aan de Slag · Pagina 15
√
Maak een verbinding met de seriële kabel naar een vrije COM poort aan de achterzijde van uw computer zoals in Figuur 1-26. USB Poort Adapter Indien u een USB naar Seriële Adapter heeft: √ Maak een verbinding met de USB plug naar uw PC’s USB poort. √ Maak een verbinding met de COM poort adapter door ofwel direct naar het Board of Education of HomeWork Board of door middel van een seriële kabel, zoals in Figuur 1-26.
Com
Reset
0
1
2
Figuur 1-25: PC of Laptop COM Port
Figuur 1-26: 3-positie schakelaar
Plug de seriële kabel in een vrije COM poort op uw PC of laptop.
Zet deze op de 0 positie om de voeding af te sluiten.
Indien u de BASIC Stamp 2 module en Board of Education gebruikt: √
Zet de the 3-positie schakelaars op het Board of Education naar positie-0 zoals in Figuur 1-27. Enkel het Board of Education Rev C heeft een 3-positie schakelaar. Om de voeding af te leggen op het Board of Education Rev B, even de toegangskabel losmaken of de DC voeding afkoppelen of de batterijen eruit halen. Dit wordt getoond in Figuur 1-28, stap 3,4.
√
Indien uw BASIC Stamp module nog niet aangesloten is op het Board of Education, steek de chip in de voet georiënteerd zoals in Figuur 1-28, stap-1.
Pagina 16 · Wat is een Microcontroller?
√ √
Alkaline Battery
Powercell
√
Ga na dat de pinnen mooi uitgelijnd staan met de gaten van de voet en niet naar onder gevouwen zijn, druk dan geleidelijk aan. Plug de seriële kabel in het Board of Education zoals in stap-2. Plug de DC voeding in de 6-9 VDC plaats zoals in stap-3, of plug een 9-V batterij in de 9 VDC batterij aansluitplaats zoals in stap-4. Beweeg de 3-positie schakelaar van positie-0 to positie-1. Het green licht, de Pwr aanduiding op het Board of Education zal aan komen te staan.
3
4
or
15 14 Vdd 13 12
6-9VDC
9 Vdc Battery
Red Black
X4 Pwr
STA MPS in C LA SS TM
1 Sout Sin ATN Vss P0 P1 P2 P3 P4 P5 P6 P7
U1
Vin Vss Rst Vdd P15 P14 P13 P12 P11 P10 P9 P8
Vss P1 P3 P5 P7 P9 P11 P13 P15 Vin
Vss P0 P2 P4 P6 P8 P10 P12 P14 Vdd
X1
Reset
Vin
Vss
X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0
X2
0
2
Vdd
X5
1
2
www.stampsinclass.com
Figuur 1-27 Board of Education, BASIC Stamp Module, Batterij en Seriële Kabel.
Board of Education © 2000-2003
Verbindt de componenten zoals op het schema. Ga na dat de BASIC Stamp juist georiënteerd is, met de juiste kant omhoog.
1
Als u het BASIC Stamp HomeWork Board gebruikt: √ √
Maak een verbinding met de seriële kabel en het HomeWork Board (Figuur 129, stap-1). Maak een verbinding met een 9 V batterij naar de batterij clip zoals in stap-2.
Hoofdstuk #1: Aan de Slag · Pagina 17
Figuur 1-28 HomeWork Board en Seriële Kabel
1 STA MPS CL A SS
(916) 624-8333 www.parallaxinc.com www.stampsinclass.com
in
Vdd
Vin
Rev A
Vss
X3
2
Power
Powercell
Alkaline Battery
Reset
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0
Sluit de seriële kabel en de 9 V batterij aan op de voorziene plaats van het HomeWork Board.
X2 © 2002
®
BASIC Stamp HomeWork Board
Communicatie test
De BASIC Stamp Editor heeft een mogelijkheid om te testen als er weldegelijk een communicatie is tussen de PC of laptop en de BASIC Stamp module. √
Dubbelklik op de BASIC Stamp Editor shortcut op uw bureaublad. Het zou er hetzelfde moeten uitzien als in Figuur 1-30.
Pagina 18 · Wat is een Microcontroller?
Figuur 1-29 BASIC Stamp Editor Shortcut Zoek naar de shortcut op het voorblad van uw computer. De link ziet er gelijkaardig uit als deze links. Het Windows Start Menu kan ook gebruikt worden om de BASIC Stamp Editor te starten. Klik op de Windows Start toets, selecteer dan Programs → Parallax, Inc. → BASIC Stamp Editor 2…, klik dan op het BASIC Stamp Editor icoon.
Uw BASIC Stamp Editor venster zou er moeten uitzien zoals in Figuur 1-31. De eerste maal dat u uw BASIC Stamp Editor opstart, kan het zijn dat er enkele berichten en een lijst van uw COM poorten gevonden door de software wordt afgebeeld.
√
Om er zeker van te zijn da uw BASIC Stamp module aan het communiceren is met uw computer, klik het Run menu, en selecteer Identify.
Figuur 1-30 BASIC Stamp Editor Selecteer Identify in het Run menu.
Een Identificatie venster gelijkaardig aan dit in Figuur 1-32 zal tevoorschijn komen. Het voorbeeld in de figuur toont dat de BASIC Stamp 2 gedetecteerd is op COM2. √
Check het Identificatie venster en zorg ervoor dat de BASIC Stamp 2 module gedetecteerd is op een van de COM poorten. Indien dit het geval is, dan bent u klaar op naar Activiteit #4: Eerste Programma over te gaan.
Hoofdstuk #1: Aan de Slag · Pagina 19
√
Indien het Identificatievenster uw BASIC Stamp 2 module niet detecteert op eender welke COM poort, ga naar Appendix E: Probleem oplossingen op pagina 315. Figuur 1-31 Identificatie venster Voorbeeld: BASIC Stamp 2 gevonden op COM2.
ACTIVITEIT #4: EERSTE PROGRAMMA Het eerste programma dat u zult schrijven en testen zal de BASIC Stamp zeggen om een bericht te sturen naar uw PC of laptop. Figuur 1-33 toont hoe een stroom van nullen en enen de karakters op uw PC of laptop kan brengen. Deze nullen en enen worden binaire getallen genoemd. De BASIC Stamp Editor software heeft de mogelijkheid om de berichten te detecteren en weer te geven, zie verder.
Alkaline Battery
Powercell
11
100
1 0 0 0 01 0 0
0
0
01
10
00
10
1
0
1
10
10101001
Figuur 1-32 Berichten van de BASIC Stamp module naar uw Computer
000
010
01
0
0
9 Vdc Battery
STAM PS CLA SS
in
TM
101
0
1 11
0 001
0 10
6-9VDC
1
1 Sout Sin ATN Vss P0 P1 P2 P3 P4 P5 P6 P7
U1
Vin Vss Rst Vdd P15 P14 P13 P12 P11 P10 P9 P8
www.stampsinclass.com
Vs P0 P2 P4 P6 P8 P1 P1 P1 Vd
De BASIC Stamp module zendt karakters naar uw PC of laptop in een stroom van nullen en enen, binaire code. De BASIC Stamp Editor kan deze detecteren en de binaire code omzetten naar karakters op uw scherm.
10
0
Pagina 20 · Wat is een Microcontroller?
Eerste Programma
De programma oplijsting dat u in de BASIC Stamp Editor dient in te geven en te downloaden in de BASIC Stamp module zullen altijd met een grijze achtergrond weergegeven worden, zoals hieronder: Voorbeeld Programma: FirstProgram.bs2 ' What's a Microcontroller - FirstProgram.bs2 ' BASIC Stamp sends message to Debug Terminal. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Hello, it's me, your BASIC Stamp!" END
U zult dit program in de BASIC Stamp Editor dienen in te geven. Sommige programmalijnen worden automatisch gegenereerd door op enkele werkbalk knoppen te klikken. Andere lijnen dienen via het toetsenbord ingegeven te worden. √ √
Begin met het aanklikken van het BS2 icoon (de groene diagonale chip) op de werkbalk, zoals in Figuur 1-34. Indien u de muisaanwijzer over die knop laat bewegen komt er de omschrijving “Stamp Mode: BS2” te voorschijn. Vervolgens, klik op het icoon met als opschrift “2.5” zoals in Figuur 1-35. De hulpomschrijving is: “PBASIC Language: 2.5”.
Figuur 1-33 BS2 Icoon
Figuur 1-34 PBASIC 2.5 Icoon
Een klik op deze knop zal automatisch volgende code plaatsen “ ‘ {$STAMP BS2}” bij het begin van het programma.
Een klik op deze knop zal automatisch volgende code plaatsen “ ‘ {$PBASIC 2.5}” bij het begin van het programma.
Hoofdstuk #1: Aan de Slag · Pagina 21
ALTIJD dienen deze werkbalk knoppen gebruikt om de twee codelijnen aan elk begin
{ }. Indien u stukken van het programma zelf schrijft, dan kan u toevallig deze haken gebruiken( )of [ ] . Indien u van een programma te schrijven! De compiler gebruikt deze gebruikt zal het programma NIET werken.
√
Typ de resterende vier lijnen van het programma exact zoals in Figuur 1-36. Figuur 1-35 Eerste Program ingegeven in de Editor Geef je eerste programma in, in de BASIC Stamp Editor zoals hiernaast getoond.
√ √ √
Sla uw werk op door te klikken op File en Save te selecteren, zoals in Figuur 1-37. Geef de naam FirstProgram in het veld File name nabij de Save As venster knop zoals in Figuur 1-38. Klik op de Save toets.
Figuur 1-36: Eeerste Programma opslaan
Figuur 1-37: Vul de bestandsnaam in
Pagina 22 · Wat is een Microcontroller?
De volgende maal dat u opslaat, zal de BASIC Stamp Editor automatisch opslaan onder dezelfde bestandsnaam (FirstProgram.bs2) tenzij u een andere naam gegeven heeft door te klikken op File en Save As te selecteren (ipv juist op Save te drukken).
√
Klik Run, en selecteer Run van het menu dat tevoorschijn komt (door erop te klikken)zoals in Figuur 1-39.
Figuur 1-38 Start uw eerste programma
Een Download Voortgang venster komt kort tevoorschijn als het programma van de PC of laptop naar de BASIC Stamp module wordt gestuurd. Figuur 1- 40 toont de Debug Terminal die dient te verschijnen als het downloaden volledig is. U kunt dit verifiëren dat dit een bericht van de BASIC Stamp is, door telkens op de Reset knop te drukken op het bord. Telkens zal het programma gereactiveerd worden en opnieuw draaien, u zult zien dat er een kopie van het bericht opnieuw zal verschijnen in de Debug Terminal. √
Druk en laat de reset knop los. Hebt u een tweede “Hello…” bericht gezien op de Debug Terminal?
Figuur 1-39 Debug Terminal De Debug Terminal toont een bericht dat de BASIC Stamp module naar de PC of Laptop heft gestuurd.
Hoofdstuk #1: Aan de Slag · Pagina 23
De BASIC Stamp Editor heeft sneltoetsen voor de meest voorkomende taken. Bijvoorbeeld, om een programma te starten, kan u de ‘Ctrl’ en ‘R’ toetsen tegelijkertijd indrukken. U kunt ook klikken op de Run Knop, het is de blauwe driehoek zoals in Figuur 141 die op een CD player’s Play knop lijkt. De help mededeling (de Start hint) zal tevoorschijn komen als je de Run knop aanwijst met de muis. U krijgt gelijkaardige hulpberichten voor gelijk welke knop die u aanwijst. Figuur 1-40 BASIC Stamp Editor Sneltoetsen
Hoe FirstProgram.bs2 Werkt
De eerste twee lijnen in het voorbeeld zijn commentaar. Commentaar is tekst die door de BASIC Stamp Editor wordt genegeerd. Het heeft als bedoeling om op een duidelijke manier in een menselijke taal de code te kunnen lezen en dient niet tot aansturing van de BASIC Stamp module. Alles rechts van een apostrof wordt in PBASIC gezien als commentaar bij de BASIC Stamp Editor. De eerste lijn vertelt ons van welk boek dit voorbeeld programma is en de naam van het bestand staat er ook bij. De tweede lijn is een kleine uitleg wat het programma doet. ' What's a Microcontroller - FirstProgram.bs2 ‘BASIC Stamp sends message to Debug Terminal.
Hoewel de commentaren genegeerd worden, zoekt de BASIC Stamp Editor naar specifieke richtlijnen. Elk programma in deze tekst zal 2 richtlijnen gebruiken: ' {$STAMP BS2} ' {$PBASIC 2.5}
De eerste richtlijn is $STAMP en het laat de BASIC Stamp Editor weten dat het programma zal gedownload worden naar een BASIC Stamp 2 module. De tweede richtlijn is $PBASIC en het laat de BASIC Stamp Editor weten dat u programma 2.5 van de PBASIC programmeertaal gebruikt. Merk op dat de compiler richtlijnen tussen dit haakje staan { } en niet deze ( ). U dient altijd de werkbalk te gebruiken om deze compiler richtlijnen in uw programma te laden, om typfouten te vermijden. Indien u de compiler richtlijnen met de hand hebt toegevoegd kan de syntax van de BASIC Stamp Editor niet werken. Die functie doet de verschillende letters, karakters en woorden in uw programma oplichten in verschillende kleuren en hoofdletters. Dit maakt het programma makkelijker te lezen, te begrijpen en te corrigeren.
Pagina 24 · Wat is een Microcontroller?
Een commando is een woord dat u aan de BASIC Stamp kan doorgeven om een bepaalde taak uit te voeren. Het eerste van de twee commando’s in het programma is het DEBUG commando: DEBUG "Hello, it's me, your BASIC Stamp!"
Dit is het commando dat de BASIC Stamp vertelt om het berichtje naar de PC te sturen door de seriële kabel. Het tweede commando is het END commando: END
Dit commando is nodig opdat de BASIC Stamp zich in een lagere energie mode plaatst als het programma afgewerkt is. In deze lagere mode wacht de BASIC Stamp op een Reset knop die wordt ingedrukt en losgelaten of, op en nieuw programma dat wordt ingeladen. Als een nieuw programma is ingeladen dan is het oude uitgewist en begint het nieuwe te draaien. Uw beurt – DEBUG Formaat en Controle Karakters
Een DEBUG formaat is een codewoord dat u kunt gebruiken om een bericht van de BASIC Stamp op een bepaalde manier op de Debug Terminal te laten komen. DEC is een voorbeeld van een formaat dat op het Debug Terminal scherm een decimale waarde zal weergeven. Een voorbeeld van een controle karakter is CR en wordt gebruikt om een “volgende lijn” te sturen naar de Debug Terminal. De tekst dat na het CR formaat komt, zal op de 2e lijn staan, maw onder de karakters die op de eerste lijn op de display staan. U kunt naar believen uw programma maken opdat er meer DEBUG commentaar komt alsook formaat en controle karakters. Hieronder een voorbeeld van hoe u het best doet: √ √
Vooreerst, sla het programma op onder een nieuwe naam door op File te klikken en selecteer Save As. Een goede nieuwe naam voor dit bestand is FirstProgramYourTurn.bs2 Verander de commentaar dat in het begin van het programma staat: ' What's a Microcontroller - FirstProgramYourTurn.bs2 ‘BASIC Stamp sends messages to Debug Terminal.
√
Voeg deze drie lijnen toe tussen de eerst DEBUG commentaar en het END commando: DEBUG CR, "What's 7 X 11?" DEBUG CR, "The answer is: " DEBUG DEC 7 * 11
Hoofdstuk #1: Aan de Slag · Pagina 25
√
Sla uw veranderingen op door op File te drukken en selecteer Save.
Uw programma zou er nu moeten uitzien al in Figuur 1-42. √
Draai het aangepaste programma. U zult ofwel Run dienen te selecteren vanuit het Run menu, zoals in Figuur 1-39 of klik op de Run knop, zoals in Figuur 141.
Figuur 1-41 Aangepast FirstProgram Ga na of uw werk gelijk is aan het voorbeeld hiernaast
Waar is de Debug Terminal naartoe? Soms wordt de Terminal verborgen achter het BASIC Stamp Editor venster. U kunt het weer op de voorgrond brengen door, het Run menu te kiezen zoals links in Figuur 1-43, of de Debug Terminal 1 sneltoets te kiezen getoond op de rechter kant van de figuur, of de F12 toets te gebruiken. Figuur 1-42 Debug Terminal 1 naar de voorgrond brengen Gebruik het menu (links) of de sneltoets (rechts).
Dan dient de Debug Terminal terug tevoorschijn te komen zoals in Figuur 1-44.
Pagina 26 · Wat is een Microcontroller?
Figuur 1-43 Aangepast FirstProgram.bs2 Debug Terminal Uitkomst Ga na dat indien u het programma herstarten, je het juiste resultaat bekomt.
ACTIVITEIT #5: OPZOEKEN VAN ANTWOORDEN De twee activiteiten die u zonet beëindigde hebben de twee PBASIC commando’s: DEBUG en END uitgelegd. U kunt meer vinden over deze commando’s en hoe ze gebruikt worden door zo op te zoeken in, ofwel de BASIC Stamp Editor’s Help, of in de BASIC Stamp handleiding. Deze activiteit gidst je door een voorbeeld hoe je de DEBUG commando dient op te zoeken in het BASIC Stamp Editor Help bestand en de BASIC Stamp handleiding. Gebruik maken van de BASIC Stamp Editor’s Help bestanden
√
In de BASIC Stamp Editor, Klik Help, en selecteer Index (Figuur 1-45).
Figuur 1-44 Selecteer Index uit het Help Menu
√
Type DEBUG in het veld genaamd “Type in the keyword to find”: ( Figuur 146).
Hoofdstuk #1: Aan de Slag · Pagina 27
√
Als het woord DEBUG tevoorschijn komt in de onderstaande lijst, klik erop, klik dan op de Display knop.
Figuur 1-45 Opzoeken van het DEBUG Commando door de help bestanden te gebruiken.
Uw beurt
√ √ √ √
Gebruik de scrollbalk om het DEBUG commando help uitleg te zien. Merk op dat er verschillende verklaringen zijn en voorbeeld programma’s die u kunt proberen. Klik op de Contents tab, en zoek DEBUG op. Klik op de Search tab, en doe een zoekactie naar het woord DEBUG. Herhaal dit voor het END commando.
Vinden en gebruiken van de BASIC Stamp Handleiding
De BASIC Stamp Handleiding is gratis beschikbaar op de Parallax web site en is bijgevoegd op de Parallax CD. De handleiding kan ook als een boek aangekocht worden.
Pagina 28 · Wat is een Microcontroller?
Downloaden van de BASIC Stamp handleiding van de Parallax Web Site
√ √ √ √ √
Gebruik je een web browser, surf naar www.parallax.com.
√
Klik op het Download icoon dat lijkt op een bestand mapje op de rechter kant van de omschrijving: “BASIC Stamp User’s Manual Version 2.0 (3.2 MB)”.
Duid het Downloads menu aan om de verschillende opties te tonen. Duid de Documentation link aan en selecteer deze. On the BASIC Stamp Documentation page, find The BASIC Stamp Users Manual. Op de BASIC Stamp Documentatie pagina vindt u de BASIC Stamp gebruikers handleiding
Bekijken van de BASIC Stamp Handleiding vanop de Parallax CD
√ √ √ √ √
Klik de Documentation link. Klik op volgende naast de BASIC Stamps folder. Klik op de BASIC Stamp Handleiding icoon. Klik op de View knop.
Figuur 1-47 toont een deel van de BASIC Stamp Manual v2.0 informatie over het DEBUG commando op pagina 97.
Figuur 1-46 Zoeken van het DEBUG Commando in de inhoudstabel
Figuur 1-48 toont een deel van pagina 97 van de BASIC Stamp Handleiding v2.0. Het DEBUG commando is in detail uitgelegd samen met enkele voorbeeld programma’s om te tonen hoe dit commando kan gebruikt worden. √
Bekijk de BASIC Stamp Manual’s uitleg over het DEBUG commando.
Hoofdstuk #1: Aan de Slag · Pagina 29
√
Tel het aantal voorbeeld programma’s in de DEBUG sectie. Hoeveel zijn het er?
Figuur 1-47 Herbekijken van het DEBUG Commando in de BASIC Stamp Handleiding
Uw beurt
√ √
Gebruik de BASIC Stamp Handleidingindex om het DEBUG commando op te zoeken. Zoek het END commando op in de BASIC Stamp handleiding.
ACTIVITEIT #6: INTRODUCTIE VAN DE ASCII CODE In Activiteit #4, gebruikte u het DEC formaat met het DEBUG commando om decimale nummers te laten verschijnen in de Debug Terminal. Wat gebeurt er als u het DEC formaat niet gebruikt? Als u het DEBUG commando gevolgd door een nummer zonder DEC formaat dan zal de BASIC Stamp dit inlezen als een ASCII code. Programmeren met ASCII Code ASCII is de afkorting van “American Standard Code for Information Interchange”. De meeste microcontrollers en computers gebruiken deze code onderandere om aan elke toets van het toetsenbord een nummer toe te kennen. Sommige nummers komen overeen met toetsenbord acties, zoals cursor omhoog of omlaag, spatie, delete. Andere komen overeen met welke karakters en symbolen er op het scherm dienen te komen. Deze nummers 32 tot 126 komen overeen met de karakters en symbolen dat de BASIC Stamp kan afbeelden in de Debug Terminal. Het volgende programma zal gebruik maken van
Pagina 30 · Wat is een Microcontroller?
ACSII code om de woorden “BASIC Stamp 2” in het Debug Terminal venster te laten verschijnen. Voorbeeld Programma – ASCIIName.bs2 √
Geef het programma in en start ASCIIName.bs2. Herinner om de werkbalk iconen te gebruiken om de Compiler Richtlijnen in uw programma in te voegen! '{$STAMP BS2} – Gebruik het groene chip icon. '{$PBASIC 2.5} – Gebruik het icon met de cijfers 2.5. Je kunt een voorbeeld zien van de iconen op pagina 21.
'What's a Microcontroller - ASCIIName.bs2 'Use ASCII code in a DEBUG command to display the words BASIC Stamp 2. '{$STAMP BS2} '{$PBASIC 2.5} DEBUG 66,65,83,73,67,32,83,116,97,109,112,32,50 END
Hoe ASCIIName.bs2 Werkt Elke letter in het DEBUG commando komt overeen met een ASCII symbool dat in de the Debug Terminal tevoorschijn komt. DEBUG 66,65,83,73,67,32,83,116,97,109,112,32,50
66 is de ASCII code voor Hoofdletter “B”, 65 is de code voor hoofdletter “A” en zo voort. 32 is de code voor een spatie tussen karakters. Merk op dat elke code nummer met een komma gescheiden is. Deze komma’s laten de instructie DEBUG elk symbool apart uit te voeren. Dit is veel eenvoudiger dan 12 verschillende DEBUG commando’s in te typen.
Hoofdstuk #1: Aan de Slag · Pagina 31
Uw beurt – Verkennen van ASCII Code √ √ √ √
Sla ASCIIName.bs2 op als ASCIIRenom.bs2 Kies 12 willekeurige nummers tussen 32 en 127. Vervang de ASCII code nummers met de nummers die u gekozen heeft. Start uw aangepast programma om te zien wat het geeft!
De BASIC Stamp Manual Appendix A geeft een overzicht van de ASCII code nummers en hun overeenkomende symbolen. U kunt opzoeken wat de nummers zijn om uw naam te vormen. √ √ √ √ √
Sla ASCIIRandom.bs2 op als YourASCIIName.bs2 Zoek de ASCII Chart in the BASIC Stamp Handleiding. Pas het programma aan, zodat uw eigen naam zal geschreven worden. Start het programma om te verifiëren of uw naam juist is geschreven. Zo ja, goed gewerkt, sla uw programma op!
ACTIVITEIT #7: INDIEN U KLAAR BENT Het is belangrijk om de voeding van de BASIC Stamp en het Board of Education (of HomeWork Board) los te koppelen. Vooreerst zullen uw batterijen langer meegaan en ten tweede zal u straks circuits bouwen op het Board of Education of het HomeWork Board op de prototype plaats.
Prototype circuit mogen nooit achter gelaten worden met aangesloten voeding. Koppel altijd de voeding los van het Board of Education of HomeWork Board voordat u weggaat, ook al is dit maar voor enkele minuten.
Voeding Loskoppelen
Met het Board of Education Rev C, is loskoppelen gemakkelijk. Indien u dit bord gebruikt, is het loskoppelen van de voeding gelijk aan het verplaatsen van de 3-positie schakelaar naar positie-0 door naar links te drukken zoals op Figuur 1-49.
Pagina 32 · Wat is een Microcontroller?
Sout Sin ATN Vss P0 P1 P2 P3 P4 P5 P6 P7
U1
P10 P12 P14 Vdd
Vin Vss Rst Vdd P15 P14 P13 P12 P11 P10 P9 P8
P11 P13 P10 P15 P9 Vin P8 P7 X1 P6 P5 P4 P3 Reset P2 P1 P0
Figuur 1-48 Voeding loskoppelen
X2
0
1
2
Board of Education
www.stampsinclass.com
© 2000-2003
Board of Education Rev C
Verwijder de BASIC Stamp module niet van de voet van het Board of Education! Elke keer dat de BASIC Stamp uit de voet wordt gehaald en riskeert u beschadigingen, hetzelfde risico is er bij het terug inpluggen van de chip. U hoeft de chip niet te verwijderen voor opslag.
Loskoppelen van de voeding bij een BASIC Stamp HomeWork Board’s is ook gemakkelijk. Indien u dit bord gebruikt, koppel de batterij los zoals in Figuur 1-50. Vdd
Vin
Vss
X3
Power
Powercell
Alkaline Battery
Reset
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0
Figuur 1-49 Loskoppelen van de voeding van het HomeWork Board
X2 © 2002
®
BASIC Stamp HomeWork Board
Indien u het Board of Education Rev B heeft, dan heeft u geen 3-positie schakelaar. U kunt de voeding loskoppelen door ofwel de voeding adapter zelf los te maken of de 9 V batterij eruit te halen, naargelang wat u gebruikt. Uw beurt
√
Koppel de voeding van het bord nu af.
SAMENVATTING Dit Hoofdstuk gidste u door het volgende:
Hoofdstuk #1: Aan de Slag · Pagina 33
• • • • • • • • • • • • • •
Een introductie van enkele toestellen die microcontrollers bevatten Een introductie van de BASIC Stamp module Een opsomming van enkele interessante uitvindingen gemaakt met de BASIC Stamp modules. Waar de gratis BASIC Stamp Editor software te vinden is die u nodig heeft in ongeveer alle experimenten in deze tekst Hoe u de BASIC Stamp Editor software kan installeren Een introductie van de BASIC Stamp module, Board of Education, en het HomeWork Board Hoe u uw BASIC Stamp hardware kan opstellen Hoe de software en hardware te testen Hoe een PBASIC programma geschreven en uitgetest wordt Gebruik maken van DEBUG en END commando’s Gebruik maken van het CR controle karakter en het DEC formaat Hoe BASIC Stamp Editor’s Help en de BASIC Stamp handleiding gebruiken Een korte introductie van de ASCII code Hoe de voeding los te koppelen van uw Board of Education of uw HomeWork Board
Vragen
1. Wat is een microcontroller? 2. Is de BASIC Stamp module een microcontroller, of bezit het er een? 3. Welke aanwijzingen zou u naar opzoek gaan om uit te zoeken als een applicatie een microcontroller bevat of niet? 4. Wat doet een apostrof aan het begin van de PBASIC programma code? 5. Welke PBASIC commando’s heeft u geleerd in dit Hoofdstuk? 6. U wilt een pauze nemen tijdens uw BASIC Stamp project om een versnapering te nemen, of om een iets langere pauze van enkele dagen te nemen vooraleer terug aan uw project te beginnen. Wat dient u te doen voor elke pauze?
Oefeningen
1. Leg uit wat een asterisk doet in dit commando: DEBUG DEC 7 * 11
2. Raad wat de Debug Terminal zou tonen indien dit commando zou draaien: DEBUG DEC 7 + 11
Pagina 34 · Wat is een Microcontroller?
3. Er is een probleem met deze twee commando’s. Indien u de code runt, zijn de nummers tegen elkaar geschreven zodat het op een groot getal lijkt in plaats van twee kleine. Pas de commando’s aan zodat het antwoord op de volgende lijn komt te staan in de Debug Terminal. DEBUG DEC 7 * 11 DEBUG DEC 7 + 11
Projecten
1. Gebruik DEBUG om op de display de oplossing weer te geven van: 1 + 2 + 3 + 4. 2. Welke lijnen kan u verwijderen in FirstProgramYourTurn.bs2 als u de commentaar de lijn vlak voor het END commando plaatst in het programma? Test uw hypothese. Ben er zeker van dat u FirstProgramYourTurn.bs2 opslaat onder een nieuwe naam zoals FirstProgramCh01Project05.bs2. Maak dan pas de veranderingen aan en sla deze op en draai het programma. DEBUG "What's 7 X 11?", CR, "The answer is: ", DEC 7 * 11
Oplossingen
Q1. Een microcontroller is een soort miniatuur computer die men terug vindt in elektronische producten. Q2. The BASIC Stamp module bevat een microcontroller genaamd PIC16C57. Q3. Indien de applicatie toetsen en een digitale display hebben, kan het erop wijzen dat er een microcontroller in zit. Q4. Commentaar wordt niet uitgevoerd. Q5. DEBUG en END Q6. Loskoppelen van de voeding van het BASIC Stamp project. E1. Het vermenigvuldigt 7 en 11 met als resultaat 77. De asterisk is de vermenigvuldiging operator. E2. De Debug Terminal zou 18 tonen E3. Om het probleem op te lossen, dient er een CR controle karakter toegevoegd te worden.
DEBUG DEC 7 * 11 DEBUG CR, DEC 7 + 11
P1. Hieronder een programma als oplossing voor het wiskundige probleem: 1+2+3+4 '{$STAMP BS2}
Hoofdstuk #1: Aan de Slag · Pagina 35
'{$PBASIC 2.5} DEBUG "What's 1+2+3+4?" DEBUG CR, "The answer is: " DEBUG DEC 1+2+3+4 END
P2. De laatste drie DEBUG lijnen kunnen verwijderd worden. Een extra CR is nodig na het "Hello" bericht. ' What's a Microcontroller - FirstProgramYourTurn.bs2 ' BASIC Stamp sends message to Debug Terminal. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Hello, it's me, your BASIC Stamp!", CR DEBUG "What's 7 X 11?", CR, "The answer is: ", DEC 7 * 11 END
De uitkomst van de Debug Terminal is: Hello, it's me, your BASIC Stamp! What's 7 X 11? The answer is: 77
Deze output is dezelfde als wat uit de vorige code komt. Dit is een voorbeeld van het gebruik van komma’s om veel informatie te bekomen enkel door het DEBUG commando te gebruiken. Verder onderzoek
In dit Hoofdstuk, heeft u de Software sectie van de Parallax web site of de Parallax CD om een kopie te vinden van de BASIC Stamp Editor. U kunt op de Documentatie sectie of op de Parallax web site of de Parallax CD een gratis kopie van deze tekst en de BASIC Stamp Manual vinden. Geprinte versies kunnen altijd aangekocht worden bij Parallax. “BASIC Stamp Manual”, User Manual, Version 2.0c, Parallax Inc., 2000 U kunt meer leren over de DEBUG en END commando’s door deze op te zoeken in de BASIC Stamp Manual. U kunt ze vinden door gebruik te maken van de Inhoudstabel. De BASIC Stamp Manual heeft meer voorbeelden die u kunt proberen, samen met gelijkaardige lessen zoals in dit hoofdstuk dat u net heeft afgewerkt.
#2: Lichten Aan – Lichten Uit · Pagina 37
Hoofdstuk #2: Lichten Aan – Lichten Uit INDICATIE LICHTEN Indicatie lichten zijn zo gewoon dat de meeste personen er niet veel aandacht aan schenken. Figuur 2-1 toont drie indicatielichten op een laser printer. Afhankelijk van welk licht aan is, weet de gebruiker als alles goed gaat of als de printer aandacht nodig heeft. Hier hebt u enkele voorbeelden van toestellen met indicatie lichten: auto’s, stereo’s, televisies, video recorders, diskette stations, printers, en alarm systeem controle panelen.
Figuur 2-1 Indicatie Lichten
Lichten aan en uitschakelen is enkel een kwestie van aan en afschakelen van de voeding. In sommige gevallen is het indicatie lichtje direct verbonden met de batterij zoals het indicatie lichtje op het Board of Education. Andere indicatie lichten zijn geschakeld met een aan en uit signaal van de microcontroller. Deze zijn meestal status indicatie lichten dat u vertellen wat het toestel aan het doen is of zal doen.
HET MAKEN VAN EEN LICHT EMITTERENDE DIODE (LED) De meeste indicatie lichten die u ziet op toestellen worden licht emitterende diodes genoemd. U zult regelmatig deze licht emitterende diode zien staan als LED in de elektronica boeken. De naam is meestal uitgesproken als de drie letters: “L-E-D”. U kunt een LED circuit bouwen en op de voeding aansluiten opdat de LED oplicht. U kunt de voeding loskoppelen en dan zal de LED niet meer oplichten.
Pagina 38 · Wat is een Microcontroller?
Een LED circuit kan aangesloten worden op de BASIC Stamp, en de BASIC Stamp kan geprogrammeerd worden om een verbinding te leggen of af te sluiten met het LED circuit’s. Dit is veel makkelijker dan manueel de draden in het circuit’s aan of af te sluiten met de batterij. De BASIC Stamp kan geprogrammeerd worden om het volgende te doen: • • • •
Aan en afzetten van een LED circuit op verschillende snelheden Een zeker aantal maal het LED circuit aan en afzetten Controle over meer dan een LED circuits Controle over de kleur of tweekleurige LED circuits
ACTIVITEIT #1: BOUWEN EN TESTEN VAN EEN LED CIRCUIT Het is belangrijker om de componenten individueel te testen voordat u ze in een groter systeem plaats. Deze activiteit focust zich op het bouwen en testen van twee verschillende LED circuits. Het eerste circuit is hetgeen dat de LED licht laat emitteren. Het tweede circuit is hetgeen dat het licht niet laat emitteren. In de volgende activiteit zal u een LED circuit inbouwen in een groter systeem dat verbonden wordt met de BASIC Stamp. U zult dan een programma schrijven dat de BASIC Stamp de LED zal aan of uit sturen. Door eerst elke LED circuit op zichzelf te laten werken, kan u met meer vertrouwen een verbinding maken met de BASIC Stamp en grotere systemen. Introductie van de Weerstand Een weerstand is een component dat ‘zich verzet’ tegen de elektriciteitstroom in. De elektriciteitszin wordt kortweg stroom genoemd. Elke weerstand heeft een waarde die weergeeft hoeveel de “tegenwerking” van deze stroom is. Deze weerstandswaarde is in ohm, en het teken voor ohm is de Griekse letter mega: Ω. De weestand die zal gebruikt worden in deze activiteit is the 470 Ω getoond op Figuur 2-2. De weestand heeft twee draden elk komende uit een einde van de resistor. Er is een keramische omhulling tussen de twee draden en dit is het deel dat de weestand biedt tegen de stroom. De meeste circuit diagrammen die weerstanden gebruiken tonen een getande lijn met op de linker kant de gegevens dat er een 470 Ω weerstand dient gebruikt te worden. Dit is een schematische voorstelling. De tekening op de rechter kant wordt gebruikt in de beginnende Stamps in Class tekst om te helpen een weerstand te herkennen.
#2: Lichten Aan – Lichten Uit · Pagina 39
Gold Silver or Blank
470 Ω
Yellow
Violet
Brown
Figuur 2-2 470 Ω Weerstand stuktekening Schematisch symbool (links) en stuktekening (rechts)
Weerstanden als deze hebben gekleurde strepen die u vertellen wat de weerstandswaarde is. Elke combinatie van kleuren is verschillend voor elke weerstandswaarde. Als voorbeeld, de kleur code voor de 470 Ω weerstand is geel-paars-bruin. Er kan een vierde streep op de weerstand staan maar die duidt de tolerantie aan. De tolerantie is weergegeven in percent, en vertelt hoeveel van de werkelijke waarde, die op de weerstand staat, kan verschillen. De vierde streep komt overeen met goud (5%), zilver (10%) of geen streep (20%). Voor deze activiteit doet de tolerantie van de weerstand niet van toepassing, maar de waarde is dit wel. Elke kleur op de weerstand geeft de overeenkomstige waarde weer per digit zoals in tabel 2-1. Figuur 2-3 toont hoe de kleurcode van een weerstand te ontcijferen. Tabel 2-1:
Weerstand code waarde Digit 0 1 2 3 4 5 6 7 8 9
kleur Zwart Bruin Rood Orange Geel Groen Blauw Violet Grijs Wit
Tolerance Code
First Digit
Number of Zeros Second Digit
Figuur 2-3 Weerstand kleur codes
Pagina 40 · Wat is een Microcontroller?
Hier is een voorbeeld hoe de Tabel 2-1 en Figuur 2-3 gebruikt kan worden om een weerstandswaarde weer te vinden. Geel-paars-bruin is echt 470 Ω: • • • •
De eerste streep is geel, wat wil zeggen dat de meest linkse digit 4 is. The second stripe is violet, which means the next digit is a 7. De tweede streep is violet, wat wil zeggen dat de volgende digit 7 is. De derde streep is bruin, wat wil zeggen dat de meest rechtse digit 0 is.
Geel-Violet-Bruin = 4-7-0. Introductie van de LED Een LED is als een eenrichtingsweg, de diode (LED) geeft licht als er stroom in de juiste richting doorgaat. De kleurcode op de LED dient om aan te duiden in welke richting er stroom dient te passeren om op te lichten. De belangrijkste markering van de LED is de vorm. Omdat elke LED maar een richting heeft om juist te functioneren, dient u er op te letten dat de verbindingen juist zijn, of de LED zal niet naar behoren werken. Figuur 2-4 toont een LED’s als een symbool op het schema. Een LED heeft twee aansluitingen. De ene is de anode de andere de kathode. In deze activiteit zal u een LED inbouwen in een circuit, let erop dat de anode en de kathode juist zijn verbonden. Op de stuktekening, is de anode aangeduid met een + teken. Op het schema is de anode het stuk met de driehoek. Op de stuktekening, is de kathode de niet gemarkeerde pin en op het schema is het symbool van de kathode draad de lijn die door de driehoek gaat. Figuur 2-4 LED stuk tekening en Schematisch Symbool Stuktekening (boven)en schematisch symbool (onder).
+ LED
De LED’s stuktekening zal in de latere tekeningen een + naast de anode hebben.
#2: Lichten Aan – Lichten Uit · Pagina 41
Indien u start met het bouwen van uw circuit, check het schematische symbool en de stuktekening om foute aansluitingen te vermijden. Merk op dat er op de stuktekening de LED draden een verschillende lengte hebben. De lange draad is verbonden met de anode van de LED en het korte uiteinde is verbonden met de kathode. Indien u het nader bekijkt is de plastieken bescherming van de LED meestal rond, maar voor een klein deel plat, dit platte deel is aan de kathode kant. Dit is handig om te weten, zeker als de draden al geknipt zijn of op het bord zijn vastgemaakt. LED Test Circuit onderdelen
(1) LED – Groen (1) Weerstand – 470 Ω (geel-violet-bruin) Identificatie van de onderdelen: Als extra steun bij stuktekening in Figuur 2-2 en Figuur 24, ben je gebruik maken van de foto’s op de laatste pagina’s van het boek, om de juiste componenten te identificeren voor de activiteit. Voor meer informatie over de onderdelen en deze foto’s, zie Appendix B: Uitrusting en Stukken Lijst.
Bouwen van het LED Test Circuit
U zult een circuit bouwen door de LED en weerstand draden in de kleine openingen, “contactpunten” genoemd, te plaatsen op het prototype gebied getoond zoals in Figuur 25. Dit prototype gebied heeft zwarte “contactpunten” vanboven en langs links. Deze zwarte “contactpunten” op de bovenkant hebben namen: Vdd, Vin, en Vss. Deze zijn genoemd naar de voedingterminals, en zullen gebruikt worden om elektriciteit te voorzien op uw circuits. De zwarte “contactpunten” op de linker kant hebben labels zoals P0, P1, tot P15. Deze zullen gebruikt worden om de BASIC Stamp module ingang/uitgang pinnen te verbinden met uw circuit. Het witte bord met vele openingen noemt men het “soldeerloos” printbord. U zult dit bord nodig hebben om de componenten te verbinden tot een circuit.
Pagina 42 · Wat is een Microcontroller?
Vdd
Vin
Vss
X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Figuur 2-5 Prototype gebied Voeding terminals (zwarte voeten vanboven), I/O pin toegangen (zwarte voeten langs links), en soldeerloos breadboard (witte plaatsen)
Ingang/Uitgang pinnen zijn meestal I/O pinnen genoemd. Na het verbinden van uw circuit met een of meer I/O pinnen, kan u de signalen van de BASIC Stamp bekijken van het circuit (ingang) of sturen van aan/uit signalen naar het circuit (uitgang). U zult dit proberen in de volgende activiteit.
Figuur 2-6 toont een schema en een foto van hoe het circuit eruit zal zien als het gebouwd is op de prototype plaats. Het bord is verdeeld in rijen van vijf contactpunten. Elke rij kan vijf draden met elkaar verbinden. Voor dit circuit, dienen de weerstand en de LED verbonden te worden met elk een draad in dezelfde rij (5). Merk op dat een draad van de weerstand in het Vdd circuit is aangesloten en op die manier voeding krijgt. Het andere weerstandsdraad uiteinde gaat naar de LED anode kant. De LED’s kathode draad is verbonden met Vss, grond om het circuit te vervolledigen. U bent nu klaar om het circuit te bouwen zoals in Figuur 2-6 (onderaan) door de LED en weerstand draden in de contactpunten op het prototype gebied aan te brengen. Volg volgende stappen: √ √ √ √
Koppel de voeding los van het Board of Education of het HomeWork Board. Gebruik Figuur 2-4 om te beslissen welke draad er met de LED kathode dient verbonden te worden. Kijk naar de kortere draad en de platte kant op het plastieken deel van de LED. Plug de kathode van de LED in een zwart contactpunt met het label Vss. Plug the anode van de LED’s (de andere langere draad) in de voet in de voorziene prototype plaats.
#2: Lichten Aan – Lichten Uit · Pagina 43
√ √
Plug een van de weerstanddraden in het bord, op dezelfde rij van de anode van de LED. De rij zal beide draden met elkaar verbinden. Plug de andere kant van de weerstand in een contactpunt met label Vdd. De richting van de LED is bepalend, maar dit is niet het geval voor de weerstand. Indien u de LED omgekeerd aansluit, zal deze geen licht uitzenden indien u de voeding aansluit. De weerstand is enkel een “verzet” tegen de stroomdoorgang. Er is geen voor en achterkant aan een weerstand.
√ √
Sluit de voeding met het Board of Education of het HomeWork Board aan. Ga na dat de groene LED licht uitzendt.
Vdd
Vdd
X3
470 Ω
LED
Vss
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Vin
Vss
+
Figuur 2-6 LED Aan Schematisch (links) en draad diagram (rechts)
Indien de groene LED geen licht geeft en de voeding is aangesloten op het bord: √ √
Sommige LED zijn het helderst als u ze langs boven bekijkt. Indien de kamer teveel licht bevat, doe enkele lampen uit, of gebruik uw handen om schaduw rond de LED te vormen.
Indien u nog steeds geen groen licht ziet branden dan kan u deze stappen volgen. √
Dubbel check om er zeker van te zijn dat de kathode en de anode juist zijn aangesloten. Indien niet, verwijder de LED uit het bord, geef hem een halve
Pagina 44 · Wat is een Microcontroller?
√ √ √
draai en plug hem terug in het bord. Dit zal de LED niet beschadigen. Check of de Led nu licht uitstraalt. Dubbel check om er zeker van te zijn dat uw circuit exact hetzelfde is zoals in Figuur 2-6. Indien iemand voor u de microcontroller kit gebruikt heeft, kan het zijn dat de LED beschadigd is, probeer een andere. Indien u in een labo klas bent, controleer met de instructeur. Nog altijd vast? Indien u geen instructeur of vriend hebt die kan helpen, kan u altijd de Stamps in Class discussie groep aanspreken op de website. De eerste pagina’s in dit boek gaan over Internet toegangsinformatie en waar u de discussie groep kan vinden. Indien de groep u niet kan helpen, kan u nog het Parallax Technical Support departement raadplegen door de link te volgen naar Support op www.parallax.com.
Hoe het LED Test Circuit Werkt De Vdd en Vss terminals voorzien elektrische stroom op dezelfde manier als een batterij dat doet.De Vdd voeten zijn zoals de positieve terminals van batterijen, en de Vss voeten zijn zoals de negatieve terminal van batterijen. Figuur 2-7 toont hoe de elektronen in het circuit vloeit. Deze vloei van elektronen wordt stroom genoemd. De stroom wordt beperkt door de weerstand. Deze stroom zorgt ervoor dat de LED oplicht.
+
N
-
-
+++ +++ +++
_
--- - -N -N - N -
-
-
N N
+
+
=
N
Figuur 2-7 LED Aan Circuit Elektrische stroom
-
-
-
-
-
-
-
-
-
Het minteken met de cirkel er rond zijn elektronen die van de negatieve naar de positieve terminal van de batterij vloeien.
#2: Lichten Aan – Lichten Uit · Pagina 45
Chemische reacties in de batterij voorzien circuit met stroom. De negatieve pool van de batterij bevat de moleculen met extra elektronen (zoals in Figuur 2-7 met min tekens). De positieve pool van de batterij bevat moleculen die elektronen tekort hebben (getoond met plus tekens). Als een elektron een negatieve molecule verlaat en door de draad wordt getransporteerd., noemt men het een vrij elektron ( ook getoond met – tekens). De molecule die geen extra elektronen ladingen meer heeft wordt een neutraal element genoemd (getoond met een N). Als het elektron aan de positieve pool aankomt, wordt het bij een molecule gevoegd die een elektron miste, en zo wordt die molecule ook neutraal.
Figuur 2-8 toont de doorstroom van elektriciteit door een LED circuit zoals beschreven in de opmerking van het schema. De elektrische druk in het schema wordt stroom genoemd. De + en – tekens worden gebruikt om het voltage op het circuit aan te duiden. De pijl toont hoe de stroom zich door het circuit verplaatst. De pijl toont altijd de tegengestelde richting van de eigenlijke elektronenstroom. Benjamin Franklin was niet op de hoogte van de elektronen toen hij besliste om stroomrichting aan te duiden van de positieve naar de negatieve pool. Tegen de tijd dat de fysica geleerden hadden ontdekt dat de waarheid net andersom is, was de conventie al lang vastgelegd. Voltage
+
Vdd
Resistance Current LED
Voltage
-
Vss
Figuur 2-8 LED-Aan Circuit Schematische voorstelling van de Voltage en stroom conventie De + en – tekens tonen het voltage en de pijlen tonen de stroomrichting door het circuit.
Een schematische tekening (zoals Figuur 2-8) is een tekening die uitlegt hoe een of meerdere circuits samengevoegd zijn. Schema’s worden door studenten, elektronica hobbyisten, elektriciens, ingenieurs en ongeveer iedereen die met circuits werkt. Appendix F: Meer over Elektriciteit: Dit appendix bevat enkele termen en activiteiten die u kunt proberen om meer vertrouwt te raken met volt, ampère en weerstandsmetingen.
Pagina 46 · Wat is een Microcontroller?
Uw beurt – Aanpassen van het LED Test Circuit
In de volgende activiteit, zal u een programma draaien op de BASIC Stamp om de LED aan en dan af en terug aan te zetten. De BASIC Stamp zal dit doen met een schakeling van een LED circuit met twee andere verbindingen, Vdd en Vss. U hebt pas gedaan met het aansluiten van een weerstand op Vdd, en de LED zend licht uit. Maak de veranderingen zoals in Figuur 2-9 om te controleren dat de LED zal doven indien de weerstandsdraad van Vdd wordt losgekoppeld en indien u deze vastkoppelt aan Vss. √ √ √ √
Verwijder de voeding van het Board of Education of het HomeWork Board. Trek de weerstand uit de voet Vdd, en plug hem in de voet met naam Vss zoals op Figuur 2-9. Sluit de voeding terug aan op het Board of Education of het HomeWork Board. Ga na dat de groene LED niet brandt!
Vdd X3
470 Ω
Vss
LED
Vss
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Vin
Vss
+
Figuur 2-9 LED Uit Circuit Schematisch (links) en draad diagram (rechts).
ACTIVITEIT #2: AAN/UIT CONTROLE MET DE BASIC STAMP In Activiteit #1, zijn er twee verschillende circuits gebouwd en getest. Het ene circuit deed de LED oplichten het andere zorgde er juist voor dat de LED uit bleef. Figuur 2-10 toont hoe de BASIC Stamp hetzelfde kan doen als u het LED circuit aansluit op de I/O pinnen. In deze activiteit zal u het LED circuit aansluiten op de BASIC Stamp en de microcontroller programmeren om de LED aan of uit te zetten.
#2: Lichten Aan – Lichten Uit · Pagina 47
U zult ook uitproberen om met een ander programma de BASIC Stamp de LED in verschillende snelheden kan aan en uit zetten.
SOUT
1
SIN
2
ATN
3
VSS
4
P0
5
P1
6
BS2 Vdd Vss
24
VIN
23
VSS
SIN
2
22
RES
SOUT ATN
3
VSS
4
1
21
VDD (+5V)
20
P15
P0
5
19
P14
P1
6
BS2 Vdd Vss
24
VIN
23
VSS
22
RES
21
VDD (+5V)
20
P15
19
P14
P2
7
18
P13
P2
7
18
P13
P3
8
17
P12
P3
8
17
P12
P4
9
16
P11
P4
9
16
P11
P5
10
15
P10
P5
10
15
P10
P6
11
14
P9
P6
11
14
P9
P7
12
13
P8
P7
12
13
P8
BS2-IC
BS2-IC
Figuur 2-10 BASIC Stamp Schakeling De BASIC Stamp kan geprogrammeer d worden om intern de verbinding te maken van de LED input met Vdd of Vss.
Er zijn twee grote verschillen tussen de verbinding manueel te veranderen of het met de BASIC Stamp te doen. Vooreerst, de BASIC Stamp dient de voeding niet af te koppelen om de LED van de ene Vdd verbinding naar de andere Vss te verplaatsen. Ten tweede, aangezien de mens deze verandering maar enkele keren per minuut kan maken, kan de BASIC Stamp het een duizend tal keer per seconde sneller! LED Test Circuit Onderdelen
Dezelfde als in Activiteit #1. Verbinden van het LED Circuit met de BASIC Stamp
Het LED circuit zoals in Figuur 2-11 is verbonden met hetzelfde circuit van de vorige oefening. Het verschil is dat de weerstandsdraad manueel moet geschakeld worden tussen Vdd en Vss en dit nu vervangen is door een verbinding met de BASIC Stamp I/O pin. √ √
Koppel de voeding af van het Board of Education of het HomeWork Board. Verander het schema van Activiteit #1 opdat het overeen komt zoals in Figuur 2-11.
Pagina 48 · Wat is een Microcontroller?
Vdd
P14
X3
470 Ω LED
Vss
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Vin
Vss
+
Figuur 2-11 BASIC Stamp gestuurd LED Circuit De LED circuit input in nu verbonden met de BASIC Stamp I/O pin in plaats van rechtstreeks verbonden met Vdd of Vss.
Weerstanden zijn essentieel. Onthoud om altijd een weerstand te gebruiken, zonder de weerstand kan er teveel stroom door het circuit lopen en verschillende componenten kunnen beschadigd worden op het circuit
De LED Aan/Uit zetten met een Programma
Dit voorbeeld programma laat een LED knipperen per seconde. Er worden verschillende programmatechnieken gebruikt. Nadat u het programma gedraaid heeft, zal u experimenteren met verschillende programmastukken om het beter te verstaan hoe het programma werkt. Voorbeeld Programma: LedOnOff.bs2
√ √ √ √ √
Geef de LedOnOff.bs2 code in op de BASIC Stamp Editor. Sluit de voeding terug aan op het Board of Education of het HomeWork Board. Start het programma. Controleer of de LED eens per seconde aan en uitgeschakeld wordt. Koppel de voeding los als u klaar bent met het programma.
'What's a Microcontroller - LedOnOff.bs2 'Turn an LED on and off. Repeat 1 time per second indefinitely.
#2: Lichten Aan – Lichten Uit · Pagina 49
'{$STAMP BS2} '{$PBASIC 2.5} DEBUG "The LED connected to Pin 14 is blinking!" DO HIGH 14 PAUSE 500 LOW 14 PAUSE 500 LOOP
Hoe LedOnOff.bs2 Werkt Het commando DEBUG "The LED connected to Pin 14 is blinking!" zorgt ervoor dat deze zin op de Debug Terminal tevoorschijn komt. Het commando HIGH 14 zorgt ervoor dat intern in de BASIC Stamp de I/O pin P14 verbonden wordt met Vdd. Dit doet de LED branden. Het commando PAUSE 500 zorgt ervoor dat de BASIC Stamp niks doet voor een halve seconde terwijl de LED blijft branden. Het nummer 500 vertelt het PAUSE commando om te wachten voor 500/1000 van een seconde. Het nummer dat volgt na PAUSE noemen we een argument. Indien u naar PAUSE opzoekt in de BASIC Stamp Handleiding, zal u ontdekken dat het argument de lengte van de pauze wordt genoemd in milliseconden. Wat is een Milliseconde? Een milliseconde is 1/1000 van een seconde. De afkorting hiervoor is ms. Er zijn 1000 ms in een seconde.
Het commando LOW 14 zorgt ervoor dat de BASIC Stamp intern de verbinding maakt met I/O pin P14 naar Vss. Dit zorgt ervoor dat de LED wordt afgezet. Aangezien LOW 14 gevolgd wordt door PAUSE 500, zal de LED uit blijven voor een halve seconde. De redden dat de code zichzelf constant opnieuw wordt uitgevoerd, is omdat die tussen de twee PBASIC woorden DO en LUS staan. Figuur 2-12 toont hoe een DO…LOOP werkt. Door de code tussen DO en LOOP te plaatsen wordt de LED telkens aan en af gezet door telkens opnieuw vier commando’s en daarbijhorende pauzes uit te voeren. Het resultaat is dat de LED knippert totdat u de voeding afkoppelt, batterij plat is of u de reset toets ingedrukt houdt.
Pagina 50 · Wat is een Microcontroller?
DO HIGH 14
Figuur 2-12 DO…LOOP
PAUSE 250 LOW 14 PAUSE 250 LOOP
De code tussen de kernwoorden DO en LOOP wordt telkens opnieuw uitgevoerd.
Een Diagnose Test voor uw Computer
Enkele computers, zoals laptops, zullen stilvallen na de eerste keer de DO...LOOP sequentie. Deze computers hebben een niet standaard seriële poort. Door een DEBUG commando, zoals in programma LedOnOff.bs2, zal dit niet meer voorkomen. U kunt zodadelijk het programma herstarten zonder het DEBUG commando en dan kan u zien of uw computer een niet standaard seriële poort heeft. Het is onwaarschijnlijk, maar het is handig om weten. √ √ √
Open LedOnOff.bs2. Verwijder de volledige DEBUG instructie. Start het aangepaste programma terwijl u naar de LED kijkt.
Indien de LED continu blijft knipperen zoals bij het originele programma, dan weet u dat u een standaard seriële poort hebt. Indien de LED slechts eenmalig heeft geknipperd, dan heeft u een niet-standaard seriële poort op uw computer en blijft u hangen in de eerste DO...LOOP sequentie. Om dit probleem op te lossen, dient u de seriële kabel af het bord te koppelen, de Reset toets in te drukken en de BASIC Stamp zal het programma uitvoeren zonder vast te lopen. In de programma’s die u zelf schrijft voegt u best een commando toe, DEBUG "Program Running!"
Vlak na de compiler richtlijnen. Dit zal de Debug Terminal openen en de COM poort open laten. Dit voorkomt dat uw programma vastloopt na de eerste DO…LOOP sequentie of gelijk welke ander commando dat u in een later Hoofdstuk leert. U zult dit commando
#2: Lichten Aan – Lichten Uit · Pagina 51
geregeld in een voorbeeld vinden, zodat alle programma’s in dit boek op een computer kunnen draaien, ook al faalde de computer voor deze diagnose test. Uw beurt – Tijden en herhalingen
Door het PAUSE commando Duration argument aan te passen, kan u ervoor zorgen dat de LED langer aan of af blijft. Als voorbeeld, door het Duration argument naar 250 te brengen, zal de LED twee maal per seconden knipperen. De O…LOOP ziet er dan als volgt uit: DO HIGH 14 PAUSE 250 LOW 14 PAUSE 250 LOOP
√ √
Open LedOnOff.bs2 Verander het PAUSE commando Duration argument van 500 naar 250, en herstart het programma.
Indien u de LED drie maal per seconde wil laten blinken, met de uit tijd tweemaal zolang als de aan tijd, kan je in het programma de PAUSE commando bijschrijven na het HIGH 14 commando met als argument 1000. Het PAUZE commando na het LOW 14 commando is PAUSE 2000. DO HIGH 14 PAUSE 1000 LOW 14 PAUSE 2000 LOOP
√
Pas aan en herstart het programma met de code van hierboven.
Een leuk experiment is om te zien hoe kort je de pauzes kan maken en nog kunt zien dat de LED blinkt. Als de LED zeer snel aan het blinken is en het lijkt erop dat de
Pagina 52 · Wat is een Microcontroller?
LED aan blijft staan, dan spreken we over gezichtsbedrog. Hieronder staat hoe u het kunt uitzoeken: √ √ √ √
Pas beide PAUSE commando’s Duration argumenten aan naar 100. Herstart het programma en kijk als de LED nog flikkert. Verminder beide Duration argumenten met 5 en probeer opnieuw. Blijf de Duration argumenten verminderen totdat de LED lijkt al de tijd aan te blijven staan. De LED zal iets zwakker zijn dan anders, maar het zal flikkeren.
Een laatste test is om het eenmalig blinken van de LED te laten uitvoeren. Dit kan opgelost worden met DO…LOOP. U kunt tijdelijk de functie DO…LOOP verwijderen uit het programma door een apostrof te plaatsen langs links van de DO en LOOP sleutelwoorden, zoals hieronder. ' DO HIGH 14 PAUSE 1000 LOW 14 PAUSE 2000 ' LOOP
√ √
Pas het programma aan en herstart het met bovenstaande code. Leg uit wat er gebeurde, waarom flitste de LED maar één keer? Commentaar bij een codelijn: Het plaatsen van een apostrof langs links van een commando, verandert het in een commentaar. Dit is een handig hulpmiddel om de code niet te hoeven verwijderen, om te kijken wat er gebeurt met het programma als de code niet gelezen wordt. Het is veel makkelijker om de apostrof toe te voegen en te verwijderen dan de hele commando’s te hertypen.
ACTIVITEIT #3: TELLEN EN HERHALEN In de vorige activiteit, knipperde het LED circuit aan en af de gehele tijd of het knipperde eenmalig en stopte. Wat als u de LED enkel maar tien keer wil laten knipperen?Computers (en dus ook de BASIC Stamp) zijn goed in het onthouden van totalen en hoeveel maal iets gebeurt. Computers kunnen zo geprogrammeerd worden om beslissingen te maken gebaseerd op verschillende condities. In deze activiteit, zal u de BASIC Stamp laten stoppen met knipperen na tien herhalingen.
#2: Lichten Aan – Lichten Uit · Pagina 53
Tellen, Onderdelen en Test Circuit
Gebruik het voorbeeld circuit zoals in Figuur 2-11 op pagina 48. Hoeveel Keer?
Er zijn verschillende manieren om de LED tien maal te laten knipperen. De gemakkelijkste manier is om gebruik te maken van het FOR…NEXT sequentie commando. Het FOR…NEXT commando is gelijkaardig als de DO…LOOP. Hoewel DO…LOOP gebruikt kan worden om een vast aantal keer de LED te laten blinken, kan het FOR…NEXT commando dit gemakkelijker. Het FOR…NEXT commando hangt af van een variabele die bijhoudt hoeveel maal de LED al geknipperd heeft. Een variabele is een woord dat u kiest en dat bepaalde waarden kan vasthouden. Het volgende voorbeeld programma gebruikt de woord teller counter om te ‘tellen’ hoeveel maal de LED heeft geknipperd. Het kiezen van namen voor variabelen heeft enkele regels: 1.
De naam kan geen woord zijn dat al gebruikt is door PBASIC. Die woorden worden gereserveerde woorden genoemd, hierbij enkel die u al zou moeten kennen: DEBUG, PAUSE, HIGH, LOW, DO, en LOOP.
2.
De naam kan geen spatie bevatten.
3.
De naam kan letters, nummers, of underscores, gebruiken maar moet met een karakter beginnen.
4.
De naam mag niet langer dan 33 karakters zijn.
Voorbeeld Programma: LedOnOffTenTimes.bs2
Het programma LedOnOffTenTimes.bs2 demonstreert hoe de FOR…NEXT sequentie te gebruiken om een LED 10 maal te laten knipperen. √ √ √ √ √
Uw testcircuit van Activiteit #2 dient klaar te zijn. Laad de LedOnOffTenTimes.bs2 code in de BASIC Stamp Editor. Verbind de voeding met uw Board of Education of HomeWork Board. Start het programma. Kijk na of de LED tien maal blinkt.
Pagina 54 · Wat is een Microcontroller?
√
Start het programma een tweede keer en kijk na dat de waarde van de counter in de Debug Terminal juist toont hoeveel maal de LED heeft geknipperd. Hint: in plaats van terug op start te drukken voor een tweede maal, kan u de reset toets gebruiken op het Board of Education of het HomeWork Board.
' What's a Microcontroller - LedOnOffTenTimes.bs2 ' Turn an LED on and off. Repeat 10 times. ' {$STAMP BS2} ' {$PBASIC 2.5} counter VAR Byte FOR counter = 1 TO 10 DEBUG ? counter HIGH 14 PAUSE 500 LOW 14 PAUSE 500 NEXT DEBUG "All done!" END
Hoe LedOnOffTenTimes.bs2 Werkt Dit PBASIC commando counter VAR Byte
Vertelt de BASIC Stamp Editor dat het programma het woord counter gebruikt als variabele dat een byte kan opslaan.
#2: Lichten Aan – Lichten Uit · Pagina 55
Wat is een Byte? Een byte is genoeg ruimte om de getallen tussen 0 en 255 op te kunnen slaan. De BASIC Stamp heeft vier verschillende type variabelen, die elk een eigen hoeveelheid getallen kan opslaan: Tabel 2-2: Variabel Types en waarden die ze kan opslaan Variabele type
Bereik
Bit
0 tot 1
Nib
0 tot 15
Byte
0 tot 255
Woord
0 tot 65535
Het vraagteken voor een variabele in a DEBUG commando vertelt de Debug Terminal om de naam van de variabele en de waarde ervan weer te geven. Dit is hoe het commando DEBUG ? counter
Zowel de naam en de waarde van de waarde van de counter variabele in de Debug Terminal weergeeft. De FOR…NEXT loop en alle commando’s ertussen worden hieronder getoond. Het commando FOR counter = 1 to 10 zegt de BASIC Stamp dat het de counter variabele van 10 tot 1 de commando’s zal moeten uitvoeren. Pas indien alle 10 de commando’s gedaan zijn kan het programma verder met na het NEXT commando. Als de BASIC Stamp aan NEXT komt, dan keert hij terug naar het FOR statement. Dit FOR statement telt één op bij de waarde van de counter. Dan wordt gecontroleerd indien de counter waarde groter is dan 10. Indien dit niet het geval is, herhaalt dit proces zich totdat het de elfde keer zou worden uitgevoerd, maar dan worden de commando’s tussen FOR en NEXT overgeslaan en gaat het programma verder na het NEXT statement. FOR counter = 1 to 10 DEBUG ? counter, CR HIGH 14 PAUSE 500 LOW 14 PAUSE 500 NEXT
Pagina 56 · Wat is een Microcontroller?
De commando’s die na het NEXT statement komen zijn: DEBUG "All done!"
Dit commando is enkel toegevoegd om te tonen wat het programma doet nadat er tien maal door de lus gelopen is. Uw beurt – Andere Mogelijkheden om te Tellen
√
Vervang onderstaande FOR counter = 1 to 10
Door dit:
FOR counter = 1 to 20
in LedOnOffTenTimes.bs2 en herstart het programma. Wat heeft het programma anders gedaan? En was dit te verwachten? √
Probeer een tweede verandering met een FOR statement. Verander dit naar FOR counter = 20 to 120 STEP 10
Hoeveel maal heeft de LED nu geflikkerd? Wat is de waarde op de display?
ACTIVITEIT #4: BOUWEN EN TESTEN VAN EEN TWEEDE LED CIRCUIT Indicatie LED's kunnen gebruikt worden om een machine operator vele dingen te vertellen. Verschillende toestellen gebruiken twee, drie of meer LED's die vertellen aan de operator als de machine klaar is of niet, als er iets mis is, etc... In deze activiteit, zal u de LED circuit test uit Activiteit #1 uitbouwen met een tweede LED Circuit. Daarna zult u het programma voorbeeld van Activiteit #2 aanpassen opdat het LED circuit juist is aangesloten op de BASIC Stamp. U zult het programma van Activiteit #2 dan nog eens aanpassen om de LED's in tandem te kunnen laten werken. Extra Onderdelen
Volgende onderdelen heeft u meer nodig dan die uit de Activiteiten 1 en 2: (1) LED - geel (1) Weerstand – 470 Ω (geel-violet-bruin)
#2: Lichten Aan – Lichten Uit · Pagina 57
Bouwen en testen van het tweede circuit
In Activiteit #1, heeft u manueel getest met een LED circuit, om te kijken of die werkte voordat u deze aansloot op de BASIC Stamp. Voordat u het tweede LED circuit aansluit op de BASIC Stamp, is het belangrijk om ook dit te testen. √ √ √ √
Koppel de voeding af van het Board of Education of het HomeWork Board. Maak het tweede LED circuit zoals op Figuur 2-13. Koppel de voeding aan op het Board of Education of het HomeWork Board. Is de tweede LED circuit aangegaan? Indien ja, ga verder. Indien neen, in Activiteit #1 zijn er probleemomschrijvingen en oplossingen aangeboden, die u zelf kunt verifiëren voor dit nieuwe circuit.
Vdd X3
Vdd
470 Ω P14 470 Ω LED
LED Vss
√ √
Vss
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Vin
+
Vss
+
Figuur 2-13 Manuele Test Circuit voor de tweede LED
Koppel de voeding af van het Board of Education en het HomeWork Board. Pas het tweede LED circuit aan, zodat de weerstanddraad (ingang) naar P15 gaat, zoals in Figuur 2-14.
Pagina 58 · Wat is een Microcontroller?
Vdd X3
P15 470 Ω P14 470 Ω LED Vss
LED Vss
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Vin
+
Vss
+
Figuur 2-14 Verbinden van de tweede LED met de BASIC Stamp Schematisch (links) en draad diagram(rechts).
Gebruik van een Programma om het Tweede LED Circuit te Testen
In Activiteit #2, heeft u een voorbeeld programma gemaakt met de HIGH en LOW commando’s die verbonden zijn met het LED circuit op P14. Deze commando’s zullen gewijzigd moeten worden naar een verbinding met P15. In plaats van HIGH 14 en LOW 14, te gebruiken dient u HIGH 15 en LOW 15 te gebruiken. In Activiteit #2, heeft u een voorbeeld programma gemaakt met de HIGH en LOW commando’s die verbonden zijn met het LED circuit op P14. Deze commando’s zullen gewijzigd moeten worden naar een verbinding met P15. In plaats van HIGH 14 en LOW 14, te gebruiken dient u HIGH 15 en LOW 15 te gebruiken. Voorbeeld Programma: TestSecondLed.bs2
√ √ √ √
Voeg TestSecondLed.bs2 in op de BASIC Stamp Editor. Sluit de voeding aan op uw Board of Education of het HomeWork Board. Start TestSecondLED.bs2. Ga na opdat het LED circuit dat verbonden is met P15 aan het flikkeren is. Indien ja, ga verder naar het volgende voorbeeld. Indien het LED circuit verbonden is met P15 niet flikkert, controleer de draden en aansluitingen en ga na of er geen typfouten in het programma staan. Porbeer dan opnieuw.
' What's a Microcontroller - TestSecondLed.bs2 ' Turn LED connected to P15 on and off. ' Repeat 1 time per second indefinitely.
#2: Lichten Aan – Lichten Uit · Pagina 59
' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Program Running!" DO HIGH 15 PAUSE 500 LOW 15 PAUSE 500 LOOP
Sturen van de twee LED’s
Ja, het is mogelijk om beide LED’s tegelijk te laten knipperen. Een van de mogelijkheden is om twee HIGH commando’s te gebruiken voor het eerste PAUSE commando. Een HIGH commando zet P14 hoog, en het volgende commando HIGH zet P15 hoog. Dan hebt u ook twee LOW commando’s nodig. Het is correct dat de beide LED's niet op exact hetzelfde moment zullen aan en uitschakelen, maar er is niet meer dan een milliseconde verschil tussen de twee, wat het menselijke oog niet ziet. Voorbeeld Programma: FlashBothLeds.bs2
√ √ √
Geef de FlashBothLeds.bs2 code in op de BASIC Stamp Editor. Start het programma. Ga na dat beide lampen LED’s tegelijkertijd knipperen.
' What's a Microcontroller - FlashBothLeds.bs2 ' Turn LED's connected to P14 and P15 on and off. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Program Running!" DO HIGH 14 HIGH 15 PAUSE 500 LOW 14 LOW 15 PAUSE 500
Pagina 60 · Wat is een Microcontroller?
LOOP
Uw beurt – Afwisselende LED's
U kunt de LED's laten afwisselen met knipperen door HIGH en LOW commando’s te verwisselen. Dit houdt in dat, terwijl de ene LED aan is, de andere uit en omgekeerd. √
Verander FlashBothLeds.bs2 opdat de commando’s tussen de DO en LOOP sleutelwoorden er als volgt uitzien: HIGH 14 LOW 15 PAUSE 500 LOW 14 HIGH 15 PAUSE 500
√
Start de aangepaste versie van FlashBothLeds.bs2 en controleer of de LED's alternerend knipperen.
ACTIVITEIT #5: STROOMRICHTING GEBRUIKEN OM DUBBEL KLEURIGE LEDS TE STUREN Het toestel getoond in Figuur 2-15 is een veiligheidsmonitor voor elektronische sleutels. Indien een elektronische sleutel met de juiste code is gebruikt, verandert de LED van kleur en dan gaat de deur open. Dit soort LED is een twee kleurige LED. Deze activiteit beantwoordt twee vragen: 1. Hoe verandert de LED van kleur? 2. Hoe kan je dat met BASIC Stamp toepassen?
#2: Lichten Aan – Lichten Uit · Pagina 61
Figuur 2-15 Tweekleurige LED in een veiligheidstoestel Indien de deur gesloten is, kleurt de tweekleurige LED rood. Indien de deur geopend wordt met een elektronische sleutel en de juiste code ingegeven is, zal de Led groen kleuren.
Introductie van de tweekleurige LED Het tweekleurige LED schematisch symbool en stuktekening zijn in Figuur 2-16 getoond. 1
Green
Red
2
LEDbicolor
Figuur 2-16 Tweekleurige LED 1
2
Schematisch symbool (links) en stuktekening (rechts).
De tweekleurige LED is eigenlijk twee LED's in één verpakking. Figuur 2-17 toont hoe je voeding dient te voorzien in de ene richting om de rode LED te laten branden. Door dezelfde LED los te koppelen en deze in omgekeerde richting te plaatsen, zal de groene LED branden. Zoals met de andere LED's, indien je beide terminals van het circuit aansluit op Vss, zal de LED niet oplichten.
Pagina 62 · Wat is een Microcontroller?
Vdd
Vdd
470 Ω 1
LEDRed
2
Vss
Figuur 2-17 Tweekleurige LED aansluitingen
470 Ω 2
470 Ω
1
LED1 Green
Vss
2 Vss
Rood (links), groen (midden) en geen licht (rechts)
Vss
Tweekleurige LED Circuit Onderdelen
(1) LED – twee kleurig (1) Weerstand 470 Ω (geel-violet-bruin) (1) Jumper draad Bouwen en Testen van een tweekleurig LED Circuit
Figuur 2-18 toont de manuele test voor een tweekleurige LED. √ √ √ √ √ √ √ √
Schakel de voeding af van het Board of Education of het HomeWork Board. Bouw het circuit zoals op de linker kant van Figuur 2-18. Sluit de voeding terug aan en ga na of de tweekleurige LED rood brandt. Koppel de voeding terug af. Pas uw circuit aan voor de rechter kant zoals in Figuur 2-18. Koppel de voeding terug aan. Ga na of de tweekleurige LED nu groen is. Koppel de voeding af.
#2: Lichten Aan – Lichten Uit · Pagina 63
Vdd
1 Vin 2
Vss
Vdd
X3
X3
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
2 Vin 1
Vss
Figuur 2-18 Manuele tweekleurige LED Test tweekleurige LED rood (links) en groen (rechts).
Het sturen van een tweekleurige LED met de BASIC Stamp gebeurt met twee I/O pinnen. Nadat u met de manuele test controleerde dat de tweekleurige LED werkte, kan u nu de BASIC Stamp aansluiten zoals in Figuur 2-19. √
Sluit het tweekleurige LED circuit aan op de BASIC Stamp zoals Figuur 2-19.
1
2 Vdd
Vin
Vss
X3
P15
1
2
P14 470 Ω
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Figuur 2-19 Tweekleurige LED verbonden met de BASIC Stamp
Pagina 64 · Wat is een Microcontroller?
BASIC Stamp tweekleurige LED Sturing
Figuur 2-20 toont hoe u P15 en P14 dient te gebruiken om de stroom te sturen in het tweekleurige LED circuit. Het bovenste schema toont hoe de stroom door de rode LED gaat indien P15 aangesloten is op Vdd en P14 aangesloten is op Vss. Dit is omdat de rode LED stroom zal krijgen, zoals de elektrische “druk” wordt aangevoerd zoals getoond. De groene LED is zoals een gesloten ventiel en laat geen stroom door. De tweekleurige LED zal rood worden. Het onderste schema toont wat er gebeurd als P15 aangesloten is op Vss en P14 aangesloten is op Vdd. Nu is de elektrische “druk” omgekeerd. De rode LED sluit af en zal geen stroom meer doorlaten, de groene LED zal branden en zal stroom doorlaten in de tegengestelde richting. HIGH = Vdd P15
1 Current
Figuur 2-20 Manuele tweekleurige LED Test
2
LOW = Vss P14 470 Ω
LOW = Vss P15
1 Current
Stroom door de Rode LED (boven)en de Groene LED (beneden).
2
HIGH = Vdd P14 470 Ω
Figuur 2-20 is de sleutel voor het programmeren van de BASIC Stamp om een tweekleurige LED te laten oplichten. Het bovenste schema toont hoe u een tweekleurige LED rood kunt maken door gebruik te maken van HIGH 15 en LOW 14. Het onderste schema toont hoe u een tweekleurige LED groen kunt laten oplichten door LOW 15 en HIGH 14 te gebruiken. Om de LED af te zetten, stuur het lage signaal naar zowel P14 en P15 door gebruik te maken van LOW 15 en LOW 14. Met andere woorden, gebruik LOW op beide pinnen.
#2: Lichten Aan – Lichten Uit · Pagina 65
De tweekleurige LED zal ook uit vallen indien je hoge signalen stuurt naar zowel P14 en P15. Waarom? Omdat de elektrische druk gelijk is op P14 en P15, onafhankelijk als deze pinnen nu allebei op een laag of hoog signaal staan.
Voorbeeld Programma: TestBiColorLED.bs2 √ √ √ √
Sluit de voeding terug aan. Type de TestBiColofLed.bs2 code in the BASIC Stamp Editor. Start het programma. Ga na dat de LED cyclus gelijk is aan rood, groen en niks is.
' What's a Microcontroller - TestBiColorLed.bs2 ' Turn bi-color LED red, then green, then off in a loop. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Program Running!" DO HIGH 15 LOW 14 PAUSE 500
' Red
LOW 15 HIGH 14 PAUSE 500
' Green
LOW 15 LOW 14 PAUSE 500
' Off
LOOP
Uw beurt – Licht Tonen In Activiteit #3, werd er een variabele counter gebruikt om te controleren hoelang een LED oplicht. Wat gebeurt er als u de counter gebruikt om het PAUSE commando te sturen met het Duration argument? √ √
Hernoem en sla TestBiColofLed.bs2 op als TestBiColofLedYourTurn.bs2. Voeg een variabele teller toe voor het DO statement:
Pagina 66 · Wat is een Microcontroller?
counter VAR BYTE
√
Nest het FOR…NEXT lus in de DO…LOOP zoals hieronder. FOR counter = 1 to 50 HIGH 15 LOW 14 PAUSE counter LOW 15 HIGH 14 PAUSE counter NEXT
Indien u klaar bent, zou je code er zo dienen uit te zien: counter VAR BYTE DO FOR counter = 1 to 50 HIGH 15 LOW 14 PAUSE counter LOW 15 HIGH 14 PAUSE counter NEXT LOOP
Aan het begin van elke stap door de FOR…NEXT lus, is de PAUSE waarde (Duration argument) is enkel een milliseconde. Elke tijd door het FOR…NEXT lus, zal de pauze langer en langer worden totdat het 50 milliseconden geworden is. Het DO…LOOP statement zorgt ervoor dat de FOR…NEXT lus opnieuw en opnieuw wordt uitgevoerd. √
Start het aangepaste programma en kijk wat het effect is.
#2: Lichten Aan – Lichten Uit · Pagina 67
SAMENVATTING De BASIC Stamp kan geprogrammeerd worden als een schakelaar in een circuit met licht emitterende diodes (LED), die aan of af kunnen gezet worden. LED indicaties zijn heel handig op verschillende plaatsen, waaronder computer monitoren, disk drives, en andere toestellen. De LED is geïntroduceerd samen met technieken om anode en kathode terminals van elkaar te kunnen onderscheiden. Een LED circuit moet altijd een weerstand hebben om de stroom die doorheen de LED vloeit te beperken. De weerstand is geïntroduceerd met een veel voorkomende code schema om uit te zoeken wat de weerstandswaarde is. De BASIC Stamp schakelt met een LED circuit aan en af door intern de I/O pin te verbinden met de Vdd of de Vss. Het HIGH commando kan gebruikt worden om de BASIC Stamp intern te verbinden met een van de I/O pinnen met de Vdd, en het LOW commando kan gebruikt worden om intern de I/O pin te verbinden met Vss. Het PAUSE commando wordt gebruikt om de BASIC Stamp alle commando’s niet uit te laten voeren een bepaalde tijd. Dit werd gebruikt om LED's aan of af te laten staan voor een zekere tijd. De tijdslengte wordt bepaald door het argument van het PAUSE commando Duration. De DO…LOOP kan gebuikt worden om een oneindige lus te creëren. De commando’s tussen de DO en LOOP sleutelwoorden worden telkens opnieuw uitgevoerd. Deze lus wordt oneindig genoemd, maar toch kan het programma herstart worden door ofwel de voeding kort te onderbreken of de reset toets in te drukken en terug los te laten. Een nieuw programma kan gedownload worden op de BASIC Stamp, en dit zal het vorige programma met de oneindige lus wissen. Stroomrichting en polariteit van voeding werden geïntroduceerd met een tweekleurige LED circuit. Indien er voeding op het LED circuit aanwezig is, en de stroom in een richting vloeit, zal er de LED een bepaalde kleur weergeven. Indien dan de voeding wordt omgedraaid, zal de stroom andersom vloeien en zal de LED een andere kleur weergeven. Vragen
1. Wat is de naam van de Griekse letter: Ω en waarnaar verwijst deze? 2. Welke weerstand zal er meer stroom doorlaten? Een 470 Ω of 1000 Ω weerstand?
Pagina 68 · Wat is een Microcontroller?
3. Hoe verbindt u twee draden door gebruik te maken van het bord? Kan het bord vier draden samen verbinden? 4. Wat moet u altijd doen voordat er een circuit wordt aangepast op het bord? 5. Hoe lang zal het PAUSE 10000 commando duren? 6. Hoe kunt u de BASIC Stamp niks laten doen voor een volledige minuut? 7. Wat zijn de verschillende types variabelen? 8. Kan een byte de waarde 500 houden? 9. Wat zal het commando HIGH 7 doen? Oefeningen
1. Teken het schema van een LED circuit zoals uit Activiteit#2, maar maak de verbinding met P13 in plaats van P14. Leg uit hoe u het circuit LedOnOff.bs2 gaat veranderen (Pagina 48) opdat het de groene LED vier maal per seconde zal laten doen branden. 2. Leg uit hoe het programma LedOnOffTenTimes.bs2 dient te veranderen om er een rode LED van te maken die 5000 maal knippert voordat deze stopt. Hint: u dient enkel twee lijnen code te veranderen. Project
1. Maak een 10-seconde afteller doormiddel van een gele LED en een tweekleurige LED. Maak de tweekleurige LED rood voor de eerste 3 seconden, daarna groen. Als de tweekleurige LED groen wordt, laat dan de gele LED elke seconde aan en afschakelen gedurende 10 seconden. Als de gele LED gedaan heeft, dient de tweekleurige LED terug op rood schakelen en zo blijven staan. Oplossingen
Q1. Omega is het Ω symbool en geeft weer hoe sterk een weerstand is. Q2. Een 470 Ω weerstand. Weerstanden met hogere waarden verzetten zich meer dan weerstanden met lage waarden. M.a.w. een weestand met een lage waarde laat meer stroom door. Q3. Om 2 draden met elkaar te verbinden kan u 2 draden op de zelfde rij steken. U kan 4 draden aansluiten op eenzelfde rij van 5 contactpunten. Q4. . De voeding afkoppelen. Q5. 10 seconden. Q6. PAUSE 60000 Q7. Bit, Nib, Byte, and Woord
#2: Lichten Aan – Lichten Uit · Pagina 69
Q8. Neen. De grootste waarde die een byte kan vasthouden is 255. De waarde 500 is buiten het bereik van de byte. Q9. HIGH 7 zal de BASIC Stamp intern de I/O pin P7 verbinden met Vdd. E1. The PAUSE Duration dient gereduceerd naar 500ms / 4 = 125ms. De I/O pin P13, HIGH 14 en LOW 14 moeten vervangen worden door HIGH 13 en LOW 13. P13 470 Ω
DO HIGH 13 PAUSE 125 LOW 13 PAUSE 125 LOOP
LED
Vss
E2. De counter variabele dient te veranderen naar een Word formaat, en het FOR statement dient veranderd van 1 naar 5000. counter VAR Word FOR counter = 1 to 5000 DEBUG ? counter, CR HIGH 14 PAUSE 500 LOW 14 PAUSE 500 NEXT
P1. Het tweekleurige LED schema, op de linker zijde, is niet anders dan Figuur 2-20 op pagina 64. Het gele LED schema is gebaseerd op Figuur 2-11 op pagina 48. Voor dit project werd P14 naar P13 veranderd. P13
P15
1 Red LED
470 Ω
Yellow LED
Green LED 2
P14 470 Ω
' What's a Microcontroller - Ch02Prj01_Countdown.bs2 ' 10 Second Countdown with Red, Yellow, Green LED ' Red/Green: Bicolor LED on P15, P14. Yellow: P13 ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Program Running!" counter VAR Byte
Vss
Pagina 70 · Wat is een Microcontroller?
' Red for three seconds HIGH 15 LOW 14 PAUSE 3000 ' Green for 10 seconds... LOW 15 HIGH 14 ' ...while the yellow LED is flashing FOR counter = 1 TO 10 HIGH 13 PAUSE 500 LOW 13 PAUSE 500 NEXT ' Red stays on HIGH 15 LOW 14
' Bi-color LED Red
' Bi-color LED Green
' Yellow LED on ' Yellow LED off
' Bi Color LED Red
Verder Onderzoek
De hieronder vermelde bronnen zijn gratis te downloaden op de Parallax web site en zijn toegevoegd op de Parallax CD. “BASIC Stamp Manual”, Users Manual, Version 2.0c, Parallax Inc., 2000 De BASIC Stamp Manual heeft meer voorbeelden die u kunt proberen en meer informatie over de volgende commando’s: HIGH, LOW, PAUSE, the DEBUG ? Formaat, en FOR…NEXT. “Basic Analog and Digital”, Student Guide, Version 2.0, Parallax Inc., 2003 Basic Analoog en Digital gebruikt LED's om te tellen in binaire code, beschrijft de analoge condities, en introduceert nieuwe manieren om de lichtsterkte van de LED aan te passen. “BASIC Stamp Editor Help File”, PBASIC 2.5 Version 2.0 Parallax Inc., 2003 Het PBASIC 2.5 Help Bestand heeft informatie over DO…LOOP, wat nieuw is voor PBASIC 2.5 en niet in de handleiding van de BASIC Stamp staat. U kunt die informatie vinden door te klikken op het boek icoon op uw BASIC Stamp Editor takenbalk, door dan “PBASIC Reference“ te selecteren in het menu op de linker zijkant balk. Dit zal het de PBASIC Commando Alfabetische Referentie lijst openen in het algemeen venster. Detail informatie kan gevonden worden door op elk commando te klikken.
Hoofdstuk #3: Digitale Input - Druktoetsen · Pagina 71
Hoofdstuk #3: Digitale Input - Druktoetsen TE VINDEN OP REKENMACHINES, SPELLETJES, E.A. Hoeveel toestellen met drukknoppen gebruikt u per dag? Hier zijn er enkele voorbeelden die in uw lijst kunnen staan: computer, muis, rekenmachine, magnetron, afstandsbediening, draagbare spelletjes, videorecorder. In alle toestellen zijn er microcontrollers die de drukknoppen scannen en wachten opdat het circuit zou veranderen. Indien het circuit verandert, dan detecteert de microcontroller de verandering en wordt er een actie ondernomen. Eens door dit Hoofdstuk heeft u een ervaring opgedaan met het ontwerpen van drukknopcircuits en met programmeren van de BASIC Stamp om de drukknoppen te kunnen volgen en daaraan de juiste acties te koppelen opdat de status verandering kan plaatsvinden.
ONTVANGEN VS. ZENDEN VAN EEN HOOG EN LAAG SIGNAAL In Hoofdstuk #2, heeft u de BASIC Stamp geprogrammeerd om een hoog en laag signaal te verzenden. U gebruikte het LED circuit om deze signalen weer te geven. Het sturen van hoge en lage signalen houdt in dat de BASIC Stamp I/O pin als een uitgang wordt gebruikt. In dit Hoofdstuk, zal u de BASIC Stamp I/O pin leren gebruiken als een input. Een input aan een I/O pin luistert voor een hoog/laag signaal in plaats van signalen te versturen. U zult deze ingelezen waarden naar de BASIC Stamp versturen door een drukknop circuit te gebruiken en u zult de BASIC Stamp zo programmeren om te detecteren als de drukknop wordt ingedrukt of niet. Andere termen die zenden, hoog/laag en ontvangen: Zenden van hoog/laag signalen is beschreven op verschillende manieren. U kunt zenden zien als versturen, doorsturen, controleren, besturen van een schakeling. In plaats van hoog/laag, kan u verwijzingen zien naar binaire code, TTL, CMOS, of Boolean signalen. Een andere term voor ontvangen is voelen.
ACTIVITEIT #1: TESTEN VAN EEN DRUKTOETS MET EEN LED CIRCUIT Als u een drukknop kan gebruiken om een hoog of laag signaal naar de BASIC Stamp te sturen, kan u dan ook een LED besturen met een drukknop? Het antwoord is ja en u zult dit in deze activiteit doen.
Pagina 72 · Wat is een Microcontroller?
Introductie van een Druktoets
Figuur 3-1 toont een schematisch symbool en een stuktekening van een normaal open drukknop. Twee van de drukknoppinnen zijn verbonden met een terminal. Dit betekent dat een draad van de drukknop verbinden met pin 1 hetzelfde is als deze verbinden met pin 4. Hetzelfde is geldig voor pin 2 en 3. De rede waarom een drukknop vier pinnen heeft in plaats van twee, is enkel maar voor de stabiliteit van de component. Indien de drukknop maar twee pinnen had, dan zouden die eventueel kunnen buigen of breken door de menselijke drukkracht.
1, 4 2, 3
Figuur 3-1 Normaal Open Drukknop 1
4
2
3
Schematisch symbool (links) en stuktekening (rechts)
De linker zijde van Figuur 3-2 toont hoe een normaal open drukknop eruit ziet indien deze niet ingedrukt is. Als de toets is ingedrukt, dan is er een opening tussen pin 1,4 en 2,3. Deze opening zorgt ervoor dat terminal 1,4 niet geleidend is met de 2,3 terminal. Dit noemen we een open circuit. De naam “normaal open” betekent dat de drukknop in normale status (dus niet ingedrukt) een open circuit vormt. Indien de toets wordt ingedrukt, dan zal de opening tussen 1,4 en 2,3 verdwijnen en een overbrugging tussen de pinnen komt tot stand met een geleidend metaal. Dit noemen we gesloten, de stroom kan door de drukknop vloeien.
1, 4
1, 4
2, 3
2, 3
Test Onderdelen voor de Drukknop
(1) LED – kies een kleur (1) Weerstand - 470 Ω (geel-violet-bruin) (1) Drukknop – normaal open
Figuur 3-2 Normaal Open Drukknop Niet ingedrukt (links) en ingedrukt (rechts)
Hoofdstuk #3: Digitale Input - Druktoetsen · Pagina 73
(1) Jumper draad Bouwen van het Druktoets Test Circuit
Figuur 3-3 toont een circuit dat u kunt maken om manueel de drukknop te testen. Koppel telkens de voeding af van het Board of Education of het BASIC Stamp HomeWork Board voordat u gelijk welke verandering maakt aan uw circuit. Vanaf hier zal de instructie dit niet meer herhalen! Het is aan u om dit altijd te onthouden en toe te passen. Koppel dan ook altijd de voeding terug aan op het Board of Education of de BASIC Stamp HomeWork Board voordat u een programma naar de BASIC Stamp stuurt.
√
Bouw het circuit zoals in Figuur 3-3. Vdd Vdd
Vin
Vss
+
X3
1, 4 2, 3
470 Ω
LED
Vss
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Figuur 3-3 Druktoets Test Circuit
Testen van de Druktoets
Indien de drukknop niet is ingedrukt, zal de LED uit blijven. Indien de aansluiting van de draden juist is en de knop wordt ingedrukt, zal de LED oplichten.
Pagina 74 · Wat is een Microcontroller?
Waarschuwingssingalen: Indien de Pwr LED op het Board of Education knippert, uit gaat en uit blijft als u de voeding terug aansluit, betekent dit dat u een kortsluiting heeft. Indien dit gebeurt, koppel de voeding onmiddellijk los en ga na waar de fout is en verbeter deze in uw circuit. De controle LED voor voeding op het HomeWork Board is anders. De LED zal enkel branden als het programma draait. Indien een programma eindigt (met het END commando), zal de Power LED ook uitgaan.
√ √
Ga na of de LED oplicht in uw test circuit. Druk op de knop en hou deze ingedrukt, en controleer dat de LED oplicht.
Hoe het Drukknop Circuit Werkt
De linker zijde van Figuur 3-4 toont het circuit indien er niet op de drukknop wordt gedrukt. Het LED circuit is niet verbonden met Vdd. Het is een open circuit dat geen stroom doorlaat. Door op de drukknop te drukken, sluit u de connectie tussen de terminals met een metalen geleiding en vormt u op die manier een weg voor de elektronen om het circuit te kunnen vervolledigen. Vdd
Vdd
1, 4
1, 4
2, 3
2, 3
No Current
470 Ω
470 Ω
Current
LED
Vss
LED
Figuur 3-4 Druktoets niet ingedrukt, en ingedrukt Druktoets circuit open (links) en gesloten (rechts)
Vss
Uw Beurt – Een Kortsluiting Figuur 3-5 toont een verschillend circuit dat de LED anders zal laten gedragen. Indien de toets niet is ingedrukt, blijft de LED branden. Indien de toets wel ingedrukt blijft zal de LED uitgaan. De rede dat de LED uit gaat indien er op de toets is gedrukt, is omdat de
Hoofdstuk #3: Digitale Input - Druktoetsen · Pagina 75
stroom altijd de weg met de minste weerstand volgt. Indien de drukknop is ingedrukt, hebben terminals 1,4 en 2,3, bijna geen weerstand, zodat de stroom kan passeren langs de toets (korte weg circuit, kortsluiting) in plaats van door de LED. √ √
Bouw het circuit zoals in Figuur 3-5. Herhaal deze test op het eerste drukknop circuit dat u hebt gebouwd, met dit nieuwe circuit. Vdd
Vdd
Vin
Vss
X3
1, 4 LED 2, 3 470 Ω
Vss
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
+
Figuur 3-5 LED wordt overbrugd door de Drukknop
Kunt u dit echt met een LED doen? Totnutoe is de LED altijd verbonden geweest met de kathode aan de Vss. Nu is de LED in een andere plaats in het circuit ingebouwd, met de anode aan Vdd. Vele mensen vragen of dit niet tegen de wetten van een circuit is, het antwoord is neen. De elektrische druk geleverd door Vdd en Vss is 5 Volt. De diode zal altijd 1.6 Volt gebruiken en de weerstand altijd 3.4 Volts, de een of de andere, onafhankelijk van elkaar.
ACTIVITEIT #2: INLEZEN VAN EEN DRUKTOETS MET DE BASIC STAMP In deze activiteit, zal u een drukknop aansluiten op de BASIC Stamp en zal u op de display laten verschijnen als hij al dan niet is ingedrukt. U zult dit doen door een PBASIC programma te schrijven dat de status van de drukknop stuurt en dit op de display in de Debug Terminal zal tonen. Onderdelen voor het Druktoets Circuit
(1) Drukknop - normaal open
Pagina 76 · Wat is een Microcontroller?
(1) Weerstand – 220 Ω (rood-rood-bruin) (1) Weerstand – 10 kΩ (bruin-zwart-orange) (2) Jumper draden Bouwen van een Druktoets Circuit voor de BASIC Stamp
Figuur 3-6 toont een drukknop circuit dat verbonden is met de BASIC Stamp I/O pin P3. √
Bouw het circuit zoal in Figuur 3-6. Vdd X3
Vdd
P3 220 Ω
10 kΩ
Vss
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Vin
Vss
Figuur 3-6 Druktoets Circuit verbonden met I/O Pin P3 Op het draad diagram, wordt de 220 Ω weerstand op de linker verbonden met de druktoets pin P3. De 10 kΩ weerstand is langs rechts verbonden met de druktoets en met Vss.
Figuur 3-7 toont wat de BASIC Stamp ziet, indien de toets niet is ingedrukt. Indien de drukknop wel is ingedrukt, zal de BASIC Stamp voelen dat Vdd verbonden is met P3. Inwendig in de BASIC Stamp, wordt er het nummer 1 opgeslaan in een deel van het geheugen dat informatie over de I/O pin bijhoudt. Indien de drukknop niet is ingedrukt, kan de BASIC Stamp de Vdd voeding niet voelen, maar kan de Vss gevoeld worden door de 10 kΩ en 220 Ω weerstanden. Dit zorgt ervoor dat er een nummer 0 in een deel van het geheugen wordt opgeslaan.
Hoofdstuk #3: Digitale Input - Druktoetsen · Pagina 77
Vdd
220 Ω
10 kΩ
SOUT
1
SIN
2
BS2
24
VIN
23
VSS
ATN
3
22
RES
VSS
4
21
VDD (+5V)
P0
5
20
P15
P1
6
19
P14
P2
7
P3
8
P4
9
P5
1
18
P13
17
P12
16
P11
10
15
P10
P6
11
14
P9
P7
12
13
P8
0
BS2-IC
Vss
Vdd
220 Ω
10 kΩ
24
VIN
23
VSS
22
RES
21
VDD (+5V)
5
20
P15
P1
6
19
P14
P2
7
18
P13
P3
8
17
P12
P4
9
16
P11
P5
10
15
P10
P6
11
14
P9
P7
12
13
P8
SOUT
1
SIN
2
ATN
3
VSS
4
P0
BS2
1 0
Figuur 3-7 BASIC Stamp inlezen van de druktoets Als de toets is ingedrukt, leest de BASIC Stamp een 1 in (boven). Als de toets niet is ingedrukt, ziet de BASIC Stamp niks en wordt er een 0 ingelezen (onder).
BS2-IC
Vss
Binaire nummer en Circuits: Het basis 2-nummersysteel wordt gebruikt om getallen te vormen met enkel de digits 1 en 0. Deze binaire waarden kunnen verzonden worden vanuit een toestel naar een ander. De BASIC Stamp interpreteert de Vdd (5 V) als een binair getal 1 en de Vss (0 V) als een binair getal 0. Evenals, indien de BASIC Stamp de I/O pin aanstuurt naar de Vdd door HIGH, te gebruiken, wordt er een binaire code 1 verzonden. Indien de I/O pin op Vss staat door het LOW commando te gebruiken, wordt er een binair getal 0 gestuurd. Dit is een normale gang van zake voor de communicatie tussen verschillende computer chips en andere toestellen.
Programmeren van de BASIC Stamp om de Druktoet te Monitoren
De BASIC Stamp slaat de een of de nul op die het voelt op de I/O pin P3 in een geheugenlocatie genoemd IN3. Hier heeft u een voorbeeld hoe dit werkt: Voorbeeld Programma: ReadPushbuttonState.bs2
Dit programma zorgt ervoor dat de BASIC Stamp de drukknop elke ¼ seconde controleert indien er een druk op de toets in geweest of niet. Het zendt de waarde naar
Pagina 78 · Wat is een Microcontroller?
naar de Debug Terminal. Figuur 3-8 toont de Debug Terminal terwijl het programma loopt. Indien de drukknop is ingedrukt, toont de Debug Terminal display het nummer 1. Indien de drukknop niet is ingedrukt, toont het nummer 0.
IN3
Figuur 3-8 Debug Terminal Display toont de status van de druktoets De Debug Terminal toont een 1 indien de knop ingedrukt is en een 0 indien deze niet is ingedrukt.
√ √ √ √
Typ het ReadDrukknoppentate.bs2 programma in de BASIC Stamp Editor. Start het programma. Ga na opdat het Debug Terminal de waarde 0 toont indien de toets niet is ingedrukt. Ga na opdat het Debug Terminal de waarde 1 toont indien de toets is ingedrukt en vastgehouden wordt.
' What's a Microcontroller - ReadPushbuttonState.bs2 ' Check and send pushbutton state to Debug Terminal every 1/4 second. ' {$STAMP BS2} ' {$PBASIC 2.5} DO DEBUG ? IN3 PAUSE 250 LOOP
Hoe ReadPushbuttonState.bs2 Werkt
De DO…LOOP in het programma herhaalt om de ¼ seconde omdat het argument van het commando PAUSE 250 is. Elke maal door de DO…LOOP, stuurt het commando DEBUG ? IN3 de waarde van IN3 naar de Debug Terminal. De waarde IN3 is de status van de I/O pin P3 gevoeld op het ogenblik dat het DEBUG commando is uitgevoerd.
Hoofdstuk #3: Digitale Input - Druktoetsen · Pagina 79
Uw beurt – Een druktoets met een Pull-up Weerstand
Het circuit waar u zonet mee stopte te werken heeft een weerstand verbonden met de Vss. Deze weerstand noemt men de pull-down weerstand omdat het voltage aan de P3 naar beneden trekt tot Vss (0 volts) als de toets niet is ingedrukt. Figuur 3-toont een drukknop circuit dat een pull-up weerstand heeft. Deze weerstand zorgt ervoor dat het voltage aan de Vdd tot 5 volt stijgt indien de toets niet is ingedrukt. Nu zijn de spelregels net andersom. Indien de toets niet is ingedrukt, slaat IN3 het nummer 1 op, en indien de toets niet is ingedrukt slaat, IN3 het nummer 0 op. De 220 Ω weerstand is gebruikt in het voorbeeld met de drukknop om de BASIC Stamp I/O pin te beveiligen. Niettegenstaande het een goede oefening I voor prototypes, in de meeste producten, zijn deze weestanden vervangen door een draad, aangezien een draad minder kost dan een weerstand.
√ √ √
Pas uw circuit aan zoals in Figuur 3-9. Herstart het programma ReadDrukknoppentate.bs2. Gebruik de Debug Terminal, ga na dat IN3 1 is indien de toets niet is ingedrukt. Vdd
Vdd 10 kΩ P3 220 Ω
Vss
Vin
Vss
X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Figuur 3-9 Aangepast Druktoets Circuit
Actief-laag vs. Actief-hoog: Deze drukknop op Figuur 3-9 is de “active-low “ genoemd omdat het de BASIC Stamp een laag signaal (Vss) doorstuurt indien de toets geactiveerd is. De drukknop op circuit in Figuur 3-6 heeft als grootste activiteit de “active-high” omdat deze een hoog signaal signaal (Vdd) stuurt als de toets actief is.
Pagina 80 · Wat is een Microcontroller?
ACTIVITEIT #3: DRUKKNOP CONTROLE VAN EEN LED CIRCUIT Figuur 3-10 toont een vergroting van een drukknop en een LED gebruikt om de instellingen op de computer monitor te veranderen. Dit is een van de vele toestellen die een drukknop hebben, een LED toont de status van het toestel.
Figuur 3-10 Toets en LED op een Computer Monitor
De BASIC Stamp kan geprogrammeerd worden om beslissingen te nemen gebaseerd op wat de controller voelt. Als voorbeeld, de microcontroller kan geprogrammeerd worden om te beslissen dat de LED tien maal aan en af gezet dient te worden per seconden als er op de toets wordt gedrukt. Druktoets en LED Circuit Onderdelen
(1) Druktoets – normaal open (1) Weerstand - 10 kΩ (bruin-zwart-orange) (1) LED – gelijk welke kleur (1) Weerstand – 220 Ω (rood-rood-bruin) (1) Weerstand – 470 Ω (geel-violet-bruin) (2) Jumper draden Bouwen van het Druktoets en LED Circuit
Figuur 3-11 toont het druktoets circuit dat gebruikt is in de Activiteit die zonet gedaan was uit #2, Activiteit #2.
Hoofdstuk #3: Digitale Input - Druktoetsen · Pagina 81
√
Bouw het circuit zoals in Figuur 3-11.
P14 470 Ω LED
Vdd X3
Vss Vdd
P3 220 Ω
10 kΩ
Vss
Vin
Vss
+
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Figuur 3-11 Druktoets en LED Circuit
Programmeren van de Druktoets Sturing
De BASIC Stamp kan geprogrammeerd worden om te beslissen als we de IF…THEN…ELSE commando’s gebruiken. Het voorbeeld programma, dat je straks zal starten, zal de LED aan en af zetten indien er op de toets is gedrukt. Er wordt gebruik gemaakt van IF…THEN…ELSE commando’s. Elke maal dat het DO…LOOP, het IF…THEN…ELSE commando doorlopen wordt, controleert de microcontroller of de toets is ingedrukt of niet en beslist op die basis dat de LED dient te branden of niet. Voorbeeld Programma: PushbuttonControlledLed.bs2
√ √ √
Type PushbuttonControlledLed.bs2 in de BASIC Stamp Editor and start het op. Ga na dat de LED oplicht als de toets is ingedrukt en vastgehouden wordt. Ga na dat de LED niet oplicht indien de toets niet is ingedrukt.
' What's a Microcontroller - PushbuttonControlledLed.bs2 ' Check pushbutton state 10 times per second and blink LED when pressed. ' {$STAMP BS2} ' {$PBASIC 2.5} DO
Pagina 82 · Wat is een Microcontroller?
DEBUG ? IN3 IF (IN3 = 1) THEN HIGH 14 PAUSE 50 LOW 14 PAUSE 50 ELSE PAUSE 100 ENDIF LOOP
Hoe PushbuttonControlledLed.bs2 Werkt
Het programma is de aangepaste versie van ReadPushbuttonState.bs2 uit de vorige oefening. De DO…LOOP en DEBUG ? IN3 commando’s zijn dezelfde. Het PAUSE 250 commando is vervangen door een IF…THEN…ELSE statement. Indien de conditie na het IF sleutelwoord waar is(IN3 = 1), worden de commando’s die achter het THEN sleutelwoord komen, uitgevoerd. Ze zullen worden uitgevoerd totdat het ELSE sleutelwoord bereikt is. Vanaf daar zal het programma de regels overslaan tot het sleutelwoord ENDIF. Indien de voorwaarde na IF niet waar is(IN3 = 0), zullen de commando’s na het ELSE sleutelwoord uitgevoerd worden totdat het woord ENDIF bereikt is. Je kunt een gedetailleerde lijst maken wat het programma zou moeten doen, om jet e helpen of te omschrijven, uit te zoeken wat het programma zal doen. Dit soort lijsten noemt met pseudo code. Een voorbeeld hiervan staat hieronder, het beschrijft hoe het programma PushbuttonControlledLed.bs2 werkt. •
Voer volgende commando’s vanaf hier tot aan het Loop woord opnieuw en opnieuw uit o Toon de waarde van IN3 in de Debug Terminal o Indien de waarde van IN3 is 1, doe dan De LED branden Voor 1/20 van een seconde wachten De LED uit Voor 1/20 van een seconde wachten o Anders, (als de waarde van IN3 0 is)
Hoofdstuk #3: Digitale Input - Druktoetsen · Pagina 83
Doe niks, maar wacht even lang als dat de LED zou gebrand hebben, m.a.w (1/10 van een seconde).
Loop
•
Uw Beurt – Sneller/Trager
√ √ √
Sla het voorbeeldprogramma op onder een andere naam. Pas het programma aan opdat de LED tweemaal zo snel zal knipperen als de toets wordt ingedrukt. Pas het programma aan opdat de LED tweemaal zo traag zal knipperen als de toets wordt ingedrukt.
ACTIVITEIT #4: TWEE DRUKTOETSEN STUREN TWEE LED CIRCUITS Laten we een tweede drukknop toevoegen aan het project, om de dingen iets interessanter te maken. Laten we de tweede druktoets het tweede LED circuit sturen. Druktoets en LED Circuit Onderdelen
(2) druktoetsen – normaal open (2) Weerstanden - 10 kΩ (bruin-zwart-orange) (2) Weerstanden – 470 Ω (geel-violet-bruin) (2) Weerstanden – 220 Ω (rood-rood-bruin) (2) LED's – gelijk welke kleur Toevoegen van een Druktoets aan het LED Circuit
Figuur 3-12 toont de tweede LED en druktoets toegevoegd aan het circuit dat je getest hebt in de vorige Activiteit. √ √
Bouw het circuit zoals in Figuur 3-12. Indien je hulp nodig hebt om het circuit te bouwen zoal in the schema, gebruik het draden diagram van Figuur 3-13 als gids. Pas ReadPushbuttonState.bs2 zo aan dat er IN4 ingelezen wordt in plaats van IN3 en gebruik het om het tweede circuit met de tweede LED en druktoets te testen.
Pagina 84 · Wat is een Microcontroller?
P15 470 Ω P14 470 Ω LED
LED Vss
Vss
Vdd P4
Vdd
Figuur 3-12 Schematisch: Twee Druktoetsen en LED's
220 Ω P3 220 Ω 10 kΩ
Vss
10 kΩ
Vss
Verbinden van draden met knooppunten: Er zijn drie plaatsen waar de draden samenkomen, dit enkel op de plaats van de zwarte punten. Draden worden enkel verbonden indien er een zwart punt is. De draad die P4 drukknop verbindt met de 10 kΩ weerstand, is niet verbonden met de P3 drukknop, aangezien er geen zwart punt is aangeduid.
Vdd X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Vin
Vss
++
Figuur 3-13 Draad Diagram: Twee Druktoetsen en LED's
Hoofdstuk #3: Digitale Input - Druktoetsen · Pagina 85
Programmeren van de Druktoetsen Sturing
In de vorige Activiteit, heb je geëxperimenteerd met het maken van beslissingen door de microcontroller met de commando’s IF…ELSEIF…ELSE. Dit werkt goed om te beslissen welke LED era aan of af dient gezet te worden.Hieronder een voorbeeldprogramma. Voorbeeld Programma: PushbuttonControlOfTwoLeds.bs2
√ √ √
Schrijf het PushbuttonControlOfTwoLeds.bs2 in de BASIC Stamp Editor en start het programma . Ga na dat de LED in het circuit verbonden is met de P14 aan en uit knippert indien de toets verbonden met P3 wordt ingedrukt. Ga ook na dat de LED in het circuit verbonden met P15 aan en uit knippert indien de toets verbonden met P4 wordt ingedrukt.
' What's a Microcontroller - PushbuttonControlOfTwoLeds.bs2 ' Blink P14 LED if P3 pushbutton is pressed, and blink P15 LED if ' P4 pushbutton is pressed. ' {$STAMP BS2} ' {$PBASIC 2.5} DO DEBUG HOME DEBUG ? IN4 DEBUG ? IN3 IF (IN3 = 1) THEN HIGH 14 PAUSE 50 ELSEIF (IN4 = 1) THEN HIGH 15 PAUSE 50 ELSE PAUSE 50 ENDIF LOW 14 LOW 15 PAUSE 50 LOOP
Pagina 86 · Wat is een Microcontroller?
Hoe PushbuttonControlOfTwoLeds.bs2 Werkt
Indien de IN3 en IN4 waarden altijd naar beneden lopen in de Debug Terminal, zoals ze deden in het vorige voorbeeld, wordt het moeilijk om ze te lezen. Een manier om dit op te lossen is door de cursor altijd vast te zetten in de linker bovenhoek van de Debug Terminal, door gebruik te maken van het HOME formaat: DEBUG HOME
Door de cursor naar de thuispositie te plaatsen telkens het DO…LOOP commando langs komt, DEBUG ? IN4 DEBUG ? IN3
Zullen de waarden van IN4 en IN3 altijd verschijnen op dezelfde plaats in de Debug Terminal. Het DO kernwoord begint de kring in dit program: DO
Dit commando in het IF statement zijn hetzelfde van de voorbeelden in de vorige Activiteit: IF (IN3 = 1) THEN HIGH 14 PAUSE 50
Hier helpt het ELSEIF sleutelwoord. Als IN3 niet 1 is, maar IN4 is 1, dan willen we de LED verbinden met P15 in plaats van te verbinden met P14. ELSEIF (IN4 = 1) THEN HIGH 15 PAUSE 50
Indien geen enkel van deze voorwaarden juist zijn, willen we nog steeds een pauze van 50 ms , zonder de status van de LED circuits te wijzigen. ELSE PAUSE 50
Als je klaar bent met alle beslissingen en voorwaarden, vergeet niet het slotcommando ENDIF. ENDIF
Hoofdstuk #3: Digitale Input - Druktoetsen · Pagina 87
Je kunt proberen om te laten beslissen welke LED je aan en uit. PBASIC commando’s worden zeer snel uitgevoerd, waarom dan niet beide tegelijk afzetten en alle andere beslissingen vergeten? LOW 14 LOW 15 PAUSE 50
Het LOOP statement zendt het programma terug naar het DO statement. Het proces dat de druktoetsen inleest en de LED statussen veranderd, wordt opnieuw en opnieuw uitgevoerd. LOOP
Uw beurt – Wat met beide druktoetsen indrukken?
Het voorbeeld heft een probleem. Probeer beide toetsen tegelijk in te drukken en je zult de fout zien. Je zou verwachten dat beide LED's aan en af zullen knipperen, maar dat doen ze niet, enkel één code wordt uitgevoerd to in het IF...ELSEIF…ELSE statement en de microcontroller gaat dan naar ENDIF. Hieronder hoe j edit kunt oplossen: √ √
Sla PushbuttonControlOfTwoLeds.bs2 op onder een nieuwe naam. Vervang het IF statement en code blok: IF (IN3 = 1) THEN HIGH 14 PAUSE 50
Door het volgende IF...ELSEIF statement: IF (IN3 = 1) AND (IN4 = 1) THEN HIGH 14 HIGH 15 PAUSE 50 ELSEIF (IN3 = 1) THEN HIGH 14 PAUSE 50 Een code blok is een groep van commando’s. Het IF statement hierboven heeft een code blok met drie commando’s (HIGH, HIGH, en PAUSE). Het ELSEIF statement heft een code blok met twee commando’s(HIGH, PAUSE).
Pagina 88 · Wat is een Microcontroller?
√
Start je aangepaste programma en bekijk of het beide druktoetsen juist stuurt en de LED knipperen zoals verwacht. Het AND sleutelwoord kan gebruikt worden in een IF…THEN statement om te controleren indien een of meerdere voorwaarden voldoen. Alle condities met een AND dienen waar te zijn voordat het IF statement waar is. Het OR sleutelwoord kan ook gebruikt worden, indien het genoeg is dat slechts één van de voorwaarde (of meerdere) waar is.
Je kunt het programma aanpassen zodat de LED's in een verschillende tijd aan of uit blijven. Als voorbeeld kan het Duration argument van het PAUSE commando voor beide toetsen met 10 verhogen, en het PAUSE commando voor de P14 LED met 100, verhoog het naar 200 voor de P15 LED. √ √ √
Pas de PAUSE commando’s in het IF en de twee ELSEIF statements zoals besproken. Start het aangepaste programma. Bekijk het verschil in gedrag van elke LED.
ACTIVITEIT #5: REACTIE TIJDEN TEST Je bent de systeemingenieur van een video ontwikkelingsbedrijf. Het marketing departement raadt aan om in de volgende ontwikkeling een reactietijd spel dient gestoken te worden. Je volgende werk is om een goed concept ineen te boxen om reactietijden van de speler te testen. De oplossing zal gebouwd worden in een testcircuit in deze Activiteit, het is een voorbeeld van hoe dit probleem kan opgelost worden. Het is zeker niet de enige oplossing. Voordat je voortdoet, denk even na hoe je een reactietest zou ontwikkelen en ontwerpen. Reactie Tijden Spel Onderdelen
(1) LED – tweekleurig (1) Weerstand – 470 Ω (geel-violet-bruin) (1) Druktoets – normaal open (1) Weerstand – 10 kΩ (bruin-zwart-orange) (1) Weerstand – 220 Ω (rood-rood-bruin)
Hoofdstuk #3: Digitale Input - Druktoetsen · Pagina 89
(2) Jumper draden Bouwen van het Reactie Tijden Circuit
Figuur 3-14 toont een schematische voorstelling van het draden diagram voor een circuit dat kan gebruikt worden met de BASIC Stamp om de reactietijd van een speler te testen. √ √ √
Bouw het circuit zoals in Figuur 3-14. Start TestBiColorLED.bs2 van #2, Activiteit #5 met het tweekleurige LED circuit en ga na of de aansluitingen correct zijn. Indien je het circuit opnieuw hebt gebouwd voor deze activiteit, start ReadPushbuttonState.bs2 van Activiteit #2 van dit hoofdstuk en ga na dat de drukknoppen juist werken.
P15
1 1
2 Vdd
P14 470 Ω
Vdd
P3 220 Ω
Vin
Vss
X3
2
10 kΩ
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Figuur 3-14 Reactie Tijden Circuit
Vss
Programmeer de Reactietijd Meter
Het volgende voorbeeldprogramma zal de tweekleurige LED af staan totdat de speller de toets ingedrukt houdt. Indien de toets ingedrukt is, zal de LED voor een korte periode rood worden. Als de LED terug groen wordt, dient de speler de toets zo snel mogelijk los te laten. De tijd die tussen het groen worden van de LED en het loslaten van de toets, wordt bijgehouden door het programma en wordt gebruikt als een meetwaarde van de reactietijd van de speler.
Pagina 90 · Wat is een Microcontroller?
Dit voorbeeldprogram toont ook hoe polling en tellen werkt. Polling is het proces van iets constant en heel snel te checken, om te zien als er een statuswijziging is of niet.Tellen is the proces om nummers op te tellen bij een variabele, telkens als er iets ( of niets) van status verandert. In dit programma, zal de BASIC Stamp constant controleren gedurende de tijd dat de tweekleurige LED groen wordt totdat de toets is losgelaten. Het wacht telkens 1/1000 van een seconde, door het PAUSE 1 commando te gebruiken. Elke keer er gechecked wordt opdat de toets nog niet is losgelaten, zal er 1 bij de variabele teller met de naam timeCounter, worden bijgeteld. Indien de toets is losgelaten, zal het programma stoppen met controleren en een bericht sturen naar de Debug Terminal met daarin de waarde van de timeCounter variabele. Voorbeeld Programma: ReactionTimer.bs2
√ √
Type en start ReactionTimer.bs2. Volg de prompts in de Debug Terminal (zie Figuur 3-15).
Figuur 3-15 Debug Terminal Reactie Tijden Spel Instructies
' What's a Microcontroller - ReactionTimer.bs2 ' Test reaction time with a pushbutton and a bi-color LED. ' {$STAMP BS2} ' {$PBASIC 2.5} timeCounter
VAR
Word
' Declare variable to store time.
Hoofdstuk #3: Digitale Input - Druktoetsen · Pagina 91
DEBUG "Press and hold pushbutton.", CR, "to make light turn red.", CR, CR, "When light turns green, let", CR, "go as fast as you can.", CR, CR
' Display reaction instructions.
DO
' Begin main loop. DO LOOP UNTIL IN3 = 1
' Nested loop repeats... ' until pushbutton press.
LOW 14 HIGH 15
' Bi-color LED red.
PAUSE 1000
' Delay 1 second.
HIGH 14 LOW 15
' Bi-color LED green.
timeCounter = 0
' Set timeCounter to zero.
DO
' Nested loop, count time... PAUSE 1 timeCounter = timeCounter + 1
LOOP UNTIL IN3 = 0
' until pushbutton is released.
LOW 14
' Bi-color LED off.
DEBUG "Your time was ", DEC timeCounter, " ms.", CR, CR, "To play again, hold the ", CR, "button down again.", CR, CR
' Display time measurement.
LOOP
' Play again instructions.
' Back to "Begin main loop".
Hoe ReactionTimer.bs2 Werkt
Aangezien het program zal dienen bij te houden hoeveel maal de toets werd gecontroleerd, wordt ere en variabele timeCounter in het leven geroepen. timeCounter VAR Word
' variabele die de tijd opslaat.
Variabele initialiseren op nul: Als een variabele in het leven wordt aangekondigd in PBASIC, wordt de waarde automatisch op nul geplaatst totdat een commando een nieuwe waarde inbrengt.
Pagina 92 · Wat is een Microcontroller?
De DEBUG commando’s bevatten de instructies voor de speller. DEBUG "Press and hold pushbutton.” CR, "To make light turn red.", CR, CR, "When light turns green, let", CR, "Go as fast as you can.", CR, CR DO…LOOP statements kan genest worden. binnenin een andere DO…LOOP plaatsen.
Met andere woorden, je kunt een DO…LOOP
DO DO LOOP UNTIL IN3 = 1
' Begin main loop. ' Nested loop repeats... ' until pushbutton press.
' Rest of program was here. LOOP
' Back to "Begin main loop".
De binnenste DO…LOOP dient nader bij bekeken te worden.Een DO…LOOP kan een voorwaarde bevatten die beslist om al dan niet uit de lus te breken om dan met de volgende commando’s buiten de lus voort te gaan. Deze DO…LOOP zal zichzelf herhalen zolang de toets niet is ingedrukt (IN3 = 0). De DO…LOOP zal oneindig worden uitgevoerd totdat IN3 = 1. Dan zal het programma naar het volgende commando na het LOOP UNTIL statement voort lopen. Dit is een voorbeeld van polling. De DO…LOOP UNTIL controleert als de toets is ingedrukt. DO LOOP UNTIL IN3 = 1
' Nested loop repeats... ' until pushbutton press.
De commando’s die direct na het LOOP UNTIL statement komen kleuren de tweekleurige LED rood, geven een pauze van één seconde, en worden dan groen. LOW 14 HIGH 15
' Bi-color LED red.
PAUSE 1000
' Delay 1 second.
HIGH 14 LOW 15
' Bi-color LED green.
Vanaf dat de LED groen wordt, is het tijd om te tellen hoelang de speller er over doet om de toets los te laten. De timeCounter variabele is op nul gezet, dan wordt een andere DO…LOOP met een UNTIL voorwaarde gestart die zichzelf herhaalt. De lus blijft zich herhalen totdat de speler de toets heeft losgelaten (IN3 = 0). Elke keer de lus wordt
Hoofdstuk #3: Digitale Input - Druktoetsen · Pagina 93
doorlopen, is de BASIC Stamp met een milliseconde vertraagd door 1 te gebruiken als argument van het commando PAUSE. Dit telt ook één bij de waarde van de timeCounter variabele. timeCounter = 0
' Set timeCounter to zero.
DO
' Nested loop, count time...
PAUSE 1 timeCounter = timeCounter + 1 LOOP UNTIL IN3 = 0
' until pushbutton is released.
De tweekleurige LED is afgezet. LOW 14
Het resultaat is weergegeven op de Debug Terminal. DEBUG "Your time was ", DEC timeCounter, " ms.", CR, CR, "To play again, hold the ", CR, "button down again.", CR, CR
Het laatste statement in het programma is LOOP, dat zend het programma terug naar de lijn met het eerste DO statement. Uw beurt– herbekijken van het Ontwerp
Het marketing departement heef je prototype aan enkele speltesters gegeven. Nadat de testen waren gedaan, kwam het marketing departement terug met drie problemen die er dienden opgelost te worden voordat je prototype in het spel kan ingebouwd worden. √
Sla ReactionTimer.bs2 onder ReactionTimerYourTurn.bs2).
een
nieuwe
naam
op
(zoals
De lijst van problemen en hun oplossingen worden hieronder besproken. Item-1 Indien een speller de toets 30 seconden ingedrukt laat, is zijn score 14000 ms, wat 14 seconden is. Dit moet opgelost geraken!
Pagina 94 · Wat is een Microcontroller?
Het is geweten dat een lus uitvoeren samen met een één bij de timeCounter variabele bij te tellen op zicht ongeveer 1 ms in beslag neemt zonder het PAUSE 1 commando. Dit noemt men “code overhead”, dit is de tijd nodig opdat de BASIC Stamp commando’s kan uitvoeren. Een snelle oplossing is het PAUSE 1 commando niet te laten uitvoeren door een apostrof links ervan te plaatsen. ' PAUSE 1
√
Probeer PAUSE 1 als commentaar te zetten en bekijk hoe accuraat het programma nu is
Inplaats van het uitstel als commentaar te zetten, is ere en andere mogelijkheid om dit euvel op te lossen. Je kunt het resultaat altijd met twee vermenigvuldigen. Als voorbeeld kan je juist voor het DEBUG commando dat het resultaat toont op de display, een commando schrijven dat het resultaat met twee vermenigvuldigd: timeCounter = timeCounter * 2 ' <- Add this DEBUG "Your time was ", DEC timeCounter, " ms.", CR, CR
√
Verwijder het apostrof voor het PAUSE commando en probeer de tweede oplossing. Voor precisie, kan je de */ operator gebruiken om te vermenigvuldigen met een deel, om meer exact te zijn. De */ operator is niet makkelijk om te gebruiken, hier is hoe je het gebruikt: 1)
Plaats de waarde of variabele die je wilt vermenigvuldigen of de fractie ervan voor de */ operator.
2)
Neem de fractiewaarde die je wilt gebruiken en vermenigvuldig deze met 256.
3)
Rond af om cijfers na de komma kwijt te raken.
4)
Plaats de waarde voor de */ operator.
Voorbeeld: Ga ervan uit dat je de timeCounter variabele wil met 3.69 vermenigvuldigen. 1)
Start door de timeCounter links van de */ operator te plaatsen: timeCounter = timeCounter */
2)
Vermenigvuldig de fractiewaarde met 256: 3.69 X 256 = 944.64.
3)
Rond af: 944.64 ≈ 945.
4)
Plaats de waarde rechts van de */ operator: timeCounter = timeCounter */ 945
Hoofdstuk #3: Digitale Input - Druktoetsen · Pagina 95
Item-2 Spelers hadden snel door dat de vertraging van rood naar groen 1 seconde is. Nadat ze het enkele keren hadden gespeeld, werden ze beter in het voorspellen van het loslaten dan in hun reactietijd te testen. De BASIC Stamp heeft een RANDOM commando. Hieronder staat hoe je de code dient aan te passen om een random getal te gebruiken als vertraging: √
Schrijf in het begin van de code een aankondiging bij van een nieuwe variabele genaamd value, en zet deze op 23. de waarde 23 wordt het zaad genoemd, omdat het de start is van een pseudo random getal sequentie. timeCounter VAR Word value VAR Byte value = 23
√
Juist voor het pauze commando, plaats je het RANDOM commando om de variabele value een nieuw “random” waarde te geven van de pseudo random sequentie die startte bij 23. RANDOM value DEBUG "Delay time ", ? 1000 + value, CR
√
' <- Add this ' <- Add this
' <- Add this. ' <- Add this.
Pas het PAUSE commando Duration argument aan, zodat het random getal met 1000 (voor een seconde) wordt vermeerderd. PAUSE 1000 + value
' <- Modify this.
Wat is een algoritme? Een algoritme is een opeenvolging van wiskundige operaties. Wat is pseudo random? Pseudo random betekent dat het willekeurig lijkt, maar het eigenlijk niet echt is. Elke maal dat het programma wordt herstart, zal je dezelfde sequentie waarden hebben. Wat is zaad? Een zaad is de waarde die gebruikt wordt om de pseudo random sequentie te starten. Indien je een andere waarde dan 23 ingeeft, zal er een andere pseudo random sequentie gestart worden.
Item-3 Een speller die de toets voor het groene licht loslaat krijgt de onlogisch goede score van (1 ms). Je microcontroller moet uitvissen of de speller vals speelt.
Pagina 96 · Wat is een Microcontroller?
Pseudo code is uitgelegd bij het einde van Activiteit #3 in dit hoofdstuk. Hier heb je pseudo code die je kunt helpen voor de IF…THEN…ELSE statements om het probleem op te lossen. • Indien de waarde timeCounter gelijk is aan 1 o Toon het bericht dat de speller dient te wachten met de knop lost e laten totdat het licht groen is. • Anders (indien de waarde van timeCounter groter is dan 1) o Toon op de Display de waarde van timeCounter (zoals in ReactionTimer.bs2) tijd in ms. √
Verander je programma door deze pseudo code in PBASIC vast te zetten om het valsspelen op te lossen.
SAMENVATTING Dit hoofdstuk heeft druktoetsen en veel voorkomende druktoets circuits uitgelegd. Het hoofdstuk heeft ook uitgelegd hoe u een test druktoetscircuit dient op te bouwen en hoe de BASIC Stamp dient aangesloten te worden om meerdere druktoetsen in te lezen. De BASIC Stamp is geprogrammeerd geworden om beslissingen te maken op basis van de status(sen) van de druktoets(en) en de informatie werd gebruikt om verschillende LED's te sturen. Een reactietijd spel werd gebouwd met deze concepten. De LED's warden gecontroleerd met de BASIC Stamp en er werd aangeleerd en geprogrammeerd hoe de status van een drukknop constant gecheckt wordt, ook werden er tijdsmetingen uitgevoerd met deze programmeerwijze. Inlezen van enkelvoudige druktoetsen door middel van speciale I/O variabelen die ingebouwd zijn in de BASIV Stamp (IN3, IN4, etc.) werden gebruikt. Beslissingen maken gebaseerd op deze waarden en IF…THEN…ELSE statements, IF…ELSEIF…ELSE statements, en code blokken werden uitgelegd. Om meer dan een conditie te evalueren werden de AND en OR operators uitgelegd. Een voorwaarde bijschrijven in een DO…LOOP door gebruik te maken van het UNTIL sleutelwoord is uitgelegd samen met het nesten van DO…LOOP code blokken. Vragen
1. Wat is het verschil tussen zenden en ontvangen van een HIGH en LOW signaal door de BASIC Stamp? 2. Wat betekent “normaal open” voor een druktoets?
Hoofdstuk #3: Digitale Input - Druktoetsen · Pagina 97
3. Wat gebeurd er tussen de terminals van een normaal open druktoets indien er op gedrukt wordt? 4. Wat is de waarde van IN3 indien een druktoets verbonden wordt met Vdd? Wat is de waarde van IN3 indien de druktoets verbonden wordt met Vss? 5. Wat betekent het commando DEBUG ? IN3 ? 6. Welke code blokken kunnen gebruikt worden om beslissingen te nemen gebaseerd op de waarde van een of meerdere druktoetsen? 7. Wat doet een HOME formaat in het statement DEBUG HOME? Oefeningen
1. Leg uit hoe het programma ReadPushbuttonState.bs2 op pagina 77 dient aangepast te worden opdat er telkens om de seconde een druktoets dient ingelezen te worden in plaats van elke ¼ van een seconde. 2. Leg uit hoe het programma ReadPushbuttonState.bs2 aan te passén opdat het een normaal open toets circuit inleest met een pull-up weerstand verboden met I/O pin P6. Project
1. Pas ReactionTimer.bs2 aan zodat het een spel wordt voor twee spelers. Voeg een tweede knop toe aan P4. Oplossingen
Q1. Bij zenden wordt de BASIC Stamp I/O pin als output gebruikt, bij ontvangen als input. Q2. Normaal open betekent dat de druktoets normale status niet ingedrukt is en dat er een open circuit gevormd wordt. Q3. Indien de druktoets ingedrukt wordt, wordt het gat gesloten tussen de terminals door een metaal. De stroom kan dan door de druktoets vloeien. Q4. IN3 = 1 indien de drukknop verbonden is met Vdd. IN3 = 0 indien de drukknop verbonden is met Vss. Q5. DEBUG ? IN3 zendt de waarde IN3 naar de Debug Terminal. Q6. IF...THEN...ELSE en IF...ELSEIF...ELSE. Q7. Het HOME formaat zendt de cursor naar linksboven in de Debug Terminal. E1. De DO...LOOP in het programma herhaalt elke ¼ seconde omdat het commando PAUSE, 250/1000 als argument heeft. Om elke seconde te herhalen, verander het PAUSE 250 (250ms = 0.25 s = ¼ s), naar PAUSE 1000 (1000ms = 1 s).
Pagina 98 · Wat is een Microcontroller?
DO DEBUG ? IN3 PAUSE 1000 LOOP
E2. Vervang IN3 met IN6, om de I/O pin P6 in te lezen. Het programma toont enkel de druktoets status en niet de waarde om de beslissing te maken. Het doet er niet toe of de weerstand een pull-up of een a pull-down is . Het DEBUG statement zal de status van de toets in beide gevallen weergeven. DO DEBUG ? IN6 PAUSE 250 LOOP
P1. Vooreerst, wordt er een toets bijgevoegd voor de tweede speler, aangesloten op de Stamp I/O pin P4. Het schema is gebaseerd op Figuur 3-14 op page 89. Vdd
P15
Vdd
1 P4
P3 220 Ω
220 Ω 10 kΩ
2
P14 470 Ω
Vss
10 kΩ
Vss
Deeltjes van de oplossing voor het programma zijn hieronder weergegeven. Hou in het achterhoofd dat de code op verschillende manieren kan geprogrammeerd worden. De meeste oplossingen zullen onderstaande aanpassingen bevatten: Gebruik twee variabelen om twee spelers te volgen. timeCounterA VAR timeCounterB VAR
Word Word
' Time score of player A ' Time score of player B
Verander instructies om twee druktoetsen statussen weer te geven: DEBUG "Press and hold pushbuttons", CR, DEBUG "buttons down again.", CR, CR
Wacht totdat beide knoppen zijn ingedrukt voordat een Led rood wordt, door de AND operator te gebruiken. LOOP UNTIL (IN3 = 1) AND (IN4 = 1)
Hoofdstuk #3: Digitale Input - Druktoetsen · Pagina 99
Wacht totdat alle knoppen losgelaten zijn om de tijdsopname te stoppen, opnieuw door de AND operator te gebruiken. LOOP UNTIL (IN3 = 0) AND (IN4 = 0)
Voeg logica toe om te beslissen welke spelertijd dient te stijgen. IF (IN3 = 1) timeCounterA ENDIF IF (IN4 = 1) timeCounterB ENDIF
THEN = timeCounterA + 1 THEN = timeCounterB + 1
Verander de displayweergave om de tijden van beide spelers te tonen. DEBUG "Player A Time: ", DEC timeCounterA, " ms. ", CR DEBUG "Player B Time: ", DEC timeCounterB, " ms. ", CR, CR
Voeg logica toe om te tonen welke speler de snelste reactie had. IF (timeCounterA < timeCounterB) THEN DEBUG "Player A is the winner!", CR ELSEIF (timeCounterB < timeCounterA) THEN DEBUG "Player B is the winner!", CR ELSE DEBUG "It's a tie!", CR ENDIF
De volledige oplossing staat hieronder. ' ' ' ' ' '
What's a Microcontroller - Ch03Prj03_TwoPlayerReactionTimer.bs2 Test reaction time with a pushbutton and a bi-color LED. Add a second player with a second pushbutton. Both players play at once using the same LED. Quickest to release wins. Pin P3: Player A Pushbutton, Active High Pin P4: Player B Pushbutton, Active High
' {$STAMP BS2} ' {$PBASIC 2.5} timeCounterA VAR timeCounterB VAR
Word Word
DEBUG "Press and hold pushbuttons", CR, "to make light turn red.", CR, CR, "When light turns green, let", CR,
' Time score of player A ' Time score of player B ' Display reaction ' instructions.
Pagina 100 · Wat is een Microcontroller?
"go as fast as you can.", CR, CR DO
' Begin main loop. DO ' Nothing LOOP UNTIL (IN3 = 1) AND (IN4 = 1)
' Loop until both press
LOW 14 HIGH 15
' Bi-color LED red.
PAUSE 1000
' Delay 1 second.
HIGH 14 LOW 15
' Bi-color LED green.
timeCounterA = 0 timeCounterB = 0
' Set timeCounters to zero
DO PAUSE 1 IF (IN3 = 1) THEN timeCounterA = timeCounterA + 1 ENDIF IF (IN4 = 1) THEN timeCounterB = timeCounterB + 1 ENDIF
' If button is still down, ' increment counter
LOOP UNTIL (IN3 = 0) AND (IN4 = 0)
' Loop until both buttons ' released.
LOW 14
' Bi-color LED off.
DEBUG "Player A Time: ", DEC timeCounterA, " ms. ", CR DEBUG "Player B Time: ", DEC timeCounterB, " ms. ", CR, CR IF (timeCounterA < timeCounterB) THEN DEBUG "Player A is the winner!", CR ELSEIF (timeCounterB < timeCounterA) THEN DEBUG "Player B is the winner!", CR ELSE ' A & B times are equal DEBUG "It's a tie!", CR ENDIF DEBUG CR DEBUG "To play again, hold the ", CR DEBUG "buttons down again.", CR, CR
LOOP
' Play again instructions.
' Back to "Begin main
Hoofdstuk #3: Digitale Input - Druktoetsen · Pagina 101
Verder Onderzoek
De volgende boeken zijn gratis te downloaden van de Parallax web site en zijn ook toegevoegd op de Parallax CD. “BASIC Stamp Manual”, Users Manual, Version 2.0c, Parallax Inc., 2000 De BASIC Stamp Manual heeft meerdere voorbeelden die je kunt proberen en informatie met verdere uitleg over volgende commando’s: De DEBUG HOME en CLS formaten, input pin variabelen zoals IN3, IN4 en het RANDOM commando. “Basic Analog and Digital”, Student Guide, Version 2.0, Parallax Inc., 2003 Basic Analog and Digital legt binair tellen dmv. druktoetsen uit. Het gebruikt ook druktoetsen en technieken om getallen van het ene systeem naar het andere te zenden door middel van synchronische seriële communicatie. “BASIC Stamp Editor Help File”, PBASIC 2.5 Version 2.0 Parallax Inc., 2003 Het PBASIC 2.5 Help Bestand heeft informatie over de WHILE en UNTIL condities die gebruikt worden met de DO…LOOP, informatie over nesting en IF…THEN…ELSE code blokken, wat nieuw is voor PBASIC 2.5. Je kunt deze informatie vinden door op het boek icoon op uw BASIC Stamp Editor taken balk te drukken en de PBASIC Reference te selecteren in het menu op de linker kant. Dit zal de PBASIC Command Reference alfabetische lijst openen in het algemene venster. Detail informatie kan gevonden worden door op elk commando te klikken.
Hoofdstuk #4: Sturen van Beweging · Pagina 103
Hoofdstuk #4: Sturen van Beweging MICROGESTUURDE BEWEGING Microcontrollers zorgen ervoor dat vele dingen op de juiste manier bewegen naar de juiste plaats en dit elke dag opnieuw. Indien je een inktjet printer hebt, de print kop die naar van links naar rechts over een pagina gaat, wordt bewogen door een stappenmotor die gestuurd wordt door een microcontroller. De automatisch deuren waardoor je wandelt, zijn door microcontrollers gestuurd, en de automatische uitwerpfunctie van uw Videorecorder of DVD speler is ook door een microcontroller gestuurd.
AAN/UIT SIGNALEN EN MOTOR BEWEGING Ongeveer alle microcontroller gestuurde motoren ontvangen hoge en lage signaal waarden zoals je naar de LED's hebt gestuurd. Het verschil is dat de microcontroller de signalen dient te versturen aan snelheden die veel groter zijn dan door het oog kan gedetecteerd worden.De tijdsopname en nummers van hoog/laag signalen verschillen van motor tot motor, maar ze kunnen allen bestuurd worden door microcontrollers die de juiste signalen kan afleveren. Sommige motoren hebben veel extra componenten nodig om de microcontroller te helpen. Andere hebben extra mechanische onderdelen die ervoor zorgen dat de machine goed werkt. Van al de verschillende types motoren is de hobby servo die je zult gebruiken in dit hoofdstuk, een van de simpelste. Zoals je weldra zal zien is het eenvoudig om met de BASIC Stamp een motor te sturen, zonder extra aanpassingen in het circuit.
ACTIVITEIT #1: AANSLUITEN EN TESTEN VAN DE SERVO In deze Activiteit, zal je een servo aankoppelen op de voeding en de BASIC Stamp. Dan wordt de servo getest op functionaliteit door de BASIC Stamp te programmeren om signalen naar de servo te zenden om de servoposities te controleren. Introductie van de Servo
Figuur 4-1 toont een tekening van de Parallax Standard Servo. De plug (1) wordt gebruikt om de servo voeding te geven (Vdd en Vss) en een signaal bron (a BASIC Stamp I/O pin). De kabel (2) geeft Vdd, Vss en het signaal door van de plug naar de servo. De wiek (3) is een onderdeel van de servo dat als een vierpuntster lijkt. Indien de
Pagina 104 · Wat is een Microcontroller?
servo draait, zal de wiek bewegen door de BASIC Stamp. De omkasting (4) bevat de servo controle schakelingen, de DC motor en tandwielkast. Deze onderdelen werken samen om het hoge of laag signaal van de BASIC Stamp om te zetten naar de juiste positie voor de servo. 2
Figuur 4-1 The Parallax Standaard Servo
1 3
(1) Plug (2) Kabel (3) Wiek (4) Omkasting standard servo www.parallax.com
4
OPGELET: gebruik enkel de Standard Servo voor de volgende activiteiten! Vervang de “Parallax Continuous Rotation Servo” niet, aangezien er snel schade door onderstaande circuits kan gemaakt worden. Evenals raden we het af om een ander model of merk te gebruiken van hobby servo's, die misschien niet eens de juiste voltages bezit om met dit circuit te gebruiken.
Servo en LED Circuit Onderdelen
Een LED circuit kan gebruikt worden om na te gaan welk signaal de BASIC Stamp naar de servo stuurt. Hou in gedachte dat het LED circuit niet nodig is om de servo te laten werken. Het is er juist om te zien wat er met de sturingssignalen gebeurt.
Hoofdstuk #4: Sturen van Beweging · Pagina 105
(1) Parallax Standaard Servo (1) Weerstand – 470 Ω (geel-violet-bruin) (1) LED – gelijk welke kleur Bouwen van de Servo en het LED Circuit
Het is zeer belangrijk om de juiste verbinding te maken tussen de servo en je BASIC Stamp. Hoe je de servo wilt verbinden hangt af of je het Board of Education Rev B, Rev C, of het HomeWork Board gebruikt. Indien je het - Board of Education gebruikt, maar niet zeker bent van de Revisie, dan toont Figuur 4-2 waar het Rev label staat op het Board of Education. 15 14
13 12 Red Black
X4 Vdd
X5
Vin
Rev B Vss
Figuur 4-2 Board of Education Rev Label
X3
√ √
Controleer het label op het bord en kijk indien u een HomeWork Board of een Board of Education Rev B, of Rev C heeft. Bekijk de instructies voor het aansluiten van de servo op uw BASIC Stamp: • • •
Pagina 105 – Board of Education Rev C Pagina 108 – BASIC Stamp HomeWork Board Pagina 110 – Board of Education Rev B
Board of Education Rev C Figuur 4-3 toont schematisch het circuit dat u met het Board of Education Rev C en de servo dient te bouwen.
Pagina 106 · Wat is een Microcontroller?
P14 470 Ω LED
Vss Vdd
P14
White Red
Servo
Figuur 4-3 Servo en LED Indicator Schematische voorstelling voor het Board of Education Rev C
Black
Vss
√
Koppel de voeding af zoals getoond in Figuur 4-4.
Reset
0
1
2
Figuur 4-4 Voeding loskoppelen
Figuur 4-5 toont de servo kop op het Board of Education Rev C. Dit is waar de servo dient aangesloten te worden. Dit bord heeft een jumper die je kunt gebruiken om de voeding van de servo aan te sluiten op ofwel Vin of Vdd. De jumper is het wegneembare zwarte rechthoekige stuk tussen de twee servo koppen. √
Zet de jumper op Vdd zoals in Figuur 4-5. Plaats het zwarte rechthoekige stukje het dichtst bij het Vdd label door het eventueel op te heffen en te versteken.
Hoofdstuk #4: Sturen van Beweging · Pagina 107
15 14 Vdd 13 12 Red Black
X4
X5
Figuur 4-5 Servo Hoofd Jumper op Vdd
Vin
De jumper laat je toe te kiezen indien je de voeding van (Vin of Vdd) laat komen voor de Parallax Standard Servo. Indien je een 9 V batterij gebruikt, is het best om de jumper op Vdd te zetten. Gelijk welke instelling zal werken met een 6 V batterij pack. Gebruik enkel Vdd indien je een DC aansluiting hebt met een AC voeding en transformator. Voordat je een DC voeding gebruikt, check of de DC voeding aanvaardbaar is, zie Appendix D: Batterij en VoedingVoedingen.
√ √
Bouw het circuit zoals in Figuur 4-6. Ga na dat je de servo niet omgekeerd aansluiten. De witte rode en zwarte draad zouden zo moeten staan zoals in de figuur.
15 14 Vdd 13 12
White Red Black
Red Black
X4
Vdd X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
X5
Vin
Vss
+
Figuur 4-6 Servo en LED Indicator op het Board of Education Rev C
standard servo www.parallax.com
Pagina 108 · Wat is een Microcontroller?
Tot nu heb je 3-positie schakelaars in positie 1 gebruikt. Nu dien je de schakelaar positie 2 brengen, om de voeding op de servo te voorzien. √
Voorzie voeding op de servo door de 3-weg schakelaar op positie 2 te plaatsen zoals in Figuur 4-7. Je servo kan een beetje bewegen als de voeding wordt aangesloten. Reset
0
√
1
2
Figuur 4-7 Voeding aan op het Board of Education en de Servo
Ga naar Programmeren van de Servo BewegingenBeweging op pagina 112.
BASIC Stamp HomeWork Board Indien je de servo aansluit op het HomeWork Board, heb je volgende extra onderdelen nodig: (1) 3-pin mannelijk/mannelijk (zoals in Figuur 4-8). (4) Jumper draden Figuur 4-8 HomeWork Board or Board of Education – Extra onderdeel (1) 3-pin mannelijk/mannelijk
Figuur 4-9 toont schematisch de servo en LED circuits op het HomeWork Board. De instructie die achter de figuur komt, legt uit hoe, veilig het circuit op te bouwen. WAARSCHUWING Gebruikt enkel een 9 V batterij voor de Parallax Standard Servo te verbinden met het BASIC Stamp HomeWork Board. Gebruik geen enkele DC voeding of “batterij vervanger” die in een AC stopcontact past. Onjuist gebruik kan ervoor zorgen dat de Activiteit niet juist werkt of permanent beschadiging geeft aan de servo. Voor beste resultaten zorg je er best voor dat uw batterij nieuw is. Indien je een herlaadbare batterij gebruikt, zorg ervoor dat deze net volledig is. De batterij zou ook 100 mAh (milliampère per uur) of meer moeten aankunnen. Zie Appendix D: Batterij en Voeding voor meer informatie.
Hoofdstuk #4: Sturen van Beweging · Pagina 109
P14 470 Ω LED
Vss Vin
Figuur 4-9 Schema voor de Servo en LED Indicator aansluitingen op het HomeWork Board
White
P14
Red
Servo
Black
Vss
√ √
Koppel de 9 V batterij af van de HomeWork Board. Bouw het LED indicator en servo circuit zoals in Figuur 4-10.
Vdd X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Vin
Vss
Figuur 4-10 LED Indicator en Servo Circuit op het HomeWork Board
+
standard servo www.parallax.com
Pagina 110 · Wat is een Microcontroller?
√ √ √ √
Verbind de servo zoals in Figuur 4-11. Ga na dat de kleuren van de draden overeenkomen met de positie op de figuur. Controleer een tweede maal de aansluitingen. Sluit de 9 V batterij aan op het HomeWork Board. De servo kan een beetje bewegen tijdens het aansluiten van de voeding.
Vdd X3
Vin
Vss
+
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
√
White Red Black
Figuur 4-11 Verbinden van de Servo met het HomeWork Board
standard servo www.parallax.com
Ga naar Programmeren van de Servo BewegingenBeweging op pagina 112.
Board of Education Rev B Figuur 4-12 toont een schema van het LED en servo circuit op het Board of Education Rev B. De instructie die achter de figuur komt, legt uit hoe, veilig het circuit op te bouwen.
Hoofdstuk #4: Sturen van Beweging · Pagina 111
WAARSCHUWING Gebruikt enkel een 9 V batterij voor de Parallax Standard Servo te verbinden met het BASIC Stamp HomeWork Board. Gebruik geen enkele DC voeding of “batterij vervanger” die in een AC stopcontact past. Onjuist gebruik kan ervoor zorgen dat de Activiteit niet juist werkt of permanent beschadiging geeft aan de servo.
Voor beste resultaten zorg je er best voor dat uw batterij nieuw is. Indien je een herlaadbare batterij gebruikt, zorg ervoor dat deze net volledig is. De batterij zou ook 100 mAh (milliampère per uur) of meer moeten aankunnen. Zie Appendix D: Batterij en Voeding voor meer informatie.
P14 470 Ω LED
Vss Vin
P14
White Red
Servo
Black
Vss
√ √ √
Koppel de batterij of de voeding af van het bord. Bouw het LED circuit zoals in Figuur 4-12. Verbind de servo zoals in Figuur 4-13.
Figuur 4-12 Schema voor de Servo en LED Indicator aansluitingen op het Board of Education Rev B
Pagina 112 · Wat is een Microcontroller?
15 14
13 12
White Red Black
Red Black
X4
Vdd X3
X5
Vin
Vss
+
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
√ √
Figuur 4-13 Verbinden van de Servo met het Board of Education Rev B.
standard servo www.parallax.com
Ga na dat de kleuren van de draden overeen komen met de figuur. Sluit de 9 V batterij aan op het Board of Education Rev B. De servo kan een beetje bewegen tijdens het maken van de verbinding.
Programmeren van de Servo Bewegingen
Een servo wordt gestuurd door enkele zeer korte hoge signalen. Deze signalen worden elke 20 ms gezonden. Het hoge signaal duurt tussen 1 en 2 ms. Het PULSOUT commando kan gebruikt worden om een puls( zeer kort signaal) te sturen met BASIC Stamp. Hier is de commando syntax voor het PULSOUT commando: PULSOUT Pin, Duration
Zoals bij HIGH en LOW, het Pin argument is een getal dat de BASIC Stamp zegt welke I/O pin het signaal naartoe dient gestuurd te worden. Het Duration argument is niet in milliseconden, zoals in het PAUSE commando. Voor de BASIC Stamp 2, is het Duration argument een getal dat x aantal maal 2 microseconden (µs) duurt.
Hoofdstuk #4: Sturen van Beweging · Pagina 113
Een miljoenste van een seconde noemt men een microseconde. De Griekse letter µ wordt gebruikt in plaats van het woord wordt micro en de letter s staat voor seconde. Dit is handig bij het schijven van opmerkingen, in plaats van 2 microseconde, kan je 2 µs schrijven. Onthoud: een duizendste van een seconde noemt men een milliseconde, met als afkorting ms. Feit: 1 ms = 1000 µs. Met andere woorden, een duizendmiljoenste van enkele seconden is een duizendste van een seconde.
Het volgende voorbeeld zal gebruik maken van het PULSOUT commando om pulsen te leveren die de instructie aan de servo geven waar de waaier is. FOR…NEXT lussen worden gebruikt om een aantal nummers en pulsen te geven die de servo voor een zekere tijd bezig houden. Voorbeeld Programma: ServoTest.bs2
ServoTest.bs2 zal eerst de servo waaier starten ergens rond 10 uur en die positie gedurende drie seconden vast houden. Vervolgens zal het programma de waaier met de klok mee laten draaien tot ongeveer de positie van 2 uur en ook daar zal er 3 seconden halt gehouden worden. Daarna zal de servo waaier tegenwijzerszin verlopen naar de “center positie”, wat overeen komt met 12 uur en dit weer voor 3 seconden vasthouden. Figuur 4-14 Servo Waaier beweging standard servo
standard servo
standard servo
www.parallax.com
www.parallax.com
www.parallax.com
10 uur (left) 2 uur (middle) 12 o’clock (right)
Wat als m’n servo anders is? We raden je aan om Parallax Standard Servo te gebruiken voor deze activiteit. Er zijn vele soorten servo's en velen zullen anders reageren op de signalen van die and het programma TestServo.bs2 uitzendt. Een andere soort servo kan enkel draaien naar 11 uur en dan 1 uur, of misschien 9 uur en dan 3 uur. Het kan zelf zijn dat de andere richting wordt gedraaid. Indien uw servo met een 9 V batterij is aangesloten en de beweging is makkelijk waar te nemen en consistent, dan kan dit geen problemen vormen voor deze activiteit. Je kunt het voorbeeldprogramma gebruiken om de servo te laten bewegen zoals je zelf wil.
√
Type ServoTest.bs2 in de BASIC Stamp Editor.
Pagina 114 · Wat is een Microcontroller?
√ √ √ √
Sluit de voeding aan op het Board of Education of HomeWork Board. Start het programma. Bekijk de servo beweging bij elke drie stappen van het programma en kijk na naarwaar de waaier. Herstart het programma en controleer of de LED gedimd oplicht. De LED zou het felst branden als het signaal voor 10 uur wordt uitgezonden. Het minst fel zou het signaal voor 2 uur moeten zijn. Dit komt omdat LED circuit maar voor half zo lang wordt geactiveerd. (1 van de 21 ms ipv of 2 van de 22 ms).
' What's a Microcontroller - ServoTest.bs2 ' Test the servo at three different position signals. ' {$STAMP BS2} ' {$PBASIC 2.5} counter
VAR
Word
DEBUG "Counterclockwise 10 o'clock", CR FOR counter = 1 TO 150 PULSOUT 14, 1000 PAUSE 20 NEXT DEBUG "Clockwise 2 o'clock", CR FOR counter = 1 TO 150 PULSOUT 14, 500 PAUSE 20 NEXT DEBUG "Center 12 o'clock", CR FOR counter = 1 TO 150 PULSOUT 14, 750 PAUSE 20 NEXT DEBUG "All done." END
Hoe ServoTest.bs2 Werkt
de eerste FOR…NEXT lus levert 150 pulsen, die elk 2.0 ms stand houden. Deze pulsen geven de servo de instructie om naar ongeveer 10 uur te gaan.
Hoofdstuk #4: Sturen van Beweging · Pagina 115
FOR counter = 1 TO 150 PULSOUT 14, 1000 PAUSE 20 NEXT PULSOUT 14, 1000 zendt een puls uit die 1000 × 2 µs als lengte heeft. Dat is 2000 µs of 2 ms.
Figuur 4-15 noemt men een tijdsdiagram. Het toont een figuur van de hoge en lage signalen en hoe lang deze duren. Het tijdsdiagram toont niet hoeveel pulsen er geleverd worden, maar geeft wel de informatie hoe lang de hoog en lage signalen zullen duren. Elke puls ( hoog signaal) duurt 2.0 ms. Elke puls is gescheiden door een 20 ms vertraging terwijl het signaal laag is.
2.0 ms
2.0 ms
Vdd (5 V) standard servo www.parallax.com
Figuur 4-15 Tijdsdiagram voor 2.0 ms Pulsen elke 20 ms Servo waaier op 10 uur.
Vss (0 V) 20 ms
De tweede FOR…NEXT lus levert 150 pulsen,maar deze keer is elke puls 1.0 ms lang. Dit geeft de servo de opdracht om naar 2 uur te verplaatsen voor ongeveer 3.15 seconden. FOR COUNTER = 1 TO 150 PULSOUT 14, 500 PAUSE 20 NEXT PULSOUT 14, 500 zendt een puls die 500 × 2 µs lang is. Dat is 1000 µs of 1 ms.
Figuur 4-15 toont het tijdsdiagram voor deze. De pauzes tussen de pulsen duren nog steeds 20 ms.
Pagina 116 · Wat is een Microcontroller?
1.0 ms
1.0 ms
Vdd (5 V) standard servo
Figuur 4-16 Tijdsdiagram voor 1.0 ms Pulsen elke 20 ms
www.parallax.com
Servowaaier op de 2 uur positie.
Vss (0 V) 20 ms
De laatste FOR…NEXT lus geeft 150 pulsen, elke puls duurt 1.5 ms. Deze instructie zorgt ervoor dat de servo naar center positie gaat (12uur)voor ongeveer 3.23 seconden. FOR counter = 1 TO 150 PULSOUT 14, 750 PAUSE 20 NEXT PULSOUT 14, 750 zendt een puls die 750 × 2 µs lang is. Dit is 1500 µs of 1.5 ms.
Figuur 4-17 toont het tijdsdiagram voor deze pulsen. Terwijl het lage signaal nog steeds 20 ms is, duurt de puls nu 1.5 ms.
1.5 ms
1.5 ms
Vdd (5 V)
standard servo
Figuur 4-17 Tijdsdiagram voor 1.5 ms Pulsen elke 20 ms
www.parallax.com
Servo waaier is in de positie 12 uur.
Vss (0 V) 20 ms
Maak het rekensommetje
Indien je tijd van milliseconden naar een Duration argument wil omrekenen, kan je het PULSOUT commando gebruiken, gebruik deze formule.
Duration = numberofms × 500
Hoofdstuk #4: Sturen van Beweging · Pagina 117
Als voorbeeld, indien je niet wist dat het PULSOUT argument voor 1.5 ms gelijk is aan 750, hier heb je hoe het berekend wordt. Duration = 1.5 × 500 = 750
Je kunt ook de Duration van een onbekend PULSOUT commando berekenen als volgt: number of ms =
Duration ms 500
Als voorbeeld, het commando PULSOUT 14, 850, hoe lang duurt die puls echt? 850 ms 500 = 1.7 ms
number of ms =
Uw Beurt - Positie aanpassing en Wachttijd
Het aantal maal dat de FOR…NEXT lus herhaald wordt , is wat controleert hoe lang de servo op een dezelfde positie blijft. De waarde van het PULSOUT commando Duration argument geeft aan waarnaar de servo draait. Het is belangrijk dit te testen met een experiment, om er zeker van te zijn dat je snapt hoe ze werken voordat je naar de volgende activiteit overgaat. √ √
Sla ServoTest.bs2 op als ServoTestYourTurn.bs2. Pas alle FOR...NEXT lussen aan zodat ze maar de helft zolang blijven staan als het vorige programma: FOR counter = 1 to 75
√ √
Start het aangepaste programma en ga na dat de servo half zo lang blijven staan. Pas alle FOR...NEXT lussen aan zodat ze dubbel zo lang blijven staan als het originele programma: FOR counter = 1 to 300
√ √
Start het aangepaste programma en ga na dat de servo tweemaal zo lang blijft staan. Pas het PULSOUT commando in de eerste lus aan naar:
Pagina 118 · Wat is een Microcontroller?
PULSOUT 14,850
√
Pas het PULSOUT commando aan in de tweede lus: PULSOUT 14,650
√
Start het aangepaste programma en leg uit wat de verschillende posities van de servo zijn en hoelang de servo er zal blijven staan.
ACTIVITEIT #2: POSITIESTURING MET UW COMPUTER Voor de automatisatie van een fabriek dienen microcontrollers te communiceren met grotere computers. De microcontrollers lezen de sensors in en zenden de data door naar de centrale computer. Deze computer interpreteert en analyseert de sensor data, en zend dan de positie informatie terug naar de microcontroller. De microcontroller kan dan bijvoorbeeld de snelheid van de transportband aanpassen, of een positie van een sorteermachine of een andere motor gecontroleerde taak uitvoeren. Je kunt de Debug Terminal gebruiken om berichten van de computer naar de BASIC Stamp te sturen, zoals in Figuur 4-18. De BASIC Stamp dient geprogrammeerd te worden om te luisteren indien er een bericht van de Debug Terminal komt of niet, en hij dient ook de data op te slaan die gezonden is, in een of meerdere variabelen. Figuur 4-18 Zenden van berichten naar de BASIC Stamp Klik op het witte veld en typ uw bericht. Een kopie van het bericht zal dan op het onderste venster tevoorschijn komen. Dit noemt men de echo.
In deze Activiteit zal je een BASIC Stamp programmeren om twee warden van de Debug Terminal op te ontvangen: 1. Het aantal pulsen, dat naar de servo dient gestuurd te worden 2. De Duration waarde die gebruikt wordt door het PULSOUT commando
Hoofdstuk #4: Sturen van Beweging · Pagina 119
Je zult ook leren een BASIC Stamp te programmeren om de variabelen van de servo te sturen. Onderdelen en Circuit
Zoals in Activiteit #1 Programmeren van de BASIC Stamp om Berichten te ontvangen van Debug
Programmeren van de BASIC Stamp om een bericht te sturen naar de Debug Terminal wordt door het DEBUG commando gedaan. Programmeren van de BASIC Stamp om een bericht te ontvangen van de Debug Terminal wordt gedaan met het DEBUGIN commando. Indien dit commando wordt gebruikt, dien je ook een of meerdere variabele te verklaren om de informatie op te slaan. Hier is een voorbeeld om de variabelen te verklaren om waarden op te slaan in de BASIC Stamp: pulses VAR Word
Later in het programma, kan je deze variabelen gebruiken om een waarde of nummer gekregen met het DEBUGIN commando, in op te slaan: DEBUGIN DEC pulses
Als de BASIC Stamp een getal ontvangt van de Debug Terminal, zal het worden opgeslaan in de pulses variabele. Het DEC formaat vertelt het DEBUGIN commando dat de karakters die worden gezonden, decimale getallen zullen zijn. Van zodra je op enter drukt, zal de BASIC Stamp de digits die hij ontvangt, als een decimaal nummer opslaan in de pulses variabele en dan verder gaan. Hoewel het niet in het voorbeeld is ingevoegd, kan je een lijn toevoegen om na te gaan indien het bericht werd uitgevoerd door de BASIC Stamp. DEBUG CR, "You sent the value: ", DEC pulses
Voorbeeld Programma: ServoControlWithDebug.bs2
Figuur 4-19 toont een close-up beeld van het Transmit Venster in de Debug Terminal. Je Transmit Venster kan smaller zijn. Je kunt klikken en slepen om het venster groter te maken. Je kunt karakters in het Transmit Venster invoegen en naar de BASIC Stamp sturen. In dit voorbeeld heeft iemand 100 ingetypt, dan op enter gedrukt en vervolgens 850 ingetypt. Het Receive Venster toont het “Enter number of pulses:” bericht gezonden door de BASIC Stamp. Het toont ook een echo van het karakter 100 dat was ingetypt in het Transmit Venster.
Pagina 120 · Wat is een Microcontroller?
Figuur 4-19 Debug Terminal Venster: ← Zend Venster ← OntvangVenster
Echo komt indien je een bericht hebt verzonden en een kopie van dit bericht komt dan in het Receive Venster. Je kunt de Echo Off checkbox aankruisen (hieronder getoond), om de opmerking niet meer zichtbaar te maken.
√ √
√ √ √
Geef ServoControlWithDebug.bs2 in op de BASIC Stamp Editor en start. Indien het Transmit Venster te klein is, herschaal het door met de muis te klikken op de scheiding van de vensters, vast te houden en naar beneden te. De scheiding is net boven het bericht “Enter number of pulses:” in Figuur 4-19 te vinden. Klik op het bovenste Transmit Venster om de cursor daar te plaatsen om een bericht te typen. Indien de Debug Terminal je vraagt,“Enter number of pulses:”, geef 100 in en druk enter. Indien de Debug Terminal je vraagt,“ Enter PULSOUT duration:”, geef 850 in en druk enter.
De PULSOUT Duration dient een getal tussen 500 en 1000 te zijn. Indien je getallen buiten bereik ingeeft, kan de servo een draai maken die buiten de mechanische limieten ligt. Dit zal de servo niet stuk maken, maar kan de levensverwachting drastisch verkorten.
De BASIC Stamp zal het bericht “Servo is running…” tonen terwijl de pulsen worden gestuurd en de servo aan het draaien is, komt het bericht “Done” voor een seconde tevoorschijn. Dan zal er de vraag opnieuw komen om een getal voor aantal pulsen in te
Hoofdstuk #4: Sturen van Beweging · Pagina 121
geven. Amuseer je ermee, maar blijf zeker tussen de waarden 500 en 1000 voor de PULSOUT waarden. √
Experimenteer met getallen tussen 500 en1000 voor de PULSOUT Duration en me getallen tussen de 1 en 65534 voor het aantal pulsen. Er zijn ongeveer 40 tot 45 pulsen nodig om de voor 1 seconde op positie te houden.
' What's a Microcontroller - ServoControlWithDebug.bs2 ' Send messages to the BASIC Stamp to control a servo using ' the Debug Terminal. ' {$STAMP BS2} ' {$PBASIC 2.5} counter pulses duration
Var Var Var
Word Word Word
DO DEBUG CLS, "Enter number of pulses:", CR DEBUGIN DEC pulses DEBUG "Enter PULSOUT duration:", CR DEBUGIN DEC duration DEBUG "Servo is running...", CR FOR counter = 1 TO pulses PULSOUT 14, duration PAUSE 20 NEXT DEBUG "DONE" PAUSE 1000 LOOP
Hoe ServoControlWithDebug.bs2 Werkt
Drie Word variabelen worden gebruikt in het programma: counter pulses
Var Var
WORD WORD
Pagina 122 · Wat is een Microcontroller?
duration
Var
WORD
De counter variabele is verklaard om te gebruikt te worden in een FOR…NEXT lus. Zie #2, Activiteit #3 voor details. De pulses en duration variabelen worden gebruikt voor verschillende redenen. Ze worden beiden gebruikt om waarden te ontvangen en op te slaan vanuit de Debug Terminal. De pulses variabelen worden ook gebruikt in een aantal herhalingen in de FOR…NEXT lus, die pulsen aan de servo geeft. De duration variabele wordt gebruikt om de lengte van het PULSOUT commando mee te geven. De rest van het programma is genest binnenin een DO…LOOP zonder een WHILE of UNTIL argument zodat de commando’s steeds opnieuw worden uitgevoerd. DO ' Rest of program not shown. LOOP
Het DEBUG commando wordt gebruikt om jou (de gebruiker van de software) een bericht te sturen om het aantal pulsen in te voeren. Het DEBUGIN commando wacht totdat je de waarden hebt ingegeven en op enter hebt gedrukt. De getallen dat je hebt ingegeven worden omgezet naar een waarde die wordt opgeslaan in de pulses variabele. Dit proces wordt herhaald door een tweede DEBUG en DEBUGIN commando, dat een waarde aan de duration variabele geeft. DEBUG CLS, "Enter number of pulses:", CR DEBUGIN DEC pulses DEBUG "Enter PULSOUT duration:", CR DEBUGIN DEC duration
Nadat de tweede waarde is ingegeven, is het handig om mee te geven dat de servo beweegt en geen andere waarde kan gegeven: DEBUG "Servo is running...", CR
Terwijl de servo gestuurd is, maar stil staat, kan je voorzichtig proberen om de waaier van de servo te bewegen. De servo zal een lichte weerstand geven. FOR Counter = StartValue TO EndValue {STEP StepValue}…NEXT Dit is de FOR…NEXT lus syntax van de BASIC Stamp Handleiding. Het toont hoe je een Counter, StartValue en EndValue kan sturen om herhalingen te. Er is ook een optionele StepValue om eventueel een getal toe te voegen bij de Counter variabele elke maal er door de lus is gegaan.
Hoofdstuk #4: Sturen van Beweging · Pagina 123
Zoals in vorige voorbeelden, wordt de counter variabel gebruikt als index voor de FOR…NEXT lus. Tot nutoe hebben alle FOR…NEXT lussen constanten gebruikt 10 of 150 voor de EndValue. In deze FOR…NEXT lus, wordt de waarde van de pulsen gebruikt om de EndValue te sturen van de FOR…NEXT lus. Dit stuurt hoeveel pulsen er aan de servo worden geleverd. Het eindresultaat is dat de pulses variabele stuurt hoelang de servo een positie vasthoudt. Tot nutoe, worden er constante waarden gebruikt als 500, 750 en 1000 voor het PULSOUT commando’s Duration argument. Bekijk aandachtig FOR…NEXT lus om te kijken hoe de variabelen worden gebruikt: FOR counter = 1 to pulses PULSOUT 14, duration PAUSE 20 NEXT
Neem even de tijd om te verstaan hoe de FOR…NEXT lus werkt. Het is een van de eerste voorbeelden van de ongelooflijke dingen je kunt doen met variabelen in een PBASIC commando argumenten. Het wijst aan hoe handig de microcontroller zoals de BASIC Stamp te programmeren is.
Uw Beurt – Limieten Bepalen in de Software
Dit voorbeeldprogramma houd je of iemand anders niet tegen om een PULSOUT duration zoals 1500 in te geven, wat niet goed is voor de servo. Dit probleem dient opgelost indien je het systeem in een product ontwikkeld. Laten we ervanuit gaan dat het computer servo besturingssysteem een is dat een afstandsbediende deur bestuurd. Misschien een veiligheidsagent zal deze gebruiken om een deur te openen en alles wat hij ziet is via te zien via een camera. Of een student die de deuren van zijn muizen ren wil besturen. Een militair die een kanon dient te richten naar zijn doelwit. Als je iets ontwerpt voor iemand anders, is het laatste wat je die persoon toewenst, de mogelijkheid om een verkeerd nummer te kunnen ingeven en zo zijn toestel beschadigen. Om dit probleem op te lossen, kan je dit proberen: √ √
Sla het programma ServoControlWithDebug.bs2 op onder de nieuwe naam ServoControlWithDebugYourTurn.bs2. Vervang de volgende twee commando’s: DEBUG "Enter pulsout duration:", CR
Pagina 124 · Wat is een Microcontroller?
DEBUGIN DEC duration
Door de volgende code: DO DEBUG "Enter pulsout duration:", CR DEBUGIN DEC duration IF duration < 500 THEN DEBUG "Value of duration must be above 499", CR PAUSE 1000 ENDIF IF duration > 1000 THEN DEBUG "Value of duration must be below 1001", CR PAUSE 1000 ENDIF LOOP UNTIL duration > 499 AND duration < 1001
√ √
Sla het programma op. Run het programma en controleer dat de waarden die buiten het bereik vallen niet kunnen worden doorgestuurd naar de servo.
ACTIVITEIT #3: OMZETTEN VAN POSITIE NAAR BEWEGING In deze activiteit, zal je de servo programmeren om een positieverandering te doen aan verschillende snelheden. Door te positie te veranderen aan verschillende snelheden kan je de servo aan verschillende snelheden laten draaien. Je kunt deze techniek gebruiken om de servo bewegingen te laten uitvoeren ipv positioneringen. Programmeren van een aantal Veranderingen van Positie
Je kunt een FOR…NEXT lus maken om een servo door zijn bewegingsbereik te laten gaan als volgt: FOR counter = 500 TO 1000 PULSOUT 14, counter PAUSE 20 NEXT
De FOR…NEXT lus veroorzaakt de servo te starten op 2 uur en dan langzaam te laten draaien in tegenwijzerszin naar 10uur. Aangezien de counter de index van de FOR…NEXT lus is, stijgt het telkens met één. De waarde van counter wordt ook gebruikt om het PULSOUT commando Duration argument, wat betekent dat de lengte van elke puls telkens iets langer wordt door de lus. Aangezien de duration verandert, verandert ook de positie van de servo.
Hoofdstuk #4: Sturen van Beweging · Pagina 125
De FOR…NEXT lussen hebben een optioneel STEP argument. Het STEP argument kan gebruikt worden om de servo sneller te laten draaien. Als voorbeeld kan je het STEP argument telkens 8 (in plaats van een) laten optellen bij de counter, door telkens het FOR statement te veranderen door: FOR counter = 500 TO 1000 STEP 8
Je kunt de servo ook de andere kant laten draaien door aft e laten tellen. In de PBASIC, FOR…NEXT lussen zal ook aftellen indien het StartValue argument langer is dan het EndValue argument. Hier een voorbeeld van hoe je een FOR…NEXT lus van 1000 tot 500 laat tellen: FOR counter = 1000 TO 500
Jen kan aftellen combineren met een STEP argument om de servo sneller in de andere richting te laten draaien: FOR counter = 1000 TO 500 STEP 20
De truc om de servo op verschillende snelheden te laten draaien is om de FOR…NEXT lussen te laten op en aftellen met verschillende step nummers. Het volgende voorbeeld gebruikt deze techniek om de servo’s in wijzer en in tegenwijzerszin te laten draaien op verschillende snelheden. Voorbeeld Programma: ServoVelocities.bs2
√ √ √
Schrijf het programma en start het. Als het programma loopt, ga na hoe de variabele counter verandert in de Debug Terminal. Bekijk ook hoe de servo zich anders gedraagt in de twee FOR…NEXT lussen, zowel naar richting als snelheid.
' What's a Microcontroller - ServoVelocities.bs2 ' Rotate the servo counterclockwise slowly, then clockwise rapidly. ' {$STAMP BS2} ' {$PBASIC 2.5} counter
VAR
Word
DO DEBUG "Pulse width increment by 8", CR FOR counter = 500 TO 1000 STEP 8
Pagina 126 · Wat is een Microcontroller?
PULSOUT 14, counter PAUSE 7 DEBUG DEC5 counter, CR, CRSRUP NEXT DEBUG CR, "Pulse width decrement by 20", CR FOR counter = 1000 TO 500 STEP 20 PULSOUT 14, counter PAUSE 7 DEBUG DEC5 counter, CR, CRSRUP NEXT DEBUG CR, "Repeat", CR LOOP
Hoe ServoVelocities.bs2 Werkt
De eerste FOR…NEXT lus telt op van 500 tot 1000 in stappen van 8. Aangezien de variabele counter gebruikt wordt om het PULSOUT commando Duration argument te sturen, zal de servo stap voor stap tegewijzerszin draaien. FOR counter = 500 TO 1000 STEP 8 PULSOUT 14, counter PAUSE 7 DEBUG DEC5 counter, CR, CRSRUP NEXT 7 inplaats van PAUSE 20? Het commando DEBUG DEC5 counter, CR, CRSRUP duurt ongeveer 8 ms om uit te voeren. Dit betekent dat een PAUSE 12 ongeveer 20 ms vertraging geeft tussen pulsen. Een paar trial and error experimenten tonen dat het PAUSE 7 de servo de vlotste beweging geeft. Je servo kan Waarom PAUSE
anders zijn.
Meer DEBUG formaten en controle karakters worden gebruikt in het DEBUG commando dat de waarde van de counter variabele stuurt. Deze waarde wordt geprint door gebruik te maken van een 5-digit decimaal formaat (DEC5). Nadat de waarde is geprint, is er een enter (CR). Na de nieuwe lijn zendt het commando CRSRUP (cursor up) de cursor naar de vorige lijn. Dit zorgt ervoor dat een nieuwe waarde wordt geprint over de oude waarde elke keer de lus wordt doorlopen.
Hoofdstuk #4: Sturen van Beweging · Pagina 127
De tweede FOR…NEXT lus telt af van 1000 naar 500 in steps of 20. De counter variabele wordt ook gebruikt als een argument voor het PULSOUT commando en in dit voorbeeld zodat de servo in wijzerzin draait. FOR counter = 1000 TO 500 STEP 20 PULSOUT 14, counter PAUSE 7 DEBUG DEC5 counter, CR, CRSRUP NEXT
Uw beurt – Toevoegen van Snelheden
√ √ √ √
Probeer verschillende STEP warden om de servo op verschillende snelheden te laten draaien. Herstart het programma na elke aanpassing. Bekijk het effect van elke STEP waarde om te zien hoe snel de servo draait. Experimenteer met verschillende PAUSE commando’s Duration warden (tussen 3 en 12), om de waarde te vinden die de servo de vlotste beweging geeft.
ACTIVITEIT #4: DRUKTOETSENSTURING VAN DE SERVO In dit hoofdstuk heb je een programma geschreven dat de servo door een vooraf ingegeven lijst van bewegingen laat gaan. Je hebt de servo bestuurd door gebruik te maken van de Debug Terminal. Je kunt de BASIC Stamp ook zo programmeren om de servo te besturen door drukknoppen In deze Activiteit zal je: • •
Een circuit voor druktoetsen bestuurde servo bouwen. Programmeren om de BASIC Stamp te besturen op basis van druktoets input.
Als je klaar bent, zal je erin slagen om met een druk op de knop de servo te laten draaien in een richting. Een andere toets zal de servo in de andere richting laten draaien. Indien er geen toets is ingedrukt, zal de servo op zijn plaats blijven. Extra Onderdelen voor de Druktoetsen Servo Sturing
De zelfde stukken van de vorige activiteit worden nog steeds gebruikt. Je zult volgende onderdelen ook nodig hebben: (2) Druktoetsen– normaal open (2) Weerstand – 10 kΩ (bruin-zwart-orange)
Pagina 128 · Wat is een Microcontroller?
(2) Weerstand – 220 Ω (rood-rood-bruin) (3) Jumper draden Bijvoegen van het Druktoetsen Sturing Circuit
Figuur 4-20 toont dat het circuit dat je zal gebruiken op de servo te besturen. Vdd
Vdd
P4 220 Ω P3 220 Ω
10 kΩ
Vss
√
10 kΩ
Figuur 4-20 Druktoetsen Circuit voor Servo Besturing
Vss
Voeg het circuit toe aan het servo+LED circuit dat je totnutoe hebt gebruikt. Als je klaar bent ziet je circuit er als volgt uit • • •
Figuur 4-21 indien je een Board of Education Rev C gebruikt Figuur 4-22 indien je een HomeWork Board gebruikt Figuur 4-23 indien je een Board of Education Rev B gebruikt
Hoofdstuk #4: Sturen van Beweging · Pagina 129
15 14 Vdd 13 12
White Red Black
Red Black
X4
Vdd
X5
Vss
Vin
X3
Figuur 4-21 Board of Education Rev C Servo Circuit met Drukknop Circuit toegevoegd
+
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
standard servo www.parallax.com
Vdd X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Vin
Vss
+
Figuur 4-22 HomeWork Board Servo Circuit met Pushbutton Circuit toegevoegd
White Red Black
standard servo www.parallax.com
Pagina 130 · Wat is een Microcontroller?
15 14
13 12
White Red Black
Red Black
X4
Vdd X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
√ √ √
X5
Vin
Vss
Figuur 4-23 Board of Education Rev B Servo Circuit met Drukknop Circuits toegevoegd
+
standard servo www.parallax.com
Test het drukknopcircuit verbonden met P3 door de originele versie van ReadPushbuttonState.bs2 te gebruiken. Instructies zie pagina 77. Verander het programma opdat het P4 inleest. Draai het aangepaste programma om de druktoets te testen die verbonden is met P4.
Programmeren van de Druktoetsen Servo Sturing
Drukknopbesturing van een servo is niet veel anders dan het besturen van een LED met een druktoets. IF…THEN code blokken worden gebruikt om de druktoets status te controleren door op of aft e tellen met de variabele duration. Deze variabele wordt gebruikt met het PULSOUT commando Duration argument. Indien een van de druktoetsen wordt ingedrukt, zal de waarde van duration verhogen. Indien de andere toets is ingedrukt, zal de waarde verlagen. Een genest IF…THEN statement wordt gebruikt om de te beslissen indien de variabele duration te groot (> 1000) of te klein (<500) is.
Hoofdstuk #4: Sturen van Beweging · Pagina 131
Voorbeeld Programma: ServoControlWithPushbuttons.bs2
Dit voorbeeldprogramma laat de servo tegenwijzerszin draaien indien er op de druktoets, die verbonden is met P4, wordt gedrukt. De servo zal blijven draaien zolang de druktoets wordt ingedrukt en de waarde van duration kleiner is dan 1000. Indien de toets, die verbonden is met P3 ingedrukt wordt, zal de servo in wijzerszin draaien. De servo is gelimiteerd in de wijzerszin richting totdat de variabele duration de waarde 500 heeft bereikt. De Debug Terminal toont de waarde van duration terwijl het programma draait. √ √ √ √ √ √
Schrijf het ServoControlWithPushbuttons.bs2 programma op de BASIC Stamp Editor en start het. Ga na dat de servo tegenwijzerszin draait, indien je op de toets, verbonden met P4, drukt en deze vast houdt. Ga na dat snel de grens van duration > 1000 overschreden wordt en dat de servo stopt met draaien. Ga na dat de servo in wijzerszin draait, indien je op de toets, verbonden met P3, drukt en deze vast houdt. Ga na dat snel de grens van duration <500 overschreden wordt en dat de servo stopt met draaien.
' What's a Microcontroller - ServoControlWithPushbuttons.bs2 ' Press and hold P4 pushbutton to rotate the servo counterclockwise, ' or press the pushbutton connected to P3 to rotate the servo clockwise. ' {$STAMP BS2} ' {$PBASIC 2.5} duration
VAR
Word
duration = 750 DO IF IN3 = 1 THEN IF duration > 500 THEN duration = duration - 25 ENDIF ENDIF
Pagina 132 · Wat is een Microcontroller?
IF IN4 = 1 THEN IF duration < 1000 THEN duration = duration + 25 ENDIF ENDIF PULSOUT 14, duration PAUSE 10 DEBUG HOME, DEC4 duration, " = duration" LOOP
Uw Beurt – Software Stoppers
Servo's hebben een ingebouwde mechanische stopper die voorkomt dat ze te ver draaien. Indien je probeert het PULSOUT 14, 2000 commando naar de servo te sturen, zal de servo niet naar de overeenkomstige positie draaien. Dit is omdat de servo een ingebouwde mechanische stop hebben die de beweging beperken. Door zacht aan de servo te draaien kan je deze voelen. Je kunt het voorbeeld programma aanpassen om met de BASIC Stamp de limieten van de servo beweging naar een smaller bereik vast te leggen, zodat de mechanische stoppers niet bereikt worden. √ √ √ √ √
Sla ServoControlWithPushbuttons.bs2 onder een nieuwe naam op. Pas de software limieten van de servo beweging aan naar 650 en850 in plaats van 500 en 1000. Pas de software waarde van de duration variabele aan zodat deze op of aftelt met 10 inplaats van 25. Bedenk welke veranderingen dat je verwacht en hoe dat de servo zich zal gedragen als je op een toets drukt. Draai het programma en vergelijk de huidige waarden met de verwachte waarden.
Hoofdstuk #4: Sturen van Beweging · Pagina 133
SAMENVATTING Dit hoofdstuk introduceerde de microcontroller bewegingen met een servo. Een servo is een toestel dat beweegt naar een positie en die dan ook blijft behouden, gestuurd door elektronische signalen die de controller ontvangt. Deze signalen nemen de vorm aan van pulsen, ergens tussen 1 en 2 ms. Ze dienen elke 20 ms aan de servo geleverd te worden om de positie te onderhouden. Een programmeur kan het PULSOUT commando gebruiken om de BASIC Stamp signalen te laten sturen. Aangezien pulsen elke 20 ms aan de servo dienen te zijn, worden de PULSOUT and PAUSE commando’s in een lus geplaatst. Variabelen kunnen gebruikt worden om waarden op te slaan door het PULSOUT commando Duration argument te gebruiken. Dit zorgt ervoor dat de servo in stappen draaien. In dit hoofdstuk zijn verschillende manieren getoond om de waarden in de variabelen te schrijven. De variabelen kunnen een waarde van de Debug Terminal ontvangen door het DEBUGIN commando te gebruiken. De waarde van de variabele kan een sequentie van waarden doorlopen als dezelfde variabele gebruikt wordt in de index voor een FOR…NEXT lus. Deze techniek kan de servo veelomvattende bewegingen laten maken. IF…THEN statements kunnen gebruikt worden om drukknoppen en de gebruikte variabele in het PULSOUT commando’s Duration argument in te lezen, als deze al dan niet is ingedrukt. Dit laat toe om beide, positiesturing en veelomvattende bewegingen te programmeren, afhankelijk van de programma constructies en hoe de druktoetsen worden bediend. Vragen
1. Wat zijn de vier onderdelen van de servo? Waarvoor worden ze gebruikt? 2. Is een LED circuit nodig om een servo te laten werken? 3. Welk commando controleert de lage signalen die naar een servo worden gestuurd? Welke de hoge? 4. Welk programma element kan je sturen om de bepalen hoe lang een servo blijft staan op een zekere positie? 5. Hoe gebruik je de Debug Terminal om berichten te zenden naar de BASIC Stamp? Welk programma commando wordt gebruikt om de BASIC Stamp berichten te ontvangen met de Debug Terminal? 6. Wat type code blok kan je schrijven om de servo bewegingsgrenzen vast te leggen?
Pagina 134 · Wat is een Microcontroller?
Oefeningen
1. Schrijf een code blok die de waarde van het PULSOUT Duration argument van 700 naar 800 kan sturen, dan terug naar 700, met stappen van (a) 1, (b) 4. 2. Voeg een geneste FOR…NEXT lus toe aan oefening 1b zodat er 10 pulsen op voorhand geleverd worden voordat het PULSOUT Duration argument stappen van 4 maakt. Project
1. Pas ServoControlWithDebug.bs2 aan zodat het een noodtoets bestuurt. Indien de noodtoets (P3 toets) is ingedrukt, dient de Debug Terminal geen enkel commando te aanvaarden. Er dient: “Press Start switch to start machinery”. Indien de toets (P4) wordt ingedrukt, dient het programma normaal te werken. Indien de voeding wordt afgekoppeld en terug aangekoppeld, dient het programma te functioneren alsof de noodtoets is ingedrukt. Oplossingen
Q1. 1. Plug – Verbindt de kabel van de servo op het bord 2. Kabel – Zorgt voor de voeding en signalen op de servo. 3. Waaier – Het bewegende deel van de servo. 4. Behuizing – Bevat een DC motor, tandwielkast en besturingscircuits. Q2. Neen, De LED toont enkel wat er gebeurt met de besturingssignalen. Q3. Het lage signaal wordt gestuurd door het PAUSE commando. Het hoge signaal door het PULSOUT commando. Q4. Een FOR...NEXT lus. Q5. Klik op het volledige veld boven het bericht venster in de Debug Terminal en type het bericht dat je zou willen verzenden. Gebruik het DEBUGIN commando om de karakters in de BASIC Stamp te ontvangen. Q6. Een genest IF...THEN statement. E1. a) FOR counter = PULSOUT 14, PAUSE 20 NEXT FOR counter = PULSOUT 14, PAUSE 20 NEXT
b) Add “STEP 4” to both FOR lus.
700 TO 800 counter
800 TO 700 counter
FOR counter = PULSOUT 14, PAUSE 20 NEXT FOR counter = PULSOUT 14, PAUSE 20 NEXT
700 TO 800 STEP 4 counter
800 TO 700 STEP 4 counter
Hoofdstuk #4: Sturen van Beweging · Pagina 135
E2. FOR counter = 700 TO 800 STEP 4 FOR pulses = 1 TO 10 PULSOUT 14, counter PAUSE 20 NEXT NEXT FOR counter = 800 TO 700 STEP 4 FOR pulses = 1 TO 10 PULSOUT 14, counter PAUSE 20 NEXT NEXT
P1. Er zijn verschillende oplossingen; een ervan hieronder weergegeven. ' What's a Microcontroller - Ch04Prj01Soln2__KillSwitch.bs2 ' Send messages to the BASIC Stamp to control a servo using ' the Debug Terminal as long as kill switch is not being pressed. ' Contributed by: Professor Clark J. Radcliffe, Department ' of Mechanical Engineering, Michigan State University ' {$STAMP BS2} ' {$PBASIC 2.5} counter VAR Word pulses VAR Word duration VAR Word DO PAUSE 2000 IF (IN3 = 1) AND (IN4 = 0) THEN DEBUG "Press Start switch to start machinery. ELSEIF (IN3 = 0) AND (IN4 = 1) THEN DEBUG CLS, "Enter number of pulses:", CR DEBUGIN DEC pulses DEBUG "Enter PULSOUT duration:", CR DEBUGIN DEC duration DEBUG "Servo is running...", CR FOR counter = 1 TO pulses PULSOUT 14, duration PAUSE 20 NEXT DEBUG "DONE" PAUSE 2000 ENDIF
", CR ,CRSRUP
Pagina 136 · Wat is een Microcontroller?
LUS
Verder Onderzoek
De servo, gebruik van de servo en besturing door sensoren van een servo, kan verder in detail bekeken worden in de verschillende Stamps in Class teksten. “Advanced Robotics: with the Toddler”, Student Guide, Version 1.2, Parallax Inc., 2003 Advanced Robotics: with the Toddler gebruikt maakt van servo’s die de bewegingen maken van de Parallax Toddler robot’s benen. Hoewel we lopen als vanzelfsprekend beschouwen, een machine programmeren om te lopen, bewegen en in evenwicht te houden kan een uitdaging zijn. Deze lopende Robot is aangeraden voor gevorderde studenten die al een concept van What’s a Microcontroller? Of Robotics with the Boe-Bot of SumoBot heeft gerealiseerd. “Robotics with the Boe-Bot”, Student Workbook, Version 2.0 Parallax Inc., 2003 Robotics with the Boe-Bot gebruiken de zelfde servo bewegingsprincipes. Servo’s kunnen aangepast worden om ze te gebruiken voor draaiende robot motoren. Met de “BASIC Stamp”, “Board of Education”, en “Robotics with the Boe-Bot kit”, start deze tekst over de beginselen van de navigatie en gaat dan over naar navigeren met sensoren. Het introduceert enkele, meer in detail gaande onderwerpen zoals problemen met artificiële intelligentie en elementaire navigatie besturingssystemen. “SumoBot”, Student Workbook, Version 1.1, Parallax Inc., 2002 Robot Sumo is een zeer uitdagende competitie, een spektakel voor het publiek en de deelnemers. SumoBot is geleide gids door het bouwen, testen en vol van de uitdagingen van uw eigen autonome Mini-Sumo Class SumoBot® robot. Dit boek geeft een korte beschouwing over Robotics with the Boe-Bot teksten met materiaal geleverd om een winnende Sumo robot te maken.
#5: · Pagina 137
Hoofdstuk #5: Bewegingen Meten AANPASSING DOOR DRAAIKOPPEN: CONTROLEREN VAN MACHINES Veel huishoudens hebben een lichtdimmer. Draai de schakelaar de ene richting, en het licht wordt helderder, in de andere richting dimt het licht. Moderne treinen gebruiken dezelfde techniek om de motorbeweging te regelen. Vele machines hebben de functie om fijner te positioneren van messen, geleidende oppervlakken enz. Draaitoetsen kunnen ook gevonden worden in audio componenten, waar ze gebruikt worden om het volume aan te passen. Figuur 5-1 toont hiervan een voorbeeld. Door aan de knop te draaien, verandert het circuit binnenin de luidspreker en het volume van het geluid verandert. Gelijkaardige circuits kunnen in joysticks gevonden worden, zelfs binnenin een servo gebruikt in Hoofdstuk #4: Sturen van Beweging.
Figuur 5-1 Volume Aanpassingen op een Luidspreker
DE VARIABLE WEERSTAND ONDER DE KNOP – EEN POTENTIOMETER Het toestel binnenin een geluidssysteem, joysticks en servo's noemen we een potentiometer, veel als een “pot” aangeduid. Figuur 5-2 toont een figuur van potentiometers. Merk op dat ze allen 3 pinnen hebben.
Pagina 138 · Wat is een Microcontroller?
Figuur 5-2 Enkele Potentiometer Voorbeelden
Figuur 5-3 toont schematische symbolen en stuktekening van de potentiometer die in dit hoofdstuk wordt gebruikt. Terminals A en B worden verbonden met een 10 kΩ weerstandselement. Terminal W noemt men de beweegbare terminal en is verbonden met een draad die het weerstandselement aanraakt ergens tussen de uiteinden.
Figuur 5-3 Potentiometer Schematisch Symbool en Stuktekening
A 10 kΩ Pot
W B
Figuur 5-4 toont hoe de schuiver op de potentiometer werkt. Aangezien de draaiknop vanboven op de potentiometer door u wordt geregeld, kan de schuiver, door jou, op gelijk welke plaats gebracht worden. Indien je de knop in wijzerzin beweegt, zal de schuiver dichter bij terminal A komen. Indien de knop tegenwijzerszin draait komt hij dichter bij terminal B. A
+ + A
W B
10 kΩ Pot
W
B
Figuur 5-4 Aanpassen van de Potentiometer’ schuif Terminal
#5: · Pagina 139
ACTIVITEIT #1: BOUWEN EN TESTEN VAN POTENTIOMETER CIRCUIT Verschillende weerstanden in serie met een LED plaatsen zorgt ervoor dat er een verschillende stroomsterkte is per circuit. Een grote weerstand in een LED circuit zorgt ervoor dat er weinig stroom door de LED vloeit en dit zal de LED minder hel laten branden. Kleine weerstanden in een LED circuit zorgen ervoor dat de LED feller brandt. Door de W en A terminal te verbinden, in serie met een LED circuit kan je de weerstand van het circuit veranderen. Dit kan de LED lichtsterkte vernaderen. In deze activiteit, heb je een potentiometer nodig als een variabele weerstand om Led lichtsterkte te veranderen. Draaiknop Circuit Onderdelen
(1) Potentiometer – 10 kΩ (1) Weerstand– 220 Ω (rood-rood-bruin) (1) LED – gelijk welke kleur (1) Jumper draad Bouwen van het Potentiometer Test Circuit
Figuur 5-5 toont een circuit dat gebruikt kan worden om de LED sterkte met een potentiometer aan te passen. √
Bouw het circuit zoals in Figuur 5-5. Tip: Gebruik een neus van een tang om de geplooide potentiometer voetjes recht te trekken voordat je deze in het bord aanbrengt. Indien de potentiometer benen recht zijn, houden ze beter contact met het bord.
Pagina 140 · Wat is een Microcontroller?
Vdd
Vdd
Vin
Vss
X3
220 Ω
Pot 10 kΩ
X
LED
nc
Vss
+
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Figuur 5-5 Potentiometer-LED Test Circuit
Testen van het Potentiometer Circuit
√
Draai de potentiometer in wijzerszin totdat de mechanische grens bereikt is zoals in Figuur 5-6. Met zachtheid behandelen: Indien de potentiometer niet verder meer wil draaien, probeer deze niet te forceren. Draai juist totdat je enige weerstand voelt.
√
Draai gradueel in tegenwijzerszin aan de potentiometer zoals in Figuur 5-6 (b), (c), (d), (e), en (f)en merk op hoe helder de LED brandt op elke positie.
(a)
(c)
(e)
(b)
(d)
(f)
Figuur 5-6 Potentiometer Input Shaft (a) tot (f)toont de potentiometer schuiver terminal op verschillende posities.
Hoe het Potentiometer Circuit Werkt
De totale weerstand in je test circuit is 220 Ω plus de weerstand tussen de A en W terminal van de potentiometer. Deze waarde kan overal zijn tussen 0 en 10 kΩ. Indien je
#5: · Pagina 141
de input van de potentiometer tussen Terminal A en W verandert, zal op zijn beurt ook de stroom door het LED circuit veranderen.
ACTIVITEIT #2: METEN VAN WEERSTAND DOOR TIJDSMETING Deze activiteit introduceert een nieuw onderdeel, de condensator. Een condensator gedraagt zich zoals een oplaadbare batterij, maar het houdt enkel ladingen vast voor een korte periode. Deze activiteit introduceert ook de RC-tijd, wat de afkorting is voor weerstand condensator tijd. RC-tijd is een maat voor hoe lang het duurt voordat de condensator een zekere opgeslagen lading verliest terwijl die stroom voorziet voor de weerstand. Door de tijd te meten die een condensator nodig heeft om te ontladen met verschillende weerstanden, zal je de RC-tijd meer onder de knie krijgen. In de activiteit, zal je een BASIC Stamp programmeren om de lading van een condensator en de tijd nodig voor ontlading met de weerstand te leren kennen. Introductie van de Condensator
Figuur 5-7 toont een schematisch symbool en stuktekening van het type condensator. De capacitieve waarde wordt in microfarad (µF) weergegeven en wordt weergegeven op de condensator zelf. Het cilindrische gedeelte noemt men de granaat. De condensator heeft een positieve (+) en negatieve (-) terminal. De negatieve terminal is de draad die het dichtst bij het (-) teken uit de condenstor komt. Ga altijd na dat de verbinding van de terminals gebeurd zoals op de circuit diagrammen. Verkeerd verbinden van een condensator veroorzaakt schade. In sommige circuits kan een verkeerde verbinding van de condensatoren tot breuk of explosie van de condensator leiden!
3300 µ F
3300 µF
+
-
Figuur 5-7 3300 µF Condensator Schematisch Symbool en stuktekening Let op hoe de draden verbonden zijn met de Positieve en Negatieve Terminals.
Pagina 142 · Wat is een Microcontroller?
Weerstand en Tijd Onderdelen
(1) Condensator – 3300 µF (1) Condensator – 1000 µF (1) Weerstand – 220 Ω (rood-rood-bruin) (1) Weerstand – 470 Ω (geel-violet-bruin) (1) Weerstand – 1 kΩ (bruin-zwart-rood) (1) Weerstand – 2 kΩ (rood-zwart-rood) (1) Weerstand – 10 kΩ (bruin-zwart-orange) Aanbevolen untrusting: Veiligheidsbril.
Bouwen en Testen van het Weerstand Condensator(RC) Tijd Circuit
Figuur 5-8 toont het circuit schematisch en Figuur 5-9 toont de draadaansluitingen voor deze Activiteit. Je zult tijdsopnames doen voor verschillende weerstandswaarden door op de plaats waar Ri staat de weerstand te plaatsen. Veiligheid Ga altijd de polariteit na bij aansluiting van de 3300 µF condensator. Onthoud dat de negatieve terminal de draad heeft die uit de metalen granaat komt het dichtst bij het negatieve (–) teken. Gebruik Figuur 5-7 om de (+) en (-) terminals van elkaar te onderscheiden. Je 3300 µF condensator zal goed werken in het experiment indien de positieve (+) en negatieve (-) terminals EXACT zijn verbonden zoals in Figuur 5-8 en Figuur 5-9. Draai nooit de voedingspolariteit om op de 3300 µF of op gelijk welke condensator en voeding. Het voltage aan de condensator (+) terminal dient altijd hoger te zijn dan aan de (-) terminal. Vss is de laagste (0 V) on the Board of Education en het BASIC Stamp HomeWork Board. Door de negatieve pool van de condensator op Vss aan te sluiten, ben je zeker dat de condensator altijd juist zal aangesloten zijn. Draag een veiligheidsbril tijdens de activiteit. Koppel de voeding altijd af tijdens het aanpassen van het circuit. Hou je handen en gezicht weg van de condensator als de voeding is aangesloten.
√
Met de voeding afgekoppeld, bouw het circuit zoals getoond. Start met een 470 Ω weerstand op de plaats van de weerstand Ri
#5: · Pagina 143
P7 220 Ω
R1 = 470 Ω R2 = 1 kΩ R3 = 2 kΩ R4 = 10 kΩ
Ri
3300 µF
Vss
R3 Vdd X3
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
R2
Vier verschillende weerstanden zullen gebruikt worden op de plaats van Ri . Het schema zal gebouwd en getest worden met Ri = 470 Ω, dan Ri = 1 kΩ, etc.
R1 Vin
Vss
-
3
0 30
µF
+
R4
Figuur 5-8 Schematische voorstelling van een RC circuit
+
Figuur 5-9 Aansluitingsdiagram Figuur 5-8 Ga zeker na dat de negatieve pool van de condensator verboden is met Vss zoals op de figuur.
Opmeten van de RC-tijd Circuit met de BASIC Stamp
Je kunt uw digital horloge met chronometer gebruiken voor op te nemen hoelang het duurt vooraleer de condensator lading zakt naar een zekere waarde, maar de BASIC Stamp kan ook geprogrammeerd worden om dit te doen, bovendien is dit een meer betrouwbare meting. Voorbeeld Programma: PolledRcTimer.bs2
√
Geef in en start PolledRcTimer.bs2.
Pagina 144 · Wat is een Microcontroller?
√ √ √ √ √ √ √
Bekijk hoe de BASIC Stamp de condensator oplaadt en meet de ontlaadtijd op. Schrijf de gemeten ontlaadtijd voor de 470 Ω weerstand op in Tabel 5-1. Koppel de voeding les het Board of Education of het BASIC Stamp HomeWork Board. Verwijder de 470 Ω weerstand en vervang deze met een 1 kΩ weerstand zoals in Figuur 5-8 en Figuur 5-9 op pagina 143. Sluit de voeding weer aan op het bord. Schrijf de gemeten ontlaadtijd op voor de 1kΩ weerstand. Herhaal de stappen voor de volgende 2 weerstanden in vul Tabel 5-1 in. Tabel 5-1: Weerstand en RC-tijd voor C = 3300 µF Weerstand (Ω)
Gemeten Tijd (s)
470 1k 2k 10 k ' What's a Microcontroller - PolledRcTimer.bs2 ' Reaction timer program modified to track an RC-time voltage decay. ' {$STAMP BS2} ' {$PBASIC 2.5} timeCounter counter
VAR VAR
Word Nib
DEBUG CLS HIGH 7 DEBUG "Capacitor Charging...", CR FOR counter = 5 TO 0 PAUSE 1000 DEBUG DEC2 counter, CR, CRSRUP NEXT DEBUG CR, CR, "Measure decay time now!", CR, CR INPUT 7 DO PAUSE 100 timeCounter = timeCounter + 1
#5: · Pagina 145
DEBUG ? IN7 DEBUG DEC5 timeCounter, CR, CRSRUP, CRSRUP LOOP UNTIL IN7 = 0 DEBUG CR, CR, CR, "The RC decay time was ", DEC timeCounter, CR, "tenths of a second.", CR, CR END
Hoe PolledRcTimer.bs2 Werkt Twee variabelen worden verklaard. De timeCounter variabele wordt gebruikt om na te gaan hoelang het duurt voordat de condensator zal ontladen door de weerstand Ri. De counter variabele wordt gebruikt om af te tellen terwijl de condensator aan het opladen is. timeCounter counter
VAR VAR
Word Nib
Het commando DEBUG CLS zorgt ervoor dat de Debug Terminal leeg wordt gemaakt, opdat de opeenvolgende metingen niet opgestapeld worden op het scherm. HIGH 7 zet P7 hoog en start met de condensator op te laden, dan wordt er het bericht” Capacitor charging…” weergegeven. Nadien, telt een FOR…NEXT lus af terwijl de condensator aan het opladen is. Indien de condensator aan het opladen is zal het voltage op de terminal stijgen en weergegeven worden ergens tussen 2.5 en 4.9 V (afhankelijk van de weerstandswaarde Ri). DEBUG CLS HIGH 7 DEBUG "Capacitor Charging...", CR FOR counter = 5 TO 0 PAUSE 1000 DEBUG DEC2 counter, CR, CRSRUP NEXT
Een bericht toont wanneer de tijdsopname is gestart. DEBUG CR, CR, "Measure decay time now!", CR, CR
Om de condensator op te laden door de weerstand Ri , dient de I/O pin te veranderen van HIGH naar INPUT. Een input, de I/O pin, heeft geen effect op het circuit, maar het kan
Pagina 146 · Wat is een Microcontroller?
wel lage of hoge signalen waarnemen. Indien de condensator ontlaadt, zal het voltage door de terminals lager en lager worden. INPUT 7
In het hoofdstuk over druktoetsen, heb je geleerd dat de BASIC Stamp hoge en lage signalen kan detecteren door middel van IN3 en IN4. Toen werd een hoog signaal beschouwd als Vdd, en een laag als Vss. Elk hoog signaal heeft een voltage van boven 1.4 V. Natuurlijk kan het 5 V zijn. Eensgelijks voor het lage signaal, d.i. alles tussen 1.4 V en 0 V. De DO…LOOP gaat elke 100 ms na op P7 dat de waarde van IN7 verandert van 1 naar 0, wat erop wijst dat de condensator onder de 1.4 V grens komt. DO PAUSE 100 timeCounter = timeCounter + 1 DEBUG ? IN7 DEBUG DEC5 timeCounter, CR, CRSRUP, CRSRUP LOOP UNTIL IN7 = 0
Het resultaat wordt dan getoond als het programma eindigt. DEBUG CR, CR, CR, "The RC decay time was ", DEC timeCounter, CR, "tenths of a second.", CR, CR END
Uw Beurt – Een sneller Circuit
Door een condensator te gebruiken die ongeveer 1/3 van de reeds gebruikte te nemen, maar de weerstanden gelijk te houden, zal de ontlaadtijd ook ongeveer met 1/3 afnemen. In Activiteit #3, zal je een condenser gebruiken die 10,000 keer kleiner is en de BASIC Stamp zal de tijdsmetingen opnemen dmv. Het commando RCTIME. √ √ √ √
Koppel de voeding af van het Board of Education of het HomeWork Board. Vervang de 3300 µF condenser door een 1000 µF condensator. Bevestig dat de polariteit en aansluiting juist is. De negatieve terminal dient verbonden met de Vss. Sluit de voeding terug aan.
#5: · Pagina 147
√ √
Herhaal de stappen vanuit het Voorbeeld Programma: PolledRcTimer.bs2, en schrijf de tijdsmetingen in de Error! Reference source not found.. Vergelijk de tijdsmetingen met doe van de eerder genomen in Tabel 5-1. Hoe dicht zijn ze bij de 1/3 waarde gemeten met de 3300 µF condensator? Tabel 5-2: Weerstand en RC-tijd voor C = 1000 µF Weerstand (Ω)
Gemeten Tijd (s)
470 1k 2k 10 k
ACTIVITEIT #3: LEZEN VAN DE DIAL MET DE BASIC STAMP In Activiteit #1, werd een potentiometer gebruikt als variabele weerstand. De weerstand in het circuit varieerde tov. de positie van de draaiknop van de potentiometer’s. In Activiteit #2, werd een RC-tijdscircuit gebouwd om meten met verschillende weerstanden. In deze Activiteit, zal je een RC-tijdscircuit bouwen die de potentiometer inleest. De BASIC Stamp zal de tijdsmetingen maken. De condensator die je zult gebruiken is zeer klein en de tijdsmetingen zullen over milliseconden gaan. Niettegenstaande de condensator ontlaadtijd heel kort is, zal de BASIC Stamp je een perfecte indicatie geven van wat de weerstandswaarde is tussen de terminals A en W van de potentiometer. Onderdelen voor het Lezen van de RC-Tijd met de BASIC Stamp
(1) Potentiometer – 10 kΩ (1) Weerstand– 220 Ω (rood-rood-bruin) (2) Jumper draad (1) Condensator – 0.1 µF zoals in Figuur 5-10 (1) Condensator – 0.01 µF, ook zoals in Figuur 5-10 (2) Jumper draden De condensators hebben geen + en – terminal. Je kunt ze gerust inbouwen zonder zorgen te maken over de polariteit.
Pagina 148 · Wat is een Microcontroller?
104
Figuur 5-10 Ceramisch Condensatoren
0.1 µF
0.01 µF
De 0.1 µF condenser (boven) en de 0.01 µF condensator (beneden) zijn beide niet polair. Je hoeft je geen zorgen te maken over de negatieve en positieve polen voor de aansluiting op het circuit.
103
Bouwen van een RC Tijd Circuit voor de BASIC Stamp
Figuur 5-11 toont een schematische voorstelling van het RC-tijdscircuit, en Figuur 5-12 toont het draad diagram. Dit circuit zal je gebruiken om de positie van de potentiometer draaiknop te bepalen met de BASIC Stamp en het PBASIC program. Bouw het circuit zoals in Figuur 5-11. P7 220 Ω
nc X
√
Pot 10 kΩ
Vss
0.1 µF
Figuur 5-11 BASIC Stamp RCTIJD Circuit met Potentiometer
#5: · Pagina 149
Vin
Vss
X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Figuur 5-12 Draad Diagram voor Figuur 5-11
Programmeren van een RC-Tijdsmeting
Het BASIC Stamp programma meet de potentiometer weerstand, dit op delfde manier zoals in Activiteit #2. Het equivalent van de drukknop vast te houden en in te drukken is een HIGH commando gevolgd door een PAUSE commando. Het RCTIME commando is de manier waarop de BASIC Stamp module de drukknop los laat en de tijdsmeting stop zet doordat het condensator voltage onder 1.4 V gaat opdat IN7 hoog wordt. Voorbeeld Programma: ReadPotWithRcTime.bs2
√ √
Type en start ReadPotWithRcTime.bs2 Draai aan de potentiometer terwijl je de waarde van de time variabele volgt op de Debug Terminal.
' What's a Microcontroller - ReadPotWithRcTime.bs2 ' Read potentiometer in RC-time circuit using RCTIME command. ' {$STAMP BS2} ' {$PBASIC 2.5} time VAR Word DO HIGH 7 PAUSE 100 RCTIME 7, 1, time DEBUG HOME, "time = ", DEC5 time LOOP
Pagina 150 · Wat is een Microcontroller?
Hoe ReadPotWithRcTime.bs2 Werkt
Hier heb je de pseudo-code stappen dat het programma doorloopt terwijl er RC metingen gebeuren. Verklaar de variabele time om de tijdsmetingen in op te slaan. Code blok in de DO…LOOP: o Zet I/O pin P7 op HIGH. o Wacht voor 100 ms (20 ms om zeker te zijn dat de condensator is opgeladen en 80meer om de Debug Terminal display goed te zetten). o Voer het RCTIME commando uit. o Sla de tijdsmeting op in de time variabele. o Toon de waarde van time in de Debug Terminal.
• •
Voordat het RCTIME commando wordt uitgevoerd, dient de condensator volledig opgeladen te worden. Van zodra het RCTIME commando wordt uitgevoerd, zal de BASIC Stamp de I/O pin van output naar input veranderen. Als input, zal de I/O pin kijken naar het circuit zoals ere en druktoets zou worden geopend (open circuit) zoals in Activiteit #2. Het RCTIME commando is de snelle versie van de tijdsopname zoals in Activiteit #2, het meet de hoeveelheid tijd die er nodig is voor de condensator om de lading lost e laten voordat deze op 1.4 V komt. Inplaats van in 100 ms tijdseenheden te rekenen, doet het RCTIME commando dit in intervallen van 2 µs. Uw Beurt – Tijd veranderen door Condensator te veranderen
√ √
√ √
Vervang de 0.1 µF condensor met een 0.01 µF. Porbeer dezelfde posities van de potentiometer knop zoals je in de hoofdactiviteit hebt gedaan. Probeer en vergelijk de waarden vanop de Debug Terminal met de waarden van de 0.1 µF condensator. Zijn de RCTIME metingen een tiende van de waarde? Ga terug naar de 0.1 µF condensator. Met de 0.1 µF condensator terug in het circuit, en de 0.01 µF eruit, maak je een notitie van de hoogste en laagste waarden voor de volgende Activiteit.
ACTIVITEIT #4: BESTUREN VAN SERVO MET EEN POTENTIOMETER Potentiometers samen met servo's kunnen gebruikt worden om veel leuke dingen te maken. Dit is de basis van modelbouwvliegtuigjes, auto’s en boten. Deze Activiteit toont
#5: · Pagina 151
hoe een BASIC Stamp kan gebruikt worden met een potentiometer circuit en de positie van de servo kan bepalen. Een voorbeeld van een modelbouwvliegtuig met een radiobediening zijn getoond in Figuur 5-13. Het modelvliegtuigje heeft servo’s om de flap en gasmotor te sturen. Deze servo’s worden bestuurd met de radio controle eenheid (RC) van het vliegtuig. Deze RC unit heeft potentiometers onder de joysticks zitten die gebruikt worden om het vliegtuigje te besturen.
Figuur 5-13 Modelbouw vliegtuig met een Radio Controle sturing
Hoe bestuurd de RC Unit het vliegtuig: De potentiometers onder de joysticks worden gecontroleerd door een circuit dat de posities van de joystick converteert naar pulsen voor de servomotoren. Deze signalen worden dan omgezet naar radio signalen en worden verzonden van de handbediening naar de radio ontvanger in het vliegtuigje. De radio ontvanger zet dan de radiosignalen terug om naar pulsen voor het sturen van de servomotoren.
Potentiometer Sturing Servo Onderdelen
(1) Potentiometer – 10 kΩ (1) Weerstand– 220 Ω (rood-rood-bruin) (1) Condensator – 0.1 µF (1) Parallax Standaard Servo (1) LED – gelijk welke kleur (2) Jumper draden
Pagina 152 · Wat is een Microcontroller?
HomeWork Board zullen ook nog volgende nodig hebben: (1) 3-pin mannelijk aansluiting voor servodraad (4) Jumper draden OPGELET: gebruik enkel de Parallax Standaard Servo voor deze activiteit! Vervang de Parallax Continuous Rotation Servo niet, aangezien uw servo snel kan beschadigd worden. Daarom raden we andere servo soorten af, ze kunnen anders gedimensioneerd zijn.
Bouwen van het Dial en Servo Circuit
Deze Activiteit zal twee circuits gebruiken die je al eerder apart hebt gebouwd: het potentiometer circuit van de laatste Activiteit en het servo circuit van het vorige hoofdstuk. √
√
Laat het potentiometer RC-tijdscircuit van de vorige Activiteit #3 staan op de prototype plaats. Indien je het opnieuw dient op te bouwen, gebruik Figuur 511 op pagina 148 en Figuur 5-12 op pagina 149. zorg ervoor dat de 0.1 µF condensator niet de 0.01 µF condensator is. Voeg het servo circuit vanuit hoofdstuk #4, Activiteit #1 toe aan het project. Onthoud dat het servo circuit anders zal zijn naargelang uw bord. Hieronder naar welke pagina je kunt overgaan, afhankelijk van het bordtype: • • •
Pagina 105 – Board of Education Rev C Pagina 110 – Board of Education Rev B Pagina 108 – BASIC Stamp HomeWork Board
Programmeren van de Potentiometer Servo Sturing
Je zult de kleinste en grootste waarde nodig hebben van de time variabele die je hebt opgeschreven bij het testen van het RC-tijdscircuit met de 0.1 µF condensator. √
Indien je nog niet volledig klaar bent met de – Uw Beurt sectie van de vorige Activiteit, dan dien je deze eerst af te maken.
#5: · Pagina 153
Voor dit voorbeeld heb je hieronder de waarden van de time variabele die gemeten zijn door de Parallax technici; je waarden zullen waarschijnlijk wat afwijken: • •
Volledig in wijzerszin: Volledig in tegenwijzerszin:
1 691
Hoe kunnen de input warden veranderd worden om met de waarden 500 en 1000 overeen te komen die nodig zijn voor het servo PULSOUT commando? Het antwoord zal gevonden worden door de regel van 3 toe te passen. Vooreerst, vermenigvuldig de input warden met het verschil tussen (minimum) en (maximum) waarden van wijze en tegenwijzerszin. Dan, voeg de constante waarde toe die ervoor zorgt dat het bereik tussen 500 en 1000 ligt ipv 1 tot 500. In de elektronica noemt men deze operaties verschalen en offset . Hierbij hoe de wiskunde werkt voor het verschalen: 500 = 691× 0.724 = 500 691 500 time(minimum) = 1 × = 0.724 691 time(maximum) = 691 ×
Nadat deze vermenigvuldiging is gebeurd, hierbij de opsomming (offset) stap. time(maximum) = 500 + 500 = 1000 time(minimum) = 0.724 + 500 = 500
De */ operator die op pagina 94 werd geïntroduceerd, is er in het PBASIC voor verschalen van kommagetallen zoals 0.724. Hierbij een voorbeeld van alle stappen nodig om de */ operator te gebruiken voor 0.724: 1. Plaats de waarde of variabele die je wenst te vermenigvuldigen met het kommagetal voor de */ operator. time = time */
2. Neem het kommagetal en vermenigvuldig het met 256. new fractional value = 0.724 × 256 = 185.344
Pagina 154 · Wat is een Microcontroller?
3. Rond het getal af om van alle cijfers na de komma van af te zijn. new fractional value = 185
4. Plaats de waarde na de */ operator. time = time */ 185
Dit was voor het verschalen, nu dienen we nog de offset van 500 bij te voegen. Dit kan door een tweede commando dat 500 bij telt bij de time variabele: time = time */ 185 time = time + 500
Nu is de variabele time klaar om gebruikt te worden in het PULSOUT commando Duration argument. time = time */ 185 time = time + 500 PULSOUT 14, time
' Scale by 0.724. ' Offset by 500. ' Send pulse to servo.
Voorbeeld Programma: ControlServoWithPot.bs2
√
Maak het programma en start het. Draai aan de potentiometer knop en ga na dat de servo een beweging maakt telkens er aan de knop wordt gedraaid.
' What's a Microcontroller - ControlServoWithPot.bs2 ' Read potentiometer in RC-time circuit using RCTIME command. ' Scale time by 0.724 and offset by 500 for the servo. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Program Running!" time
VAR
Word
DO HIGH 7 PAUSE 10 RCTIME 7, 1, time time = time */ 185 time = time + 500 PULSOUT 14, time LOOP
' Scale by 0.724 (X 256 for */). ' Offset by 500. ' Send pulse to servo.
#5: · Pagina 155
Uw Beurt – Schalen van de Servo’s tov de Dial
Je potentiometer en condensator zullen wellicht andere waarden geven voor de time variabele dan dat er in deze Activiteit gebruikt worden. Dit zijn de waarden verzameld in de Uw Beurt paragraaf van de vorige Activiteit. √ √ √
Herhaal de wiskunde vanop pagina 152 voor het bepalen van je maximum en minimum waarden. Voeg de scale en offset waarden in ControlServoWithPot.bs2. Voeg deze lijn met code toe tussen het PULSOUT en LOOP commando zodat je de resultaten kan zien. DEBUG HOME, DEC5 time
√
' Display adjusted time value.
Start het aangepaste programma en ga na dat de veranderingen werken. Omdat de waarden afgerond zijn, kunnen de limieten verschillen van de exacte waarden 500 en 1000, maar ze zullen vrij dicht ertegen liggen.
Gebruik van Constanten in Programma’s
In langere programma’s kan het zijn dat, voor het PULSOUT commando de waarden voor de verschaling (wat 185 was) en de offset (wat 500 was), meerdere keren in het programma voorkomen. Je kunt deze waarden via de CON operator gebruiken zoaks hieronder: scaleFactor CON 185 Offset CON 500 Deze alias namen worden bijna altijd in het begin van een programma verklaard. Zodat het programmeren overzichtelijker wordt.
Nu, overal waar in het program de waarde dient gebruikt te worden, kan je de woorden offset en scaleFactor gebruiken. Als voorbeeld time = time */ scaleFactor time = time + offset
' Scale by 0.724. ' Offset by 500.
Deze techniek kan je ook toepassen op de I/O pins. Bijvoorbeeld kan je een constante aanroepen voor I/O pin P7. rcPin
CON 7
Pagina 156 · Wat is een Microcontroller?
Er zijn twee plaatsen waar in het vorige programma I/O pin P7 wordt opgeroepen. De eerste kan geschreven worden als: HIGH rcPin
De tweede als: RCTIME rcPin, 1, time
Indien je later uw circuit verandert, het enige wat dan in de software dient aangepast te worden, is de aanroep van de constante. Op die manier worden het HIGH en RCTIME commando automatisch aangepast. Evenals voor het herkalibreren van de schaalfactor en de offset, kan je het CON commando in het begin van het programma aanpassen. Benoemen van een alias is wat je doet indien je een variabele, constante of I/O pin een naam geeft zoals VAR, CON, of PIN.
Voorbeeld Programma: ControlServoWithPotUsingConstants.bs2
Dit programma maakt gebruik van alias namen in plaats van getallen. √ √
Geef in en start ControlServoWithPotUsingConstants.bs2. Bekijk hoe de servo reageert op de potentiometer en ga na dat het dezelfde bewegingen zijn als in het vorige programma (ControlServoWithPot.bs2).
' What's a Microcontroller - ControlServoWithPotUsingConstants.bs2 ' Read potentiometer in RC-time circuit using RCTIME command. ' Apply scale factor and offset, then send value to servo. ' {$STAMP BS2} ' {$PBASIC 2.5} scaleFactor offset rcPin delay servoPin
CON CON CON CON CON
185 500 7 10 14
time
VAR
Word
DO HIGH rcPin PAUSE delay RCTIME rcPin, 1, time time = time */ scaleFactor
' Scale scaleFactor.
#5: · Pagina 157
time = time + offset PULSOUT servoPin, time DEBUG HOME, DEC5 time LOOP
' Offset by offset. ' Send pulse to servo. ' Display adjusted time value.
Uw Beurt – Gebruiken van constanten voor Calibratie en Makkelijk Updaten
Zoals eerder vernoemt, indien je de I/O pin dient te veranderen met het HIGH en RCTIME commando, kan je simpelweg de waarde voor de rcPin constante aanroepen. √ √ √ √ √
Sla het voorbeeldprogramma op onder een nieuwe naam. Verander de scaleFactor en offset waarden door unieke waarden van je RC circuit die je hebt vastgesteld in de vorige oefening. Draai het programma en ga de goede werking na. Pas het RC-tijdscircuit aan van I/O pin P7 naar I/O pin P8. Verander de rcPin aanroep naar: rcPin
√
CON 8
Voeg dit commando toe voor de DO…LOOP opdat je kunt zien dat het juist hetzelfde is als een acht te plaatsen: DEBUG? rcPin
√
Herstart het programma en ga na dat het HIGH en RCTIME commando nog altijd op dezelfde manier functioneren maar dan op de andere I/O pin en met een kleine verandering met de rcPin CON aansturing.
Pagina 158 · Wat is een Microcontroller?
SAMENVATTING Dit hoofdstuk introduceerde de potentiometer, een onderdeel dat veel in knoppen en ronde draaischakelaars zit. De potentiometer heeft ene weerstandselement dat dat meestal de twee terminals en een verschuifbaar punt heeft. Het verschuifbaar punt bepaalt de hoeveelheid weerstand. De potentiometer kan gebruikt worden als een variabele weerstand gebruikt worden door een circuit op te bouwen met een van de twee terminals en het derde punt aan te sluiten. Ook werd de condensator voorgesteld. Een condensator slaat de lading op en laat deze terug los. De hoeveelheid lading en snelheid is afhankelijk van de waarde, die in Farads, (F) wordt meegegeven. De µ is notatie voor micro, dit is een miljoenste. De condensators die werden gebruikt lagen in het bereik van 0.01 tot 3300 µF. Een weerstand en een condensator kunnen samen een circuit volgen dat in een bepaalde tijd de lading kan op en ontladen. Dit circuit is gekend als RC-tijdscircuit. De R en C in RC-tijd staan voor weerstand en condensator. Indien een waarde (C in dit hoofdstuk) constant wordt gehouden, is het op en ontladen afhankelijk van de waarde van de weerstand. De totale tijd in een RC-tijdscircuit om te ontladen kan door middel van een condensator geschaald worden. Een tijdsopname werd met de BASIC Stamp uitgevoerd om de ontlading van de condensator waar te nemen in een RC circuit met vrij grote waarden voor C. Verschillende weerstanden werden gebruikt om te tonen hoe de ontlading in de tijd afhankelijk is van de weerstandsgrootte. Het RCTIME commando werd dan gebruikt om een potentiometer (variabele weerstand) in een RC-tijdscircuit met kleinere condensator waarden. Niettegenstaande deze condensators op en ontladen in het bereik van 2 tot 1500 µs (miljoenste van een seconde), heeft de BASIC Stamp daar geen enkel probleem mee. De I/O pin dient op HIGH te staan en de condensator van het RC-tijdscircuit moet eerst geladen worden met het commando PAUSE voordat het RCTIME commando gebruikt kan worden. PBASIC programmeren kan gebruikt worden om een weerstand zoals de potentiometer te meten en te schalen zodat het gelinkt kan worden aan een ander toestel, zoals de servo motor. Dit houdt enkele wiskundige berekeningen in om de RC ontlaadtijd te kunnen opslaan met het RCTIME commando in een variabele. Deze variabele kan aangepast worden door een constante waarde bij te tellen, wat handig is voor een servobesturing. In
#5: · Pagina 159
de paragraaf, kan je vermenigvuldigingen en delingen ook terugvinden. Het CON bevel kan gebruikt worden aan het begin van een programma om namen aan getallen te geven. Zoals het geven van een naam aan variabelen, constanten etc . Dit noemt men soms ook het geven van een alias. Nadat dit gebeurd is, kan op gelijk welke plaats de naam gebruikt worden in het programma. Dit geeft vele voordelen, zeker als er op verschillende plaatsen in het programma hetzelfde getal wordt gebruikt en dat voor een andere toepassing dit getal dient verandert te worden. Dan kan je het getal bij het CON bevel veranderen is het gehele programma ineens geupdated. Vragen
1. Als je aan een knop van een geluidssysteem draait, welke component ben je aan het aanpassen? 2. Is de weerstand bij een typische potentiometer aanpasbaar tussen de twee buitenste terminals? 3. Welke gelijkenissen heeft een condensator met een oplaadbare batterij? Welke verschillen zijn er? 4. Wat kan je met een RC-tijdscircuit doen om een indicatie van de waarden van een variabele weerstand weer te geven? 5. Wat gebeurt er met de RC ontlaadtijd als de waarde van de weerstand vergroot of verkleint? 6. Wat doet het CON bevel? Leg uit met namen en getallen. Oefeningen
1. Je beschikt over een 0.5 µF condensator in een RC tijdscircuit en je wilt metingen vinden die 10 maal langer zijn. Bereken de waarde van de nodige condensator. Projecten
1. Voeg een tweekleurig LED circuit toe aan Activiteit #4. Verander het voorbeeldprogramma dat de tweekleurige LED rood is, indien de servo in wijzerzin draait en groen indien hij in tegenwijzerszin draait. De LED is uit als de servo niet draait. 2. Gebruik IF…THEN om het programma aan te passen van Activiteit #4 opdat de servo enkel draait met PULSOUT waarden tussen 650 en 850.
Pagina 160 · Wat is een Microcontroller?
Oplossingen
Q1. Een potentiometer. Q2. Neen, het is vast. De variabele weerstand is tussen een van de terminals en de slede, de middelste pin. Q3. Een condensator is zoals een oplaadbare batterij aangezien het kan heropgeladen worden en ladingen kan vasthouden. Het verschil is dat een condensator de lading enkel voor een korte tijd kan vasthouden. Q4. Je kunt de tijd opmeten die de condensator nodig heeft om te ontladen en laden. De tijd is afhankelijk van de weerstand en condensator waarde. Indien de condensator gekend is en de weerstandswaarde variabel, dan geeft de ontlaadtijd een indicatie van de weerstand. Q5. Indien R groter wordt, zal de RC ontlaadtijd proportioneel stijgen met de weerstandswaarde. Indien de weerstand kleiner wordt, zal de RC ontlaadtijd dalen, evenzeer proportioneel met de daling in R. Q6. Het CON bevel vervangt getallen door een naam. E1. nieuwe C= 10 x oude C waarde = 10 x 0.5µF = 5µF P1. Activiteit #4 met een tweekleurige LED erbij. Potentiometer schema in Figuur 5-11 p. P13 1 148, servo in Figuur 4-3 p. 106, tweekleurige LED in Figuur 2-19 p. 63, met P15 en P14 naar P13 en P12. 2
P12 470 Ω
' ' ' ' ' '
What's a Microcontroller - Ch5Prj01_ControlServoWithPot.bs2 Read potentiometer in RC-time circuit using RCTIME command. The time variable ranges from 126 to 713, and an offset of 330 is needed. Bi-color LED on P12, P13 tells direction of servo rotation: green for CW, red for CCW, off when servo is holding position.
' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Program Running!"
time potentiometer
VAR
Word
' time reading from
#5: · Pagina 161
prevTime
VAR
Word
' previous reading
DO prevTime = time HIGH 7 PAUSE 10 RCTIME 7, 1, time time = time + 330
' Store previous time reading ' Read pot using RCTIME
IF ( time > prevTime + 2) THEN HIGH 13 LOW 12 ELSEIF ( time < prevTime - 2) THEN LOW 13 HIGH 12 ELSE LOW 13 LOW 12 ENDIF
' increased, pot turned CCW ' Bi-color LED red
' Scale pot, match servo range
' value decreased, pot turned CW ' Bi-color LED green ' Servo holding position ' LED off
PULSOUT 14, time LOOP
P2. De sleutel is om een IF…THEN blok toe te voegen; zoals hieronder: ' What's a Microcontroller - Ch5Prj02_ControlServoWithPot.bs2 ' Read potentiometer in RC-time circuit using RCTIME command. ' The time variable ranges from 126 to 713, and an offset of 330 is ' needed. ' Modify so the servo only rotates from 650 to 850. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Program Running!" time VAR Word DO HIGH 7 PAUSE 10 RCTIME 7, 1, time
' Read pot with RCTIME
time = time + 330
' Scale time to servo range
IF (time time = ENDIF IF (time time = ENDIF
' Constrain range from 650 to 850
< 650) THEN 650 > 850) THEN 850
Pagina 162 · Wat is een Microcontroller?
PULSOUT 14, time LOOP
Verder Onderzoek
Verschillende elektronische componenten, concepten en technieken werden in dit hoofdstuk gebruikt. Enkele voorbeelden zijn: • • • •
Een potentiometer gebruiken als input voor een toestel Meten van weerstand/ condesator waarde van een toestel met RCTIME Berekenen van een input waarde en deze gebruiken voor een output Besturen van een motor gebaseerd op de gemeten waarde
“Advanced Robotics: with the Toddler”, Student Workbook, Version 1.2, Parallax Inc., 2003 “Robotics with the Boe-Bot”, Student Workbook, Version 2.0, Parallax Inc., 2003 “SumoBot”, Student Workbook, Version 1.1, Parallax Inc., 2002 Elke Stamps in Class robotics tekst gebruikt RCTIME om weerstanden en andere condities te meten. Elke conditie is de aanleiding van een beslissing en resulteert in een robot beweging. “Basic Analog and Digital”, Student Guide, Version 2.0, Parallax Inc., 2003 Basic Analog and Digital gebruikt de potentiometer om een variabel voltage te creëren, een voltage splitser genoemd die wordt geanalyseerd door een analoog naar digitaal converter. Een potentiometer is ook gebruikt als een input toestel met een frequentie of een 555 timer. Deze tekst gaat dieper in op de wiskunde in h RC voltage circuit. “Applied Sensors”, Student Guide, Version 1.3, Parallax Inc., 2003 RCTIME wordt veel gebruikt in dit boek om data te ontvangen van verschillende sensoren. “Industrial Control”, Student Guide, Version 2.0, Parallax Inc., 2002 Dit boek introduceert technieken om industriële machine te besturen gebaseerd op de input van de sensoren. Deze technieken vallen onder de categorie van systeembesturingen.
#6: Digitale Display · Pagina 163
Hoofdstuk #6: Digitale Display DE ALLEDAAGSE DIGITALE DISPLAY Figuur 6-1 toont een display van voor op een ovendeur. Indien de oven niet in gebruik is, wordt de tijd weergegeven. Indien de oven in gebruik is, geeft het een timer, kookinstellingen weer en begint te knipperen samen met het waarschuwingsgeluid als het eten klaar is. Een microcontroller in de ovendeur leest de drukknoppen in en bestuurt de display. Het bestuurt ook sensoren en andere schakelaars binnenin de oven om bijvoorbeeld het warmte element aan en af te zetten.
Figuur 6-1 Digitale Klok 7-Segment Display op de Oven Deur
Elk van de drie digits in Figuur 6-1 noemt men een 7-segment display. In dit hoofdstuk, zal je de BASIC Stamp programmeren om letters en cijfers op een 7-segment te laten verschijnen.
WAT IS EEN 7-SEGMENT DISPLAY? Een 7-segment display is een rechthoekig blok van 7 lijnen die even lang zijn die selectief kunnen oplichten. Een veel voorkomende vorm van de 7-segment LED display, is een pakket van de rechthoekige blok met 7 LED's. Figuur 6-2 toont de stuktekening van een 7-segment LED display die je in de volgende activiteiten zal gebruiken. Het heeft een extra LED, een punt dat kan gebruikt worden als komma of decimaal punt. Elk segment (A tot G) en het punt bevat een aparte LED, die allen individueel kunnen bediend worden. De meeste pinnen hebben een nummer samen met het label dat overeen komt met het LED segment. Pin 5 is De DP, wat staat voor het decimaal punt. Pins 3 en 8 zijn de “common cathode”, en zullen verder uitgelegd worden met een schema.
Pagina 164 · Wat is een Microcontroller?
Common Cathode
10 9 8 7 6 G F
A B
A F
B G C
E D E D
Figuur 6-2 7-Segment LED Display stuktekening en Pin Map
C DP
1 2 3 4 5 Common Cathode
Pin Map: Figuur 6-2 is een voorbeeld van een pin map. Een pin map bevat handige informatie die helpt om stukken met andere circuits te verbinden. Pin maps tonen meestal een nummer, naam en referentie van elke pin. Bekijk Figuur 6-2. Elke pin is genummerd, en elke naam van een pin heeft een segment letter naast de pin. De referentie hier is dat pin 1 het dichtst bij de linker hoek licht. Andere stukken kunnen subtielere referenties hebben, zoals een puntje op de rechthoekige LED omhulling.
Figuur 6-3 toont schematisch de binnenkant van een 7-segment LED display. Elke LED anode is verbonden met een individuele pin. Alle kathodes zijn samen verbonden. Aangezien alle kathodes een gemeenschappelijke verbinding hebben, kan het 7-segment LED display genoemd worden als een “common cathode” display. Door ofwel pin 3 of pin 8 te verbinden met de Vss, zal je alle LED kathodes met Vss verbinden.
#6: Digitale Display · Pagina 165
1
4
6
7
9
10
5
E
C
B
A
F
G
DP
LED’s
3
Figuur 6-3 7-Segment Schema
8
ACTIVITEIT #1: BOUWEN EN TESTEN VAN EEN 7-SEGMENT LED DISPLAY In deze Activiteit zal je manuele test circuits bouwen voor het testen van elk segment in de display. 7-Segment LED Display Test Onderdelen
(1) 7-segment LED display (5) Weerstand – 1 kΩ (bruin-zwart-rood) (5) Jumper draden 7-Segment LED Display Test Circuits
√ √
Met de voeding afgekoppeld van het Board of Education of HomeWork Board, bouw je het circuit zoals in Figuur 6-4 en Figuur 6-5. Sluit de voeding aan en ga na dat segment A oplicht. Wat is x met nc bovenaan in het schema? Nc staat voor niet verbonden. Het duidt aan dat een pin van de 7-segment LED display niet is aangesloten. De x op het einde van de pin staat ook voor niet verbonden. Sommige schema’s gebruiken x of nc.
Pagina 166 · Wat is een Microcontroller?
Vdd
nc
X
X
X
nc
nc
nc X
nc
X
nc
X
nc X
1 kΩ
1
4
6
7
9
10
5
E
C
B
A
F
G
DP
Figuur 6-4 Test Circuit Schema voor de ‘A’ Segment LED Display.
LED’s
8 X
3 Vss
nc
X3
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Vdd Vin Vss
√
Figuur 6-5 Test Circuit Draad Diagram voor de ‘A’ Segment LED Display
Koppel de voeding af en pas het circuit aan door de weerstand met de B LED input te verbinden zoals in Figuur 6-6 en Figuur 6-7.
#6: Digitale Display · Pagina 167
Vdd
X
nc
nc
nc X
X
nc
X
nc
X
nc
X
nc X
1 kΩ
1
4
6
7
9
10
5
E
C
B
A
F
G
DP
Figuur 6-6 Test Circuit Schema voor de ‘B’ Segment LED Display.
LED’s
8 X
3 Vss
nc
X3
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Vdd Vin Vss
√ √
Figuur 6-7 Test Circuit Draad Diagram voor de ‘B’ Segment LED Display
Koppel de voeding terug aan en ga na dat het B segment oplicht. Gebruik de pin map van Figuur 6-2 als gids, herhaal vorige stappen voor segment C tot G.
Pagina 168 · Wat is een Microcontroller?
Uw Beurt – De Letter A en de Nummer Twee
Figuur 6-8 en Figuur 6-9 tonen het digit ‘3’ met draden verbonden op de 7-segment LED display. Vdd
Vdd
Vdd
Vdd
Vdd
1 kΩ (all)
Figuur 6-8 Digit ‘3’
X
nc
X
nc
X
nc 1
4
6
7
9
10
5
E
C
B
A
F
G
DP
LED’s
8 X
3
De digit “3” is getoond op de 7segment LED display met het circuit zoals in het schema.
Vss
nc
X3
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Vdd Vin
Figuur 6-9 Draden Diagram voor Figuur 6-8
Vss
√
Bouw en test het circuit zoals in Figuur 6-8 en Figuur 6-9, ga na dat er nummer drie op de display wordt getoond.
#6: Digitale Display · Pagina 169
√ √ √
Teken een schema dat het nummer twee zal weergeven op de 7-segment LED. Bouw en test het circuit als controle, pas aan indien nodig. Herhaal dit voor de letter ‘A’.
ACTIVITEIT #2: STUREN VAN EEN 7-SEGMENT LED DISPLAY In deze Activiteit zal je de 7-segment LED display verbinden met de BASIC Stamp en een programma schrijven om te testen opdat elke LED correct werkt en aangesloten is. 7-Segment LED Display Onderdelen
(1) 7-segment LED display (8) Weerstanden– 1 kΩ (bruin-zwart-rood) (5) Jumper draden Aansluiten van een 7-Segment LED Display op de BASIC Stamp
Figuur 6-10 toont een schema en Figuur 6-11 toont het draad diagram voor het BASIC Stamp bestuurde 7-segment LED display voorbeeld. √
Bouw het circuit zoals in Figuur 6-10 en Figuur 6-11. Schema en pin map: Indien je een circuit opbouwt met behulp van het schema in Figuur 610 zonder naar Figuur 6-11 te kijken, gebruik dan zeker de 7-segment LED display pin map (Figuur 6-2, pagina 164).
Pagina 170 · Wat is een Microcontroller?
1 kΩ (All) P15 P14 P13 P12 P11 P10 P9 P8
E
C
G
DP
F
A
B
Figuur 6-10 BASIC Stamp gestuurde 7Segment LED Display Schema
LED’s
common Vss
Wees voorzichtig met de weerstanden die verbonden zijn met P13 en P14. Kijk aandachtig naar de verbindingen van de weerstanden met P13 en P14 zoals in Figuur 6-11. Er is een opening tussen de twee weerstanden. De opening is er omdat pin 8 op de 7segment LED display niet aangesloten wordt. Een weerstand is enkel verbonden met I/O pin P13 en 7-segment LED display pin 9. Een andere weerstand is verbonden met P14 en 7-segment LED display pin 7.
#6: Digitale Display · Pagina 171
DP EDC GFAB
X3
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Vdd
Figuur 6-11 Draad Diagram voor Figuur 6-10
Vin Vss
Gebruik de segment letters boven het diagram als referentie.
Parallelle Toestellen: De 7-segment LED display noemt men een parallel toestel aangezien het meer dan een I/O lijn nodig heeft om data naartoe te zenden. Voor de 7segment LED display zijn er 8 I/O pinnen nodig om het toestel te sturen. Parallelle Bus: De draden die de HIGH/LOW signalen van de BASIC Stamp naar de 7segment LED display sturen nomen we een parallelle bus. Merk op dat deze draden in parallel zijn getekend in Figuur 6-10. De term parallel is logisch gezien de geometrie van het schema.
Programmeren van een 7-Segment LED Display Test
De HIGH en LOW commando’s kunnen een variabele als pin argument bevatten. Om elk segment te testen, een per een, kunnen we simpelweg de HIGH en LOW commando’s in een FOR…NEXT lus plaatsen en de index gebruiken om de I/O pin, high en dan weer low te plaatsen. √ √ √
Maak en start SegmentTestWithHighLow.bs2. Ga na dat elk segment van de 7-segement LED display kort oplicht. Maak een lijstje van welk segment welke I/O pin besturen.
Voorbeeld Programma: SegmentTestWithHighLow.bs2 ' What's a Microcontroller - SegmentTestWithHighLow.bs2 ' Individually test each segment in a 7-Segment LED display.
Pagina 172 · Wat is een Microcontroller?
'{$STAMP BS2} '{$PBASIC 2.5} pinCounter
VAR
Nib
DEBUG "I/O Pin", CR, "-------", CR FOR pinCounter = 8 TO 15 DEBUG DEC2 pinCounter, CR HIGH pinCounter PAUSE 1000 LOW pinCounter NEXT
Uw Beurt – Een Ander Patroon
Verwijderen van het commando LOW pinCounter heeft een interessant effect: √ √
Zet een apostrof voor het LOW pinCounter commando opdat het commentaar wordt. Start het aangepaste programma en bekijk het effect.
ACTIVITEIT #3: WEERGEVEN VAN DIGITS Indien je het decimale punt meetelt, zijn er acht verschillende BASIC Stamp I/O pinnen die high/low signalen zenden naar de 7-segment LED display. Deze acht verschillende HIGH or LOW commando’s zijn nodig om een enkel getal te tonen. Indien je van 0 tot 9 wilt tellen, heb je een gigantische programmatie te doen. Gelukkig zijn er speciale variabelen die signalen hoog en laag kunnen zetten voor een groep van I/O pinnen. In deze activiteit, zal je 8-digit binaire nummers gebruiken in plaats van HIGH en LOW commando’s om de signalen van de BASIC Stamp te beheren. Door de speciale variabelen DIRH en OUTH gelijk aan binaire nummers te maken, zal je in staat zijn om de high/low signalen, gestuurd naar de I/O pinnen verbonden met het 7-segment LED display circuit, met één enkel PBASIC commando te zenden.
#6: Digitale Display · Pagina 173
8 bits: Een binair nummer dat 8 digits heeft, is gelijk aan 8 bits. Elke bit is een plaats waar je een 1 of een 0 kan opslaan. Een byte is een variabele die 8 bits groot is. Er zijn 256 verschillende combinaties van nullen en enen die je kunt gebruiken om te kunnen tellen van 0 to 255 met 8 bits. Dit is waarom een byte nummers tussen 0 and 255 kan opslaan.
Onderdelen en Circuit voor Weergeven van Digits
Zelfde als Activiteit Programmeren van On/Off Patronen door Binaire Getallen te gebruiken
In deze activiteit zal je experimenteren met de variabelen DIRH en OUTH. DIRH is een a variabele die de richting (input of output) van de I/O pinnen P8 tot P15 stuurt. OUTH stuurt de hoge en lage signalen van elke pin. Zoals je zult zien, OUTH is makkelijk aangezien je high/low signalen voor acht verschillende I/O pinnen in een keer met een commando kan sturen. Hier heb je een voorbeeld programma dat toont hoe deze twee variabelen gebruikt kunnen worden om te tellen van 0 tot 9 op de 7-segment LED display zonder gebruik te maken van HIGH en LOW commando’s: Voorbeeld Programma: DisplayDigits.bs2
Dit programma zal achtereenvolgens op de 7-Segment LED display de getallen 0 tot 9 laten verschijnen. √ √
Geef in en start DisplayDigits.bs2. Ga na dat 0 tot 9 worden weergegeven.
' What's a Microcontroller - DisplayDigits.bs2 ' Display the digits 0 through 9 on a 7-segment LED display. '{$STAMP BS2} '{$PBASIC 2.5} DEBUG "Program Running!" OUTH = %00000000 DIRH = %11111111 ' BAFG.CDE OUTH = %11100111 PAUSE 1000 OUTH = %10000100
' OUTH initialized to low. ' Set P8-P15 to all output-low. ' Digit: ' 0 ' 1
Pagina 174 · Wat is een Microcontroller?
PAUSE 1000 OUTH = %11010011 PAUSE 1000 OUTH = %11010110 PAUSE 1000 OUTH = %10110100 PAUSE 1000 OUTH = %01110110 PAUSE 1000 OUTH = %01110111 PAUSE 1000 OUTH = %11000100 PAUSE 1000 OUTH = %11110111 PAUSE 1000 OUTH = %11110110 PAUSE 1000
' 2 ' 3 ' 4 ' 5 ' 6 ' 7 ' 8 ' 9
DIRH = %00000000
' I/O pins to input, ' segments off.
END
Hoe DisplayDigits.bs2 Werkt
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
X3
Vdd
Vin
Vss
Figuur 6-12 toont hoe de DIRH en OUTH variabelen de richting en status van de(high/low) signalen op de I/O pinnen P8 tot P15, sturen.
OUTH = %00000000 DIRH = %11111111
Figuur 6-12 DIRH en OUTH om alle I/O Pinnen lag te sturen
#6: Digitale Display · Pagina 175
Het eerste commando: OUTH = %00000000
Zet alle I/O pinnen (P8 tot P15) klaar om de lage signalen te zenden. Dit zal de display uit zetten. Indien je alle I/O pinnen een hoog signaal wil sturen gebruik het OUTH = %11111111 commando. Wat doet het % teken? Het % is gebruikt om te vertellen aan de BASIC Stamp Editor dat de volgende nummers binair zijn. Als voorbeeld, het binaire nummer %00001100 is hetzelfde als het decimaal nummer 12. Zoals je in de volgende activiteit zult zien, kunnen binaire codes het programmeren heel wat makkelijker maken.
Het low signaal zal behouden worden totdat de DIRH variabele veranderingen aanbrengt. Het commando: DIRH = %11111111
Zet alle I/O pinnen van P8 tot P15 op output. Van zodra dit commando is uitgevoerd, wordt er op P8 tot P15 een laag signaal verzonden. Dit is omdat het commando OUTH = %00000000 vlak voor het DIRH commando was uitgevoerd. Je kunt ook DIRH = %00000000 gebruiken om alle I/O pinnen terug op input te plaatsen. Voordat I/O pinnen outputs worden: totdat de I/O pinnen veranderen van input naar output, luisteren ze naar signalen en updaten ze de INH variabele. Deze variabele omvat IN8, IN9, tot IN15. Deze variabelen kunnen gebruikt worden op dezelfde manier als IN3 en IN4 die gebruikt werden met de druktoetsen in Hoofdstuk #3. Alle BASIC Stamp I/O pinnen starten als inputs. Dit noemt men een “default”. Je dient de BASIC Stamp I/O pin te vertellen om een output te worden voordat het signalen zal uitzenden. Zowel de HIGH en LOW commando’s veranderen automatisch de BASIC Stamp I/O pinnen naar output. Plaats een 1 in de DIRH variabele zorgt er ook voor dat de /O pin een output wordt.
Figuur 6-13 toont hoe de OUTH variabele kan gebruikt worden om selectief hoge en lage signalen naar de P8 tot P15 te zenden. Een binaire 1 is gebruikt om een hoog signaal te zenden, een binaire 0 wordt gebruikt om een laag signaal te zenden.Dit voorbeeld toont het nummer 3 op de 7-segment LED display: ' BAFG.CDE OUTH = %11010110
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
X3
Vdd
Vin
Vss
Pagina 176 · Wat is een Microcontroller?
Figuur 6-13 OUTH om het sturen van High/Low Signalen op P8 P15.
‘ BAFG.CDE OUTH = %11010110 De display op de figuur is omgedraaid omdat het duidelijker toont hoe de waarden van het OUTH commando overeen komen en in lijn staan met de I/O pinnen. Het commando OUTH = %11010110 gebruikt nullen om de I/O pinnen P8, P11, en P13 laag te plaatsen en het gebruikt binaire enen om P9, P10, P12, P14 en P15 hoog te plaatsen. De lijn juist voor het commando is commentaar die vertelt hoe de segmenten in eenzelfde lijn staan met de binaire waarde. Het volgende voorbeeld toont hoe OUTH tot negen. Binnenin de HIGH en LOW commando’s: Het commando HIGH 15 is hetzelfde als OUT15 = 1 gevolgd door DIR15 = 1. Evenals het commando LOW 15 hetzelfde is als OUT15 = 1 gevolgd door DIR15 = 1. Indien je P15 naar een input wil sturen, gebruik DIR15 = 0. Je kunt dan IN15 gebruiken om high/low te in plaats van het te zenden.
Uw Beurt – Weergeven van A tot F
√ √
Zoek uit wat het bit patroon is (combinatie van nullen en enen) je dient de letters A, b, C, d, E, en F weer te geven. Pas SevenSegment0to9 aan zodat A, b, C, d, E, F worden weergegeven.
#6: Digitale Display · Pagina 177
Decimaal vs. Hexadecimaal De basis digits in het decimaal (base-10) getallen stelsel zijn: 0, 1, 2, 3, 4, 5, 6, 7, 8, en 9. In het hexadecimaal (base-16) stelsel zijn dat: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, b, C, d, E, F. Base-16 wordt veel gebruikt voor computer en microcontroller programmering. Eens je hebt gevonden hoe je de karakters A tot F kan weergeven, kan je het programma ook aanpassen om hexadecimaal te werken van 0 tot F.
Houden van Lijsten van Aan/Uit Patronen
Het LOOKUP commando maakt het schrijven van code voor een 7-segment LED display patroon heel veel makkelijker. Het LOOKUP commando laat je elementen in de lijst “opzoeken”. Hier heb je een voorbeeld dat dit commando gebruikt: LOOKUP index, [7, 85, 19, 167, 28], value
Er zijn twee variabelen die dit commando gebruiken, index en value. Indien de index 0 is, slaat value een 7 op. Indien index 1 is, slaat value 85 op. Indien index 2 is, dan wordt voor dit voorbeeld door het LOOKUP commando een 19 geschreven in de value variabele en dat is wat de Debug Terminal weergeeft. Voorbeeld Programma: SimpleLookup.bs2
√ √ √ √ √
Geef in en start SimpleLookup.bs2. Start het programma zoals het is, met de index variabele gezet op 2. Probeer de index variabele tussen 0 en 4 te brengen. Herstart het programma na de verandering en merk op wat de waarden zijn die uit de rij worden genomen. Optioneel: Pas het programma aan door het LOOKUP commando in een FOR…NEXT lus te plaatsen die van 0 tot 4 telt.
' What's a Microcontroller - SimpleLookup.bs2 ' Debug a value using an index and a lookup table. ' {$STAMP BS2} ' {$PBASIC 2.5} value index
VAR VAR
Byte Nib
index = 2 DEBUG ? index LOOKUP index, [7, 85, 19, 167, 28], value
Pagina 178 · Wat is een Microcontroller?
DEBUG ? value, CR DEBUG "Change the index variable to a ", CR, "different number(between 0 and 4).", CR, CR, "Run the modified program and ", CR, "check to see what number the", CR, "LOOKUP command places in the", CR, "value variable." END
Voorbeeld Programma: DisplayDigitsWithLookup.bs2
Voorbeeldprogramma toont hoe het LOOKUP commando handig kan zijn bij het opslaan van bit patronen die gebruik maken van de OUTH variabele. Opnieuw, de index is gebruikt met binaire waarden in plaats van de OUTH variabele. Dit voorbeeldprogramma telt van 0 tot 9. Het verschil tussen dit programma en DisplayDigits.bs2 is dat dit programma veelzijdiger is. Het is veel sneller en makkelijker om verschillende sequenties op te zoeken in tabellen. √ √ √
Geef in en start DisplayDigitsWithLookup.bs2. Ga na dat het dezelfde acties doet als het vorige programma (met minder werk). Kijk op de Debug Terminal terwijl het programma loopt. Het toont dat de waarde van index gebruikt is door het LOOKUP commando om de juiste binaire waarden in te laden vanuit de list naar OUTH.
' What's a Microcontroller - DisplayDigitsWithLookup.bs2 ' Use a lookup table to store and display digits with a 7-segment LED display. '{$STAMP BS2} '{$PBASIC 2.5} index
VAR
Nib
OUTH = %00000000 DIRH = %11111111 DEBUG "index "-----
OUTH ", CR, --------", CR
FOR index = 0 TO 9 LOOKUP index, [ %11100111, %10000100, %11010011, %11010110, %10110100, %01110110,
#6: Digitale Display · Pagina 179
%01110111, %11000100, %11110111, %11110110 ], OUTH DEBUG "
", DEC2 index, "
", BIN8 OUTH, CR
PAUSE 1000 NEXT DIRH = %00000000 END
Uw Beurt – Weergeven van 0 tot F
√
Pas DisplayDigitsWithLookup.bs2 zo aan dat het telt van 0 tot F in het hexadecimaal stelsel. Vergeet niet de FOR…NEXT lus start en end waarden aan te passen.
ACTIVITEIT #4: WEERGEVEN VAN DE POSITIE VAN EEN DIAL In Chapter #5, Activiteit #4 heb je een potentiometer gebruikt om een servo te besturen. In deze Activiteit, zal je de positie van de potentiometer gebruiken met de 7-segment LED display. Dial en Display Onderdelen
(1) 7-segment LED display (8) Weerstanden– 1 kΩ (bruin-zwart-rood) (1) Potentiometer – 10 kΩ (1) Weerstand– 220 Ω (rood-rood-bruin) (1) Condensator – 0.1 µF (7) Jumper draden Bouwen van de Dial en Display Circuits
Figuur 6-14 toont een schema van het potentiometer circuit data van dit project dient bijgehangen te worden. Figuur 6-15 toont een draaddiagram van het circuit, Figuur 6-14 gecombineerd met het circuit van Figuur 6-10 op Pagina 170. √
Voeg het potentiometer circuit toe aan het 7-segment LED display circuit zoals in Figuur 6-15.
Pagina 180 · Wat is een Microcontroller?
P5 Pot 10 kΩ
0.1 µF X
220 Ω
nc
Figuur 6-14 Schema van het Potentiometer Circuit aan het Project toegevoegd
Vss
X3
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Vdd Vin
Figuur 6-15 Project Draad Diagram
Vss
Programmeren van de Dial en Display
Er is een handig commando met de naam LOOKDOWN, en ja, het is het omgekeerde van het LOOKUP commando. Zoals het LOOKUP commando je de nummer geeft gebaseerd op een index, geeft het LOOKDOWN commando de index gebaseerd op een nummer. Voorbeeld Programma: SimpleLookdown.bs2
Dit voorbeeldprogramma toont hoe het LOOKDOWN commando werkt. √ √ √
Geef in en start SimpleLookdown.bs2. Start het programma zoals het is, met de waarde van de value variabele op 167 gezet. Gebruik de Debug Terminal om de waarde van de index te bekijken. Probeer de waarde van de value variabele gelijk te zetten met een van de andere nummers opgelijst in het LOOKDOWN commando: 7, 85, 19, 28.
#6: Digitale Display · Pagina 181
√
Herstart het programma na elke verandering en merk op welke waarde van de lijst er in de index variabele wordt geschreven.
Tenzij je een andere soort vergelijking maakt, controleert het LOOKDOWN commando opdat een waarde gelijk is aan een nummer uit de lijst. Je kunt ook laten controleren of een waarde groter, kleiner of gelijk is aan de gevraagde waarde. Als voorbeeld, om te zoeken naar een gegeven van de lijst, dat kleiner is dan de waarde van de variabele, gebruik de <= operator juist voor de eerste haken die de lijst start. √
Pas SimpleLookdown.bs2 aan door de waarde in het LOOKDOWN statement te plaatsen: value = 35 LOOKDOWN value, <= [ 7, 19, 28, 85, 167 ], index
√
Experimenteer met verschillende waarden en ga na of de index variabele toont welke waarde je verwacht. Stirkvraag: Wat zal er gebeuren indien de waarde groter is dan 167? Dit kleine euvel kan in het LOOKDOWN commando voor problemen zorgen omdat het LOOKDOWN commando niks verandert aan de index.
' What's a Microcontroller - SimpleLookdown.bs2 ' Debug an index using a value and a lookup table. ' {$STAMP BS2} ' {$PBASIC 2.5} value index
VAR VAR
Byte Nib
value = 167 DEBUG ? value LOOKDOWN value, [7, 85, 19, 167, 28], index DEBUG ? index, CR DEBUG "Change the value variable to a ", CR, "different number in this list:", CR, "7, 85, 19, 167, or 28.", CR, CR, "Run the modified program and ", CR, "check to see what number the ", CR,
Pagina 182 · Wat is een Microcontroller?
"LOOKDOWN command places in the ", CR, "index variable." END
Voorbeeld Programma: DialDisplay.bs2
Dit voorbeeld programma toont de positie van de potentiometer draaiknop door de overeenkomstige segmenten rond de 7-segment LED display op te laten lichten, zoals in Figuur 6-16.
Figuur 6-16 Weergeven van de Potentiometer Positie met de 7-Segment LED Display
√ √ √
Geef in en startDialDisplay.bs2. Draai aan de potentiometer input knop en ga na of het werkt. Als je het voorbeeldprogramma start, kan het zijn dat het niet zo precies is zoals in Figuur 6-16. Pas de waarden aan in de lookdown tabel zodat de digitale display accurater wordt aangestuurd door de potentiometer.
' What's a Microcontroller - DialDisplay.bs2 ' Display POT position using 7-segment LED display. '{$STAMP BS2} '{$PBASIC 2.5} DEBUG "Program Running!" index time
VAR VAR
OUTH = %00000000 DIRH = %11111111 DO HIGH 5 PAUSE 100 RCTIME 5, 1, time
Nib Word
#6: Digitale Display · Pagina 183
LOOKDOWN time, <= [40, 150, 275, 400, 550, 800], index LOOKUP index, [ %11100101, %11100001, %01100001, %00100001, %00000001, %00000000 ], OUTH LOOP
Hoe DialDisplay.bs2 Werkt
Dit voorbeeldprogramma neemt een RCTIME meting van de potentiometer en slaat deze op in de variabele time. HIGH 5 PAUSE 100 RCTIME 5, 1, time
De time variabele wordt dan gebruikt in de LOOKDOWN tabel. De LOOKDOWN tabel beslist welk nummer er in de lijst time kleiner is dan en laadt dan de nullen (in dit geval 0 tot 5 ) in de index variabele. LOOKDOWN time, <= [40, 150, 275, 400, 550, 800], index
Daarna wordt de index variabele gebruikt in de LOOKUP tabel om te keizen welke binaire waarde er dient opgeladen te worden naar de OUTH variabele. LOOKUP index, [ %11100101, %11100001, %01100001, %00100001, %00000001, %00000000 ], OUTH
Uw Beurt – Toevoegen van een Segment
DialDisplay.bs2 maakt vijf van de zes segmenten aan als je aan de knop draait. De sequentie van het draaien van de LED's is in DialDisplay.bs2 : E, F, A, B, C, maar niet D. √ √
Sla DialDisplay.bs2 op onder een andere naam DialDisplayYourTurn.bs2. Pas DialDisplayYourTurn.bs2 aan zodat het alle 6 buitenste LED's aanzet in sequentie met het draaien van de potentiometer. De sequens dient te zijn: E, F, A, B, C en D.
Pagina 184 · Wat is een Microcontroller?
SAMENVATTING Dit hoofdstuk introduceerde de 7-segment LED display, en hoe een pin map kan gelezen worden. Dit hoofdstuk introduceerde enkele technieken van toestellen en circuits die parallelle input hebben. De DIRH en OUTH variabelen werden geïntroduceerd als een middel om de waarden van de BASIC Stamp I/O pinnen P8 tot P15, te besturen. De LOOKUP en LOOKDOWN commando’s werden voorgesteld als een doel voor referenties naar lijsten van waarden, om de letters en nummers weer te geven. Vragen
1. Welk principe zorgt ervoor dat een 7-segment LED display leesbaar wordt door een microcontroller hoge en lage signalen te laten sturen? 2. Wat betekend “common cathode”? Wat denk je dat “common anode” betekend? 3. Hoe noemt men een groep van draden die een signaal doorgeven van en naar een parallel toestel? 4. Wat zijn de namen van commando’s die in dit hoofdstuk gebruikt zijn om een lijst van waarden te gebruiken? Oefeningen
1. Schrijf een OUTH commando en zet P8, P10, P12 hoog en P9, P11, P13 laag. Ga ervan uit dat alle I/O pinnen starten als input, schrijf het DIRH commando dat ervoor zal zorgen dat het I/O pinnen lage en hoge signalen kan zenden terwijl P14, P15 gebruikt blijven worden als inputs. 2. Schrijf de waarden van OUTH nodig voor: a, C, d, F, H, I, n, P, S. Project
1. Schijf “FISH CHIPS And dIP” opnieuw en opnieuw op de 7-segment LED display. Laat elke letter 400ms staan. Oplossingen
Q1. Een LED. Q2. “Common cathode” betekent dat alle kathodes tezamen zijn verbonden tot eenzelfde punt. “Common anode“ zou betekenen dat de anodes allemaal tesamen met elkaar verbonden zouden worden tot een punt. Q3. Een parallele bus. Q4. LOOKUP en LOOKDOWN.
#6: Digitale Display · Pagina 185
E1. De eerste stap voor het configureren van OUTH is deze op "1" te zetten voor elke bit positie gespecificeerd als HIGH. Dus bits 8, 10, en 12 zet je op "1". Dan dient er en "0" voor elk LOW signaal geplaatst te worden, dus bits 9, 11, en 13 krijgen een "0", zoals getoond. Om DIRH, te kunnen programmeren dienen alle pinnen 8, 10, 12, 9, 11, en 13 als outputs gezet worden door ze op "1" te plaatsen. 15 en14 blijven inputs door ze op “à” te plaatsen. De tweede stap is om dit gegeven om te zetten in PBASIC code. Bit 15 14 13 12 11 10 OUTH 0 0 0 1 0 1
9 0
8 1
Bit 15 14 13 12 11 10 DIRH 0 0 1 1 1 1
OUTH = %00010101
9 1
8 1
DIRH = %00111111
E2. De sleutel voor de oplossing van het probleem is om elke letter uit te schrijven en op te merken welke segmenten er daarvoor dienen op te lichten. Plaats een één op elke plaats van segmenten die dienen op te lichten, vertaal dit dan naar binaire code voor de OUTH waarde. Letter a C d F H I n P S
LED Segment e, f, a, b, c, g a, f, e, d b, c, d, e, g a, f, e, g f, e, b, c, g f, e e, g, c all but d and e a, f, g, c, d
BAFG.CDE 11110101 01100011 10010111 01110001 10110101 00100001 00010101 11110001 01110110
OUTL Waarde %11110101 %01100011 %10010111 %01110001 %10110101 %00100001 %00010101 %11110001 %01110110
Van Figuur 6-2, p. 160
Common Cathode
10 9 8 7 6 G F
A B
A F
B G C
E D E D
C DP
1 2 3 4 5 Common Cathode
P1. Gebruik het schema van Figuur 6-10 op pagina 170. Om dit probleem op te lossen, pas DisplayDigitsWithLookup.bs2 aan, gebruik het letter patroon in Oefening 1. In de oplossing, zijn de letters als constanten gezet om het programma meer intuïtief te benaderen. Binaire waarden gebruiken is goed, maar geeft meer kans op errors. ' What's a Microcontroller - Ch6Prj01_FishAndChips.bs2 ' Use a lookup table to store and display digits with a 7-segment display. ' Spell out the message: FISH CHIPS And dIP
Pagina 186 · Wat is een Microcontroller?
'{$STAMP BS2} '{$PBASIC 2.5} ' Patterns of 7-Segment Display to create letters A CON %11110101 C CON %01100011 d CON %10010111 F CON %01110001 H CON %10110101 I CON %00100001 n CON %00010101 P CON %11110001 S CON %01110110 space CON %00000000 OUTH = %00000000 DIRH = %11111111 index
' All off to start ' All LEDs must be outputs
VAR
Byte
' 19 chars in message
DO DEBUG "index "-----
OUTH ", CR, --------", CR
FOR index = 0 TO 18
' 19 chars in message
LOOKUP index, [ F, I, S, H, space, C, H, I, P, S, space, A, n, d, space, d, I, P, space ], OUTH DEBUG "
", DEC2 index, "
PAUSE 400
", BIN8 OUTH, CR ' 400 ms between letters
NEXT LOOP
Verder Onderzoek
Alle teksten in deze sectie zijn gratis te downloaden op www.parallax.com. “StampWorks”, Workbook, Version 1.2, Parallax Inc., 2001 StampWorks is geschreven door de auteur van Nuts & Volts, author Jon Williams, en omvat een variëteit van experimenten. Deze tekst is een verzameling van 32 experimenten inclusief verschillende die een 7-segment LED display en andere types gebruiken. De tekst maakt gebruik van een INEX 1000 bord, die veel van de componenten heeft die je in deze tekst hebt gebruikt.
Hoofdstuk #7: Licht Meten · Pagina 187
Hoofdstuk #7: Licht Meten TOESTELLEN DIE LICHT SENSORS BEVATTEN Je hebt al met twee verschillende soorten sensoren gewerkt. De druktoets kan gezien worden als een simpele druksensor en de potentiometer als een positie/rotatie sensor. Er zijn verschillende soorten sensoren in toestellen en machines ingebouwd die er niet direct als een knop uitzien. Andere veel voorkomende sensors zijn voor het meten van temperatuur, rook, trillingen, overhellen en licht. Elk van deze sensoren kunnen in toestellen gevonden worden die de meeste mensen dagdagelijks gebruiken, lichtsensoren zijn waarschijnlijk de meest voorkomende. Een voorbeeld van een alledaags toestel date een lichtsensor bevat, is de televisie. Indien het met afstandsbediening kan bediend worden, bezit de tv een ingebouwde detector die infrarood licht kan opvangen. De afstandsbediening gebruikt het onzichtbare licht om informatie te sturen rond programma, volume en andere functies die je kunt besturen van den TV. Een ander voorbeeld is de digitale camera. Een lichtsensor van de camee helpt de verschillende licht condities in te schatten, zodat de foto duidelijk is onafhankelijk als het donker of helder weer is.
INTRODUCTIE VAN DE FOTOWEERSTAND Licht sensoren hebben verschillende functies en ze komen in verschillende vormen, maten en prijzen. Sommige sensoren zijn ontworpen om een zekere kleur zoals blauw, groen, rood of infrarood waar te nemen. Anderen geven dan niet om de kleur maar reageren op de intensiteit. Nog anderen kijken naar speciaal licht dat bevoordeeld uit een chemische reactie ontstaat. Licht sensoren hebben ook verschillende mogelijkheden om de microcontroller aan te geven wat ze zien. Sommige sensoren sturen een voltage, anderen een sequentie van binaire warden, nog anderen reageren op verschillende waarde van licht en veranderen een weerstandswaarde. Een voorbeeld van een lichtsensor die van weerstand kan veranderen, is de fotoresistor zoals in Figuur 7-1, het is waarschijnlijk ook de meest gekende, goedkoopste en makkelijkst te gebruiken sensor. Het activeert een chemisch component cadmium sulfide (CdS). Deze component vernadert van weerstand afhankelijk van de lichtintensiteit. Helder licht geeft een kleine weerstandswaarde, zwakker licht geeft een grotere weerstand.
Pagina 188 · Wat is een Microcontroller?
Figuur 7-1 Fotoresistor Schema and Stuk Tekening. De fotoresistor’s cadmium sulfide gecoated lichtgevoelig oppervlak is getoond op de bovenkant van de stuktekening.
Zoals met een potentiometer, kan je een fotoresistor gebruiken in een RC-tijdscircuit. Het programma leest de fotoresistor bijna volledig hetzelfde in zoals bij een potentiometer. Het programma is dan wel hetzelfde, licht is volledig anders dan een rotatie of positiebepaling. De activiteiten in dit hoofdstuk zijn gefocusseerd op een applicatie dat licht gebruikt (inplaats van positie) om de microcontroller informatie te geven. Tussendoor zullen er PBASIC programmeer technieken geïntroduceerd worden die zullen helpen met data opslag en met het maken van programma’s die meer leesbaar en handelbaar zijn.
ACTIVITEIT #1: BOUWEN EN TESTEN VAN EEN LICHT METER In deze Activiteit, zal je een RC-tijd circuit bouwen dat de waarde van de fotoresistor inleest. Het meten van de RC-tijd zal je een idee geven van de lichtintensiteit die door de fotoresistor wordt waargenomen. Zoals bij de potentiometer testen, zijn de tijdsmetingen door het RCTIME commando op de Debug Terminal te brengen. Licht Detectie Test Onderdelen
(1) Fotoresistor (1) Weerstand– 220 Ω (rood-rood-bruin) (1) Condensator – 0.01 µF (1) Condensator – 0.1 µF (1) Jumper draad Hoewel er staan twee condensators in de stukkenlijst, zal er slechts een tegelijkertijd gebruikt worden.
Bouwen van het RC Tijd Circuit met een Fotoweerstand
Figuur 7-2 toont het schema voor het RC-tijdscircuit dat je in dit hoofdstuk zal gebruiken, Figuur 7-3 toont het draaddiagram. Dit circuit is anders dan het potentiometer circuit van
Hoofdstuk #7: Licht Meten · Pagina 189
Chapter #5, Activiteit #3 in twee zinnen. Vooreerst, de I/O pin gebruikt om de tijdsvertraging te meten is anders (P2). Ten tweede, de variabele weerstand is nu een fotoweerstand in plaats van een potentiometer. √
Bouw het circuit zoals in Figuur 7-2 en Figuur 7-3. P2 220 Ω 0.01 µF
Figuur 7-2 Fotoresistor RC-tijd Circuit Schema
Vss Vdd
Vin
Vss
X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Figuur 7-3 Photoresistor RC-tijd Draad Diagram
Programmeren van de Fotoweerstand Test
Het eerste voorbeeld van programma (TestPhotoresistor.bs2) is juist een kleine herziening van ReadPotWithRcTime.bs2 uit Chapter #5, Activiteit #3. Het potentiometer circuit van Chapter #5 was verbonden met de I/O pin P7. Het circuit in deze Activiteit is verbonden met P2. Wegens dit verschil, dient het voorbeeldprogramma twee commando’s up te daten. Het commando dat HIGH 7 was, toen het potentiometer circuit verbonden was met P7, is nu HIGH 2, aangezien het fotoresistor circuit met P2 is verbonden. Voor dezelfde reden is het commando RCTIME 7, 1, time nu RCTIME 2, 1, time.
Pagina 190 · Wat is een Microcontroller?
Voorbeeld Programma: TestPhotoresistor.bs2
Inplaats van te draaien aan de potentiometer knop, is het circuit te testen door aan verschillende licht intensiteiten bloot te stellen, die door de fotoresistor zullen worden waargenomen. Zoals in dit voorbeeldprogramma, dient de Debug Terminal kleine waarden te tonen voor helder licht condities en grote warden voor kleine licht condities. √ √ √ √
Geef in en start TestPhotoresistor.bs2. Ga de waarden van de time variabele na op de Debug Terminal, schrijf de waarde onder normale lichtcondities op. Doe het licht in de kamer uit, of bedek het circuit met uw hand en schrijf de time variabele terug op. De waarde dient veel hoger te zijn dan de vorige. Indien je de fotoresistor in het licht houdt naar de zon, dient de time variabele vij klein te zijn.
' What's a Microcontroller - TestPhotoresistor.bs2 ' Read photoresistor in RC-time circuit using RCTIME command. ' {$STAMP BS2} ' {$PBASIC 2.5} time
VAR
Word
DO HIGH 2 PAUSE 100 RCTIME 2, 1, time DEBUG HOME, "time =
", DEC5 time
LOOP
Uw Beurt – Gebruik een Andere Condensator voor andere Licht Condities
Vervang de 0.01 µF condensator door een 0.1 µF condensator, dit kan handig zijn voor fel verlichte ruimten of buiten. De tijdsmetingen met de 0.1 µF condensator zullen tien maal zolang duren, wat inhoudt dat de variabele time op Debug Terminal tien maar zo groot zal aangeven. √ √
Pas het circuit aan door de 0.01 µF condensator te vervangen met een 0.1 µF . Herstart TestPhotoresistor.bs2 en ga na dat de RC-tijdsmetingen ongeveer tien maal groter zijn dan de vorige waarden.
Hoofdstuk #7: Licht Meten · Pagina 191
√
Voordat je verder gaat met de volgende Activiteit, keer terug naar het originele circuit zoals in Figuur 7-2 door de 0.1 µF condensator te vervangen door de 0.01 µF condensator.
ACTIVITEIT #2: LICHT METING GRAFIEKEN Fabrieken dien soms veel sensor inputs waar te nemen om er zeker van te zijn dat de gemaakte producten goed zijn. Van lichtsterkte in een kwekerij tot vloeistofniveau’s in olieraffinaderijen, temperatuursensoren in nucleaire reactoren. Mensen die verantwoordelijk zijn voor het controleren van de waarden, gebruiken vaak grafieken die de sensorwaarde meegeven in de tijd. Introductie van de Stamp Plot Lite
Figuur 7-4 toont de Stamp Plot Lite software grafiek van de RC-tijdsmetingen die naar de BASIC Stamp zijn gestuurd. De lijn getoond op Figuur 7-4 is makkelijker te begrijpen dan de 250 RC-tijdsmetigen die zijn gemeten om de lijn te kunnen tekenen. Als we de grafiek bekijken van links naar rechts, zien we dat de RC-tijdsmetingen gradueel groter worden en opeens fel afnemen. Aangezien de RC-tijdsmetingen groter worden als de lichtsterkte afneemt, en dalen als de lichtsterkte toeneemt, dan kennen we weten we wat er gebeurd is door naar de grafiek te kijken. Het werd donkerder en donkerder en plots was er weer veel licht.
Figuur 7-4 Stamp Plot Lite Grafische metingen van lichtintensiteit
Deze grafiek kan veel vertellen aan de operator of technieker. Misschien door die sensormeting door een microcontroller in een a kwekerij beslist om boven een bepaalde
Pagina 192 · Wat is een Microcontroller?
waarde het licht aan te steken. Misschien wordt er een motor gestuurd die een zonnepaneel op de juiste positie heeft gebracht nadat et had gedetecteerd dat er te weinig licht inviel. Onafhankelijk van het scenario, indien je metingen met grafieken kent, zijn hulpmiddelen zoals Stamp Plot Lite heel handig voor het verzamelen en interpreteren van data. Alle gemeten waarden worden geconverteerd vanuit de meetlijsten naar een grafiek. Stamp Plot Lite is een gratis onderricht programma van SelmaWare Solutions en kan geïnstalleerd worden van de Parallax CD of gedownload van de Parallax web site of direct van http://www.selmaware.com/.
Downloaden en installeren van de Stamp Plot Lite
Voordat je Stamp Plot Lite installeert, dien je WinZip te hebben op uw PC of laptop. WinZip kan geïnstalleerd worden van de Parallax CD of gedownload worden van www.winzip.com. Hieronder de instructies voor het downloaden en installeren van de Stamp Plot Lite van de Parallax web site: √ √ √ √ √ √ √
Ga naar de Download plaats op www.parallax.com. Selecteer BASIC Stamp Software. Download het bestand met naam“Stamp Plot Lite graphing utility…” Sla het StampPlot.zip bestand op. Open StampPlot.zip door een dubbelklik. Indien je de WinZip wizard, gebruikt, volg de popup vensters en doe de installatie. Indien je WinZip classic gebruikt, dien je te klikken op Setup.exe om het installeren te starten. Volg de Stamp Plot Lite installatieprogramma instructies.
Programmeren voor het zenden van Metingen naar de Stamp Plot Lite
Het sturen van warden die je op de Stamp Plot Lite in een grafiek wil zien staan, is bijna zoals het sturen van getallen naar de Debug Terminal, er zijn enkele regels. Vooreerst, kunnen er enkel waarden verzonden worden met het DEC formaat en met het CR controle karakter. We willen de waarde van de time variabele afdrukken, zodat alles naar de Debug Terminal wordt gezonden een decimale waarde is die door een enter worden gevolgd. DEBUG DEC time, CR
Je kunt ook scherminstellingen naar de Stamp Plot Lite sturen, door speciale boodschappen te gebruiken tussen citaathaakjes. Deze berichten noemen we controle
Hoofdstuk #7: Licht Meten · Pagina 193
codes. Controle codes worden naar de Stamp Plot Lite gestuurd in het begin van het PBASIC programma. Hoewel je alles kan aanklikken en aanpassen in de software zelf, is het meestal makkelijker om de BASIC Stamp te laten zeggen wat de instellingen voor Stamp Plot Lite dienen te zijn. Hier is een voorbeeld van enkele instellingen die de volgende RC-tijdsmetingen makkelijker zullen maken zonder dat er aanpassingen dienen te gebeuren aan de Stamp Plot Lite’s display instellingen. DEBUG "!AMAX 1250", CR, "!TMAX 25", CR, "!TMIN 0", CR, "!SHFT ON", CR, "!RSET",CR Voor meer informatie over hoe de waarden en controle codes dienen verzonden te worden naar de Stamp Plot Lite, kan je steeds de de Stamp Pot Lite’s Help bestanden raadplegen.
Voorbeeld Programma: PlotPhotoresistor.bs2
Volg volgende stappen om de fotoweerstand data weer te geven in een grafiek: √ √
Gebruik de BASIC Stamp Editor om het programma op te laden en start PlotPhotoresistor.bs2. Ga na dat de waarden telkens op een nieuwe lijn worden weergegeven op de Debug Terminal. Figuur 7-5 toont een voorbeeld.
Figuur 7-5 Voorbeeld van waarden in de Debug Terminal.
√ √
Schrijf de COM nummer op dat in het COM Port in de linker bovenhoek terug te vinden is van de Debug Terminal. Gebruik Windows Start Menu om Stamp Plot Lite op te starten. Klik Start, selecteer dan Programs → Stamp Plot → Stamp Plot Lite.
Pagina 194 · Wat is een Microcontroller?
√
√ √
Zet het COM Port veld in Stamp Plot Lite op dezelfde waarde. Figuur 7-6 toont hiervan een voorbeeld, waarbij de waarde COM1 is, in de Debug Terminal, dus de Stamp Plot dient ook op COM1 geselecteerd te worden. Je COM poort waarde kan een andere waarde hebben. Ga na dat hetzelfde nummer in de Debug Terminal is weergegeven als in de Stamp Plot Lite. Sluit de Debug Terminal (klik op de X knop in de rechter bovenhoek, of klik op de Close knop onderaan het venster). In het Stamp Plot Lite venster, klik Connect, en dn klik Plot Data. Aankruisvinken dienen te verschijnen nadat je er hebt op geklikt. Figuur 7-6 COM Port instellingen Debug Terminal (links) en Stamp Plot Lite (rechts).
√ √
Druk en laat de reset knop los op het Board of Education of HomeWork Board. Dit start het BASIC Stamp programma opnieuw, zodat het DEBUG commando de Stamp Plot Lite instellingen doet. De data zal starten in een grafiek weergegeven worden van zodra je op Plot Data klikt. Hou je hand over de fotoresistor op verschillende afstanden om veranderingen in lichtcondities waar te nemen. Onthoud, hoe donkerder, hoe groter de waarde op de grafiek. Hoe meer licht er door de sensor wordt gedetecteerd, hoe lager de waarde. BELANGRIJK: Er kan maar een programma tegelijkertijd op een COM poort draaien. Voordat je een ander programma laat lopen op de BASIC Stamp Editor, dien je Connect and Plot Data checkboxen te deselecteren in de Stamp Plot Lite. Voordat je de Stamp Plot Lite terug activeert(door de boxen aan te vinken), dien je de Debug Terminal te sluiten.
' What's a Microcontroller - PlotPhotoresistor.bs2 ' Graph light levels using Stamp Plot Lite. ' {$STAMP BS2} ' {$PBASIC 2.5} time
VAR
Word
Hoofdstuk #7: Licht Meten · Pagina 195
DEBUG "!AMAX 1250", CR, "!TMAX 25", CR, "!TMIN 0", CR, "!SHFT ON", CR, "!RSET",CR DO HIGH 2 PAUSE 100 RCTIME 2, 1, time DEBUG DEC time, CR LOOP
Uw Beurt – Aanpassen van de Display
Span en Time Span hebben + en – knoppen die je kunt aanklikken om de horizontale en verticale schaal aan te passen. Span is aan de linker kant van de grafiek, je kunt het gebruiken om minimum en maximum weergegeven waarden in te stellen. Time Span staat onderaan de grafiek en kan je instellen om de tijdsschaal te vergoten of verkleinen die dient weergegeven te worden op de display. √
Experimenteer met het vergroten en verkleinen van de waarden en bekijk het effect op de grafiek.
Indien je moeilijkheden hebt met het afdrukken van de waarden, kan je steeds de Reset toets indrukken op het Board of Education of BASIC Stamp HomeWork Board om de originele instellingen op te roepen.
ACTIVITEIT #3: VOLGEN VAN LICHT GEBEURTENISSEN Een van de betere opties van het BASIC Stamp programma geheugen is dat je de voeding kan afkoppelen zonder dat het programma zal verdwenen. Van zodra je de voeding terug aansluit, start het programma met draaien vanaf het begin. Gelijk welke geheugenpositie dat niet gebruikt is door het programma kan gebruikt worden om data op te slaan. Dit geheugen is zeer goed om data in op te slaan waarvan je niet wil dat de BASIC Stamp die vergeet, ook al valt de voeding weg. De chip op de BASIC Stamp die programma’s opslaat is getoond in Figuur 7-7. Deze chip noemt men de EEPROM. EEPROM staat voor “Electrically erasable programmable read-only memory”. Als mensen over de EEPROM praten, is het meestal uitgesproken als volgt “E-E-Prom”.
Pagina 196 · Wat is een Microcontroller?
Figuur 7-7 EEPROM Chip op de BASIC Stamp
Figuur 7-8 toont een venster genoemd Memory Map. Je kunt dit venster zien door te klikken op Run en Memory Map te selecteren. De Memory Map gebruikt verschikkende kleuren om te tonen hoeveel de BASIC Stamp module’s RAM (variabele geheugen) en de EEPROM worden gebruikt. De balk aan de linker kant toont dat maar een klein deel van het geheugen wordt gebruikt om het programma van Activiteit #2 op te slaan. Door naar beneden te lopen van de EEPROM Map’s venster en het aantal blauwe vakken te tellen, zal je vinden date r enkel 101 bytes van de 2048 bytes van de EEPROM worden gebruikt voor het programma. De andere 1947 bytes zijn vrij om data in op te slaan.
Figuur 7-8 Memory Map Om dit venster te zien, klik Run, en selecteer Memory Map.
Hoofdstuk #7: Licht Meten · Pagina 197
2048 bytes = 2 KB. Je kunt 2048 bytes opslaan, of dis 2048 verschillende nummers, die elk op zich een waarde tussen 0 en 255 kan bevatten. De hoofdletter ‘B’ staat voor bytes. De kleine letter ‘b’ staat voor bits. Dit kan een serieus verschil maken aangezien 2048 Kb gelijk is aan 2048 verschillende nummers, die elk maar een beperkte waarde 0 of 1 kan zijn. De hoofdletter ‘K’ en kleine letter ‘k’ staan beide voor kilo, maar hebben toch een verschil in 10 betekenis. De hoofdletter ‘K’ wordt gebruikt voor binaire kilobyte, wat 1 × 2 = 1024 is. Indien je exact 2000 bytes wilt, dan kan je kleine letter k gebruiken, wat staat voor metrische 3 kilo (1 X 10 = 1000).
Gebruik laden van de EEPROM voor data op te slaan kan handig zijn voor afstandsbediende applicaties. Een voorbeeld is een temperatuurmeter vanop afstand in een vrachtwagen. Een tweede voorbeeld is thermometer in een weerstation. Een van de vaste waarden die een weerstation kan bevatten is de landhoogte. Aangezien we een fotoresistor gebruiken om lichtsterkte te meten, zal er in deze Activiteit een techniek worden uitgelegd om lichtsterkte gegevens op te slaan, die dan later terug opgehaald kunnen worden uit de EEPROM. In deze Activiteit, zal je een PBASIC voorbeeld programma starten dat data, een serie van lichtmetingen, opslaat in de BASIC Stamp EEPROM. Nadat het programma gedaan is, zal je een tweede draaien om de data uit de EEPROM te halen en deze op de display van de Debug Terminal tonen. Programmeren van Lange Termijn Data Opslag
Het WRITE commando wordt gebruikt om waarden in de EEPROM op te slaan, het READ commando wordt gebruikt om deze waarden eruit te halen. De syntax voor het WRITE commando is: WRITE Location, {WORD} Data Item
Als voorbeeld, indien je de waarde 195 op adres 7 in de EEPROM wil schrijven, kan je het volgende commando gebruiken: WRITE 7, 195
Woord waarden kunnen ergens tussen 0 en 65565 liggen, terwijl byte waarden enkel tussen 0 en 255 kunnen liggen. Een woord waarde neemt de plaats in van twee bytes. Indien je een woord wil schrijven naar de EEPROM, dien je de optie Word te gebruiken. Wees voorzichtig, aangezien een woord twee bytes neemt, dien je een byte overslaan te
Pagina 198 · Wat is een Microcontroller?
slaan, voordat je een ander woord kan schrijven. Als voorbeeld, je dient de waarden 659 en 50012 op te slaan in de EEPROM. Je kunt bij adres 8 starten, maar voor het volgende word kan je pas adres 10 gebruiken. WRITE 8, Word 659 WRITE 10, Word 50012 Is het mogelijk om het programma te overschrijven? Ja, en als je dit doet, kan het zijn dat het programma zich raar gedraagt of stopt met draaien. Aangezien het PBASIC programma zelf de hoogste adressen in de EEPROM gebruikt, is het aangeraden om de laagste Adres waarden te gebruiken om nummer in op te slaan met het WRITE commando. Hoe weet ik dat het Adres dat ik gebruik niet te groot is? Je kunt de memory map gebruiken om uit te vissen welke de hoogste warden zijn die niet door het PBASIC programma gebruikt zijn. De nummers op de linker kant van de Memory Map grafiek is getoond in Figuur 7-8 op pagina 196 zijn hexadecimale nummers, en 79A is de hoogste waarde die niet bezet is door het programma. Hexadecimaal betekend basis-16, dus 79A is eigenlijk: 2
1
2
1
7×16 + 9×16 + A×16
0
= 7×16 + 9×16 + 10×16
0
= 7×256 + 9×16 + 10×1 = 1946. Waarom maar tot 1946 inplaats van 1947? Er zijn in totaal 1947 vrije adressen, maar deze zijn genummerd van Adres 0 tot Adres 1946. Je kunt een programma in de BASIC Stamp gebruiken om de omzetting te weten door het DEBUG commando DEC formaat en $ hexadecimale operator te gebruiken als volgt:
DEBUG DEC $79A Voor een herinnering aan hexadecimale nummers, zie de informatiebox op pagina 177.
Voorbeeld Programma: StoreLightMeasurementsInEeprom.bs2
Dit voorbeeld programma toont hoe het WRITE commando te gebruiken door elke 5 seconden voor 2 ½ minuten te meten en deze metingen op te slaan in de EEPROM. √ √
Geef in en start StoreLightMeasurementsToEeprom.bs2 . Sla de metingen op die op de Debug Terminal tevoorschijn kwamen, zodat je ze kan uitlezen van de EEPROM. Verhoog gradueel de schaduw over de fotoresistor tijdens de 2 ½ minuten test om interessante data te hebben.
Hoofdstuk #7: Licht Meten · Pagina 199
' What's a Microcontroller - StoreLightMeasurementsInEeprom.bs2 ' Write light measurements to EEPROM. ' {$STAMP BS2} ' {$PBASIC 2.5} time eepromAddress
VAR VAR
Word Byte
DEBUG "Starting measurements...", CR, CR, "Measurement Value", CR, "---------------", CR PAUSE 1000 FOR eepromAddress = 0 TO 58 STEP 2 HIGH 2 PAUSE 5000 RCTIME 2, 1, time DEBUG DEC2 eepromAddress, " ", DEC time, CR WRITE eepromAddress, Word time NEXT DEBUG "All done. Now, run:", CR, "ReadLightMeasurementsFromEeprom.bs2" END
Hoe StoreLightMeasurementsInEeprom.bs2 Werkt
De FOR…NEXT lus die de RC-tijdswaarden meet en opslaat in de EEPROM dient in twee stappen te tellen omdat er woord waarden geschreven zijn in de EEPROM. FOR eepromAddress = 0 to 58 STEP 2
Het RCTIME commando laadt de tijdsmetingen op in de woord grootte time variabele. RCTIME 2, 1, time
De time variabele is opgeslaan in het adres dat gegeven wordt door de huidige waarde van de eepromAddress variabele elke maal er door de lus wordt gegaan. Onthoud dat de eepromAddress variabele telkens met 2 vermeerdert aangezien een Word variabele twee bytes heeft als grootte. Het adres voor het WRITE commando is altijd in bytegrootte. WRITE eepromAddress, Word time NEXT
Pagina 200 · Wat is een Microcontroller?
Programmeren van Data Oproepen
Om warden uit te lezen van de EEPROM, kan je het READ commando gebruiken. De syntax van dit commando is: READ Location, {WORD} Data Item
Terwijl het WRITE commando ofwel een constante of een variabele kan zijn, moet het READ commando DataItem argument een variabele zijn, omdat het een waarde vangt dat uit de EEPROM wordt gelezen met het READ commando. De variabelen eepromValueA en eepromValueB zijn Word variabelen, en littleEE is een byte variabele. Hieronder enkele commando’s om deze warden uit te lezen die zijn opgeslaan met het schrijf commando. READ 7, littleEE READ 8, Word eepromValueA READ 10, Word eepromValueB
Voorbeeld Programma: ReadLightMeasurementsFromEeprom.bs2
Dit voorbeeld toont hoe je met het READ commando de lichtmetingen opgeslaan worden in de EEPROM door StoreLightMeasurementsInEeprom.bs2. √
√ √
Nadat StoreLightMeasurementsToEeprom.bs2 vervolledigd is, schakel de voeding af en sluit de voeding terug aan op de BASIC Stamp module, om na te gaan dat de data niet verwijdert is van de EEPROM. Sluit en her open de BASIC Stamp Editor. Laat de BASIC Stamp module’s voeding losgekoppeld totdat je klaar bent voor het draaien van ReadLightMeasurementsFromEeprom.bs2; anders zullen er opnieuw metingen opgenomen worden. Geef in en start ReadLightMeasurementsFromEeprom.bs2.
Vergelijk de tabel die weergegeven is met diegene die is opgeslaan in programma StoreLightMeasurementsInEeprom.bs2, ga na dat de waarden dezelfde zijn. ' What's a Microcontroller - ReadLightMeasurementsFromEeprom.bs2 ' Read light measurements from EEPROM. ' {$STAMP BS2} ' {$PBASIC 2.5} time
VAR
Word
Hoofdstuk #7: Licht Meten · Pagina 201
eepromAddress
VAR
Byte
DEBUG "Retrieving measurements", CR, CR, "Measurement Value", CR, "--------------", CR FOR eepromAddress = 0 TO 58 STEP 2 READ eepromAddress, Word time DEBUG DEC2 eepromAddress, " NEXT
", DEC time, CR
END
Hoe ReadLightMeasurementsFromEeprom.bs2 Werkt
Zoals met het WRITE commando, gebruikt het READ commando byte-size adressen. Aangezien woorden vanuit de EEPROM worden gelezen, dient de eepromAddress variabele telkens 2 toegevoegd per FOR…NEXT lus. FOR eepromAddress = 0 to 58 STEP 2
Het READ commando krijgt de wordlengte waarde aan het eepromAddress. Deze waarde wordt opgeladen in de time variabele. READ eepromAddress, Word time
De waarde van de time en eepromAddress variabelen worden weergegeven in kolommen in de tabel in de Debug Terminal. DEBUG DEC2 eepromAddress, " NEXT
", DEC time, CR
Uw Beurt – Plotten van de opgeslagen Data
√
Pas ReadLightMeasurementsFromEeprom.bs2 zo aan dat het de data weergeeft in de grafiek op Stamp Plot Lite. Onthoud, het DEBUG statement mag enkel de waarden en een enter inhouden.
ACTIVITEIT #4: SIMPELE LICHT METER Licht sensor informatie kan gecommuniceerd worden op verschillende manieren. De licht meter waarmee je zult werken in dit hoofdstuk, verandert hoeveel maal de display knippert naarmate de lichtintensiteit toeneemt.
Pagina 202 · Wat is een Microcontroller?
Licht Meter Onderdelen
(1) Fotoresistor (1) Weerstand – 220 Ω (rood-rood-bruin) (1) Condensator – 0.01 µF (1) Condensator – 0.1 µF (1) 7-segment LED display (8) Weerstanden– 1 kΩ (bruin-zwart-rood) (6) Jumper draden Bouwen van een Light Meter Circuit
Figuur 7-9 toont een 7-segment LED display en een fotoresistor circuit schema dat gebruikt zal worden om lichtsterkte te meten en Figuur 7-10 toont een draaddiagram van het circuit. Het fotoresistor circuit is hetzelfde dat je gebruikt hebt de laatste twee activiteiten, en het 7-segment LED display circuit is hetgeen dat bestuurd is geweest door de BASIC Stamp in #6.
Hoofdstuk #7: Licht Meten · Pagina 203
1 kΩ P15 P14 P13 P12 P11 P10 P9 P8
E
C
DP
G
F
A
B
Figuur 7-9 Light Meter Circuit Schema.
LED’s
common Vss P2 220 Ω 0.01 µF
Vss
Pagina 204 · Wat is een Microcontroller?
X3
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Vdd Vin
Figuur 7-10 Draad Diagram voor Figuur 7-9
Vss
√ √
Bouw het circuit zoals in Figuur 7-9 en Figuur 7-10. Test de 7-segment LED display om er zeker van te zijn dat het juist verbonden is, gebruik SegmentTestWithHighLow.bs2 van #6, Activiteit #2.
Gebruiken van Subroutines
De meeste programma’s dat je totnutoe geschreven hebt vielen binnen de DO…LOOP lus. Aangezien alle Activiteit in de DO…LOOP gebeurt, noemen we deze meestal de hoofdroutine. Aangezien je meer circuits en meer handige functies aan je programma toevoegt, kan het moeilijk worden om alle code te volgen in de hoofdroutine. Je programma’s zullen veel eenvoudiger worden om mee te werken indien je ze organiseert in kleinere smallere segmenten van code die bepaalde handelingen doen. PBASIC kent enkele commando’s die je dan gebruiken om het programma van de hoofdroutine te laten overgaan naar een andere routine, eens die afgehandeld is, kan er weer voortgegaan worden in de hoofdroutine. Dit zal je toelaten om elke segment van de code te schrijven voor een zekere opdracht, en dit ergens anders dan in de hoofdroutine. Elke maal je die specifieke opdracht dient te doen, kan je een regel in het hoofd programma schrijven dat de functie dient uitgevoerd te worden om dan voort te gaan in het hoofdprogramma als de opdracht voltooid is. Dit proces noemen we: een subroutine. Figuur 7-11 toont een voorbeeld van een subroutine en hoe deze gebruikt wordt. Het commando GOSUB Subroutine_Name laat het programma verspringen naar de subroutine Subroutine_Name: label. Indien het programma aan dat label komt, blijft het lopen en voert het de commando’s uit totdat het RETURN statement komt. Dan gaat
Hoofdstuk #7: Licht Meten · Pagina 205
het programma terug naar het commando dat na het GOSUB commando komt. In het voorbeeld in Figuur 7-11, is het volgende commando: DEBUG "Next command". DO GOSUB Subroutine_Name DEBUG "Next command" LOOP
Subroutine_Name:
Figuur 7-11 Hoe Subroutines Werken
DEBUG "This is a subroutine..." PAUSE 3000 RETURN
Wat is een label? Een label is een naam dat kan gebruikt worden als een plaatsvervanger in het programma. GOSUB is een commando dat ervoor zorgt dat er naar het label wordt versprongen. Enkele anderen zijn GOTO, ON GOTO, en ON GOSUB. Je kunt deze commando’s gebruiken om naar labels te springen. Een label dient te eindigen met een dubbelepunt en voor de stijl worden verschillende woorden geschieden met een underscore. Bij het kiezen van een naam dien je erop te letten dat je geen gereserveerd woord neemt. De andere regels voor naamgeving zijn dezelfde als die voor het benoemen van variabelen, zoals in het vorige hoofdstuk is weergegeven.
Voorbeeld Programma: SimpleSubroutines.bs2
Dit voorbeeldprogramma toont hoe subroutines werken door berichten naar de Debug Terminal te sturen. √ √ √
Bekijk SimpleSubroutines.bs2 en probeer te raden in welke volgorde de DEBUG commando’s zullen worden uitgevoerd. Geef het programma in en start het. Vergelijk de programma afloop met uw voorspellingen.
' What's a Microcontroller - SimpleSubroutines.bs2 ' Demonstrate how subroutines work. ' {$STAMP BS2}
Pagina 206 · Wat is een Microcontroller?
' {$PBASIC 2.5} DO DEBUG PAUSE GOSUB DEBUG PAUSE GOSUB DEBUG PAUSE
CLS, "Start main routine.", CR 2000 First_Subroutine "Back in main.", CR 2000 Second_Subroutine "Repeat main...", CR 2000
LOOP
First_Subroutine: DEBUG " Executing first " DEBUG "subroutine.", CR PAUSE 3000 RETURN
Second_Subroutine: DEBUG " Executing second " DEBUG "subroutine.", CR PAUSE 3000 RETURN
Hoe SimpleSubroutines.bs2 Werkt
Figuur 7-12 toont hoe de First_Subroutine oproep in de hoofdroutine (the DO…LOOP) werkt. Het commando GOSUB First_Subroutine zendt het programma naar het First_Subroutine: label. De drie commando’s binnenin de subroutine worden uitgevoerd. Indien het programma aan het RETURN statement komt, springt het terug naar het commando vanwaar het komt, vlak achter het GOSUB commando: DEBUG "Back in Main.", CR. Wat is een subroutine oproep? Indien je het GOSUB commando gebruikt om het programma te laten overgaan naar een subroutine, dan noemt men dit een subroutine oproep.
Hoofdstuk #7: Licht Meten · Pagina 207
PAUSE 2000 GOSUB First_Subroutine DEBUG "Back in main.", CR
First_Subroutine: DEBUG "
Executing first "
Figuur 7-12 Eerste Subroutine Oproep
DEBUG "subroutine.", CR PAUSE 3000 RETURN
Figuur 7-13 toont een tweede voorbeeld van een tweede subroutine oproep(GOSUB Second_Subroutine). PAUSE 2000 GOSUB Second_Subroutine DEBUG "Repeat main...", CR
Second_Subroutine: DEBUG "
Executing second "
Figuur 7-13 Tweede Subroutine Oproep
DEBUG "subroutine", CR PAUSE 3000 RETURN
Uw Beurt – Bijvoegen en Nesten van Subroutines
Je kunt meer subroutines toevoegen achter de twee die al in het programma zijn, roep ze op vanuit de hoofdroutine. √
Voeg het subroutine programma in Figuur 7-11 op pagina 205 toe aan SimpleSubroutines.bs2.
Pagina 208 · Wat is een Microcontroller?
√
Maak alle nodige aanpassingen aan de DEBUG commando’s opdat de display er goed uitziet voor alle drie de subroutines.
Je kunt ook een subroutine oproepen binnenin een andere, dit noemt men nesting subroutines. √
Probeer het GOSUB commando dat de Subroutine_Name oproept in een of andere subroutines te plaatsen en bekijk hoe het werkt. Bij het nesten van subroutines is de regel om niet verder dan 4 te gaan. Zie de BASIC Stamp Handleiding voor meer details. Zoek op GOSUB en RETURN.
Licht Meter gebruik van Subroutines
De segmenten op de display roteren in een circulair patroon dat sneller en sneller zal lopen als de photoresistor meer licht ontvangt. Indien het licht afneemt, zal het circulair patroon op de 7-segment LED display trager gaan. Het programma dat de lichtmeter draait, zal met drie verschillende operaties bezig zijn: 1. Lezen van de fotoresistor. 2. Berekenen van hoelang er dient gewacht te worden voordat ere en update van de 7-segment LED display komt. 3. Updaten zelf van de 7-segment LED display. Elke handeling bevat zijn eigen subroutine, en de hoofd DO…LOOP routine zal ronddraaien en elke sequentie oproepen en herhalen tot in het oneindige. Voorbeeld Programma: LightMeter.bs2 Gecontroleerde lichtcondities maken een groot verschil. Voor het beste resultaat, voer deze test uit in een lokaal met lichten waar er geen direct zonlicht is (sluit de gordijnen). Voor informatie hoe de meter dient gekalibreerd te worden, zie de Uw Beurt sectie.
√ √
Geef in en start LightMeter.bs2. Ga het circulair patroon na dat op de 7-segment LED display tevoorschijn komt. Doe dit door een schaduw te creëren met uw hand of een stuk papier.
Hoofdstuk #7: Licht Meten · Pagina 209
' What's a Microcontroller - LightMeter.bs2 ' Indicate light level using 7-segment display. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Program Running!" index time
VAR VAR
Nib Word
' Variable declarations.
OUTH = %00000000 DIRH = %11111111
' Initialize 7-segment display.
DO
' Main routine. GOSUB Get_Rc_Time GOSUB Delay GOSUB Update_Display
LOOP ' Subroutines Get_Rc_Time:
' RC-time subroutine
HIGH 2 PAUSE 3 RCTIME 2, 1, time RETURN Delay:
' Delay subroutine.
PAUSE time RETURN Update_Display: IF index = 6 THEN index = 0 ' BAFG.CDE LOOKUP index, [ %01000000, %10000000, %00000100, %00000010, %00000001, %00100000 ], OUTH index = index + 1 RETURN
' Display updating subroutine.
Pagina 210 · Wat is een Microcontroller?
Hoe LightMeter.bs2 Werkt
De eerste twee lijnen van het programma verklaren de variabelen. Het doet er niet toe of de variabelen in de subroutines of hoofdroutine gebruikt werden. Het beste is om altijd in de eerste twee lijnen de variabelen en constanten te declareren. Aangezien dit door iedereen gedaan wordt, heeft dit een naam gekregen, namelijk de “variabele declaration”. index VAR Nib time VAR Word
' Variable declarations.
vele programma’s hebben ook dingen die maar eenmalig dienen gedaan te worden eens het programma is gestart. Bijvoorbeeld alle 7-segment I/O pinnen lag plaatsen en hen een als outputs zetten. Dit stuk programma noemen we de initialisatie:”initialization”. OUTH = %00000000 DIRH = %11111111
' Initialize 7-segment display.
Het volgende stuk code noemen we de hoofdroutine of “main routine”. Deze roept eerst de subroutine Get_Rc_Time op. Daarna roept het de Delay subroutine op en daarachter de Update_Display subroutine. Hou er rekening mee dat het programma door deze subroutines gaat zo snel als mogelijk, en dit elke keer opnieuw. DO GOSUB Get_Rc_Time GOSUB Delay GOSUB Update_Display LOOP
' Main routine.
Alle gebruikte subroutines zijn meestal geplaatst na de hoofdroutine. De eerste subroutine naam is Get_Rc_Time:, en het neemt de RC-tijden op van het fotoresistor circuit. Deze subroutine heeft een PAUSE commando dat de condensator oplaadt. Het Duration argument van dit commando is klein oplaadt. Er dient enkel kortstondig gestopt te worden om de condensator op te laden. Merk op dat het RCTIME commando de waarde van het time variabele meegeeft. Deze variabele zal gebruikt worden in de tweede subroutine. ‘Subroutines Get_Rc_Time: HIGH 2 PAUSE 3 RCTIME 2, 1, time
' RC-time subroutine
Hoofdstuk #7: Licht Meten · Pagina 211
RETURN
De tweede subroutine name is Delay, en het bevat enkel een PAUSE commando. Indien je wat extra berekeningen wil doen op de variabele time voor het pauzecommando, kan dit hier gebeuren. Delay: PAUSE time RETURN
De derde subroutine noemt Update_Display. Het LOOKUP commando in deze subroutine bevat een tabel met een zes bit patroon dat wordt gebruikt om een circulair patroon rond de 7-segment LED display te tonen. Door 1 bij de index variabele te voegen elke maal er een subroutine opgeroepen wordt, komt het volgende patroon op de OUTH. Er zijn enkel ingangen in het LOOKUP commando voor index warden van 0 tot 5. Wat gebeurt er als de waarde van index 6 wordt? Het lookup commando weet niet dat het dan direct terug naar de eerste regel dient te gaan, maar dit kan opgelost worden met een IF…THEN statement. Het commando IF index = 6 THEN index = 0 reset de waarde van de index naar 0 elke maal de tijd 6 is. Dit geeft ook de sequentie van het bit patroon in de OUTH om telkens opnieuw herhaald te worden. Dit zal er dan voor zorgen dat er op de 7-segment LED display een circulair patroon opnieuw en opnieuw tevoorschijn komt. Update_Display: IF index = 6 THEN index = 0 ' BAFG.CDE LOOKUP index, [ %01000000, %10000000, %00000100, %00000010, %00000001, %00100000 ], OUTH index = index + 1 RETURN
Uw beurt – Aanpassen van de Meter Hardware en Software
Er zijn twee mogelijkheden om de gevoeligheid van de meter aan te passen. Vooreerst via de software. Als voorbeeld, de 7-segment LED display kan op een tiende van de snelheid gezet worden, indien de tijdsvariabele met 10 wordt vermenigvuldigd in de Delay subroutine, en het kan tweemaal zo snel gebeuren indien dezelfde waarde door twee wordt gedeeld.
Pagina 212 · Wat is een Microcontroller?
√
Pas LightMeter.bs2 aan zodat de time variabele vermenigvuldigd. De makkelijkste manier is als volgt:
met
10
wordt
PAUSE time
naar PAUSE time * 10
in de Delay subroutine. √ √
Start het aangepaste programma en test het, ga na of de 7-segment LED display nu een tiende is tov. de vorige. Je kunt ook proberen om de time variabele met 5 of 20 te vermenigvuldigen of te delen door 2 door PAUSE time / 2 te gebruiken.
Je kunt ook de display laten rondcirkelen aan een tiende van de snelheid door van condensator te veranderen van 0.01µF naar een 0.1 µF condensator. Onthoud dat indien je een condensator gebruikt, die tien maal zo groot is, de RC-tijdsmeting ook tien maal zolang zal zijn. √ √
Vervang de 0.01 µF condensator door een 0.1 µF condensator. Draai het programma en kijk dat het goede effect is bekomen. Wat is er beter, software of hardware aanpassen? Je dient altijd te proberen om het beste van beide werelden te gebruiken. Kies een condensator die je de beste, meest correcte meting geeft voor uw toepassing. Eens de hardware geïnstalleerd, gebruik dan de software om automatisch de lichtmeter aan te passen opdat het goed werkt voor de gebruiker. Dit neemt inderdaad een lange tijd in beslag, voor het testen en afstellen, maar dit is allemaal een deel van het ontwerpproces.
Hoofdstuk #7: Licht Meten · Pagina 213
SAMENVATTING Dit hoofdstuk introduceerde een tweede manier om het RCTIME commando te gebruiken om lichtmetingen te doen met een fotoresistor. Zoals een potentiometer, is de fotoresistor een variabele weerstand. Met een potentiometer verandert de weerstand door de positie, met een fotoresistor is dit door de intensiteit van het licht. Stamp Plot Lite is gebruikt om grafieken te maken van de lichtmetingen. Methodes voor het vastleggen en interpreteren van de data zijn besproken. Het WRITE en READ commando zijn gebruikt om waarden op te slaan en uit te lezen met de BASIC Stamp module EEPROM. De EEPROM is dan gebruikt als RC-tijd data logging applicatie. In de laatste activiteit van dit hoofdstuk, is een lichtmeter applicatie ontwikkeld met subroutines om drie verschillende opdrachten uit te voeren die nodig zijn om de controller te sturen voor de metingen. Vragen
1. Wat soort verschillende dingen kan een sensor detecteren? 2. Wat is de naam van de chemische samenstelling van de fotoresitsor lichtdetectie? 3. Wat is de gelijkenis tussen een fotoresistor en een potentiometer? Wat zijn de verschillen? 4. Waarvoor staat EEPROM ? 5. Hoeveel bytes kan een BASIC Stamp module EEPROM opslaan? Hoeveel bits zijn dit? 6. Welk commando gebruik je om waarden op te slaan in de EEPROM? Welk commando wordt er gebruikt om waarden uit te lezen van de EEPROM? Welkeen heeft een variabele nodig? 7. Wat is een label? 8. Wat is een subroutine? 9. Welk commando wordt er gebruikt om een subroutine op te roepen? Hoe wordt een subroutine beëindigd? Oefeningen
1. Teken het schema voor een fotoresistor RC-tijdcircuit verbonden met P5. 2. Pas TestPhotoresistor.bs2 zo aan dat het circuit verbonden wordt met P5 in plaats van P2. 3. Leg uit hoe je LightMeter.bs2 dient te veranderen opdat het patroon op de 7segment LED display in tegengestelde richting zou draaien.
Pagina 214 · Wat is een Microcontroller?
Project
1. In een vorig hoofdstuk, heb je druktoetsen gebruikt om een LED te laten blinken. In de plaats van een druktoets gebruik je een fotoresistor om de LED te laten knipperen als er een schaduw over komt. Hint: Je kunt het IF…THEN statement en groter dan operatoren gebruiken om te beslissen of de time variabele gorter is dan een zekere waarde. De operator > kan worden gebruikt, evenals < . Oplossingen
Q1. Druk, positie, draaien, temperatuur, rook, trilling, omkantelen, licht, zwaartekracht, vochtigheid, ….ongeveer alles Q2. Cadmium sulfide (CdS). Q3. Beide toestellen zijn variabele weerstanden. De fotoresistor weerstand varieert naarmate er licht gedetecteerd wordt. De weerstand van de potentiometer hangt af van de positie van de (draai)knop. Q4. Electrically Erasable Programmable Read-Only Memory. Q5. 2048 bytes. 2048 x 8 = 16,384 bits. Q6. Om waarden op te slaan – WRITE Om waarden uit te lezen – READ Het READ commando heeft een variabele nodig. Q7. Een label is een naam die als plaatsvervanger kan gebruikt worden in een PBASIC programma. Q8. Een subroutine is een deelsegment van code date en bepaalde opdracht uitvoert. Q9. Oproepen: GOSUB; beeindigen: RETURN E1. Schema gebaseerd op Figuur 7-2 op pagina 189, P2 veranderde naar P5. P5 220 Ω 0.01 µF
Vss
E2. De gevraagde veranderingen zijn vrij gelijkaardig zoals deze op pagina 189. DO HIGH 5 PAUSE 100 RCTIME 5, 1, time DEBUG HOME, "time = LOOP
", DEC5 time
Hoofdstuk #7: Licht Meten · Pagina 215
E3. Om het patroon in de omgekeerde richting te laten draaien, kan het patroon veranderd worden in het LOOKUP statement, of door de code om te draaien tijdens het opzoeken. Oplossing 1 Update_Display: IF index = 6 THEN index = 0 ' BAFG.CDE LOOKUP index, [ %01000000, %10000000, %00000100, %00000010, %00000001, %00100000 ], OUTH index = index + 1 RETURN
Oplossing 2 Update_Display: ' BAFG.CDE LOOKUP index, [ %01000000, %10000000, %00000100, %00000010, %00000001, %00100000 ], OUTH IF (index = 0) THEN index = 5 ELSE index = index - 1 ENDIF RETURN
P1. Fotoresistor van Figuur 7-2, p.189; LED van Figuur 2-11, p.48. P2
P14
220 Ω 0.01 µF
Vss
470 Ω LED
Vss
Pagina 216 · Wat is een Microcontroller?
De sleutel in het oplossen van dit problem is het IF…THEN statement te gebruiken. Dit test indien de fotoresistor uitlezigen boven een bepaalde waarde zijn. Zo ja, dan knippert de LED. De waarde kan gevonden worden door TestPhotoresistor.bs2 te starten en de uitlezingen te bekijken. Merk het verschil op tussen een onbedekte en bedekte sensor. Neem een waarde die ergens in het midden ligt. In deze oplossing, is de waarde in een constante geschreven Dark om het programmeren te vereenvoudigen. ' What's a Microcontroller - Ch07Prj01_PhotoresistorFlasher.bs2 ' Make LED on P14 flash whenever a shadow is cast over ' the photoresistor. Change "Dark" constant for your conditions. ' {$STAMP BS2} ' {$PBASIC 2.5} Dark time
CON VAR
25 Word
DO HIGH 2 PAUSE 100 RCTIME 2, 1, time DEBUG HOME, "time = IF (time > Dark) THEN HIGH 14 PAUSE 100 LOW 14 PAUSE 100 ENDIF
' Read photoresistor with RCTIME
", DEC5 time ' Print value to Debug Terminal ' Compare reading to known dark value ' Blink LED on pin P14
LOOP
Verder Onderzoek
“Applied Sensors”, Student Guide, Version 2.0, Parallax Inc., 2003 Meer in de diepte over lichtmetingen door een fotodiode, wetenschappelijke waarden en wiskunde worden in deze tekst verklaard met andere sensor applicaties. “Industrial Control”, Student Guide, Version 2.0, Parallax Inc., 2002 Stamp Plot Lite is ontwikkeld met deze tekst als basis, voor het demonstreren van de fundamentele technieken die in fundamentele industrie technieken gebruikt worden voor proces controle.
Hoofdstuk #8: Frequentie en Geluid · Pagina 217
Hoofdstuk #8: Frequentie en Geluid JE DAG EN ELEKTRONISCHE BEEPS Hier zijn enkele voorbeelden van bes die je tijdens de dag kan horen: De microgolf oven als het eten klaar is. Het mobieltje dat een melodie speelt totdat er opgenomen wordt. De geldautomaat die beeps om je kaart niet te vergeten. Een kassascanner die beept indien het product met barcode aanvaardt is. Laten we niet vergeten dat je dag misschien begint met een beepende alarmklok.
MICROCONTROLLERS, LUIDSPREKERS, BEEPS AAN/UIT SIGNALEN Ongeveer alle elektronische beeps die je hoort zijn bestuurd door enkele microcontrollers die aan een luidspreker is verbonden. De microcontroller zorgt voor de beeps door snel hoge en lage signalen te sturen naar verschillende types luidsprekers. De snelheid en hoeveelheid van hoge en lage signalen wordt is de frequentie, die bepaald de toonhoogte. Iedere keer een hoog/laag signaal wordt herhaald, spreken we van een cyclus . Je zult deze getallen uitgedrukt zien in Hertz, de afkorting is Hz. Als voorbeeld, een van de meest voorkomende frequenties voor machines is 2 kHz. Dit betekent dat een hoog/laag signaal 2000 maal per seconde herhaald wordt. Introductie van de Piezoelektrische Luidspreker
In deze Activiteit, zal je experimenteren met het zenden van een reeks signalen naar een normaal, smalle en niet dure piëzo elektrische luidspreker. Het schematisch symbool en stuktekening vind je in Figuur 8-1.
Figuur 8-1 Piëzo elektrisch Luidspreker Symbool en Stuk Tekening
Pagina 218 · Wat is een Microcontroller?
Een piëzo elektrische luidspreker wordt meestal afgekort als piëzo luidspreker of piëzo buzzer.
ACTIVITEIT #1: BOUWEN EN TESTEN VAN DE LUIDSPREKER In deze Activiteit, zal je een circuit met piëzo elektrische luidspreker bouwen. Luidspreker Onderdelen
(1) Piëzo elektrische luidspreker (2) Jumper draden Bouwen van het Piezoelectrische Luidspreker Circuit
De negatieve terminal van de luidspreker dient verbonden met Vss, de positieve terminal met een I/O pin. De BASIC Stamp zal zo geprogrammeerd worden om een hoog/lag signaal naar de positieve terminal van de luidspreker te sturen. √
Bouw het circuit zoals in Figuur 8-2. Vdd
Vin
Vss
X3
P9
Vss
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
+
Figuur 8-2 Piëzo elektrisch Luidspreker Circuit Schema en draad Diagram
Hoe het Piezoelektrische Luidspreker Circuit Werkt
Indien een gitaar snaar trilt, wordt ere en luchtdruk gecreëerd. Deze verandering in luchtdruk is wat je oren detecteren als een geluid, een toon. Hoe sneller de veranderingen hoe hoger de toon, hoe trager de luchtdrukveranderingen, hoe lager de pitch. Het element binnenin het luidspreker omhulsel is een piëzo elektrisch element. Indien een hoog/laag signaal naar de positieve terminal van de luidspreker is gestuurd, zal dit element beginnen
Hoofdstuk #8: Frequentie en Geluid · Pagina 219
trillen en de verandering en luchtdruk geven, net zoals de snaar van een gitaar. Zoals met de gitaarsnaar, detecteert je oor de veranderingen, maar dit geeft dan de typische beep toon, in plaats van de kleur van een gitaarsnaar. Programmeren van de Luidspreker
Het FREQOUT commando is de meest gebruikelijke manier om een hoog/laag signaal naar de luidspreker te zenden om geluid te maken. De BASIC Stamp Manual toont het commando syntax: FREQOUT Pin, Duration, Freq1 {, Freq2}
Zoals met de meeste commando’s in dit boek, de Pin is een waarde die je vrij kan kiezen met de BASIC Stamp I/O pin. Het Duration argument is een waarde die vertelt hoe lang de toon van het FREQOUT commando zal zijn, in milliseconden. Het Freq1 argument is gebruikt om de frequentie van het geluid mee te geven, in Hertz. Er is een optioneel Freq2 argument dat kan gebruikt worden om frequenties te mixen. Hier staat hoe je een toon naar I/O pin P9 stuurt die 1.5 seconden lang is op een frequentie van 2 kHz: FREQOUT 9, 1500, 2000
Voorbeeld Programma: TestPiezoWithFreqout.bs2
Dit voorbeeldprogramma stuurt een 2 kHz noot naar de luidspreker op I/O pin P9 voor 1.5 seconden. Je kunt de Debug terminal gebruiken om te zien wanneer de luidspreker beeps en wanneer het zal stoppen. √ √
Geef in en start TestPiezoWithFreqout.bs2. Ga na dat de luidspreker een duidelijke audio toon maakt gedurende de tijd dat op de Debug Terminal display het volgende bericht komt “Tone sending…”
' What's a Microcontroller - TestPiezoWithFreqout.bs2 ' Send a tone to the piezo speaker using the FREQOUT command. '{$STAMP BS2} '{$PBASIC 2.5} DEBUG "Tone sending...", CR FREQOUT 9, 1500, 2000 DEBUG "Tone done."
Pagina 220 · Wat is een Microcontroller?
Uw beurt – Aanpassen van Frequentie en Lengte
√ √ √ √
Sla TestPiezoWithFreqout.bs2 op onder een andere naam. Probeer verschillende waarden voor het Duration en Freq1 argument. Na elke verandering, start het programma en schrijf het effect op. Indien het Freq1 argument groter wordt, vernadert de toon naar boven of naar beneden? Probeer waarden 1500, 2000, 2500 en 3000 om op deze vraag te kunnen antwoorden.
ACTIVITEIT #2: ACTIEGELUIDEN Veel speelgoed bezit een microcontroller die actiegeluiden maakt. Actiegeluiden zijn een opeenvolging van verandering van frequenties die naar de luidspreker gestuurd worden. Je kunt ook een interessant effect bekomen door frequenties te mixen door het optionele Freq2 argument te gebruiken. Deze activiteit probeert deze twee technieken uit. Programmeren van Actiegeluiden
Actie en toepassingsgeluiden hebben drie verschillende componenten: 1. Pauze 2. Lengte - Duration 3. Frequentie De pauze is de tijd tussen 2 tonen, je kunt het PAUSE commando gebruiken om stiltes, rusten in te lassen. De lengte is de tijd dat de toon wordt gespeeld, kan ingezet worden door het FREQOUT commando Duration argument. De frequentie bepaalt de hoogte van de noot. Hoe hoger de waarde van de frequentie, hoe hoger de noot, hoe lage de frequentiewaarde, hoe lager de noot, dit wordt natuurlijk bepaald door het FREQOUT commando Freq1 argument. Voorbeeld Programma: ActionTones.bs2
ActionTones.bs2 demonstreert enkele combinaties van pauze, lengte en frequentie. De eerste sequentie van noten is gelijk aan die van een elektronische alarmklok. De tweede reeks, klinkt meer als wat een science fiction film robot zou zeggen. De derde reeks is het geluidseffect dat je kan herkennen uit de oude video spelletjes. √
Geef in en start ActionTones.bs2.
Hoofdstuk #8: Frequentie en Geluid · Pagina 221
' What's a Microcontroller - ActionTones.bs2 ' Demonstrate how different combinations of pause, duration, and frequency ' can be used to make sound effects. '{$STAMP BS2} '{$PBASIC 2.5} duration frequency
VAR VAR
Word Word
DEBUG "Alarm...", CR PAUSE 100 FREQOUT 9, 500, 1500 PAUSE 500 FREQOUT 9, 500, 1500 PAUSE 500 FREQOUT 9, 500, 1500 PAUSE 500 FREQOUT 9, 500, 1500 PAUSE 500 DEBUG "Robot reply...", CR PAUSE 100 FREQOUT 9, 100, 2800 FREQOUT 9, 200, 2400 FREQOUT 9, 140, 4200 FREQOUT 9, 30, 2000 PAUSE 500 DEBUG "Hyperspace...", CR PAUSE 100 FOR duration = 15 TO 1 STEP 1 FOR frequency = 2000 TO 2500 STEP 20 FREQOUT 9, duration, frequency NEXT NEXT DEBUG "Done", CR END
Hoe ActionTones.bs2 Werkt
De “Alarm” routine klinkt als een alarm klok. Deze routine spelt de toon op een gefixeerde frequentie van 1.5 kHz voor een lengte van 0.5 s met een vaste lengte in de pauze tussen de noten van 0.5 s. De “Robot reply” routine gebruikt verschillende frequenties met kortere lengtes.
Pagina 222 · Wat is een Microcontroller?
De “Hyperspace” routine gebruikt geen vertraging, maar varieert zowel lengte als frequentie. Door het gebruik van de FOR…NEXT lus, verandert de frequentie en lengte, je kunt enkele interessante geluidseffecten tegenkomen. Indien een FOR…NEXT lus wordt uitgevoerd in een andere lus, noemen we dit een geneste lus. Hier heb je een voorbeeld van hoe dit werkt met een FOR…NEXT lus. De duration variabele start op 15, dan neemt de frequency lus over en zend een frequentie van 2000, daarna2020 en dan 2040 en zo voort tot 2500 naar de luidspreker. Indien de frequentie lus gedaan is, heeft de duration lus nog maar 1 van de 15 doorloopstappen gemaakt. Er wordt dan een één waarde van het duration argument afgetrokken en de frequency lus wordt weer herhaald. FOR duration = 15 TO 1 FOR frequency = 2000 TO 2500 STEP 15 FREQOUT 9, duration, frequency NEXT NEXT
Voorbeeld Programma: NestedLoops.bs2
Om beter te begrijpen hoe een geneste FOR…NEXT lus werkt, gebruikt NestedLoops.bs2 het DEBUG commando om te tonen hoe de waarden veranderen. Dit voorbeeld is een minder complexe versie van de geneste lus in ActionTones.bs2. √ √
Geef in en start NestedLoops.bs2. Ga na wat de Debug Terminal output is, evenals het lengte en frequentie argument telkens er een lus doorlopen wordt.
' What's a Microcontroller - ActionTones.bs2 ' Demonstrate how different combinations of pause, duration, and frequency ' can be used to make sound effects. '{$STAMP BS2} '{$PBASIC 2.5} duration frequency
VAR VAR
DEBUG "Alarm...", CR PAUSE 100 FREQOUT 9, 500, 1500 PAUSE 500 FREQOUT 9, 500, 1500 PAUSE 500 FREQOUT 9, 500, 1500 PAUSE 500
Word Word
Hoofdstuk #8: Frequentie en Geluid · Pagina 223
FREQOUT 9, 500, 1500 PAUSE 500 DEBUG "Robot reply...", CR PAUSE 100 FREQOUT 9, 100, 2800 FREQOUT 9, 200, 2400 FREQOUT 9, 140, 4200 FREQOUT 9, 30, 2000 PAUSE 500 DEBUG "Hyperspace...", CR PAUSE 100 FOR duration = 15 TO 1 STEP 1 FOR frequency = 2000 TO 2500 STEP 20 FREQOUT 9, duration, frequency NEXT NEXT DEBUG "Done", CR END
Uw beurt – Meer Geluidseffecten
Er zijn een oneindig aantal manieren voor het aanpassen van ActionTones.bs2 om verschillende geluidscombinaties te hebben. Hier heb je een aanpassing van de “Hyperspace” routine: DEBUG "Hyperspace jump...", CR FOR duration = 15 TO 1 STEP 3 FOR frequency = 2000 TO 2500 STEP 15 FREQOUT 9, duration, frequency NEXT NEXT FOR duration = 1 TO 36 STEP 3 FOR frequency = 2500 TO 2000 STEP 15 FREQOUT 9, duration, frequency NEXT NEXT
√ √
Sla het voorbeeldprogramma op onder de naam ActionTonesYourTurn.bs2. Amuseer je met dit en andere aanpassingen voor je eigen systeem.
Pagina 224 · Wat is een Microcontroller?
Twee Frequenties tegelijk
Je kunt twee frequenties tegelijk verzenden. In de audio wereld noemt men dit mixen. Onthoud de FREQOUT command syntax van Activiteit #1: FREQOUT Pin, Duration, Freq1 {, Freq2}
Je kunt het optionele Freq2 argument gebruiken om twee frequenties uit te sturen met het FREQOUT commando. Als voorbeeld, kan je 2 en 3 kHz samen voegen als volgt: FREQOUT 9, 1000, 2000, 3000 Elke toon per druktoets is ook een voorbeeld van twee frequenties door elkaar. In telecommunicatie, noemt men dit DTMF (Dual Tone Multi Frequency). Er is ook een PBASIC commando DTMFOUT dat ontworpen is voor het sturen van telefoon tonen. Als voorbeeld het project waar telefoonnummers worden gedraaid, zie het DTMFOUT commando in de BASIC Stamp Handleiding.
Voorbeeld Programma: MixingTones.bs2
Dit voorbeeldprogramma demonstreert het verschil in tonen indien je 2 en 3 kHz mixed. Het demonstreert ook een interessant fenomeen indien je twee tonen mixed met enkele lichtjes verschillende frequentie. Indien je 2000 Hz en 2001 Hz samenbrengt, zal de toon elke seconde sterker en zachter worden(dit is met een frequentieverschil van 1 Hz). Indien je 2000 Hz met2002 Hz mixed, zal dit zachter en sterker worden om de twee seconden gebeuren (2 Hz) en zo voort. Beat is een term die men gebruikt indien twee frequenties samen gespeeld worden met een klein frequentieverschil, wat het versterken en verzwakken van de toon veroorzaakt. Het frequentie verschil geeft aan hoe dikwijls dit versterken/verzwakken voorkomt per seconde. Indien het verschil 1 Hz is, dan zal er per seconde versterkt en verzwakt worden. Per 2 seconden indien het 2 Hz is en zo voort. De variaties in luchtdrukken die door de piëzo elektrische luidspreker worden uitgestuurd, noemen we geluidsgolven. Indien de toon het luidst is, dan is de luchtdruk van elke frequentie bij elkaar op te tellen. (supperpositie). Bij de stilste frequentie, heffen de twee frequenties elkaar op. ( interferentie).
√ √
Geef in en start MixingTones.bs2. Hou de Debug Terminal in het oog en schrijf het verschil in effect op tijdens het mixen van verschillende tonen.
' What's a Microcontroller - MixingTones.bs2 ' Demonstrate some of the things that happen when you mix two tones.
Hoofdstuk #8: Frequentie en Geluid · Pagina 225
'{$STAMP BS2} '{$PBASIC 2.5} DEBUG "Frequency = 2000", CR FREQOUT 9, 4000, 2000 DEBUG "Frequency = 3000", CR FREQOUT 9, 4000, 3000 DEBUG "Frequency = 2000 + 3000", CR FREQOUT 9, 4000, 2000, 3000 DEBUG "Frequency = 2000 + 2001", CR FREQOUT 9, 4000, 2000, 2001 DEBUG "Frequency = 2000 + 2002", CR FREQOUT 9, 4000, 2000, 2002 DEBUG "Frequency = 2000 + 2003", CR FREQOUT 9, 4000, 2000, 2003 DEBUG "Frequency = 2000 + 2005", CR FREQOUT 9, 4000, 2000, 2005 DEBUG "Frequency = 2000 + 2010", CR FREQOUT 9, 4000, 2000, 2010 DEBUG "Done", CR END
Uw beurt – Inkorten van de Code
MixingTones.bs2 is geschreven om aan te tonen dat interessante dingen kunnen gebeuren met het mixen van twee frequenties met het commando Freq2 argument. Helaas is dit zeer onefficiënt. √
Pas MixingTones.bs2 aan zodat de cyclus door het Freq2 argument van 2001 naar 2005 gaat met een woord variabele in de lus.
ACTIVITEIT #3: MUSICALE NOTEN EN SIMPELE LIEDJES Figuur 8-3 toont de meest rechtste toetsen van een piano klavier. Het toont ook de frequenties waarbij elke draad van de piano met verbonden is. De toetsen en de overeenkomstige noten staan erop van C6 tot C8. Deze toetsen zijn onderverdeeld in groepen van 12. Elke groep heeft een octaaf, met acht witte toetsen en 4 zwarte. Deze
Pagina 226 · Wat is een Microcontroller?
sequentie herhaalt zicht elke 12 toetsen. Noten met dezelfde letter hebben dezelfde relatie in frequentie, verdubbeling per octaaf. Als voorbeeld, C7 is tweemaal de frequentie C6, en C8 is tweemaal de frequentie C7. Evenals voor een lager gelegen octaaf is de waarde de helft van de waarde; als voorbeeld, A6 is de helft van de waarde van de frequentie van A7. Internet zoeken voor – “musical scale”: Door de woorden "musical scale" te gebruiken in een zoekmachine, zal je veel interessante informatie vinden rond de historie, fysica en psychologie over dit onderwerp. De 12 noten per octaaf is de grond van de westerse muziek. Andere culturen gebruiken een andere schaal die 2 tot 35 noten per octaaf bevat.
Indien je luistert naar een zanger die oefeningen doet en zingt: “Do Re Mi Fa Sol La Ti Do”, dan probeert de zanger de noten overeen te laten komen met die van de piano toetsen. De witte toetsen worden natuurlijke toetsen genoemd. De zwart toetsen zijn kruisen of mollen. Als voorbeeld, de zwarte toets tussen de toetsen C en D noemt men Ckruis (C#) of D-mol (Db). Wanneer een noot een kruis of een mol wort genoemd, laten we beter over aan de muziek klassen.
C 6 #
D 6 #
F 6 #
G 6 #
A 6 #
C 7 #
D 7 #
F 7 #
G 7 #
4186.0
3729.3 3951.1
3322.4 3520.0
2960.0 3136.0
2793.0
2489.0 2637.0
2093.0
2349.3
1217.5
1864.7 1975.5
1661.2
1760.0
1480.0
1568.0
1396.9
1244.5 1318.5
1174.7
1046.5
1108.7
Figuur 8-3: Meest rechtse Piano Toetsen en hun Frequenties
A 7 #
or
or
or
or
or
or
or
or
or
or
D 6 b
E 6 b
G 6 b
A 6 b
B 6 b
D 7 b
E 7 b
G 7 b
A 7 b
B 7 b
C6 D6 E6 F6 G6 A6 B6 C7 D7 E7 F7 G7 A7 B7 C8
Hoofdstuk #8: Frequentie en Geluid · Pagina 227
Afstel Methode: Het toetsenbord in Figuur 8-3 gebruikt een afstel methode als volgt. De (n/12) frequenties liggen vast met een referentienoot, dan wordt deze vermenigvuldigd met 2 met als waarden van n = 1, 2, 3,... Als voorbeeld nemen we de frequentie van A6, (1/12) (2/12) vermenigvuldigen we deze met 2 om A6# te bekomen. Vermenigvuldigen met om B6 te bekomen enzovoort. Hier heb je een voorbeeld voor de berekening van de frequentie B6 met A6 als referentie noot: De frequentie van A6 is 1760 2
(2/12)
= 1.1224
1760 X 1.224 = 1975.5 1975.5 is de frequentie van B6
Programmeren van Musicale Noten
Het FREQOUT commando wordt ook voor muzieknoten gebruikt. Programmeren van de BASIC Stamp om muziek te spleen met de luidspreker houdt in date r een variëteit aan regels dient gevolgd te worden, net zoals het met andere muziekinstrumenten het geval is. De regels zij er voor het maken van geluidseffecten, frequenties, lengte van noten en pauzes. Het volgende voorbeeldprogramma speelt de muzieknoten frequenties op de luidspreker af met een lengte van een halve seconde. Voorbeeld Programma: DoReMiFaSolLaTiDo.bs2
√
Geef in en start DoReMiFaSolLaTiDo.bs2
' What's a Microcontroller - DoReMiFaSolLaTiDo.bs2 ' Send an octave of half second tones using a piezoelectric speaker. '{$STAMP BS2} '{$PBASIC 2.5} 'Solfege
Tone
Note
DEBUG "Do...", CR:
FREQOUT 9,500,1047
' C6
DEBUG "Re...", CR:
FREQOUT 9,500,1175
' D6
DEBUG "Mi...", CR:
FREQOUT 9,500,1319
' E6
DEBUG "Fa...", CR:
FREQOUT 9,500,1396
' F6
DEBUG "Sol..", CR:
FREQOUT 9,500,1568
' G6
Pagina 228 · Wat is een Microcontroller?
DEBUG "La...", CR:
FREQOUT 9,500,1760
' A6
DEBUG "Ti...", CR:
FREQOUT 9,500,1976
' B6
DEBUG "Do...", CR:
FREQOUT 9,500,2093
' C7
END
Uw beurt – scherpe/platte Noten
√ √
Gebruik de frequenties getoond in Figuur 8-3 om een kruis en mol noten toe te voegen aan DoReMiFaSolLaTiDo.bs2 Pas het programma aan zodat het het volgende octaaf speelt. Hint: Win type werk door de * 2 operatie na het Freq1 argument te plaatsen. Voorbeeld: e FREQOUT 9, 500, 1175 * 2 zal je D7, geven, de D noot in het 7 octaaf.
Opslaan en Opvragen van Muziek sequenties
Een goede manier om muzieknoten om te slaan is met de BASIC Stamp module EEPROM. Je zou kunnen vele WRITE commando’s gebruiken, een betere manier is om het DATA commando te gebruiken. De syntax voor DATA is: {Symbol} DATA {Word} DataItem {, {Word} DataItem, … }
Hierbij een voorbeeld hoe je het DATA commando kan gebruiken om karkaters op te slaan die overeen komen met de noten. Notes DATA "C","C","G","G","A","A","G"
Je kunt het READ commando gebruiken om de karakters op te vragen. De letter ‘C’ is geplaatst in het adres Notes + 0, een tweede letter ‘C’ is geplaatst in Notes + 1. dan komt de eerste ‘G’ die op plaats Notes + 2,staat en zo verder. Als voorbeeld, om de laatste letter ‘G’ op te roepen uit de byte variabele noteLetter, gebruik het commando: READ Notes + 6, noteLetter
Je kunt ook een lijst van nummers opslaan door het DATA commando te gebruiken. Frequentie en lengte die de BASIC Stamp gebruikt voor muzieknoten dienen opgeslaan te worden in word variabelen aangezien ze groter dan 255 kunnen zijn. Hier heb je hoe dit gedaan wordt: Frequencies DATA Word 2093, Word 2093, Word 3136, Word 3136, Word 3520, Word 3520, Word 3136
Hoofdstuk #8: Frequentie en Geluid · Pagina 229
Omdat iedere waarde twee bytes bezet, is het aanroepen met het read commando anders dan bij het oproepen van Karakters. De eerste 2093 is op Frequencies + 0 geplaatst, maar de tweede 2093 op Frequencies + 2. De eerste 3136 staat op Frequencies + 4, de tweede 3136 op Frequencies + 6. De waarden in het Frequenties DATA commando komen overeen met muzieknoten in de Notes DATA .
Hier is een FOR…NEXT lus die de Notes DATA in een variabele schrijft met de naam noteLetter, dan plaatst het de Frequencies DATA in de variabele noteFreq. FOR index = 0 to 6 READ Notes + index, noteLetter READ Frequencies + (index * 2), Word noteFreq DEBUG noteLetter, " ", DEC noteFreq, CR NEXT Wat doet (index * 2)? Elke waarde die opgeslaan wordt in Frequencies DATA neemt een woord in beslag (twee bytes), terwijl elk karkater in Notes DATA enkel een byte inneemt. De waarde van index stijgt telkens met een als er door de FOR…NEXT lus is gegaan. Dit is makkelijk om karakters op te vragen met het commando READ Notes + index, noteLetter. Het probleem is dat elke byte in Notes, de index variabele nodig is om tweemaal verder aan te duiden moet in de Frequencies list. Het commando READ Frequencies + (index * 2), Word noteFreq, lost dit op.
Het volgende programma slaat de lengte door middel van DATA op en gebruikt dit om het FREQOUT commando elke noot met een specifieke lengte te laten spelen. Het resultaat zijn de eerste noten van het liedje Twinkle Twinkle Little Star. Het Alfabet Lied dat door kinderen gebruikt wordt om hun “ABC…” te onthouden zijn dezelfde noten als in het liedje Twinkle Twinkle Little Star.
Voorbeeld Programma: TwinkleTwinkle.bs2
Dit voorbeeld toont hoe de DATA op te slaan en het READ commando te gebruiken om waarden uit de lijst op te halen.
Pagina 230 · Wat is een Microcontroller?
√ √ √
Geef in en start TwinkleTwinkle.bs2 Ga na dat het klinkt als het lied Twinkle Twinkle Little Star. Gebruik de Debug Terminal om na te gaan als alles werkte zoals verwacht.
' What's a Microcontroller - TwinkleTwinkle.bs2 ' Play the first seven notes from Twinkle Twinkle Little Star. '{$STAMP BS2} '{$PBASIC 2.5} Notes
DATA
"C","C","G","G","A","A","G"
Frequencies
DATA
Word 2093, Word 2093, Word 3136, Word 3136, Word 3520, Word 3520, Word 3136
Durations
DATA
Word 500, Word 500, Word 500, Word 500, Word 500, Word 500, Word 1000
index noteLetter noteFreq noteDuration
VAR VAR VAR VAR
Nib Byte Word Word
DEBUG
"Note "----
Duration --------
Frequency", CR, ---------", CR
FOR index = 0 TO 6 READ Notes + index, noteLetter DEBUG " ", noteLetter READ Durations + (index * 2), Word noteDuration DEBUG " ", DEC4 noteDuration READ Frequencies + (index * 2), Word noteFreq DEBUG " ", DEC4 noteFreq, CR FREQOUT 9, noteDuration, noteFreq NEXT END
Uw beurt – Toevoegen en Spelen van Meer Noten
Dit programma speelde de eerste zeven noten van Twinkle Twinkle Little Star. De eerste zin is “Twin-kle twin-kle lit-tle star”. De volgende is “How I won-der what you are”, en de noten zijn F, F, E, E, D, D, C. Zoals bij de eerste zin, wordt de laatste noot tweemaal
Hoofdstuk #8: Frequentie en Geluid · Pagina 231
zolang aangehouden als de anderen. Om dit toe te voegen aan het liedje TwinkleTwinkle.bs2, dien je de DATA structuur juist aan te passen. Vergeet niet de FOR…NEXT lus aan te passen dat deze van 0 tot 13 gaat in plaats van 0 tot 6. √
Pas TwinkleTwinkle.bs2 aan zodat de twee eerste zinnen worden gespeeld in plaats van enkel de eerste.
ACTIVITEIT #4: MICROCONTROLLER MUZIEK Noot lengtes worden niet weergegeven op de partituur in milliseconden. Ze worden beschreven als een hele, halve, kwart, achtste, zestiende, tweeëndertigste noot. Hoe lang een gehele noot is, hangt af van het stuk muziek dat gespeeld wordt. Het tempo van het ene stuk kan hoger zijn dan het tempo van een ander. Een noot kan een paar seconden duren, in een ander stuk kan dit evengoed maar 1 seconde zijn. Rusten zijn de tijden tussen de noten, evenals bij noten worden deze niet in milliseconden uitgedrukt maar in hele, halve, kwart, achtste, zestiende, tweeëndertigste noot of rust. Een Beter Systeem voor Opslag en Ophalen van Muziek
Je kunt programma’s schrijven die tweemaal zoveel muziek bevatten op de BASIC Stamp door bytes te gebruiken in plaats van woorden in de DATA lijst. Je kunt ook je programma aanpassen om de noten makkelijker te lezen dor muzikale conventies te gebruiken voor noten en lengte ervan. Deze Activiteit zal starten met de introductie hoe je noten kan gebruiken zoals er in de muziekwereld is afgesproken. Tempo wordt uitgelegd en wordt herbeken in de volgende Activiteit. Hier heb je een voorbeeld van de DATA opslag van noten en lengtes voor het volgende programma. Indien dit wordt gespeeld zal het je het lied “Frere Jacques” herkennen. Enkel de noten en karakters zijn in de Notes DATA opgeslaan omdat het LOOKUP en LOOKDOWN commando, gebruikt zal worden om karakters te laten overeenstemmen met de juiste frequentie. Notes
DATA
Durations
DATA
WholeNote
CON
"C","D","E","C","C","D","E","C","E","F", "G","E","F","G","Q" 4, 2, 2000
4, 4,
4, 4,
4, 2
4,
4,
4,
4,
4,
4,
Pagina 232 · Wat is een Microcontroller?
Het eerste nummer in het Durations DATA commando telt hoelang het programma de eerste noot uit de Notes Data dient te duren. De tweede nootlengte is voor de tweede noot enzovoort. De lengtes zijn niet meer in milliseconden maar veel kleinere nummers die in bytes kunnen worden opgeslaan. Er is geen Word voorvoegsel in DATA. Vergeleken met opslagwaarden in milliseconden, zijn de nummers meer verwant met muziekpartituren. Hier is een lijst van wat de lengtes betekenen. 1 – gehele 2 – halve noot 4 – kwart noot 8 – achtste noot 16 – zestiende noot 32 – tweeëndertigste noot
• • • • • •
Nadat elke waarde is uitgelezen uit DATA , wordt het gedeeld door de WholeNote waarde om de lengte te krijgen die er gebruikt wordt in het FREQOUT commando argument duration. De duur van elke noot hangt af van het tempo van het lied. Een sneller lied heeft een sneller temp en duurt de noot minder lang dan bij een trager tempo. Aangezien alle noten delen zijn van een gehele noot, kan je het tempo bepalen door de lengte van de volledige noot. Wat doet de "Q" in de Notes DATA ? "Q" staat voor quit, weggaan, stoppen, en een DO WHILE…LOOP kijkt altijd naar de "Q" in de lus. Hoe speel ik een rust? Je kunt een rust tussen twee noten plaatsen door een "P" te plaatsen. De Uw Beurt paragraaf geeft de eerste noten van Beethoven’s 5th Symphony, die een rust bevatten. Hoe speel ik een kruis of mol noot? NotesAndDurations.bs2 heeft waarden van mollen en kruisen in de opzoek tabel. Indien je de kleine letter versie gebruikt van de noot, zal er een kruisnoot gespeeld worden. Als voorbeeld, indien je een B-mol wil spelen, gebruik een “b” in plaats van een “B”. Onthoud dat dit dezelfde frequentie is als een A kruis.
Voorbeeld Programma: NotesAndDurations.bs2
√ √
Geef in en start NotesAndDurations.bs2. Hoe klinkt dit?
' What's a Microcontroller - NotesAndDurations.bs2 ' Play the first few notes from Frere Jacques.
Hoofdstuk #8: Frequentie en Geluid · Pagina 233
'{$STAMP BS2} '{$PBASIC 2.5} DEBUG "Program Running!" Notes
DATA
"C","D","E","C","C","D","E","C","E","F", "G","E","F","G","Q"
Durations
DATA
WholeNote
CON
2000
index offset
VAR VAR
Byte Nib
noteLetter noteFreq noteDuration
VAR VAR VAR
Byte Word Word
4, 2,
4, 4,
4, 4,
4, 2
4,
4,
4,
4,
4,
4,
DO UNTIL noteLetter = "Q" READ Notes + index, noteLetter LOOKDOWN noteLetter, [
LOOKUP offset,
"A", "D", "G",
"b", "e", "a",
"B", "E", "P",
"C", "F", "Q"
"d", "g", ], offset
[ 1760, 1865, 1976, 2093, 2217, 2349, 2489, 2637, 2794, 2960, 3136, 3322, 0, 0 ], noteFreq
READ Durations + index, noteDuration noteDuration = WholeNote / noteDuration FREQOUT 9, noteDuration, noteFreq index = index + 1 LOOP END
Hoe NotesAndDurations.bs2 Werkt
De Notes en Durations DATA is al uitgelegd voor dit programma. Deze gecombineerd met de WholeNote constante worden gebruikt om alle noten op te slaan in het programma.
Pagina 234 · Wat is een Microcontroller?
De verklaringen van alle vijf de variabelen in dit programma worden hieronder getoond. Aangezien een FOR…NEXT lus niet langer gebruikt wordt om data op te roepen, dient er nog steeds een variabele (index) te zijn die onthoudt welke DATA lijn wordt gelezen voor Notes en Durations. De offset variabele is gebruikt in het LOOKDOWN en LOOKUP commando om een bepaalde waarde te selecteren. De noteLetter variabele slaat een karakter op dat opgeroepen is door het READ commando. LOOKUP en LOOKDOWN commando’s worden gebruikt om karakters te converteren in een frequentiewaarde. Deze waarde wordt opgeslaan in de noteFreq variabele en wordt gebruikt door het FREQOUT commando Freq1 argument. De noteDuration variabele wordt gebruikt in een READ commando om een waarde te ontvangen vanuit de Durations DATA. Het wordt ook gebruikt om Duration te berekenen. index offset
VAR VAR
Byte Nib
noteLetter noteFreq noteDuration
VAR VAR VAR
Byte Word Word
De hoofdlus blijft uitgevoerd worden totdat de letter ‘Q’ is gelezen in de Notes DATA. DO UNTIL noteLetter = "Q"
Een READ commando neemt een karakter van de Notes DATA, en slaat het op in de noteLetter variabele. De noteLetter variabele wordt dan gebruikt in het LOOKDOWN commando om de waarde van de offset variabele te bepalen. Onthoud dat de offset een 1 indien “b” , een 2 indien “B” is gedetecteerd, a 3 indien “C” is gebruikt, enzovoort. Deze offset waarde wordt dan in een LOOKUP commando gebruikt om uit te vissen welke waarde de noteFreq variabele dient te zijn. Indien offset een 1 is, zal noteFreq 1865 zijn, indien offset een 2 is, zal noteFreq 1976 zijn, indien offset een 3 is, zal noteFreq 2093 zijn,... READ Notes + index, noteLetter LOOKDOWN noteLetter, [
LOOKUP offset,
"A", "D", "G",
"b", "e", "a",
"B", "E", "P",
"C", "d", "F", "g", "Q" ], offset
[ 1760, 1865, 1976, 2093, 2217, 2349, 2489, 2637, 2794, 2960, 3136, 3322, 0, 0 ], noteFreq
Hoofdstuk #8: Frequentie en Geluid · Pagina 235
De frequentie van de noot is bepaald, maar de lengte moet nog uitgezocht worden. Het READ commando gebruikt de waarde van index om een waarde in de Durations DATA in noteDuration te schrijven. READ Durations + index, noteDuration
Dan wordt noteDuration gelijk gezet met de WholeNote constante gedeeld door de noteDuration. Indien die lengte een 4 is, dan wordt het 2000 ÷ 4 = 500. Indien noteDuration een 8 is, wordt dit 1500 ÷ 8 = 250. noteDuration = WholeNote / noteDuration
Aangezien nu noteDuration en noteFreq gekend zijn, kan het FREQOUT commando de noot spelen. FREQOUT 9, noteDuration, noteFreq
Elke maal dat er door de hoofdlus wordt gelopen, wordt de index waarde met 1 verhoogd. Als de hoofdlus terug naar het begin keert, is het eerste wat het programma doet, het volgende: index = index + 1 LOOP
Uw beurt – Experimenteren met Tempo en een verschillende Toon
De tijd dat elke noot duurt, hangt vast aan het tempo. Je kunt het tempo veranderen door de WholeNote constante aan te passen. Indien je deze verhoogt tot 2250, zal het tempo afnemen en al het lied trager worden gespeeld. Indien je instelt op 1750, zal het tempo stijgen en het lied sneller gespeeld worden. √ √ √
Sla NotesAndDurations.bs2 op onder de naam NotesAndDurationsYourTurn.bs2. Pas het tempo aan van NotesAndDurationsYourTurn.bs2 door de waarde van WholeNote te veranderen. Probeer de waarden 1500, 1750, 2000 en 2250. Herstart het programma na elke aanpassingen en beslis welke versie er het beste klinkt.
Ingeven van muziek is veel makkelijker indien je enkel noten en lengtes dient in te geven. Hierbij de eerste noten van “Beethoven’s Fifth Symphony”. Notes
DATA "G","G","G","e","P","F","F","F","D","Q"
Pagina 236 · Wat is een Microcontroller?
Durations DATA
8,
WholeNote CON
2000
√ √
8,
8,
2,
8,
8,
8,
8,
2
Sla je aanpassingen op. Vervang de Notes en Durations DATA en de WholeNote constante verklaring met bovenstaande code. Start het programma. Ken je dit liedje?
√
Toevoegen van Musicale Kenmerken
Het voorbeeld programma dat je net hebt gemaakt, heeft je leren werken met noten, tijden en rusten, ook het tempo van de gehele noot werd uitgelegd. Mobieltjes die een geluid afspelen hebben 3 extra mogelijkheden dan het vorige programma: • • •
Ze spleen “gepunte” noten. Ze bepalen de gehele nootlengte vanuit een tempo waarde. Ze spelen noten van meer dan een octaaf.
De term “gepunt” verwijst naar een punt gebruikt om een noot een karakteristiek meet e geven in de muziek, om mee te geven dat de noot 1 ½ maal langer dient gespeeld te worden als de normale lengte. Als voorbeeld, een gepunte kwart noot dient zo lang te zijn als een kwart noot en een achtste erbij. Een gepunte halve noot wordt zo lang als een halve noot en een kwart erbij. Je kunt enkele data tabel toevoegen die alles opslaan. In dit voorbeeld, een nul betekent dat er een geen punt op de noot staat, een betekend dat er wel een staat: Dots
DATA
0, 0,
0, 0,
0, 0,
0, 1,
0, 0
0,
1,
0,
0,
0,
0,
Mobiele telefoons hebben typisch een slag per minuut voor een liedje als tempo. BeatsPerMin
CON
200
Figuur 8-4 is een herhaling van Figuur 8-3 op pagina 226. Het toont de 6e en 7e octaaf van een piano toetsenbord. Dit zijn de twee meest heldere octaven door de piëzo luidspreker. Hier heb je een voorbeeld van de DATA die je zult gebruiken in de paragraaf Uw Beurt om meer dan een octaaf te spelen met de Notes DATA. Octaves
DATA
6, 6,
7, 6,
6, 6
6,
6,
6,
6,
6,
6,
7,
6,
Hoofdstuk #8: Frequentie en Geluid · Pagina 237
C 6 #
D 6 #
F 6 #
G 6 #
A 6 #
C 7 #
F 7 #
G 7 #
4186.0
3729.3 3951.1
3322.4 3520.0
3136.0
2960.0
D 7 #
2793.0
2489.0 2637.0
2093.0
2349.3
1217.5
1864.7 1975.5
1661.2
1760.0
1568.0
1396.9
1244.5 1318.5
1108.7
1174.7
1046.5
1480.0
Figuur 8-4 Meest rechts deel van de Piano toetsen en hun frequentie
A 7 #
or
or
or
or
or
or
or
or
or
or
D 6 b
E 6 b
G 6 b
A 6 b
B 6 b
D 7 b
E 7 b
G 7 b
A 7 b
B 7 b
C6 D6 E6 F6 G6 A6 B6 C7 D7 E7 F7 G7 A7 B7 C8
Voorbeeld Programma: MusicWithMoreFeatures.bs2
Dit voorbeeld programma speelt de eerste noten van het lied “For He’s a Jolly Good Fellow”. Alle noten komen voor in eenzelfde octaaf (7e) , maar enkele noten zijn gepunt. In de Uw Beurt paragraaf ga je gepunte noten en verschillende octaven uitproberen in eenzelfde programma. √ √ √
Geef in en start MusicWithMoreFeatures.bs2. Tel het aantal gepunte noten (1 ½ lengte). Luister ook naar noten in het 7e octaaf. Probeer een van de noten naar het 6e octaaf te veranderen. Deze verandering zal vrij dramatisch zijn voor de muziek.
' What's a Microcontroller - MusicWithMoreFeatures.bs2 ' Play the beginning of For He's a Jolly Good Fellow. '{$STAMP BS2} '{$PBASIC 2.5}
Pagina 238 · Wat is een Microcontroller?
DEBUG "Program Running!" Notes
DATA
"C","E","E","E","D","E","F","E","E","D","D", "D","C","D","E","C","Q" 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 4, 2, 4, 4, 4, 4, 2, 2, 4, 2, 4, 4, 4, 4, 2, 2 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0
Octaves
DATA
Durations
DATA
Dots
DATA
BeatsPerMin
CON
320
index offset
VAR VAR
Byte Nib
noteLetter noteFreq noteDuration noteOctave noteDot
VAR VAR VAR VAR VAR
Byte Word Word Nib Bit
wholeNote VAR Word wholeNote = 60000 / BeatsPerMin * 4 DO UNTIL noteLetter = "Q" READ Notes + index, noteLetter LOOKDOWN noteLetter,
LOOKUP offset,
[ "C", "F", "b",
"d", "g", "B",
"D", "G", "P",
"e", "a", "Q"
"E", "A", ], offset
[ 4186, 4435, 4699, 4978, 5274, 5588, 5920, 6272, 6645, 7040, 7459, 7902, 0, 0 ], noteFreq
READ Octaves + index, noteOctave noteOctave = 8 - noteOctave noteFreq = noteFreq / (DCD noteOctave) READ Durations + index, noteDuration noteDuration = WholeNote / noteDuration READ Dots + index, noteDot IF noteDot = 1 THEN noteDuration = noteDuration * 3 / 2 FREQOUT 9, noteDuration, noteFreq index = index + 1
Hoofdstuk #8: Frequentie en Geluid · Pagina 239
LOOP END
Hoe MusicWithMoreFeatures.bs2 Werkt
Hieronder is de muziek data van het gehele lied. Voor elke noot in de Notes DATA , is er een overeenkomstig ingegeven waarde naar Octaves, Durations, en Dots DATA. Als voorbeeld, de eerste noot is een C in het 7e octaaf; het is een kwart noot en gepunt. Hier heb je een ander voorbeeld: de voorlaatste noot (zonder “Q”) is een E noot, in het 7e oktaaf. Het is een halve gepunte noot. Er is ook een BeatsPerMin constante die het tempo van het lied aangeeft. Notes
DATA
Octaves
DATA
Durations
DATA
Dots
DATA
BeatsPerMin
CON
"C","E","E","E","D","E","F","E","E","D","D", "D","C","D","E","C","Q" 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 4, 2, 4, 4, 4, 4, 2, 2, 4, 2, 4, 4, 4, 4, 2, 2 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 320
In vorige voorbeelden was WholeNote een constante. Deze keer is het een variabele die de lengte van de noot bezit in milliseconden. Nadat deze waarde is berekend, zal WholeNote gebruikt worden om uit te maken wat de lengte is van alle andere noten, net zoals in het vorige programma. De index, offset, noteLetter, en noteDuration variabelen zijn ook gebruikt zoals vroeger. De noteFreq variabele is iets anders gebruikt, aangezien er nu een aanpassing dient te komen, naar ge lang in welke oktaaf de noot wordt gespeeld. De noteOctave en noteDot variabelen worden toegevoegd om de punt en oktaaf wensen te kunnen integreren. wholeNote
VAR
Word
index offset
VAR VAR
Byte Nib
noteLetter noteFreq noteDuration noteOctave noteDot
VAR VAR VAR VAR VAR
Byte Word Word Nib Bit
Pagina 240 · Wat is een Microcontroller?
De wholeNote variabele is berekend met BeatsPerMin. Het tempo van het lied is uitgedrukt in slagen per minuut, en het programma deelt de BeatsPerMin door 60000 ms, en vermenigvuldigd dan met 4. Het resultaat is de juiste waarde van een gehele noot. wholeNote = 60000 / BeatsPerMin * 4 Wiskunde wordt van links naar rechts uitgevoerd. In de berekening van wholeNote = 60000 / beatsPerMin * 4, de BASIC Stamp berekent eerst 60000 / beatsPerMin. En dan pas wordt dat resultaat met 4 vermenigvuldigd. Haakjes kunnen gebruikt worden om operaties te groeperen. Indien je door eerst beatsPerMin door 4 wil verdelen, dan dien j edit op deze manier te doen: wholeNote = 60000 / (beatsPerMin * 4).
Dit is identiek hetzelfde als in het vorige programma: DO UNTIL noteLetter = "Q" READ Notes + index, noteLetter LOOKDOWN noteLetter,
[ "C", "F", "b",
"d", "g", "B",
"D", "G", "P",
"e", "a", "Q"
"E", "A", ], offset
Nu dat de octaven kunnen veranderd worden, is een stuk van de code die de frequentie bepaald veranderd. De LOOKUP commando tabellen bevatten frequentiewaarden van noten die van het 8e octaaf zijn. Deze waarden kunnen gedeeld worden door 1 indien je in het 8e oktaaf wil spelen, door 2 voor het 7eh oktaaf, door 4 voor het 6e oktaaf en door 8 indien je de noten in het 5e oktaaf wil laten horen Het enige wat het LOOKUP commando doet, is een noot van het 8e oktaaf in de noteFreq variabele plaatsen. LOOKUP offset,
[ 4186, 4435, 4699, 4978, 5274, 5588, 5920, 6272, 6645, 7040, 7459, 7902, 0, 0 ], noteFreq
Hier zie je hoe de noteFreq variabele wordt aangepast naar het juiste oktaaf. Vooreerst neemt het READ commando de octaafwaarde die opgeslaan is uit Octaves DATA. Dit kan een waarde tussen 5 en 8 zijn. READ Octaves + index, noteOctave
Afhankelijk van het oktaaf, willen we noteFreq delen door 1, 2, 4, of 8. Dit betekent dat het doel is om te delen door 20 = 1, 21 = 2, 22 = 4, or 23 = 8. Het onderstaande, neemt de waarde over van noteOctave, wat een waarde tussen 5 en 8 kan zijn, en trekt het dan van
Hoofdstuk #8: Frequentie en Geluid · Pagina 241
8 af. Indien noteOctave 8 was, is het nu 0. Indien noteOctave een 7 was, is het nu 1. enzovoort noteOctave = 8 - noteOctave NoteOctave is a waarde dat kan gebruikt worden als een exponent van 2, maar hoe kan je een 2 naar voiding overzetten in PBASIC? Een antwoord is het gebruik van de DCD operator. DCD 0 is 1, DCD 1 is 2, DCD 2 is 4, and DCD 3 is 8. Delen van noteFreq door DCD noteOctave betekent dat je deelt door 1, 2, 4, of 8, wat de juiste waarde zal geven voor noteFreq. Het eindresultaat is dat noteFreq op het juiste octaaf is gezet. Je kunt de Debug Terminal gebruiken in de Uw Beurt paragraaf om ere en beter idee van te krijgen hoe dit werkt. noteFreq = noteFreq / (DCD noteOctave) Hoe kan ik weten dat ik een DCD operator moet gebruiken? Blijf leren en ervaring opdoen. Elke maal je een nieuw commando, operator, of ander sleutelwoord ziet in een voorbeeld, zoek dit dan op in de BASIC Stamp handleiding. Lees erover en probeer deze te gebruiken in je eigen ontwerp. Maak ere en gewoonte van om af en toe eens de BASIC Stamp Handleiding te lezen en probeer enkele korte voorbeelden. Dit is de beste manier om alle verschillende commando’s en operatoren onder de knie te krijgen. Door dingen te doen, zal je een gewoonte ontwikkelen en je programmeer ervaring voor het oplossen van problemen zal dan groeien.
De eerste twee lijn code voor het bepalen van de nootlengte zijn ongeveer dezelfde code als in het vorige voorbeeld. Met de uitzondering dat nu elke noot gepunt kan zijn, wat betekent dat de lengte met 1.5 zou kunnen vermenigvuldigd worden. Een READ commando wordt gebruikt om de waarden in de EEPROM op te halen uit de Dots DATA. Een IF…THEN lus wordt gebruikt om te vermenigvuldigen met 3 en te delen door 2 telkens de noteDot variabele is 1. READ Durations + index, noteDuration noteDuration = WholeNote / noteDuration READ Dots + index, noteDot IF noteDot = 1 THEN noteDuration = noteDuration * 3 / 2
Pagina 242 · Wat is een Microcontroller?
Integer ( Gehele getallen) wiskunde De BASIC Stamp herkent niet automatisch een getal zoals 1.5. Indien er met wiskunde gewerkt wordt, werkt het met gehele getallen: …, -5, -4, 3, -2, -1, 0, 1, 2, 3, … De bestel oplossing om met 1.5 te vermenigvuldigen is door eerst te vermenigvuldigen met 3 en dan te delen door 2. Er zijn verschillende manieren om een BASIC Stamp te programmeren om kommagetallen te gebruiken. Vooreerst heb je de optie zoals hierboven uitgelegd. Dit wordt ook uitgelegd in de Basic Analog and Digital Studenten Gids. Een makkelijkere manier om met deel waarden te werken is met de operatoren: ** and */. Deze worden in detail uitgelegd in de Applied Sensors Studenten Gids en in de BASIC Stamp Handleiding.
Een herinnering van dit voorbeeldprogramma werkt zoals het vorige voorbeeld: FREQOUT 9, noteDuration, noteFreq index = index + 1 LOOP END
Uw beurt – Spelen van een liedje met meer dan een octaaf
MusicWithMoreFeatures.bs2 maakte gebruik van rusten, maar bleef in hetzelfde octaaf. Het lied “Take Me Out to the Ball Game” hieronder, heeft de meeste noten in het 6e octaaf. Er zijn ook 2 noten in het 7e octaaf en ze maken een zeer groot verschil in hoe het lied klinkt. √ √
Sla het programma op onder de naam MusicWithMoreFeaturesYourTurn.bs2. Pas het aan door het verplaatsen van de vier data sturingen en een constante verklaring zoals hier:
Notes
DATA
Octaves
DATA
Durations
DATA
Dots
DATA
BeatsPerMin
CON
√
"C","C","A","G","E","G","D","P","C","C","A", "G","E","G","Q" 6, 7, 6, 6, 6, 6, 6, 6, 6, 7, 6, 6, 6, 6 2, 4, 4, 4, 4, 2, 2, 4, 2, 4, 4, 4, 4, 2 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1 240
Start het programma en ga na dat het geluid juist is.
Deze twee noten in het 7e octaaf zijn essentieel om het lied juist te laten klinken. Het is interessant om te horen wat het verschil is met de noten indien ze niet zijn aangepast.
Hoofdstuk #8: Frequentie en Geluid · Pagina 243
√ √ √ √
Probeer de twee 7 waarden in Octaves DATA naar 6 te veranderen. Hou in rekening dat dit de “Take Me out to the Ball Game” raar zal laten klinken. Start het programma en luister naar het verkeerde effect. Verander de Octaves DATA terug naar de originele staat. Start het programma en luister indien het juist klinkt of niet.
ACTIVITEIT #5: MOBIELE TELEFOON RINGTONEN Vele mobiele telefoons spelen een lied dat van het Internet kan gedownload worden. De computer zendt de data over de noten naar de microcontroller van de telefoon, die telkens het muziekje laat afspelen als er een oproep is. Deze muziek noemt men ring of beltonen. Een van de meest verspreidde methodes van componeren, opnemen en het plaatsen van noten is de mogelijkheid om dmv. een zin, een tekst het lied met letters te beschrijven. Hier heb je een voorbeeld hoe de eerste vijf noten van de 5e van Beethoven eruit zien in RTTTL formaat: Beethoven5:d=8,o=7,b=125:g,g,g,2d#,p,f,f,f,2d
Dit formaat van opslaan van muziek noemt men RTTTL, wat staat voor “Ringing Tone Text Transfer Language”. Het makkelijke aan RTTTL bestanden is dat ze over het internet gedeeld zijn. Vele sites hebben een RTTTL bestand ter beschikking om gratis te downloaden. Er zijn ook gratis softwarepakketten om ringtonen te maken, om te zetten en vooral uit te proberen, ook downloaden naar de mobiele telefoon is mogelijk. De RTTTL specificatie is ook verschenen op het World Wide Web. Appendix G vat samen hoe een RTTTL bestand noten, lengte, pauzes, tempo en gepunte noten opslaat. Deze Activiteit introduceert enkele PBASIC programma technieken die gebruikt kunnen worden om verschillende tekst elementen te herkennen. De mogelijkheid van het herkennen van verschillende karakters of groepen van karakters en het nemen van beslissingen, gebaseerd op wat de karakters bevatten, is extreem handig. Het is eigenlijk de sleutel om het RTTTL formaat ringtone (zoals Beethoven5 ) te kunnen converteren naar muziek. Op het einde van deze Activiteit, is ere en applicatie programma dat je kunt gebruiken om RTTTL formaat ringtones af te laten spelen.
Pagina 244 · Wat is een Microcontroller?
Selecteren welke Code Blok dient uitgevoerd per Situatie
De SELECT…CASE statement is waarschijnlijk het beste programmeer gegeven voor het herkennen van karakters of waarden. Onthoud dat het een van de gebruikte statements zal zijn voor het converteren van een RTTTL ringtone naar muziek. In het algemeen is, SELECT…CASE gebruikt voor hetvolgende: • • •
Selecteren van een variabele of expressie. Evalueren van de variabele of expressie afhankelijk per toepassing. Uitvoeren van verschillende code blokken afhankelijk van waaraan de variabele voldoet.
Hier is de syntax voor SELECT…CASE:
SELECT expression CASE condition(s) statement(s) ENDSELECT
Je kunt de twee volgende voorbeeldprogramma’s proberen om te zien hoe SELECT…CASE werkt. SelectCaseWithValues.bs2 neemt de getallen die je op de Debug Terminal ingeeft en vertelt je de minimum lengte die je nodig hebt om die waarde vast te houden. SelectCaseWithCharacters.bs2 vertelt indien het karakter dat je ingaf op de Debug Terminal een kleine of grote letter is of iets anders. Onthoud dat het bovenste venster in de Debug Terminal dient te gebruiken om karakters die je intypte te kunnen verzenden naar de BASIC Stamp. De Zend en Ontvang vensters zijn getoond in Figuur 8-5.
Windowpanes Transmit →
Receive →
Figuur 8-5 Zenden van berichten naar de BASIC Stamp Klik op het Zend (bovenste) venster en geef de waarde of karakter in dat het naar BASIC Stamp wil verzenden.
Hoofdstuk #8: Frequentie en Geluid · Pagina 245
Voorbeeld Programma: SelectCaseWithValues.bs2
√ √ √
Geef in en start SelectCaseWithValues.bs2. Klik op de Debug Terminal Transmit/ zend Venster. Geef een waarde tussen 0 en 65535 in, en druk Enter . Wat gebeurt er indien je een groter getal dan 65535 ingeeft? Indien je het getal 65536 ingeeft, zal de BASIC Stamp een 0 opslaan. Indien je het nummer 65537 ingeeft, zal de BASIC Stamp het nummer 1 opslaan en zo voort. Indien een nummer te groot is, dan noemt men dit overflow.
√
Gebruik Tabel 2-2 om na te gaan dat het voorbeeldprogramma de juiste beslissing maakt nadat variabele lengte toe, voor de nummers die je in de Debug Terminal hebt ingegeven. Tabel 2-2: Variable Types and Values They Can Store Variable type
Range of Values
Bit
0 to 1
Nib
0 to 15
Byte Woord
0 to 255 0 to 65535
' What's a Microcontroller - SelectCaseWithValues.bs2 ' Enter a value and see the minimum variable size required to hold it. '{$STAMP BS2} '{$PBASIC 2.5} value
VAR
Word
DEBUG "Enter a value from", CR, "0 to 65535: " DO DEBUGIN DEC value SELECT value CASE 0, 1 DEBUG "Bit", CR PAUSE 100 CASE 2 TO 15
Pagina 246 · Wat is een Microcontroller?
DEBUG "Nib (Nibble)", CR PAUSE 200 CASE 16 TO 255 DEBUG "Byte", CR PAUSE 300 CASE 256 TO 65535 DEBUG "Word", CR PAUSE 400 ENDSELECT DEBUG CR, "Enter another value: " LOOP
Hoe SelectCaseWithValues.bs2 Werkt
Een woord variabele is aangekondigd om de waarden in vast te houden die je in de Debug Terminal hebt ingegeven. value VAR Word
Het DEBUGIN commando neemt het nummer en plaatst het in de value variabele. DEBUGIN DEC value
Het SELECT statement kiest de waarde van de variabele om te evalueren. SELECT value
In het eerste geval dient de value variabele gelijk te zijn aan 0 of 1. Indien value gelijk is aan een van de nummers, de DEBUG en PAUSE commando’s worden dan uitgevoerd als volgt: CASE 0, 1 DEBUG "BIT", CR PAUSE 100
In het tweede geval dient de value gelijk te zijn aan een nummer tussen 2 en 15. Zo ja, dan worden de DEBUG en PAUSE commando’s uitgevoerd zoals hieronder. CASE 2 to 15 DEBUG "NIB (Nibble)", CR PAUSE 200
Indien de “cases” gedaan zijn, dan komt het ENDSELECT sleutelwoord om het SELECT..CASE statement te beëindigen. ENDSELECT
Hoofdstuk #8: Frequentie en Geluid · Pagina 247
Voorbeeld Programma: SelectCaseWithCharacters.bs2
Dit voorbeeld programma evalueert elk karakter dat je in het Debug Terminal Transmit Venster hebt ingegeven. Het herkent grote en kleine letters, digits, en sommige anderen. Indien je een letter hebt ingegeven dat het programma niet kent, zal je hiervan op de hoogte worden gebracht door de microcontroller. √ √
Geef in en start SelectCaseWithCharacters.bs2. Klik het Debug Terminal Transmit Venster, geef de karakters in en kijk naar het resultaat.
' What's a Microcontroller - SelectCaseWithCharacters.bs2 ' Program that can identify some characters: case, digit, punctuation. '{$STAMP BS2} '{$PBASIC 2.5} character
VAR
Byte
DEBUG "Enter a character: ", CR DO DEBUGIN character SELECT character CASE "A" TO "Z" DEBUG CR, "Upper case", CR CASE "a" TO "z" DEBUG CR, "Lower case", CR CASE "0" TO "9" DEBUG CR, "Digit", CR CASE "!", "?", ".", "," DEBUG CR, "Punctuation", CR CASE ELSE DEBUG CR, "Character not known.", CR, "Try a different one." ENDSELECT DEBUG CR, "Enter another character", CR LOOP
Pagina 248 · Wat is een Microcontroller?
Hoe SelectCaseWithCharacters.bs2 Werkt
Indien je vergelijkt met SelectCaseWithValues.bs2, heeft dit programma enkele kleine wijzigingen. Vooreerst, de naam van de value variabele is gewijzigd naar character, en de lengte werd van word naar byte teruggebracht. Dit is omdat alle karakters in PBASIC byte grootte hebben. Het SELECT statement kiest de character variabele voor evaluatie. SELECT character
De aanhalingstekens vertellen de BASIC Stamp Editor dat je naar karakters verwijst. SELECT character CASE "A" to "Z" DEBUG CR, "Upper case", CR CASE "a" to "z" DEBUG CR, "Lower case", CR CASE "0" to "9" DEBUG CR, "Digit", CR CASE "!", "?", ".", "," DEBUG CR, "Punctuation", CR
Er is ook een ander CASE statement dat niet gebruikt werd in vorig voorbeeld: CASE ELSE DEBUG CR, "Character not known.", CR, "Try a different one."
Dit CASE statement vertelt de SELECT code blok indien geen enkele van voorgaande juist is. Je kunt dit testen door bijvoorbeeld een karakter in te geven zoals % of $. Uw beurt – Selecteren gebaseerd op Range
√
Pas het SELECT…CASE statement aan in SelectCaseWithCharacters.bs2 zodat er op de display “Special character” tevoorschijn komt indien je een van onderstaande karakters ingeeft: @, #, $, %, ’^’ , &, *, (, ), _, of +.
RTTTL Ringtone Player Applicatie Programma
Hieronder heb je een RTTTL bestand dan de muziek bevat dat in volgend voorbeeld zal gebruikt worden. Er zijn nog vijf extra RTTTL_File DATA die je kunt proberen, in de Uw
Hoofdstuk #8: Frequentie en Geluid · Pagina 249
Beurt paragraaf. Dit programma speelt het liedje getiteld ”Reveille”, wat door een bugel gespeeld werd op militaire kampen vroeg in de ochtend. Je zult het wellicht herkennen uit films of televisie shows. RTTTL_File
DATA
"Reveille:d=4,o=7,b=140:8g6,8c,16e,16c,8g6,8e,", "8c,16e,16c,8g6,8e,8c,16e,16c,8a6,8c,e,8c,8g6,", "8c,16e,16c,8g6,8e,8c,16e,16c,8g6,8e,8c,16e,", "16c,8g6,8e,c,p,8e,8e,8e,8e,g,8e,8c,8e,8c,8e,8c,", "e,8c,8e,8e,8e,8e,8e,g,8e,8c,8e,8c,8g6,8g6,c."
Voorbeeld Programma: MicroMusicWithRtttl.bs2
Dit applicatie programma is vrij lang en het is een goed idee om de laatste versie te downloaden van de www.parallax.com → Downloads → Educational Curriculum pagina. Kijk voor een link met naam Selected Example Programs nabij de “What’s a Microcontroller” PDF download bestanden. Download het programma en open het met de BASIC Stamp Editor zal je heel wat tijd besparen. Het alternatief is natuurlijk het met de hand ingeven en alle fouten uit de 4 pagina’s lange code halen. √ √ √
Gebruikt de BASIC Stamp Editor om het MicroMusicWithRtttl.bs2 bestand te openen of geeft het in met de hand. Start het program en luister naar het herkenbare lied “Reveille” . Ga naar de Uw Beurt sectie en probeer enkele andere liedjes (RTTTL_File DATA directives).
' What's a Microcontroller - MicroMusicWithRtttl.bs2 ' Play Nokia RTTTL format ringtones using DATA. '{$STAMP BS2} '{$PBASIC 2.5} DEBUG "Program Running!" ' -----[ I/O Definitions ]------------------------------------------------SpeakerPin
CON
9
' Piezospeaker connected to P9.
' -----[ Variables ]------------------------------------------------------counter char index
VAR VAR VAR
Word Byte Word
' General purpose counter. ' Variable stores characters. ' Index for pointing at data.
noteLetter noteFreq noteOctave
VAR VAR VAR
Byte Word Word
' Stores note character. ' Stores note frequency. ' Stores note octave.
Pagina 250 · Wat is een Microcontroller?
duration tempo
VAR VAR
Word Word
' Stores note duration. ' Stores tempo.
default_d default_o default_b
VAR VAR VAR
Byte Byte Word
' Stores default duration. ' Stores default octave. ' Stores default beats/min.
' -----[ EEPROM Data ]----------------------------------------------------RTTTL_File
DATA
"Reveille:d=4,o=7,b=140:8g6,8c,16e,16c,8g6,8e,", "8c,16e,16c,8g6,8e,8c,16e,16c,8a6,8c,e,8c,8g6,", "8c,16e,16c,8g6,8e,8c,16e,16c,8g6,8e,8c,16e,", "16c,8g6,8e,c,p,8e,8e,8e,8e,g,8e,8c,8e,8c,8e,8c,", "e,8c,8e,8e,8e,8e,8e,g,8e,8c,8e,8c,8g6,8g6,c."
Done
DATA
",q,"
Notes
DATA
Octave8
DATA
"p", "a", "#", "b", "c", "#", "d", "#", "e", "f", "#", "g", "#" Word 0, Word 3520, Word 3729, Word 3951, Word 4186, Word 4435, Word 4699, Word 4978, Word 5274, Word 5588, Word 5920, Word 6272, Word 6645
' -----[ Initialization ]-------------------------------------------------counter = 0
' Initialize counter.
GOSUB GOSUB GOSUB GOSUB GOSUB GOSUB
' ' ' ' ' '
FindEquals ProcessDuration FindEquals ProcessOctave FindEquals GetTempo
Find first '=' in file. Get default duration. Find next '='. Get default octave. Find last '='. Get default tempo.
' -----[ Program Code ]---------------------------------------------------DO UNTIL char = "q" GOSUB ProcessDuration GOSUB ProcessNote GOSUB CheckForDot GOSUB ProcessOctave GOSUB PlayNote LOOP
' ' ' ' ' ' '
Loop until 'q' in DATA. Get note duration. Get index value of note. If dot, 3/2 duration. Get octave. Get freq, play note, next. End of main loop.
END
' End of program.
' -----[ Subroutine - Find Equals Character ]-----------------------------
Hoofdstuk #8: Frequentie en Geluid · Pagina 251
FindEquals: DO READ RTTTL_File + counter, char counter = counter + 1 LOOP UNTIL char = "="
' ' ' ' '
Go through characters in RTTTL file looking for '='. Increment counter until '=' is found, then return.
RETURN ' ' ' ' ' '
-----[ Subroutine - Read Tempo from RTTTL Header ]---------------------Each keyboard character has a unique number called an ASCII value. The characters 0, 1, 2,...9 have ASCII values of 48, 49, 50,...57. You can always convert from the character representing a digit to to its value by subtracting 48 from the variable storing the digit. You can examine this by comparing DEBUG DEC 49 and DEBUG 49. GetTempo: default_b = 0 DO READ RTTTL_File + counter, char IF char = ":" THEN default_b = default_b / 10 counter = counter + 1 EXIT ENDIF default_b = default_b + char - 48 counter = counter + 1 default_b = default_b * 10 LOOP UNTIL char = ":" RETURN
' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '
Parse RTTTL file for Tempo. Convert characters to digits by subtracting 48 from each character's ASCII value. Iteratively multiply each digit by 10 if there is another digit, then add the most recent digit to one's column. For example, the string "120" is (1 X 10 X 10) + (2 X 10) + 0. The '1' is converted first, then multiplied by 10. The '2' is then converted/added. 0 is converted/added, done.
' -----[ Subroutine - Look up Octave ]-----------------------------------ProcessOctave: READ RTTTL_File + counter, char SELECT char CASE "5" TO "8" noteOctave = char - "0" counter = counter + 1 CASE ELSE noteOctave = default_o ENDSELECT IF default_o = 0 THEN default_o = noteOctave ENDIF RETURN
' ' ' ' ' ' ' ' ' ' ' ' ' ' '
Octave may or may not be included in a given note because any note that is played in the default octave does not specify the octave. If a char from '5' to '8' then use it, else use default_o. Characters are converted to digits by subtracting '0', which is the same as subtracting 48. The first time this subroutine is called, default_o is 0. If 0, then set default_o.
Pagina 252 · Wat is een Microcontroller?
' -----[ Subroutine - Find Index of Note ]-------------------------------ProcessNote: READ RTTTL_File + counter, char SELECT char CASE "p" index = 0 counter = counter + 1 CASE "a" TO "g" FOR index = 1 TO 12 READ Notes + index, noteLetter IF noteLetter = char THEN EXIT NEXT counter = counter + 1 READ RTTTL_File + counter, char SELECT char CASE "#" index = index + 1 counter = counter + 1 ENDSELECT ENDSELECT
' ' ' ' ' ' ' ' ' ' ' ' ' ' '
Set index value for lookup of note frequency based on note character. If 'p', index is 0. If 'a' to 'g', read character values in DATA table and find match. Record index value when match is found. If next char is a sharp (#), add 1 to the index value to increase the index (and frequency) by 1 notch. As with other subroutines, increment counter for each character that is processed.
RETURN ' -----[ Subroutine - Determine Note Duration ]--------------------------ProcessDuration: READ RTTTL_File + counter, char
' ' ' ' ' ' ' '
Check to see if characters form 1, 2, 4, 8, 16 or 32. If yes, then convert from ASCII character to a value by subtracting 48. In the case of 16 or 32, multiply by 10 and add the next digit to the ones column.
' ' ' '
If default_d not defined (if default_d = 0), then set default_d = to the duration from the d=#.
SELECT char CASE "1", "2", "3", "4", "8" duration = char - 48 counter = counter + 1 READ RTTTL_File + counter, char SELECT char CASE "6", "2" duration = duration * 10 + char - 48 counter = counter + 1 ENDSELECT CASE ELSE ' If no duration, use duration = default_d ' use default. ENDSELECT IF default_d <> 0 THEN duration = 60000/default_b/duration*3 ELSE default_d = duration ENDIF
Hoofdstuk #8: Frequentie en Geluid · Pagina 253
RETURN ' -----[ Subroutine - Check For '.' Indicating 1.5 Duration ]------------CheckForDot: READ RTTTL_File + counter, char SELECT char CASE "." duration = duration * 3 / 2 counter = counter + 1 ENDSELECT
' ' ' ' ' '
Check for dot indicating multiply duration by 3/2. If dot found, multiply by 3/2 and increment counter, else, do nothing and return.
RETURN ' -----[ Subroutine - Find Comma and Play Note/Duration ]----------------PlayNote:
' ' ' ' '
Find last comma in the current note entry. Then, fetch the note frequency from data, and play it, or pause if frequency = 0.
READ RTTTL_File + counter, char SELECT char CASE "," counter = counter + 1 READ Octave8 + (index * 2), Word noteFreq noteOctave = 8 - noteOctave noteFreq = noteFreq / (DCD noteOctave) IF noteFreq = 0 THEN PAUSE duration ELSE FREQOUT SpeakerPin, duration, noteFreq ENDIF ENDSELECT RETURN
Hoe MicroMusicWithRtttl.bs2 Werkt
Dit voorbeeld gebruikt de soort code die, mist wat oefening, makkelijk te schrijven is. Vandaar ook dat het in deze tekst voorkomt, maar het was eerder voor de fun dan voor het programmeer concept. Indien je de code kort onderzoekt, kan het je opvallen dat je alle commando’s en operatoren al hebt gebruikt. Hierbij een lijst met elementen, die tegen op dit moment ongeveer duidelijk dienen te zijn: • •
Commentaar om code te helpen verklaren Constante en variabele aankondigingen
Pagina 254 · Wat is een Microcontroller?
DATA aankondiging READ commando’s IF…ELSE…ENDIF code blokken DO…LOOP beide met en zonder WHILE en UNTIL Subroutines met GOSUB, labels, en RETURN FOR…NEXT lussen LOOKUP en LOOKDOWN commando’s The FREQOUT en PAUSE commando’s SELECT…CASE
• • • • • • • • •
Uw beurt – Verschillende Tonen
√
Probeer het RTTTL_File DATA in MicroMusicWithRTTTL.bs2 te vervangen met een van de vijf onderstaande muziekfiles. Maar een RTTTL_File DATA per keer! Zorg ervoor dat ze vervangen worden en niet toegevoegd!
√
Start MicroMusicWithRTTTL.bs2 en test elk RTTTL bestand.
RTTTL_File
DATA
RTTTL_File
DATA
RTTTL_File RTTTL_File
DATA DATA
RTTTL_File
DATA
"TwinkleTwinkle:d=4,o=7,b=120:c,c,g,g,a,a,2g,f,", "f,e,e,d,d,2c,g,g,f,f,e,e,2d,g,g,f,f,e,e,2d,c,c,", "g,g,a,a,2g,f,f,e,e,d,d,1c" "FrereJacques:d=4,o=7,b=125:c,d,e,c,c,d,e,c,e,f", ",2g,e,f,2g,8g,8a,8g,8f,e,c,8g,8a,8g,8f,e,c,c,g6", ",2c,c,g6,2c" "Beethoven5:d=8,o=7,b=125:g,g,g,2d#,p,f,f,f,2d" "ForHe'sAJollyGoodFellow:d=4,o=7,b=320:c,2e,e,e,", "d,e,2f.,2e,e,2d,d,d,c,d,2e.,2c,d,2e,e,e,d,e,2f,", "g,2a,a,g,g,g,2f,d,2c" "TakeMeOutToTheBallgame:d=4,o=7,b=225:2c6,c,a6,", "g6,e6,2g.6,2d6,p,2c6,c,a6,g6,e6,2g.6,g6,p,p,a6", ",g#6,a6,e6,f6,g6,a6,p,f6,2d6,p,2a6,a6,a6,b6,c,", "d,b6,a6,g6"
Downloaden van RTTTL Bestanden: Er zijn zeer veel RTTTL bestanden beschikbaar om te downloaden op verschillende sites op het World Wide Web. Deze bestanden worden verdeeld door beltoon enthousiastelingen, die geen muziek experten zijn. Sommige zijn dan ook goed, andere zijn nauwelijks herkenbaar. Indien je meer RTTTL bestanden wil downloaden, zorg er zeker voor dat alle spaties verwijdert zijn tussen de karakters en dis tussen aanhalingstekens staan..
Hoofdstuk #8: Frequentie en Geluid · Pagina 255
SAMENVATTING Dit hoofdstuk introduceerde technieken voor het maken van geluiden en muzikale liedjes met de BASIC Stamp en de piëzo elektrische luidspreker. Het FREQOUT commando kan gebruikt worden om hoog/laag signalen naar de piëzo elektrische luidspreker te sturen die ervoor zorgen dat er geluidseffecten en/of liedjes te horen zijn. Het FREQOUT commando heeft een argument dat de I/O Pin bestuurt en waar het signaal naartoe gestuurd wordt, de lengte van de noot, het Duration argument, de frequentie argument(Freq1). Het optionele argument Freq2 kan gebruikt worden om tonen te mixen. Geluidseffecten kunnen gemaakt worden door de frequentie en de lengte van de noot aan te passen. De waarde van de frequentie kan over een gehele breedte aangeboden worden of gemixt worden om een variëteit aan effecten te bekomen. Het maken van noten hangt ook af van de frequentie, lengte en pauzes. De waarde van het FREQOUT commando Duration argument is bepaald door het tempo van het lied en de lengte van de noot (gehele, halve, kwart,...). De Freq1 waarde van de noot is bepaald door de letter en het oktaaf. Rusten tussen noten worden door pauze commando’s gemaakt. Het spelen van simpele liedjes met de BASIC Stamp kan gebeuren met een sequentie van FREQOUT commando’s, maar er zijn betere manieren om muziek op te slaan en op te halen. DATA directives met de optionele Symbol labels warden gebruikt om de byte waarde zonder prefix en woord waarden. Het READ commando werd gebruikt om DATA op te halen. Het READ commando Address argument gebruikt altijd het DATA optioneel Symbol label om de verschillend te zijn met andere type data. Enkele symbolen die gebruikt werden zijn Notes, Durations, Dots en Octaves. Muziek data kan opgeslaan worden in formaten die zich ertoe lenen om makkelijk te vertalen van muziek. De muziek stijl data is verbonden met variabelen Frequency die de LOOKUP en LOOKDOWN commando’s bezit. Wiskundige bewerkingen kunnen ook uitgevoerd om lengte en tempo van de gehele noot te bepalen. SELECT…CASE werd gebruikt voor het evalueren van de variabelen en een beslissing eraan te koppelen. De SELECT…CASE is het meest geschikt voor het uitzoeken van
karakters of nummers als er vele keuzemogelijkheden zijn na de beslissing, wat de variabele hoeft te doen. Een programma dat zinnen met karakters bevat voor het
Pagina 256 · Wat is een Microcontroller?
beschrijven van de muziek (RTTTL bestand genoemd) werd geïntroduceerd dmv. een langer programma dat verschillende programmeer technieken bezit. De SELECT…CASE speelt een prominente rol in dit programma omdat het gebruikt wordt om karakters uit te zoeken in het RTTTL bestand, die dan een specifiek commando uitvoeren. Vragen
1. Wat veroorzaakt er dat een noot hoog klinkt? Wat voor een lage noot? 2. Wat doet FREQOUT 15, 1000, 3000? Welk effect heeft elke nummer? 3. Hoe kan je het FREQOUT commando veranderen van Vraag 2 zodat er twee frequenties tegelijk verzonden worden? 4. Indien je een piano noot B6 aanraakt, welke frequentie wordt er dan gezonden? 5. Hoe verander je een DATA of een READ commando indien je een waarde uit een woord wil opslaan of ophalen? 6. Kan er meer dan een DATA directive gebruikt worden? Indien ja, hoe kan een READ commando uitvissen van welke DATA directive er dient gekozen te worden? 7. Wat is een oktaaf? Indien je de frequentie weet van een noot in een oktaaf, wat dien jet e doen om de noot in het volgende oktaaf af te laten spelen? 8. Wat doet de SELECT…CASE? Oefeningen
1. Pas de “Alarm…” toon aan van ActionTones.bs2 zodat de frequentie van de toon met telkens 500 wordt verhoogt. 2. Leg uit hoe MusicWithMoreFeatures.bs2 dient verandert te worden om telkens een bericht in de Debug Terminal te plaatsen, als er een gepunte noot wordt gespeeld. Project
1. Bouw een druktoets gecontroleerde toon generator. Indien een toets wordt ingedrukt, dient de luidspreker een 2 kHz geluid te maken voor 1/5 van een seconde. Indien de andere toets wordt ingedrukt, dient ere en 3 kHz beep te klinken gedurende 1/10 van een seconde. Oplossingen
Q1. Onze oren detecteren een verandering in luchtdruk per toon. Een hoge toon komt van een snellere drukwisseling. Een lagere toon van langere drukvariaties.
Hoofdstuk #8: Frequentie en Geluid · Pagina 257
Q2. FREQOUT 15, 1000, 3000 zend een 3000 Hz signaal uit naar pin 15 gedurende een seconde (1000 ms). Het effect van elke nummer is: 15 – pin nummer 15. 1000 – lengte van de toon die gelijk is aan 1000 ms of een seconde. 3000 – de frequentie van de toon, in Hertz, een 3000 Hz toon. Q3. Gebruik het optionele Freq2 argument. Om de 3000 Hz en bvb, 2000 Hz te mixen, voegen we een tweede frequentie waarde na de komma in: FREQOUT 15, 1000, 3000, 2000
Q4. 1975.5 Hz, zie Figuur 8-3 op pagina 226. Q5. Gebruik het optionele Word aanpasser voor elk data item. Q6. Ja, Elke DATA directive heeft een andere symbool parameter. Om te specificeren welke DATA directive er dient genomen te worden, wordt ere en symbool parameter na het READ sleutelwoord geplaatst. Als voorbeeld: READ Notes, noteLetter. In dit voorbeeld is, Notes de symbool parameter. Q7. Een oktaaf groep van 8 hele en 4 halve noten. Om een gegeven noot van de volgende oktaaf te laten klinken dient de frequentie met 2 vermenigvuldigd te worden. Q8. SELECT...CASE selecteert een variabele of een expressie, evalueert deze geval per geval en voert de verschillende blokken code uit, naargelang welk geval er gekozen is. E1. Dit probleem kan opgelost worden door ofwel manueel elke noot met 500, of door het gebruik van de FOR...NEXT lus in stappen van 500. Gebruik van de FOR...NEXT lus:
Manuele toonverhoging:
DEBUG "Increasing alarm...", CR PAUSE 100 FOR frequency = 1500 TO 3000 STEP 500 FREQOUT 9, 500, frequency PAUSE 500 NEXT
DEBUG "Increasing Alarm...",CR PAUSE 100 FREQOUT 9, 500, 1500 PAUSE 500 FREQOUT 9, 500, 2000 PAUSE 500 FREQOUT 9, 500, 2500 PAUSE 500 FREQOUT 9, 500, 3000 PAUSE 500
E2. Pas de lijnen aan die de gepunte noten checked: READ Dots + index, noteDot IF noteDot = 1 THEN noteDuration = noteDuration * 3 / 2 Voeg een DEBUG commando toe aan IF...THEN. Vergeet de ENDIF niet. READ Dots + index, noteDot
Pagina 258 · Wat is een Microcontroller?
IF noteDot = 1 THEN noteDuration = noteDuration * 3 / 2 DEBUG "Dotted Note!", CR ENDIF
P1. Gebruik het luidsprekercircuit van Figuur 8-2, p. 218; en het drukknop circuits van Figuur 4-20, p. 128. ' What's a Microcontroller - Ch8Prj01_PushButtonToneGenerator.bs2 ' P4 Pressed: 2 kHz beep for 1/5 second. 2 kHz = 2000 Hz. ' 1/5 s = 1000 / 5 ms = 200 ms ' P3 Pressed: 3 kHz beep for 1/10 second. 3 kHz = 3000 Hz. ' 1/10 s = 1000 / 10 ms = 100 ms '{$STAMP BS2} '{$PBASIC 2.5} DEBUG "Program Running!"
DO IF (IN4 = 1) THEN FREQOUT 9, 200, 2000 ELSEIF (IN3 = 1) THEN FREQOUT 9, 100, 3000 ENDIF LOOP
' 2000 Hz for 200 ms ' 3000 Hz for 100 ms
Verder Onderzoek
“Applied Sensors”, Student Guide, Version 2.0, Parallax Inc., 2003 Meer geluidseffecten, clicks, en andere worden geïntroduceerd voor de luidspreker. Verschillende schalen worden geïntroduceerd voor de wiskundige discussies. De luidspreker wordt ook gebruikt als een feedback van verschillende sensor metingen. “Basic Analog and Digital”, Student Guide, Version 2.0, Parallax Inc., 2003 De luidspreker wordt gebruikt om een frequentie te genereren door een 555 audi timer. De BASIC Stamp meet de frequentie van de noot met een COUNT commando. “Understanding Signals”, Student Guide, Version 1.0, Parallax Inc., 2003 Je kunt dit boek gebruiken om de output van het FREQOUT commando te begrijpen, voor zowel digitale pulsen als voor sinus golven.
Hoofdstuk #9: Elektronische Bouw Blo · Pagina 259
Hoofdstuk #9: Elektronische Bouw Blokken DIE KLEINE ZWARTE CHIPS Je dient niet verder te kijken dan naar de BASIC Stamp (zie Figuur 9-1) om voorbeelden te vonden van “die kleine zwarte chips”. De chip rechts boven is een voltage regulator. Deze neemt de batterijvoeding en zet die om naar ongeveer exact 5.0 V, wat voor de rest van de componenten nodig is om goed te functioneren. De chip links boven is de BASIC Stamp module EEPROM. PBASIC programma’s worden omgezet naar nummers genoemd tokens, die worden gedownload naar de BASIC Stamp. Deze tokens worden opgeslaan in de EEPROM. Je kan deze zien door op Run en dan Memory Map in the BASIC Stamp Editor te selecteren. De grootste chip noemt men de “Interpreter chip”. Het vangt de tokens van de EEPROM en vertaalt ze naar PBASIC commando’s die de tokens voorstellen. Als het commando wordt uitgevoerd, dan vangt de chip de volgende token en zo voort. Dit process noemt men het “vangen en uitvoeren”.
Figuur 9-1 Geïntegreerde Circuits op de BASIC Stamp
Pagina 260 · Wat is een Microcontroller?
De meeste mensen gebruik de term “integrated circuit” (IC) om te praten over de kleine zwarte chips. Het geïntegreerd circuit is een kleine silicone chip binnenin het zwarte plastic of de keramische verpakking. Afhankelijk van de chip, kan het ergens tussen de honderd en de miljoenen transistors bevatten. Een transistor is een basis blok binnen de geïntegreerde circuits. Je zult de kans hebben om in dit hoofdstuk een experiment met een transistor te doen. Andere bekende componenten in de silicone chips zijn diodes, weerstanden en condensators. Neem even de tijd om na te denken over de activiteiten die je in dit boek al geprobeerd zijn. De lijst bevat het schakelen met LEDs, inlezen van druktoetsen, het aansturen van servomotoren, inlezen van potentiometers, meten van licht, sturen van displays en het maken van geluid. Dit is nog maar het begin, maar al indrukwekkend, in het bijzonder als je in rekening houdt dat alle activiteiten kunnen gecombineerd worden om complexere zaken samen te stellen. Het hart van het systeem dat al deze zaken mogelijk maakt zijn de drie geïntegreerde circuits zoals getoond in Figuur 9-1 en enkele andere delen. Het toont juist hoe krachtig ze zijn als ze samen werken.
UITBREIDING VAN HET PROJECT MET RANDAPARATUUR KRINGEN Er zijn duizenden ontwerpen van geïntegreerde circuits die met microcontrollers werken. Soms maken verschillende constructeurs verschillende circuits die toch hetzelfde functioneren. Soms verschillen de chip eigenschappen zee weinig and soms zijn de chips identiek, maar de ene kan iets minder kosten dan de andere. Elkeen van de duizenden verschillende geïntegreerde circuits kunnen gebruikt worden als een bouwsteen voor een ontwerp. Bedrijven publiceren informatie over de werking van elk geïntegreerd circuit en publiceren datasheets.Ze publiceren ook hoe de geïntegreerde circuit gebruikt kunnen worden voor polyvalente toepassingen. De producers maken deze informatie vrij toegankelijk, in de hoop dat ontwikkelingsingenieurs hun componenten gebruiken in de laatste applicaties. Indien er duizende van het product verkocht wordt, betekend dit natuurlijk dat er duizende chips bij hen gekocht worden. In dit hoofdstuk, zal je experimenteren met een transistor in een speciale toepassing met een digitale potentiometer. Zoals reeds vroeger ter sprake is gekomen, is de transistor de basis van elk blok van geïntegreerde circuits voor zeer vele toepassingen. De digitale potentiometer wordt ook voor verschillende toepassingen gebruikt. Ontou dat voor elke activiteit je gedaan hebt, er waarschijnlijk honderd variaties zijn.
Hoofdstuk #9: Elektronische Bouw Blo · Pagina 261
ACTIVITEIT #1: STROOMSTURING MET EEN TRANSISTOR In deze Activiteit zal je een transistor gebruiken om de stroom door een LED te regelen en te sturen. Je kan de LED gebruiken om de stroom te volgen, indien de LED helderder is , passeert er meer stroom. Een meer gedimde LED wijst op minder stroom. Introductie van de Transistor
Figuur 9-2 toont het schematisch symbool en stuktekening van de 2N3904 transistor. Er zijn zeer veelverschillende types transistors. Deze noemt men een NPN, wat verwijst naar het type material dat de fabricant heeft gebruikt voor de opbouw. De beste manier om een transistor voor te stellen is aan de hand van een klep die een vloeistofdoorgang regelt. Verschillende transistors kunnen verschillende hoeveelheden stroom sturen. Deze transistor stuurt de stroom door C (collector) en stuurt deze dan naar E (emitter). Het gebruikt de hoeveelheid stroom die toegestaan is door het de B (base). Een kleine stroom op B, veroorzaakt een stroom (die 416 maal groter is dan die in punt B) die van C naar E vloeit. C C B E
Figuur 9-2 2N3904 Transistor
B 2N3904
E
The 2N3904 Part Datasheet: Een semiconductor fabricant publiceert deze datasheet documenten voor alle transisitoren die ze maken. Deze datasheets bevatten informatie die ingenieurs kunnen gebruiken bij het ontwerp van hun product. Indien je een voorbeeld van de datasheet van de 2N3904 transistor wil zien: Ga naar www.fairchildsemi.com. Geef 2N3904 in op het zoek veld en klik zoek. Een van de gevonden resultaten zal de 2N3904 Produkt datafolder zijn. Volg de link naar die folder en download deze sheet. De meeste web browsers kunnen ook de datasheet openen door middel van de plugin dieAdobe Acrobat Reader gebruikt.
Transistor Example Parts
(1) Transistor – 2N3904 (2) Weerstanden – 100 kΩ (bruin-zwart-geel) (1) LED – gelijk welke kleur (1) Potentiometer – 10 kΩ (3) Jumper draden
Pagina 262 · Wat is een Microcontroller?
Bouwen en Testen van het Transistor Circuit
Figuur 9-3 toont een circuit dat je kan gebruiken om manueel te controleren hoeveel stroom door de transistor wordt doorgelaten naar de LED. Door het draaien aan de knop van de potentiometer, zal het circuit verschillende hoeveelheden voeding en stroom geven aan de Basis (B) van de transistor. Dit zal de hoeveelheid stroom die toegelaten is door de transistor te passeren, van collector naar emitter, vergroten . De LED zal je een duidelijke weergave geven van de veranderingen door meer of minder op te lichten. √ √
Bouw het circuit zoals in Figuur 9-3. Draai aan de knop van de potentiometer en controleer dat de LED meer oof minder oplicht naar gelang de positie van de potentiometer.
√
Vdd
Vdd
Vdd
LED
100 kΩ
POT 10 kΩ
100 kΩ
Vss
Vss
Vin
Vss
X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Figuur 9-3 Manuele Potentiometer Sturing Transistor Circuit
Uw beurt – Aan/Uit schakelen van de Transistor
Indien je enkel een transistor aan of af wil zetten, kan je het circuit gebruiken zoals in Figuur 9-4. Indien een BASIC Stamp een hoog signaal zendt naar dit circuit, zal de transistor zoveel stroom doorlaten als dat er maximum is ingesteld door de potentiometer en zal de LED het felst oplichten. Indien de BASIC Stamp een lag signaal zendt, zal de transistor stoppen met stroom door te laten en de LED zal niet oplichten.
Hoofdstuk #9: Elektronische Bouw Blo · Pagina 263
Wat is het verschil tussen dit en de LED verbinden met een I/O pin? BASIC Stamp I/O pins hebben limieten naar de hoeveelheid stroom toe die ze kunnen leveren. Transistors hebben ook beperkingen, maar die liggen veel hoger. In de Industrial Control Student Guide, wordt een transistor gebruikt om een kleine DC motor aan te drijven. De transistor wordt ook gebruikt om grote stromen te leveren aan een kleine weerstand, die als verwarlingselement wordt gebruikt. Een van deze twee applicaties zou zoveel stroom trekken dat de BASIC Stamp snel beschadigd zou zijn, maar met een transistor is er geen enkel probleem.
√ √
√
Bouw het circuit zoals in Figuur 9-4. Schrijf een programma date en hoog en laag signaal naar P8 elke twee seconden stuurt. HINT: LedOnOff.bs2 van #2 dient enkel aangepast te worden om een hoog/laag signaal te sturen naar P8 ipv. P3. Onthou dat je dit programma onder een andere naam opslaat. Start het programma en ga na dat de LED aan en uit gaat.
Vdd
Vdd
LED
P8
100 kΩ 100 kΩ
Vss
Vin
Vss
X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Figuur 9-4 Circuit dat een BASIC Stamp Transistor Aan/Uit sturing geeft
ACTIVITEIT #2: INTRODUCTIE VAN DE DIGITALE POTENTIOMETER In deze ativiteit, zal je de manuele potentiometer aanpassen met een geintegreerde circuit potentiometer die digitaal wordt aangepast. Je zal dan de BASIC Stamp programmeren om het digitale potentiometer signaal aan te passen, die san de LED lichtsterkte zal sturen, zoals in de vorige activiteit.
Pagina 264 · Wat is een Microcontroller?
Introductie van de Digitale Potentiometer
Figuur 9-5 toont een pin map van de digitale potentiometer die je zal gebruiken in deze Activiteit. Deze chip heeft 8 pins, vier aan elke kant die van elkaar gesscheiden zijn om ze makkelijk in het bord te pluggen(1/10 inch van elkaar). De fabrikanten plaatsten een referentie punt op de plastiek opdat je makkelijk het verschil kan zien tussen pin 1 en pin 5. Dit referentiepunt is een smalle halve cirkel in de verpakking van de chip. Je kan dit punt gebruiken als referentie van de pin nummers op de chip. De pin nummers op de chip tellen op in tegenwijzerzin vanaf het referentiepunt. Andere Onderdelen: Soms kan Parallax niet anders dan andere onderdelen in de kid steken. De component zal dezelfde functies hebben, maar een ander label. Indien de digitale potentiometer die meegegeven is in de “What’s a Microcontroller Parts Kit” niet het labelAD5220 heeft, maak je geen zorgen, er is een zelfde functionalitiet gegarandeerd.
Referentie Punt
1 CLK
Vdd 8
2 U/D
CS 7
3 A1
B1 6
4 GND
W1 5
AD5220
Figuur 9-5 AD5220 Pin Map Gebruik het referentie punt om er zeker van te zijn dat de AD5220 juist is gepplaatst op het circuit in het bord.
Hier is een samenvatting van de AD5220’s pins en de functies ervan: 1. CLK – De pin die de clock pulsen ontvangt (laag-hoog-laag signaal) om de wiper terminal te verplaatsen. 2. U/D – De pin die een hoog signaal ontvangt om de wiper (W1) terminal naar A1 te verplaatsen, en een laag signaal om deze naar B1 te verplaatsen. De pin zet enkel de directie, de wiper terminal beweegt eigenlijk niet totdat een puls (laaghoog-laag signaal) verzonden is door de CLK pin. 3. A1 – De potentiometer A terminal. 4. GND – De grond connectie. De grond op het Board of Education en de BASIC Stamp HomeWork Board is de Vss terminal. 5. W1 – De potentiometer wiper (W) terminal.
Hoofdstuk #9: Elektronische Bouw Blo · Pagina 265
6. B1 – De potentiometer B terminal. 7. CS – De chip selectie pin. Een hoog signaal op deze pin zal ervoor zorgen dat de chip alle sturingssignalen negeert naar de CLK en U/D. Een laag signaal zal deze blokkage opgeven en de sturingssignalen zullen worden doorgegeven. 8. Vdd – Connectie voor de +5 V, wat de Vdd is op het Board of Education en het BASIC Stamp HomeWork Bord. De AD5220 Stuk Datasheet: Om de datasheet van de AD5220 te zien: ga naar www.analog.com. Geef AD5220 in op het Zoek veld en klik zoek. Klik op de Data Sheet link AD5220: “Increment/Decrement Digital Potentiometer Datasheet”.
Digitale Pot gestuurde Transistor Onderdelen
(1) Transistor – 2N3904 (2) Weerstand – 100 kΩ (bruin-zwart-geel) (1) LED – gelijk welke kleur (1) Digitale potentiometer – AD5220 Bouwen van het Digitale Potentiometer Circuit
Figuur 9-6 toont een schematisch circuit met een digitale potentiometer die gebruikt wordt in plaats van een manuele potentiometer, en Figuur 9-7 toont het dradendiagram voor het circuit. De BASIC Stamp kan de digitale potentiometer sturen met de signalen van P5 en P6. √
Bouw het circuit zoals in Figuur 9-6 en Figuur 9-7.
Vdd
Vdd Vdd
AD5220 P6
1
CLK
Vdd 8
P5
2
U/D
CS 7
3
A1
B1 6
4
GND
W1 5
Figuur 9-6 Digitale Potentiometer gestuurde Transistor Circuit Schema
100 kΩ 100 kΩ
Vss
Vss
Pagina 266 · Wat is een Microcontroller?
Vdd
Vin
Vss
X3
Figuur 9-7 Digitale Potentiometer gestuurde Transistor draad Diagram AD5220
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Programmeren van de Digitale Potentiometer Sturing
Bedenk dat de knop van de manuele potentiometer van de vorige oefening 128 posities heeft. Bedenk dat de potentiometer in het midden staat, dit betekent dat de knop op positie 63 staat en in de andere richting dus nog 64 stappen heeft. Laten we ervan uit gaan dat de potentiometer knop een stap wijzerszin wordt gedraaid. De LED zal enkel iets meer licht geven. Dit effect zal hetzelfde zijn als er een signaal komt van de AD5220’s U/D pin die een puls zendt naar de CLK pin. HIGH 5 PULSOUT 6, 1
Laten we ervan uit gaan dat de potentiometer knop drie stappen tegenwijzerszin wordt gedraaid. De LED zal enkel iets meer dimmen geven. Dit effect zal hetzelfde zijn als er een signaal komt van de AD5220’s U/D pin die drie pulsen zendt naar de CLK pin. LOW 5 FOR counter = 1 TO 3 PULSOUT 6, 1 PAUSE 1 NEXT
Hoofdstuk #9: Elektronische Bouw Blo · Pagina 267
Laten we ervan uit gaan dat de potentiometer knop volledig in wijzerszin wordt gedraaid. De LED zal volledig helder zijn. Dit effect zal hetzelfde zijn als er een signaal komt van de AD5220’s U/D pin die 65 pulsen zendt naar de CLK pin. HIGH 5 FOR counter = 1 TO 65 PULSOUT 6, 1 PAUSE 1 NEXT
Laten we ervan uit gaan dat volgende stap, de potentiometer knop volledig in tegenwijzerszin wordt gedraaid. De LED zal volledig dimmen. Dit effect zal hetzelfde zijn als er een signaal komt van de AD5220’s U/D pin die 128 pulsen zendt naar de CLK pin. LOW 5 FOR counter = 0 TO 127 PULSOUT 6, 1 PAUSE 1 NEXT
Voorbeeld Programma: DigitalPotUpDown.bs2
Dit voorbeeld programma past de potentiometer naar boven en beneden aan, zodatde LED geleidelijk feller wordt. Hetzelfde wordt bekomen tijdens het dimmen. √
Geef in en start DigitalPotUpDown.bs2.
' What's a Microcontroller - DigitalPotUpDown.bs2 ' Sweep digital pot through values. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Program Running!" counter
VAR
Byte
DO LOW 5 FOR counter = 0 TO 127 PULSOUT 6, 1 PAUSE 10 NEXT
Pagina 268 · Wat is een Microcontroller?
HIGH 5 FOR counter = 0 TO 127 PULSOUT 6, 1 PAUSE 10 NEXT LOOP
Uw beurt – Veranderen van de hoeveelheid Code
Je kan de snelheid van afnemen en ophelderen van de LED instellen door het PAUSE commando Duration argument aan te passen. √ √
Pas aan en herstart het programma met een PAUSE 20 commando, merk het verschil op. Herhaal dit met PAUSE 5.
Je kan ook het commando TOGGLE gebruiken om het programma makkelijker te maken. TOGGLE verandert de status van de BASIC Stamp I/O pin. Indien de I/O pin een hoog signaal stuurde, maakt TOGGLE ere en laag van. Indien de I/O pin een laag signaal stuurt, stuurt TOGGLE een hoog signaal. √ √ √ √
Sla DigitalPotUpDown.bs2 en DigitalPotUpDownWithToggle.bs2 op. Pas het programma aan zoals hieronder staat. Start het programma en pas de functies aan zoals in DigitalPotUpDown.bs2. Vergelijk het aantal lijnen code. Teweinig gehuegen voor een programma is wat veel mensen tegenkomen met hun BASIC Stamp projecten die moeilijker en groter en groter worden. Het gebruik van TOGGLE in plaats van de twee FOR…NEXT lussen is een vorbeeld hoe verschillende technieken gebruikt kunnen worden om hetzelfde te doen met minder code.
' What's a Microcontroller - DigitalPotUpDownWithToggle.bs2 ' Sweep digital pot through values. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Program Running!" counter
VAR
Byte
Hoofdstuk #9: Elektronische Bouw Blo · Pagina 269
LOW 5 DO FOR counter = 0 TO 127 PULSOUT 6,5 PAUSE 10 NEXT TOGGLE 5 LOOP
Een kijkje binnenin de Digitale Potentiometer
Figuur 9-8 toont een diagram van een potentiometer binnenin de AD5220. De AD5220 heeft 128 weerstandselements, van elk 78.125 Ω (nominale waarde). Alle 128 tesamen geeft 10,000 Ω of 10 kΩ. Een nominale waarde is een naam voor een variabele waarde. Onderdelen zoals weerstanden en condensators hebben typisch een nominale waarde en een telerantie. Elke AD5220 weerstand elementen hebben een warden van 78.125 Ω, met een afwijking die toegelaten is, van 30% (23.438 Ω) onder of boven de nominale waarde.
Tussen elk weerstandselement is er een switch, een tap genoemd. Elke switch is eigenlijk een groep van transistoren die aan of af worden gezet, om stroom door te latne of af te snijden. Er kan telekens maar een switch per tijdseenheid gesloten worden. Indien een van de bovenste switches worden gesloten (zoals pos. 125, 126 of 127), is het alsof er aan de knop, van de manuele potentiometer, geheel met- of tegenwijzerszin wordt gedraaid 3 A1 Ad5220
78 Ω pos. 127
1 CLK 2 U/D 5 7 CS
78 Ω
pos. 126
W1 40 Ω
78 Ω
pos. 125 …
… 78 Ω
pos. 1 78 Ω B1
pos. 0 6
Figuur 9-8 Binnenste van een AD5220
Pagina 270 · Wat is een Microcontroller?
Bedenk dat ook Pos. 126 gelsoten is. Indien je de tap op 125 wil plaatsen, (open pos. 126 en sluit pos. 125), set U/D low, en zorg dan voor een puls naar CLK. Indien je de tap op hoog wil, dan hebben we Pos 127, set U/D high, Indien je de downtime kleiner dan 1, set U/D low, en geef 126 pulses. Het volgende voorbeeldprogramma gebruikt de Debug Terminal om jet e vragen welke tap instellingen je wil. Dan wordt er beslist indien de U/D pin hoog of laag is en het juiste aantal pulsen voor de beweging van de tap naar de nieuwe waarden wordt dan uitgevoerd. Met de uitzondering van de EEPROM Data, heeft het volgende voorbeeld programma alle secties die je normaal in een applicatieprogramma kan vinden: • • • • • • • •
Titel – commentaar die de bestandsnaam van het programma, de beschrijving, werking van het programma. EEPROM Data – The DATA declaraties I/O Definities – constante declaratives die de I/O pin nummers zijn. Constanten – constant declaraties. Variabelen – variabele declaraties. Initialisatie – een routine die het programma laat starten vanaf het juiste punt. In het volgende programma, dient de potentiometer tap op nul gebracht te worden. Hoofdroutine – die de primaire taken van het programma uitvoert. Subroutines – segmenten van code die een specifieke taak uitvoeren voor zichzelf , of voor de hoofdroutine, wat nu het geval is.
Voorbeeld Programma: TerminalControlledDigtialPot.bs2
Je kan in dit voorbeeld programma met behulp van de Debug Terminal, de digitale pot tap instellen. Door het veranderen van de tap instellingen op de the digital pot, verander je de helderheid van de LED die verbonden is met een transistor die wordt gestuurd door de digitale pot. Figuur 9-9 toont een voorbeeld van het ingeven van de waarde 120 op de Debug Terminal Zend Venster (Transmit Windowpane) terwijl het programma aan het lopen is. Aangezien de oude tap instelling 65 was, wordt de LED ongeveer tweemaal zo helder door de pot naar 120 aan te passen.
Hoofdstuk #9: Elektronische Bouw Blo · Pagina 271
Figuur 9-9 Zenden van berichten naar de BASIC Stamp
Vensters Zenden →
Klik het bovenste venster en geef nummers in.
Ontvangen →
√ √
Geef in en draai TerminalControlledDigtialPot.bs2. Geef waarden Enter in tussen 0 en 127 op de Debug Terminal. Druk zeker op de enter na het ingeven van een waarde.
' -----[ Title ]----------------------------------------------------------' What's a Microcontroller - TerminalControlledDigitalPot.bs2 ' Update digital pot's tap based on Debug Terminal user input. ' {$STAMP BS2} ' {$PBASIC 2.5} ' -----[ EEPROM Data ]-----------------------------------------------------
' -----[ I/O Definitions ]------------------------------------------------UdPin ClkPin
CON CON
5 6
' Set values of I/O pins ' connected to CLK and U/D.
' -----[ Constants ]------------------------------------------------------DelayPulses DelayReader
CON CON
10 2000
' Delay to observe LED fade.
' -----[ Variables ]------------------------------------------------------counter oldTapSetting newTapSetting
VAR VAR VAR
Byte Byte Byte
' Counter for FOR...NEXT. ' Previous tap setting. ' New tap setting.
' -----[ Initialization ]-------------------------------------------------oldTapSetting = 0 newTapSetting = 0
' Initialize new and old ' tap settings to zero.
Pagina 272 · Wat is een Microcontroller?
LOW UdPin FOR counter = 0 TO 127 PULSOUT 6,5 PAUSE 1 NEXT
' Set U/D pin for Down. ' Set tap to lowest position.
' -----[ Main Routine ]---------------------------------------------------DO GOSUB Get_New_Tap_Setting GOSUB Set_Ud_Pin GOSUB Pulse_Clk_pin
' User display and get input. ' Set U/D pin for up/down. ' Deliver pulses.
LOOP ' -----[ Subroutines ]----------------------------------------------------Get_New_Tap_Setting:
' Display instructions and ' get user input for new ' tap setting value.
DEBUG CLS, "Tap setting is: ", DEC newTapSetting, CR, CR DEBUG "Enter new tap", CR, "setting (0 TO 127): " DEBUGIN DEC newTapSetting RETURN Set_Ud_Pin: IF newTapSetting > oldTapSetting THEN HIGH UdPin oldTapSetting = oldTapSetting + 1 ELSEIF newTapSetting < oldTapSetting THEN LOW UdPin oldTapSetting = oldTapSetting - 1 ELSE DEBUG CR, "New and old settings", CR, "are the same, try ", CR, "again...", CR PAUSE DelayReader ENDIF
' ' ' ' '
Examine new and old tap values to decide value of U/D pin. Notify user if values are equal. Increment for Pulse_Clk_pin.
' Decrement for Pulse_Clk_pin.
' Give reader time to view ' Message.
RETURN Pulse_Clk_pin: ' Deliver pulses from old to new values. Keep in mind that Set_Ud_Pin ' adjusted the value of oldTapSetting toward newTapSetting by one. ' This keeps the FOR...NEXT loop from executing one too many times.
Hoofdstuk #9: Elektronische Bouw Blo · Pagina 273
FOR counter = oldTapSetting TO newTapSetting PULSOUT ClkPin, 1 PAUSE DelayPulses NEXT oldTapSetting = newTapSetting
' Keep track of new and old ' tapSetting values.
RETURN
SAMENVATTING Dit hoofdstuk introduceerde de geintegreerde circuits en hun werking tesamen met BASIC Stamp. Een transistor werd gebruikt als stroomregelaar en op die manier kon een digitale potentiometer gestuurd worden om de hoeveelheid stroom door de transistir te sturen. Met de digitale potentiometer warden de begrippen zoals referentie en pin map uitgelegd, als belangrijke elementen van de electronische chips. De functie van elke digitale potentiometer pin warden besproken, evenals de inwendige opbouw. Het PBASIC commando TOGGLE werd geintroduceerd als een middel om programmageheugen te sparen. Vragen
1. Wat zijn de namen van de terminals op de transistor die je hebt gebruikt in dit hoofdstuk? 2. Welke terminal stuurt de stroom die door de transistor loopt? 3. Wat kan je doen om de stroom te laten toe of afnemen die door de transistor loopt? Oefeningen
1. Schrijf een programma dat de tap van de digitale pot naar positie 0 stuurt ongeacht z’n huidige positie. Project
1. Voeg een fotoweerstand aan het project toe en laat de helderheid van de LED aangepast worden door de fotoweerstand. Oplossingen
Q1. Emitter, basis en collector. Q2. De basis bestuurt de stroom die door de transistor vloeit. Q3. Toenemen of afnemen van de stroom van stuurstroom door de basis.
Pagina 274 · Wat is een Microcontroller?
E1. Om deze oefening op te lossen, bekijk TerminalControlledDigitalPot.bs2. Het eerste wat wordt uitgevoerd, de initialisatie, is om de tap op de laagste positie te plaatsen. De exacte code is in onderstaande oplossing gebruikt: ' What's a Microcontroller - Ch9Ex01_SetTapToZero.bs2 ' Turn tap on digital pot all the way down to zero ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Program Running!"
UdPin ClkPin counter
CON CON VAR
5 6 Byte
' Set values of I/O pins ' connected to CLK and U/D. ' Counter for FOR...NEXT.
LOW UdPin FOR counter = 0 TO 128 PULSOUT ClkPin,5 PAUSE 1 NEXT
' Set U/D pin for Down. ' Set tap to lowest position.
P1. Gebruikt het digitale potentiometer circuit van Figuur 9-6, p. 265 en het photoresistor circuit van Figuur 7-2, p. 189. Vdd
Vdd Vdd AD5220 CLK
P6 P5
U/D 2
CS 7
A1
B1 6
4 GND
W1 5
3
0.01 µF 100 kΩ 100 kΩ
Vss
P2 220 Ω
Vdd 8
1
Vss Vss
Deze oplossing is gebaseerd op TerminalControlledDigitalPot.bs2, uitgezonderd in paats van bestuurd te worden door gegevens in de Debug Terminal te typen, wordt dit nu door de photoresistor overgenomen. Een subroutine, Read_Photoresistor, leest de photoresistor waarde in door gebruik te maken van RCTIME zoals in Hoofdstuk 5. Het inlezen van de waarde van de photoresistor wordt de nieuwe tap instelling en het originele programma wordt nu met de tap uitgevoerd. De onderdelen van het programma die vroegen naar het ingeven dan karakters op de Debug Terminal zijn verwijderd, evenals de Get_New_Tap_Setting subroutine.
Hoofdstuk #9: Elektronische Bouw Blo · Pagina 275
' What's a Microcontroller - Ch9Prj01_PhotoControlledDigitalPot.bs2 ' Update digital pot's tap based on photoresistor reading ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Program Running!" ' -----[ Declarations and Initialization]-----------------------------UdPin CON 5 ' Set values of I/O pins ClkPin CON 6 ' connected to CLK and U/D. PhotoPin CON 2 ' Photoresistor on pin P2 DelayPulses CON 10 ' Delay to observe LED fade. DelayReader CON 2000 counter oldTapSetting newTapSetting lightReading
VAR VAR VAR VAR
Byte Byte Byte Word
' ' ' '
Counter for FOR...NEXT. Previous tap setting. New tap setting. reading from photoresistor
oldTapSetting = 0 newTapSetting = 0
' Initialize new and old ' tap settings to zero.
LOW UdPin FOR counter = 0 TO 128 PULSOUT 6,5 PAUSE 1 NEXT
' Set U/D pin for Down. ' Set tap to lowest position.
' -----[ Main Routine ]-----------------------------------------------DO GOSUB Read_Photoresistor newTapSetting = lightReading GOSUB Set_Ud_Pin ' Set U/D pin for up/down. GOSUB Pulse_Clk_pin ' Deliver pulses. LOOP ' -----[ Subroutines ]------------------------------------------------Set_Ud_Pin: ' Examine old and new IF newTapSetting > oldTapSetting THEN ' tap values to decide ELSEIF newTapSetting < oldTapSetting THEN ' value of UdPin. Notify LOW UdPin ' user if values are ENDIF ' equal. RETURN Pulse_Clk_pin: ' Deliver pulses FOR counter = oldTapSetting TO newTapSetting ' from old to new PULSOUT ClkPin, 1 ' values. PAUSE DelayPulses NEXT oldTapSetting = newTapSetting ' Keep track of new and old RETURN ' tapSetting values.
Pagina 276 · Wat is een Microcontroller?
Read_Photoresistor: HIGH PhotoPin PAUSE 100 RCTIME PhotoPin, 1, lightReading RETURN
Verder onderzoek
“Industrial Control”, Student Guide, Version 2.0, Parallax Inc., 2002 Industrial Control gebruikt de transistor als een aan/uit schakelaar voor een warmte element. Het gebruikt ook een phototransistor om streepjes op een draaiend wiel te detecteren.
Hoofdstuk #10: Draaien van de gehele Show · Pagina 277
Hoofdstuk #10: Draaien van de gehele Show SUBSYSTEEM INTEGRATIE De meeste activiteiten in deze tekst hebben het over hoe de BASIC Stamp dient ge Programmeerd te worden voot een of twee circuits tegelijkertijd. Vele microcontrollers dienen tien tot enkele honderden circuits tegelijkertijd uit te voeren. Dit hoofdstuk zal enkele technieken tonen om deze verschillende circuits in goede banen te leiden met slechts één microcontroller. Programmeren van deze microcontroller die tegelijkertijd deze verscheidene taken dient te doen noemt men subsysteem integraties. Het voorbeeld in dit hoofdstuk gebrukt een sensor array bestaande io twee drukknop circuits, een potentiometer circuit en een photoresistor circuit. De activiteiten in dit hoofdstuk zullen je elk subsysteem individueel laten opbouwen en testen. Daarna wordt er een programma geschreven dat de subsystemen met elkaar zal combineren tot een geheel op zich werkende unit. Figuur 10-1 toont het circuit schema en alle onderdelen worden hieronder opgesomd. Onthou, test elk subsysteem individueel voordat je alles samenvoegd. Als je deze regel volgt, zal het project veel rustiger verlopen en zijn de kansen op slagen veel groter. De activiteiten in dit hoofdstuk zullen je door dit proces heen brengen. Sensor Array Onderdelen Lijst
(4) Weerstand – 220 Ω (rood-rood-bruin) (2) Weerstand – 10 kΩ (bruin-zwart-orange) (2) Drukknop – normaal open (2) Condensator – 0.1 µF (1) Potentiometer – 10 kΩ (1) Photoresistor (5) Jumper draden
Pagina 278 · Wat is een Microcontroller?
P9 220 Ω 0.1 µF
Vss
P7
nc X
220 Ω
Pot 10 kΩ
0.1 µF
Figuur 10-1 Sensor Array Systeem Schema
Vss
Vdd
Vdd
P4 220 Ω P3 220 Ω 10 kΩ
Vss
10 kΩ
Vss
ACTIVITEIT #1: BOUWEN EN TESTEN VAN HET DRUKTOETS CIRCUIT Deze Activiteit begint met het bouwen en testen van het enkelvoudig druktoets circuit. Vanaf dat het eerste circuit juist werkt, kan je het tweede drukknopcicruit op dezelfde manier afwerken.
Hoofdstuk #10: Draaien van de gehele Show · Pagina 279
Druktoets Circuit Onderdelen
(2) Drukknoppen – normaal open (2) Weerstand – 10 kΩ (bruin-zwart-orange) (2) Weerstand – 220 Ω (rood-rood-bruin) (2) Jumper draden Bouwen van het eerste druktoets Circuit
Bouw het drukknop circuit zoals in Figuur 10-2. Figuur 10-2 Eerste drukknop Circuit
Vdd
Vdd
P3 220 Ω 10 kΩ
Vss
Vin
Vss
X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Testen van het eerste Druktoets Circuit
Een programma schruiven om dit circuit uit te testen is vrij simple, aangezien dit al eerder is gedaan in deze tekst. Voorbeeld Programma: ReadPushbuttonState.bs2
Dit is een herhaling van het programma voor het testen van het drukknop cicuit uit Hoofdstuk #3: √ √ √
Geef in en start ReadPushbuttonState.bs2. Ga na dat de BASIC Stamp de drukknop inleest. Verbeter elk mogelijk probleem voordat je verder gaat met het maken van het volgende circuit.
Pagina 280 · Wat is een Microcontroller?
' What's a Microcontroller - ReadPushbuttonState.bs2 ' Check and send pushbutton state to Debug Terminal every 1/4 second. ' {$STAMP BS2} ' {$PBASIC 2.5} DO DEBUG ? IN3 PAUSE 250 LOOP
Uw beurt – Bouwen en Testen van een tweede druktoets Circuit
Eens het eerste drukknop circuit gebouwd en getest is, kan het process herhaalt worden voor het tweede drukknopcicruit. √ √ √
Voeg het drukknop circuit toe zoals in Figuur 10-3. Test het tweede drukknop circuit door het ReadPushbuttonState.bs2 aan te passen zodat ere en verbinding is met P4. Start het programma en ga na dat de tweede knop werkt. Verbeter elk probleem voor verder te gaan met de volgende Activiteit.
Figuur 10-3 Toevoegen van een tweede drukknop Circuit aan het project Vdd
Vdd P4 220 Ω
10 kΩ
Vss
X3 P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Vin
Vss
Hoofdstuk #10: Draaien van de gehele Show · Pagina 281
ACTIVITEIT #2: BOUWEN EN TESTEN VAN EEN RC-TIJDSCIRCUIT Nu dat de twee drukknopcircuits gebouwd en getest zijn, kan het RC-tijds circuit gebouwd worden. Extra Onderdelen voor het Potentiometer en Fotoweerstand Circuit
(2) Weerstand – 220 Ω (rood-rood-bruin) (2) Condensator – 0.1 µF (4) Jumper draden (1) Photoresistor (1) Potentiometer – 10 kΩ Bouwen van het Potentiometer Circuit
√
Voeg het potentiometer circuit toe zoals in Figuur 10-4.
Figuur 10-4 Toevoegen van het Potentiometer Circuit Vdd
Vin
Vss
X3
220 Ω
nc X
P7
Pot 10 kΩ
0.1 µF
Vss
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Testen van het Potentiometer Circuit
Je kan dit circuit teste aan de hand van ReadPotWithRcTime.bs2. Dit programma werd voor het eerste gebruikt in hoofdstuk 5. Voorbeeld Programma: ReadPotWithRcTime.bs2
√ √
Geef in en start ReadPotWithRcTime.bs2. Ga na dat de BASIC Stamp de juiste warden opmeet van de potentiometer.
Pagina 282 · Wat is een Microcontroller?
√
Verbeter elk probleem voor verder te gaan met de volgende Activiteit.
' What's a Microcontroller - ReadPotWithRcTime.bs2 ' Read potentiometer in RC-time circuit using RCTIME command. ' {$STAMP BS2} ' {$PBASIC 2.5} time
VAR
Word
DO HIGH 7 PAUSE 100 RCTIME 7, 1, time DEBUG HOME, " time =
", DEC5 time
LOOP
Uw beurt – Bouwen en Testen van een Fotoweerstand Circuit
Eens het eerste RC-tijdscircuit gebouwd en getest is, kan het process herhaald worde, voor het tweede RC-tijdscircuit. √ √ √
Voeg het photoresistor circuit toe zoals Figuur 10-5. Pas ReadPotWithRcTime.bs2 aan zodat de photoresistor op P9 komt. Verbeter elk probleem voor verder te gaan met de volgende Activiteit.
Figuur 10-5 Toevoegen van het Photoresistor Circuit Vdd X3
P9 220 Ω 0.1 µF
Vss
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Vin
Vss
Hoofdstuk #10: Draaien van de gehele Show · Pagina 283
ACTIVITEIT #3: SUBSYSTEEM INTEGRATIE VOORBEELD Nu dat alle elementen van het circuit gebouwd en getest zijn, kan je nu een programma schrijven dat gebruik maakt van alle vier de sensoren. Dit voorbeeld zal u demonstreren hoe het programma gebruik maakt van de BASIC Stamp om het menu op de display weer te geven. Programmeren van een Menu Systeem en gebruiken van I/O PIN Aanwijzingen
Het ON…GOSUB commando kan gemakkelijk zijn voor menus. ON offset , GOSUB Target1, {Target2, Target3,…}
In het volgende programma, gebruikt het ON...GOSUB commando de waarde van de variabele request om een van de vier subroutines te gebruiken. Indien de waarde 0 is, zal het programma GOSUB Read_Pushbutton_1 gebruiken. Indien de waarde van request 1 is, zal het programma de GOSUB Read_Pushbutton_2 routine uitvoeren en zo voort. ON request GOSUB Read_Pushbutton_1, Read_Pushbutton_2, Read_Pot, Read_Photoresistor
Je kan de PIN directive kan je gebruiken om aan elke I/O pin een naam te geven die je kan gebruiken in het PBASIC program. De BASIC Stamp Editor zal dan uitvissen indien je de I/O pin gebruikt als input of output (of beide). De PIN directive’s syntax is: PinName PIN PinNumber
Het volgende programma toont hoe je PinName kan gebruiken en declareren. Als voorbeeld, de BASIC Stamp Editor neemt aan dat je de input waarden wil weergeven van een I/O pin (IN3), indien je de Pb1Pin PinName gebruikt in het DEBUG commando. Het DEBUG commando zal dan een 1 of 0 weergeven naargelang de drukknop P3 is ingedrukt of niet. Waarom? Omdat de BASIC Stamp Editor weet dat IN3 aan Pb1Pin hangt. Pb1Pin PIN DEBUG CLS, ? Pb1Pin
3
Hier heb je een ander voorbeeld waar de BASIC Stamp Editor weet dat de waarde 9 dient gebruikt te worden voor de PinName samen met het RCTIME commando. PhotoPin PIN 9 HIGH PhotoPin RCTIME PhotoPin, 1, time
Pagina 284 · Wat is een Microcontroller?
Voorbeeld Programma: TerminalOperatedSensorArray.bs2
Figuur 10-6 toont de Debug Terminal met TerminalOperatedSensorArray.bs2. Het hoofdmenu is getoond op de linker kant en toont rechts wat er komt indien je ‘4’ selecteert. Onthou dat je het bovenste menu dient te gebruiken om de menu selectie naar de BASIC Stamp te sturen. √ √ √
Geef in en draai TerminalOperatedSensorArray.bs2. Klik de Debug Terminal bovenste venster en geef de digits in om het menu te selecteren. De meeting die wordt weergegeven is degene die gemaakt is in het menu, 1.5 seconden. Onthou dat je indien je de drukknop vasthoudt, pas de potentiometer aan en maak schaduw over de fotoweerstand.
Figuur 10-6 Gebruik de Debug Terminal om in het Menu te selecteren
' -----[ Title ]----------------------------------------------------------' What's a Microcontroller - TerminalOperatedSensorArray.bs2 ' Use Debug Terminal to choose to read one of four sensors. ' {$STAMP BS2} ' {$PBASIC 2.5} ' -----[ I/O Definitions ]------------------------------------------------Pb1Pin Pb2Pin PotPin PhotoPin
PIN PIN PIN PIN
3 4 7 9
Hoofdstuk #10: Draaien van de gehele Show · Pagina 285
' -----[ Constants ]------------------------------------------------------DelayRc DelayReader
CON CON
100 1500
' -----[ Variables ]------------------------------------------------------request time
VAR VAR
Nib Word
' -----[ Main Routine ]---------------------------------------------------DO GOSUB Display_Menu GOSUB Get_Request ON request GOSUB Read_Pushbutton_1, Read_Pushbutton_2, Read_Pot, Read_Photoresistor LOOP ' -----[ Subroutine - Display_Menu ]--------------------------------------Display_Menu: DEBUG CLS, "MENU: ", CR, CR, "1) Pushbutton 1", CR, "2) Pushbutton 2", CR, "3) Potentiometer", CR, "4) Photoresistor", CR, CR RETURN ' -----[ Subroutine - Get_Request ]---------------------------------------Get_Request: DEBUGIN DEC1 request request = request - 1 RETURN ' -----[ Subroutine - Read_Pushbutton_1 ]---------------------------------Read_Pushbutton_1: DEBUG CLS, ? Pb1Pin PAUSE DelayReader RETURN
Pagina 286 · Wat is een Microcontroller?
' -----[ Subroutine - Read_Pushbutton_2 ]---------------------------------Read_Pushbutton_2: DEBUG CLS, ? Pb2Pin PAUSE DelayReader RETURN ' -----[ Subroutine - Read_Pot ]------------------------------------------Read_Pot: HIGH PotPin PAUSE DelayRc RCTIME PotPin, 1, time DEBUG CLS, ? time, " PAUSE DelayReader
"
RETURN ' -----[ Subroutine - Read_Photoresistor ]--------------------------------Read_Photoresistor: HIGH PhotoPin PAUSE DelayRc RCTIME PhotoPin, 1, time DEBUG CLS, ? time, " " PAUSE DelayReader RETURN
Uw beurt - Subroutines
Terminals zijn niet de enige applicatie voor de ON…GOSUB. Als voorbeeld, indien je de vier verschillende subroutines na elkaar wil oproepen, hier is de manier op het te doen: DO ' GOSUB Display_Menu ' GOSUB Get_Request FOR request = 0 TO 3 ON request GOSUB Read_Pushbutton_1, Read_Pushbutton_2, Read_Pot, Read_Photoresistor NEXT LOOP
Hoofdstuk #10: Draaien van de gehele Show · Pagina 287
Merk op dat de twee subroutines aangesproken werden en het ON…GOSUB commando in de FOR…NEXT loop werd geplaatst. √ √ √
Sla je voorbeeldprogramma op onder een nieuwe TerminalOperatedSensorArrayYourTurn.bs2. Pas de algemene routine aan. Start het programma en ga na dat de meetwaarden worden genomen.
naam:
ACTIVITEIT #4: ONTWIKKELEN & TOEVOEGEN VAN SUBSYSTEMEN Laten we ervan uit gaan dat je sensor array in een toestel wordt geplaatst en dat enkel bevoegde personen het recht hebben om wijzigingen aan te brengen, en dat ze daarvoor een paswoord dienen in te geven. Dit betekent dat je het programma zal moeten uitbreiden opdat het paswoord wordt opgeslaan en gecontroleerd wordt. Het is beter om een paswoord programma schrijft dat op zichzelf werkt en dan later aan je groot programma toevoegd. Programmeren van een Paswoord Checker
Je kan een paswoord opslaan in het PBASIC programma door de DATA directive te gebruiken. Als voordbeeld: Password
DATA
"pass!"
Het zelfde: De DATA directive is hetzelfde als Paswoord DATA "p", "a", "s", "s", "!".
Je hebt enkele andere variabelen nodig om andere waarden in het programma op te slaan: index temp
VAR VAR
Nib Byte
Indien je een paswoord gebruikt dat vijf karakters lang is, is ere en speciale variable declaratie nodig (dit noemt men een array declaratie) dat je nodig hebt om vijf variabelen met dezelfde naam te kunnen gebruiken. userEntry
VAR
Byte(5)
Nu heb je vijf byte variabelen genoemd userEntry: userEntry(0), userEntry(1), userEntry(2), userEntry(3), and userEntry(4).
Pagina 288 · Wat is een Microcontroller?
Het DEBUGIN commando heeft een format dat STR wordt genoemd en dat automatisch karakters in de array laadt. Als voorbeeld kan je gebruiken: DEBUGIN STR userEntry \5
Indien je vijf karakters in het Debug Terminal’s Transmit Windowpane ingeeft, zal het eerste karakter in userEntry(0)komen, he tweede zal in userEntry(1)komen, etc. Er is een PBASIC keyword genaamd EXIT dat je kan gebruiken om een lus aft e breken. Om een paswoord te controleren, kan je een IF…THEN statement gebruiken met een EXIT commando, om de lust te laten stoppen indien alle karakters van het paswoord overeen stemmen. Indien de lus eerder eindigd, betekent dat de lus niet tot 5 heeft geteld en dat alle karakters niet overeen komen, maw. Het paswoord verkeerd is: FOR index = 0 TO 4 READ Password + index, temp IF temp <> userEntry(index) THEN EXIT NEXT IF index <> 5 THEN DEBUG CR,"Password not correct.", CR ENDIF
Het volgende voorbeeldprogramma plaatst het DEBUGIN commando, de FOR…NEXT lus en het IF…THEN statement binnenin de DO…LOOP UNTIL statement, dat blijft worden uitgevoerd totdat de index 5 aangeeft (wat aanduidt dat het juiste paswoord werd ingegeven). Voorbeeld Programma: PasswordChecker.bs2
Figuur 10-7 toont de Debug Terminal display van PasswordChecker.bs2. Dit programma wacht op je totdat je de letters “pass!” hebt ingegeven op de prompt. √ √
Geef in en start PasswordChecker.bs2. Probeer enkele letter cominaties die niet het paswoord zijn, geef dan het paswoord in: “pass!”.
Hoofdstuk #10: Draaien van de gehele Show · Pagina 289
Figuur 10-7 Ingeven van het paswoord in het Transmit Venster Klik op het Transmit (bovenste) venster en geef het paswoord in.
' What's a Microcontroller - PasswordChecker.bs2 ' Check password entered in Debug Terminal's Transmit Windowpane. ' {$STAMP BS2} ' {$PBASIC 2.5} Password
DATA
"pass!"
' Store "secret" password here.
index temp userEntry
VAR VAR VAR
Nib Byte Byte(5)
' Index variable. ' Stores single char. ' Store user entered password.
DO DEBUG "Enter password: "
' User instructions.
DEBUGIN STR userEntry \5
' Get user input password.
FOR index = 0 TO 4 READ Password + index, temp IF temp <> userEntry(index) THEN EXIT NEXT
' ' ' '
IF index <> 5 THEN DEBUG CR,"Password not correct.", CR ENDIF
' If exit, then index not equal ' to 5 and pass is not correct.
Check array against DATA Get next password char Compare to user input, exit if not equal.
LOOP UNTIL index = 5
' Only get out of loop when ' index = 5.
DEBUG CR, "Password is correct;", CR, "program can continue..." END
' Program can move on when ' password is correct.
Pagina 290 · Wat is een Microcontroller?
Uw beurt – Aanpassen van Paswoorden
√ √
Pas het Password DATA directive aan zodat er vijf andere karakters voor het paswoord worden gebruikt. Door vijf verschillende waarden aan te passen in het programma, kan je ook de aanpassing maken dat een vier karakter paswoord kan gebruikt worden.
Aanpassen Paswoord Checker voor het gebruik van een Groter Programma
Het doel is om het makkelijk te maken opdat het PasswordChecker.bs2 programma in het voorbeeldprogramma van Activiteit #3 kan gepast worden. Twee dingen zullen helpen. Vooreerst, het programma dat het paswoord controleerd dient aangepast te worden dat het in een subroutine werkt. De verschillende stukken van het programma dienen met commentaar voorzien om duidelijkheid te scheppen hoe de verschillende programma’s aan elkaar hangen. Voorbeeld Programma: ReusablePasswordChecker.bs2
ReusablePasswordChecker.bs2 werkt hetzelfde als PasswordChecker.bs2, maar gebruikt nu een subroutine en het is geherschikt met becommentarieerde secties. √ √
Controleer dat het programma nog steeds werkt zoals PasswordChecker.bs2. Ga na hoe de DO…LOOP UNTIL code blok in een subroutine werd gestoken.
' -----[ Title ]----------------------------------------------------------' What's a Microcontroller - ReusablePasswordChecker.bs2 ' Check password entered in Debug Terminal's Transmit Windowpane. ' {$STAMP BS2} ' {$PBASIC 2.5} ' -----[ DATA Directives ]------------------------------------------------Password
DATA
"pass!"
' Store "secret" password here.
' -----[ Variable Declarations ]------------------------------------------index temp userEntry
VAR VAR VAR
Nib Byte Byte(5)
' Index variable. ' Stores single char. ' Store user entered password.
' -----[ Initialization Routine ]-----------------------------------------GOSUB Check_Password
Hoofdstuk #10: Draaien van de gehele Show · Pagina 291
' -----[ Main Routine ]---------------------------------------------------' There is no main routine in this program. DEBUG CR, "All Done" END ' -----[ Subroutine – Check for Correct Password ]------------------------Check_Password: DO DEBUG "Enter password: "
' User instructions.
DEBUGIN STR userEntry \5
' Get user input password.
FOR index = 0 TO 4 READ Password + index, temp IF temp <> userEntry(index) THEN EXIT NEXT
' ' ' '
IF index <> 5 THEN DEBUG CR,"Password not correct.", CR ENDIF
' If exit, then index not equal ' to 5 and pass is not correct.
Check array against DATA Get next password char Compare to user input, exit if not equal.
LOOP UNTIL index = 5
' Only get out of loop when ' index = 5.
DEBUG CR, "Password is correct."
' Program can move on when ' password is correct.
RETURN
' Return when pass is correct.
Gevorderd Onderwerp: Uw beurt – Combineren van de twee Programmas
Nu dat beide TerminalOperatedSensorArray.bs2 en ReusablePasswordChecker.bs2 getest zijn, is het de taak om ze te combineren. Het finale programma dient eerst het paswoord te controleren voordat je kan kiezen welke sensor er wordt uitgelezen op de Debug Terminal. √ √
Je kan beide programma’s (ReusablePasswordChecker.bs2 en TerminalOperatedSensorArray.bs2) openen in de BASIC Stamp Editor. Sla TerminalOperatedSensorArray.bs2 op als PasswordedSensorTerminal.bs2
Pagina 292 · Wat is een Microcontroller?
Je zal tussen de twee programma’s dienen te springen om delen te kopieren van ReusablePasswordChecker.bs2 naar PasswordedSensorTerminal.bs2. √ √ √ √ √
Kopieer de Password DATA directive (inclusief de commentaar hoofding met de gepunte lijn) van ReusablePasswordChecker.bs2 naar PasswordedSensorTerminal.bs2 juist voor de I/O Definitions sectie. Copieer en plak de variabele declaratie van ReusablePasswordChecker.bs2 naar PasswordedSensorTerminal.bs2. Deze variabele declaratie worden toegevoegd aan die in PasswordedSensorTerminal.bs2. Copieer de Initialization sectie (inclusief de commentaar hoofding) van ReusablePasswordChecker.bs2 en plak het tussen de Variables sectie en de Main Routine in PasswordedSensorTerminal.bs2. Copieer de volledige subroutine sectie van ReusablePasswordChecker.bs2 en plak het na het ende van de laatste subroutine in PasswordedSensorTerminal.bs2. Test PasswordedSensorTerminal.bs2 en kijk of het werkt, verwijder de fouten indien nodig.
Hoofdstuk #10: Draaien van de gehele Show · Pagina 293
SAMENVATTING Dit hoofdstuk bracht technieken van individueel testen van elk circuit en sub- circuit bij. Dit dient te gebeuren voordat het kleinere deel aan een groter deel wordt gekoppeld. Dit hoofdstuk introduceert het ON…GOSUB commando, wat practisch handig is voor meni systemen.De bruikbare PIN omschrijving, is gedemonstreerd al seen manier waarop de I/O pinnen een naam kunnen krijgen opdat dan de BASIC Stamp Editor kan uitmaken om een input uit te lezen of een output te schrijven. Een paswoord programma werd gebruikt om variabele arrays, het EXIT commando en DEBUGIN command STR formaat voor te stellen. Het paswoord programma werd dan geintegreerd in een gorter sensor terminal programma, om meer functionaliteit te creëren. Vragen
1. Wanneer dien je subsystemen individueel te testen, voordat ze samenwerken? Waarom? 2. Hoeveel programma’s van voorgaande hoofdstukken heb je in dit hoofdstuk gebruikt? 3. Waarin verschilt PIN met CON en VAR ? 4. Wat is het verschil tussen EXIT en END? Oefeningen
1. Omschrijf het generale 3-stap process dat je zou gebruken om de luidspreker aan je huidig project te hangen. 2. Pas PasswordChecker.bs2 van pagina 288 aan zodat het bericht "you entered: " tevoorschijn komt op de Debug Terminal tesamen met de tekst van het paswoord. Projecten
1. Voeg een luidspreker toe aan het circuit aan de sensor array dat je in dit hoofdstuk hebt ontwikkeld, schrijf een programma en test het. 2. Pas TerminalOperatedSensorArray.bs2 aan zodat het een 5e menu item heeft dat de luidspreker laat beepen op 2 kHz voor 1.5 seconden. 3. Terwijl je aan een activiteti werkt zal je zekerenvast al een ander idée gehad hebben dat je zou willen uitwerken. Schrijf hier de naam van je eigen project: ________________ <
Pagina 294 · Wat is een Microcontroller?
Oplossingen
Q1. Wanneer mogelijk! Het is veel makkelijker om zoeken, isoleren en preventief problemen op te lossen. Q2. Twee. ReadPushbuttonState.bs2 van Hoofdstuk #3 en ReadPotWithRcTime.bs2 van hoofdstuk #5. Q3. Terwijl de CON aanduiding een naam aan een nummer geeft, geeft een VAR aanduiding de naam aan RAM, de PIN aanduiding geeft een naam aan de BASIC Stamp I/O pin. Deze naam kan gebruikt worden als de naam van de pin door geheel het programma. PBASIC zoekt uit indien je een output zend naar een hoog/laag signaal of als het een input variabele is van de I/O pin (1 of 0). Q4. END eindigd het programma, wat het programma laat stoppen. EXIT zorgt ervoor dat er enkel uit de lus wordt getreden en het programma blijft voortlopen. E1. a. Bouw het luidspreker circuit op het bord. b. Start TestPiezoWithFreqout.bs2 van hoofdstuk Chapter 8 en test de luispreker. c. Integreer de luidspreker in het programma. E2. De sleutel naar de oplossing van dit problem is het gebruikt van een STR formaat met DEBUG. De tekst introduceert het STR format met de DEBUGIN, logisch dat het STR formaat dan ook met DEBUG werkt. Dit kan gebeuren door onderstaande code toe te voegen onder het DEBUGIN statement. DEBUG CR, CR, "You entered: ", STR userEntry, CR
P1. Project 1 gebruikt het schema uit Figuur 10-1. p. 278 met een extra piezo luidspreker op P11. ' What's a Microcontroller – ' TestPiezoWithFreqout.bs2 ' Send a tone to the piezo speaker ' using the FREQOUT command. '{$STAMP BS2} '{$PBASIC 2.5} DEBUG "Tone sending...", CR FREQOUT 11, 1500, 2000 DEBUG "Tone done."
P11
Vss
P2. Project 2 gebruikt hetzelfde schema als Project 1. ' ' ' ' ' '
What's a Microcontroller - Ch10Prj02_AddSpeakerToSensorArray.bs2 Use Debug Terminal to choose to read one of five sensors. Project 2 - Add a 5th menu item that makes a piezo speaker beep for 1.5 seconds at a frequency of 2kHz. {$STAMP BS2} {$PBASIC 2.5}
Hoofdstuk #10: Draaien van de gehele Show · Pagina 295
' -----[ I/O Definitions ]--------------------------------------------Pb1Pin Pb2Pin PotPin PhotoPin SpkrPin
CON CON CON CON CON
3 4 7 9 11
' -----[ Constants ]--------------------------------------------------DelayRc DelayReader
CON CON
100 1500
' -----[ Variables ]--------------------------------------------------request time
VAR VAR
Nib Word
' -----[ Main Routine ]-----------------------------------------------DO GOSUB Display_Menu GOSUB Get_Request ON request GOSUB Read_Pushbutton_1, Read_Pushbutton_2, Read_Pot, Read_Photoresistor, Beep_Speaker LOOP ' -----[ Subroutines]-------------------------------------------------Display_Menu: DEBUG CLS, "MENU: ", CR,CR, "1) Pushbutton 1", CR, "2) Pushbutton 2", CR, "3) Potentiometer", CR, "4) Photoresistor", CR, "5) Piezo Speaker", CR, CR RETURN Get_Request: DEBUGIN DEC1 request request = request - 1 RETURN Read_Pushbutton_1: DEBUG CLS, ? IN3 PAUSE DelayReader RETURN Read_Pushbutton_2:
Pagina 296 · Wat is een Microcontroller?
DEBUG CLS, ? IN4 PAUSE DelayReader RETURN Read_Pot: HIGH 7 PAUSE DelayRc RCTIME 7, 1, time DEBUG CLS, DEC time, " PAUSE DelayReader RETURN Read_Photoresistor: HIGH 9 PAUSE DelayRc RCTIME 9, 1, time DEBUG CLS, DEC time, " PAUSE DelayReader RETURN
"
"
Beep_Speaker: DEBUG CLS, "2000 Hz beep for 1.5 seconds", CR FREQOUT SpkrPin, 1500, 2000 ' 2000 Hz beep for 1.5 s RETURN
P3. Indien je een interessante applicatie met je “What’s a Microcontroller? Kit” hebt gebouwd en je wil het aan medestudenten en onderwijzers tonen en vertellen, overweeg om je aan te sluiten bij de “Stamps In Class Yahoo Group”. Meer inforamtie is er te vinden op de Web Site, zie ook paragraaf “Discussion Lists”. Verder Onderzoek
Ga terug naar het voorwoord en lees de paragraaf over The Stamps in Class Curriculum. Alle boeken die er beschikbaar zijn zijn er opgelijst en zijn gratis te downloaden op de website www.parallax.com en zijn ook te vinden op de Parallax CD. Ze bevatten een heel veel kennis en instructies voor het verder onderzoek in elektronica, programmeren,robotica en engineering. We raden aan dat je de website www.parallax.com bezoekt en de gratis downloads en applicaties bekijkt voor professioneel, onderwijzers, studenten, hobbyisten.
Appendix A: USB naar Seriële Adapter · Pagina 297
Appendix A: USB naar Seriële Adapter Op het moment van schrijven, is de US232B/LC USB naar Seriële Adapter, gemaakt door Future Technology Devices International, aanbevolen voor de is the recommended Parallax producten. De US232B/LC komt met de hardware zoals in Figuur A-1 en met een mini-CD ROM met drivers voor verschillende besturingssystemen, waaronder Microsoft Windows®.
Figuur A-1 FTDI’s US232B/LC USB naar Seriële Adapter Deze adapter is Parallax Stock# 800-00030. Wordt geleverd met software CD (niet getoond).
US232B/LC Driver Software Download: De software drivers en andere informatie omtrent het produkt kan gevonden worden onder: http://www.ftdichip.com/FT232.htm.
Appendix B: Uitrusting en Stukken Lijst · Pagina 299
Appendix B: Uitrusting en Stukken Lijst Onderdelenlijsten kunnen veranderen: Merk op dat de stuknummers en onderdelenlijst die in deze appendix zijn bijgevoegd, kunnen veranderen zonder waarschuwing. Indien h je vragen hebt omtrent een stuk of een hoeveelheid, gelieve contact op te nemen met Parallax door naar de www.parallax.com → Company → Contact Parallax link te surfen, of te emailen naar
[email protected].
Om de oefeningen in dit boek te maken, heb je volgende hardware opties nodig: Optie 1: • Board of Education® Full Kit (#28102) - AND• What’s a Microcontroller Parts Kit (#28152 with text, #28122 without text) Deze twee kits worden afzonderlijk verkocht. De Board of Education Full Kit (inhoudslijst hieronder) is het materiaal voor de Class curriculum, het kan gebruikt worden met gelijk welke Stamp in Class tekst en kits. Board of Education® Full Kit (#28102) Stukken en hoeveelheden kunnen veranderen zonder waarschuwing
Parallax Stuk#
Omschrijving
550-00022
Board of Education
Hoeveelheid 1
800-00016
Plugbare draden
10
BS2-IC
BASIC Stamp® 2 module
1
800-00003
Seriële kabel
1
750-00008
DC Voeding – 9 V, 300 mA
1
27000
Parallax CD – inclusief software
1
700-00037
Rubberen voeten – set van 4
1
Je kan de “Wat is een Microcontroller Parts Kit” apart verkrijgen (#28122), of met de onderdelen en de tekts Wat is een Microcontroller? tesamen (#28152). Deze kits zijn tesamen gestoken om ondersteuning te geven aan de activiteiten en projecten in deze tektst. De “What’s a Microcontroller Parts Kit” bevat volgende componenten:
Pagina 300 · Wat is een Microcontroller?
What’s a Microcontroller Parts Kit #28122 What’s a Microcontroller Parts & Text #28152 Stukken en hoeveelheden kunnen veranderen zonder waarschuwing
Parallax Stuk #
Omschrijving
150-01020
Weerstand, 5%, 1/4W, 1 kΩ
10
150-01030
Weerstand, 5%, 1/4W, 10 kΩ
4
150-01040
Weerstand, 5%, 1/4W, 100 kΩ
2
150-02020
Weerstand, 5%, 1/4W, 2 kΩ
2
150-02210
Weerstand, 5%, 1/4W, 220 Ω
6
150-04710
Weerstand, 5%, 1/4W, 470 Ω
6
152-01031
Potentiometer - 10 kΩ
1
200-01031
Condensator, 0.01 µF, 50 V
1
200-01040
Condensator, 0.1 µF, 100 V
2
201-01080
Condensator, 1000 µF, 10 V
1
201-03080
Condensator 3300 µF, 16 V What’s a Microcontroller? tekst (enkel in #28152.) LED – Groen - T1 3/4 LED – Tweekleurige - T1 3/4 LED - Rood - T1 ¾ LED – Geel - T1 ¾ Fotoweerstand 7-segment LED Display Druktoets– Normaal Open 3 Pin Header – Male/Male Transistor – 2N3904
1
28123 350-00001 350-00005 350-00006 350-00007 350-00009 350-00027 400-00002 451-00303 500-00001 604-00010 800-00016 900-00001 900-00005
10 kΩ digitale potentiometer 3” Jumper draden – Bag of 10 Piezo Luidspreker Parallax Standaard Servo
Hoeveelheid
1 2 1 2 2 1 1 2 1 1 1 2 1 1
Appendix B: Uitrusting en Stukken Lijst · Pagina 301
Optie 2: • BASIC Stamp Wat is een Microcontroller Kit (#90005) Deze kit heeft de “What’s a Microcontroller Parts” en tekst, met een HomeWork Board en accessores die normaalgezien apart worden verkocht. Het BASIC Stamp HomeWork Board kan gebruikt worden met de What’s a Microcontroller? Tekst in plaats van het Board of Education en de BASIC Stamp 2 module. Het HomeWork Board kan ook voor de meeste activiteiten voor het Stamps in Class curriculum gebruikt worden, ocasionele circuit aanpassingen dienen dan te gebeuren. De BASIC Stamp “What’s a Microcontroller Kit” bevat de volgende items: BASIC Stamp® What’s a Microcontroller Kit (#90005) Stukken en hoeveelheden kunnen veranderen zonder waarschuwing
Parallax Stuk#
Omschrijving
Hoeveelheid
555-28158
HomeWork Board™ met breadboard
1
28123
What’s a Microcontroller Tekt
1
27000
Parallax CD – inclusief software
1
800-00003
Seriële kabel
1
28122
What’s a Microcontroller Parts Kit
1
700-00037
Rubberen voeten – set van 4
1
Een opmerking voor onderwijzerss: Het HomeWork board is apart verkrijgbaaravailable per 10 als een economische oplossing voor in de klas, opmerkelijk minder dan het Board of Education + BASIC Stamp 2 module. Gelieve het Parallax Sales Team te contacteren, op 001 (888) 512-1024 voor hoeveelheden en prijzen. BASIC Stamp® HomeWork Board™ Ten-Pack (#28158) Parallax Stuk # 28158
Omschrijving ®
BASIC Stamp HomeWork Board™ (BASIC Stamp 2 is built into the board.)
Hoeveelheid 10
Appendix C: BASIC Stamp en Carrier Board Componenten en Functies · Pagina 303
Appendix C: BASIC Stamp en Carrier Board Componenten en Functies De BASIC STAMP® 2 Figuur C-1 toont een close-up van de Parallax Inc.’s BASIC Stamp® 2 microcontroller module. De belangrijkste componenten en functies hieronder:
Figuur C-1: Parallax Inc.’s BASIC Stamp® 2 Microcontroller Module Componenten en functies
Pagina 304 · Wat is een Microcontroller?
Het Board of Education® Rev C Parallax Inc.’s Board of Education® Rev C draagbord is getoond op Figuur C-2. De belangrijkste componenten en functies hieronder:.
Figuur C-2: Parallax. Inc.’s Board of Education® Rev C draagbord Voor de BASIC Stamp® Microcontroller Modules
Appendix C: BASIC Stamp en Carrier Board Componenten en Functies · Pagina 305
Het BASIC Stamp® HomeWork Board™ Parallax Inc.’s BASIC Stamp® HomeWork Board™ project platform is getoond in Figuur C-3. De belangrijkste componenten en functies hieronder:
Figuur C-3: Parallax Inc.’s BASIC Stamp® HomeWork Board™ project platform Bevat een oppervlakte gemonteerde BASIC Stamp® 2 microcontroller module.
Pagina 306 · Wat is een Microcontroller?
Het Board of Education® Rev B Figuur C-4 toont het Parallax, Inc.’s Board of Education® Rev B. De belangrijkste componenten en functies hieronder:
Figuur C-4: Parallax. Inc.’s Board of Education® Rev B voor de BASIC Stamp® modules
Appendix D: Batterij en Voeding · Pagina 307
Appendix D: Batterij en Voeding 9 V BATTERIJEN Voor de beste resultaten, zijn 9 V batterijen aanbevolen. 9 V batterij specificaties: Kijk voor batterijen met vergelijkbare specificaties: Niet Herlaadbaar •
Herlaadbaar • •
Alkaline
Ni-Cad (Nikkel Cadmium) Ni-MH (Nikkel Metaal Hydride)
Voor de beste resultaten,dient de batterij meer dan 100(mAh) of hoger te bevatten. Niet alle opladers werken voor beide type batterijen. Ga na dat uw oplader aanbevolen is voor het juiste type batterijen dat u gebruikt. Volg alle batterijlader instructies en waarschuwingen.
PARALLAX DC VOEDING Parallax heeft verschillende voedingen die gebruikt kunnen worden en enkel ook voor het Board of Education Rev C. Voor servo experimenten in de tekst, dienen de draden tussen X4 en X5 aangesloten zijn met Vdd. De voeding in Tabel D-1 is ontworpen voor een AC uitgange voor de USA, beide voorzien van een 2.1 mm center-positieve plugs die op het Board of Education passen. Tabel D-1: Voedingen die je bij Parallax, Inc kan bekomen. Input
Output
Parallax Art. # VAC
Hz
VDC
mA
750-00008
120
60
9
300
750-00009
120
60
7.5
1000
GENERISCHE DC VOEDING Voor de beste resultaten met het BASIC Stamp HomeWork Board of gellijk welk ander Board of Education Revisie, gebuik een DC voeding (ook een AC adapter genoemd) met de volgende waarden:
Pagina 308 · Wat is een Microcontroller?
Input
Hangt af in welk land je left, de amplitude en frequentie van de AC muurvoeding is doorslaggevend. Voor de USA en Canada, is dit 120 VAC, 60 Hz. Output
6 VDC, 800 mA De mA mogen hoger liggen. Een 6 V, 1000 mA voeding is aanvaartbaar. Plug
Het Board of Education heeft twee aansluitingen ,een voor de VDC voeding en een voor een 9 V batterij Het HomeWork Board heeft enkel een 9 V battery aansluiting. Barrel Plug
Figuur D-1 toont de DC aansluiting die gebruikt wordt voor het BASIC Stamp and Board of Education. De 2.1 mm center-positieve barrel plug tesamen met het positieve symbool, geeft een evidente aansluiting.
Figuur D-1 DC Aansluiting met de Barrel Plug en Center Positief Symbool
9 V Batterpl Extensie
Figuur D-2 toont een AC adapter verbonden met een 9 V batterij extentie die kan gebruikt worden met het BASIC Stamp HomeWork Board. Kijk ook naar de waarschuwing naast de tekst.
Appendix D: Batterij en Voeding · Pagina 309
Figuur D-2 AC Adapter met 9 V Batterij Extensie
WAARSCHUWING- Opgelet met de Universale AC Adapters en Omgekeerde Voeding terminals Figuur D-3 toont een veel voorkomende fout die dient vermenden te worden met universele adapters. Veel van deze adapters geven de mogelijkheid om de terminals van de 9 V batterij extentie om te draaien. Dit kan geen kwaad voor de BASIC Stamp, Board of Education of het Homework Board, maar is zeker aft e raden. Het kan de Parallax Standaard Servo verbonden met de Vin in enkele seconden kapot maken. Het enige systeem dat de servo kan beschermen tegen deze fout is het Board of Education Rev C (met de jumper op Vdd gezet).
Pagina 310 · Wat is een Microcontroller?
TIP
TIP
TIP Figuur D-3 Polariteit van Universele Adapters
TIP
Opgelet met “Batterij Vervangers” Vele batterij vervangers zijn gemaakt om weinig ampères te geven. De ampère waarden liggen in de buurt van 10 mA, de output capaciteit is onvoldoende voor de activiteiten in deze tekts. Bijvoorbeeld, twee LEDs verbonden met een 220 Ω weerstand hebben een total van 14.5 mA, en de BASIC Stamp doet er daar nog even 3 toy 7 mA bovenop. Een servo neemt tot 100 mA af,wat duidelijk niet zal werken met een batterij vervanger. OPMERKING: Het is vrij duidelijk om een circuit op te merken dat meer stroom nodig heeft dan dat de voeding kan leveren, want dan zal de Pwr LED op het Board of Education (of HomeWork Board) beginnen ye knipperen of dimmen.
Appendix E: · Pagina 311
Appendix E: Probleem-Oplossing Hier heb je een lijst ùet oplossingen voor verschillende problemen die veel voorkomen met de BASIC Stamp Editor om te communiceren met de BASIC Stamp: √ √ √ √
√
Indien je het Board of Education Rev C gebruikt, ga na dat de voedingsschakelaar op 1 is gezet. Vervang kapotte batterijen of onjuist of slecht werkende voedingen door een nieuwe 9 V batterij. Ga na dat de seriële kabel juist verbonden is met de COM poort van de computer en met de DB9 connector op het Board of Education of BASIC Stamp HomeWork Board. Ga na dat uw seriële kabel een normale is. GEBRUIK GEEN NUL MODEM KABEL. De meeste nul modem kabels zijn voorzien van een eticket NULL of Null Modem; ga op zoek naar dit eticket. Indien er een te vinden is, gebruik deze kabel niet om de BASIC Stamp te programmeren. Sluit elke palmtop communicatiesoftware af.
Indien je een BASIC Stamp en het Board of Education gebruikt,ga het volgende na: √ √ √
Ga na dat de BASIC Stamp juist in de voet gestoken is, juiste kant omhoog zoals in Figuur 1-27 op pagina 16. Indien je een voeding gebruikt die in muur wordt aangesloten, ga na dat de verbinding aanwezig is, zowel op het bord als in de muur. Contorleer dat de groene Pwr Led op het Board of Education mocht geeft als alles is aangesloten. Ga na dat de BASIC Stamp juist in de voet gestoken is. Inspecteer visueel opdat de BASIC Stamp geen enkel omgeplooide pin heeft, in plaats van dat deze goed in de voet van het Board of Education zit. Koppel eerst de voeding af, druk dan voorzichtig op de module met de duim.
Indien het Identificatie venster er uitziet zoals Figuur E-1, betekent dit dat de BASIC Stamp Editor de BASIC Stamp niet kan vinden op de COM poort. Merk op dat de Loopback en Echo kolom “No.” aangeeft. Als je dit probleem hebt, probeer het volgende:
Pagina 312 · Wat is een Microcontroller?
Figuur E-1 Identificatie Venster
√ √ √ √ √ √
Voorbeeld: BASIC Stamp 2 niet gevonden op de COM poorten.
Sluit het Identificatie Venster. Ga na dat de seriële kabel goed verbonden is. Probeer de Run → Identify test opnieuwe. Indien je het nummer van de COM poort kent, maar niet in het Identificatie Venster komt, gebruik de Edit Port List toetse en voeg het nummer toe van de COM poort, probeer opnieuw de Run → Identify test. Indien je meer dan een COM poort hebt, probeer het Board of Education orf het BASIC Stamp HomeWork Board op de andere COM poort en kijk of Run → Identify dan werkt. Indien je een tweede computer hebt, probeer het daarop.
Indien je de error boodschap “No BASIC Stamp Found” krijgt maar met de Run → Identify test komt ere en “Yes” in beide kolommen voor een van de COM poorten, dien je enkele veranderingen te doen aan de FIFO Buffers. Dit kan af en toe gebeuren voor Microsoft Windows® 98 en XP gebruikers. Schrijf op welke COM poort het “Yes” bericht gaf en probeer dit: Windows® 98: √ √ √ √ √ √ √
Klik op de desktop Start knop. Selecteer Settings→ Control Panel → System → Device Manager → Ports (COM & LPT). Selecteer de COM poort die je hebt opgeschreven bij de Run → Identify test. Selecteer Properties → Port Settings → Advanced. Vink de box met de naam “Use FIFO Buffers” af en druk op OK. Het OK druken is nodig om het venster te sluiten. Keer terug naar de BASIC Stamp Editor. Probeer opnieuw een programma te downloaden.
Windows® 2000: √
Klik op de desktop Start knop.
Appendix E: · Pagina 313
√ √ √ √ √ √
Selecteer Settings→ Control Panel → System →Hardware→ Device Manager → Ports (COM & LPT). Selecteer de COM poort die je hebt opgeschreven bij de Run → Identify test. Selecteer Properties → Port Settings → Advanced. Vink de box met de naam “Use FIFO Buffers” af en druk op OK. Het OK druken is nodig om het venster te sluiten. Keer terug naar de BASIC Stamp Editor. Probeer opnieuw een programma te downloaden.
Windows® XP: √ √ √ √ √ √ √ √ √
Klik op de desktop Start knop. Selecteer Control Panel → Printers and Other Hardware. In the “See Also” box selecteer System. Selecteer Hardware → Device Manager → Ports. Heef het COM poort nummer in dat je met de Run→ Identify test hebt bekomen. Selecteer Properties → Port Settings → Advanced. Vink de box met de naam “Use FIFO Buffers” af en druk op OK. Het OK druken is nodig om het venster te sluiten. Keer terug naar de BASIC Stamp Editor. Probeer opnieuw een programma te downloaden.
Windows® XP Pro: √ √ √ √ √ √ √
Klik op de desktop Start knop. Selecteer Settings→ Control Panel → System →Hardware→ Device Manager → Ports (COM & LPT). Selecteer de COM poort die je hebt opgeschreven bij de Run → Identify test. Selecteer Properties → Port Settings → Advanced. Vink de box met de naam “Use FIFO Buffers” af en druk op OK. Het OK druken is nodig om het venster te sluiten. Keer terug naar de BASIC Stamp Editor. Probeer opnieuw een programma te downloaden.
Indien geen enkele van bovenstaande oplsooinge werkt, kan je altijd surfen naar www.parallax.com n volg de Support link. Of, email
[email protected] of bel de Technische dienst op het gratis nummer 1-888-99-STAMP.
Appendix F: Meer over Elektric · Pagina 315
Appendix F: Meer over Elektriceit Wat is een Elektron? Een elektron is een van de drie fundamentele onderdelen van het atooom; de andere twee delen zijn een proton en een neutron. Een of meerdere protonen en neutronen vormen samen het binnenste van een molecule in een gebied dat we de nucleus noemen. Elektronen zijn kleine deeltjes in vergelijking met protonen en neutronen en ze cirkelen rond de nucleus. Elektronen stoten elkaar af, elektronen en protonen trekken elkaar aan. Wat is een Lading? Het gegeven dat elektronen elkaar afstoten en dat ze protonen aantrekken, noemen we negatieve lading. Het gegeven dat protonen andere protonen afstoten en elektronen aantrekken noemen we positieve lading. Indien een molecule meer elektronen dan protonen heeft, zegt men dat deze negatief geladen is. Indien een molecule minder elektronen heeft dan protonen, zegt men dat het positief geladen is. Indien er evenveel protonen als elektronen zijn, is het het geheel neutraal. Wat is Voltage? Voltage is zoals elektrische druk. Indien een negatieve lading moleculen dichtbij een positieve molecule komt, kan het zijn dat de extra negatieve elektron van de negatieve molecule wordt weggetrokken door de positief gelanden molecule. Batterijen hebben dan ook de opslag van de negatieve en positieve moleculen in aparte compartimenten. Elk van deze compartimenten is verbonden met een terminal van de batterij; de positieve moleculen in een compartiment zijn de positieve (+) terminal, en de negatieve moleculen in het andere compartiment zijn de negative (-) terminal. Volt is de dimentie van de elektrische druk en het wordt aangeduid met een hoofdletter V. Je zal dit zeker herkennen, denk maar aan de negen volt (9 V) batterij die als voeding voor het Board of Education of HomeWork Board wordt gebruikt. Andere veel voorkomende batterijen zijn de 12 V batterijen in auto’s en de 1.5 V AA batterijen die gebruikt worden in rekenmachines, draadloze muizen, en andere toestellen. Wat is stroom? Stroom is een maat voor het aantal elektronen per seconde die door het circuit vloeien. Soms zijn deze verbonden in een chemische reactie die een hoeveelheid vormt, die neutraal is geladen. Wat ook kan is dat de elektron de negatieve geladen molecule verlaat en dan naar de positieve molecule overspringt. De stroom wordt meestal aangeduid met de hoofdletter ‘I’ in zowel boeken als schema’s. Wat is ampère? Een ampere is de basis dimensie voorstroom en dit wordt afgekort met hoofdletter ‘A’. Vergeleken met de circuits die je met de BASIC Stamp gebruikt, is ampère een zeer grote eenheid. Ampère wordt meestal gebruikt voor beschrijving van stroom in auto batterijen, autolichten, industriële machines. Een betere beschrijving in deze toepassingen is in milli-ampère. Wat is Weerstand? Weerstand is een element in het circuit dat de stroom van elektronen af remt, zodat er minder snel elektronen van de negatieve naar de positieve terminal lopen. de ohm is de eenheid voor de weerstand. Deze is al geintroduceerd en wordt aangeduid als afkorting met de griekse letter omega (Ω). Wat is een Geleider? Koperen draden hebben bijna geen weerstand, dit noemt men dan een geleider.
Pagina 316 · Wat is een Microcontroller?
BONUS ACTIVITEIT: WET VAN OHMS, VOLTAGE EN STROOM Deze Activiteit gebruikt enkele definities van daarnet. Onderdelen voor de wet Ohm
(1) Weerstand – 220 Ω (rood-rood-bruin) (1) Weerstand – 470 Ω (geel-violet-bruin) (1) Weerstand – 1 kΩ (bruin-zwart-rood) (1) Weerstand – 2 kΩ (rood-zwart-rood) (1) LED – gelijk welke kleur Test Circuit
de weerstandswaarde van Ri in Figuur F-1 kan veranderen. Lagere weerstand zal meer stroom door de LED sturen, en dan zal deze meer oplichten. Een hogere weerstand zal de LED doen dimmen aangezien er minder stroom doorheen vloeit. √ √ √ √
Koppel de voeding af van je Board of Education of HomeWork Board elek maal je het circuit aanpast. Bouw het circuit, start met de 220 Ω weerstand. Pas het circuit aan door de 220 Ω weerstand te vervangen door een 470 Ω . Was de LED minder helder? Herhaal dit met een 1 kΩ weerstand, dan een 2 kΩ weerstand, ga telkens de helderheidsveranderingen na.
Vdd X3
Vdd
R1 R2 R3 R4 Ri
LED
Vss
R1 = 220 Ω R2 = 470 Ω R3 = 1 kΩ R4 = 2 kΩ
P15 P14 P13 P12 P11 P10 P9 P8 P7 P6 P5 P4 P3 P2 P1 P0 X2
Vin
Vss
+
Figuur F-1 LED Stroom Monitor
Appendix F: Meer over Elektric · Pagina 317
Indien je een 9 V batterij gebruikt, dan kan ook de helderheid gaan vergelijken indien de voltage aan de ingang wordt gewijzigd, Vin. Vin is direct verbonden met een 9 V batterij + terminal, en Vss is verbonden met de negative terminal van de batterij. Vdd is geregeld op 5 V. Dat is ongeveer half het voltage van de 9 V batterij. √ √ √ √ √ √
Indien je gee 9 V batterij gebruitk, stop hier en gaan naar de volgende paragraaf: Het berekenen van de Stroom. Start met het circuit getoond in Figuur F-1, maar gebruik de 1 kΩ weerstand. Noteer hoe helder de LED is. Koppeld de voeding af. Pas het circuit aan door de weerstand lost te koppelen van Vdd en plug deze in de Vin plaats. Sluit de voeding terug aan. Is de LED feller aan het oplichten? Hoeveel? DOE DIT NIET met een 220 of 470 Ω weerstand, aangezien dan de LED met teveel stroom zal voorzien worden.
Berekenen van de stroom
De BASIC Stamp Handleiding heeft enkele regels omtrent hoeveel stroom er in een circuit mag vloeien. Indien je deze regels niet volgt, kan de BASIC Stamp beschadigd worden. De regels leggen uit hoeveel stroom er toegelaten is aan de I/O pin, en hoeveel stroom de I/O pinnen kan geven als output. Stroomregels voor de BASIC Stamp I/O Pinnen •
Een I/O pin kan 20 mA leveren. Met andere woorden, indien je een HIGH signaal naar de I/O pin stuurt, mag het geen LED circuit voeden voor hogere waarden dan 20 mA.
•
Indien je het LED circuit heraansluit op de BASIC Stamp en de LED wordt aangezet, indien je een LOW commando stuurt, kan de I/O pin naar 25 mA gaan.
•
P0 tot P7 kunnen enkel 20 mA aan. Evenals P8 tot P15. Indien je verschillende LED circuits hebt, dien je een zwaardere weerstand te plaatsen, opdat er minder stroom wordt afgenomen.
Indien je weet hoe je de stroom dient te berekenen, kan je beslissen om je LED te laten branden zonder dat zich problemen zullen voordoen. Elke elektronische component heeft regels wat het met voltage, weerstand en stroom doet. Voor de lichtdiode, is de regel dat er een waarde voor de voorwaardse diode voltage is. Voor de weerstand, is er de wet van
Pagina 318 · Wat is een Microcontroller?
Ohm. Je dient uit te vissen hoeveel stroom de LED gebruikt in het circuit. Er zijn ook regels hoe stroom en voltage opgeteld worden in circuits. Deze noemt met de wetten van Kirchoff. Vdd – Vss = 5 V De voltage van Vdd naar Vss is 5 V. Dit noemt men het regulerende voltage, dit werkt zoals een batterij die exact 5 V is. Vin – Vss = 9 V Indien je een 9 V batterij gebrukt, is het voltagen van Vin naar Vss, 9 V. Wees voorzichtig. Indien je een voltage regelaar gebuikt die in de muur past, en er is een aanduiding die zegt dat er 9 V wordt gegeven, kan het nog altijd veel hoger tot 18 V zijn. Grond en/of referentie verwijzen naar de negatieve terminal. Indien het ovr het BASIC Stamp en Board of Education gaat, is Vss de grond referentie. Dit is nul volt en indien je een 9 V batterij gebruikt, is dit de negative terminal. De positieve terminal van de batterij is 9 V. Vdd is 5 V (boven de Vss referentie van 0 V), en het is een speciale chip die de votage regeling doet naar de BASIC Stamp toe. Wet van Ohm: V = I × R Het voltage over een weerstand is gelijk aan de stroom die erdoorheen gaat vermenigvuldigd met de weerstandswaarde. Diode Voorwaardse Voltage: Indien de LED licht geeft, zal het voltage gemeten van anode nar Kathode rond 1.6 V zijn. Ongeacht dat de stroom een grote of kleine waarde is, zal het voltage ongeveer 1.6 V zijn. Vereenvoudigde wetten van Kirchoff: gebruikt voltage is gelijk aan geleverd voltage. Indien je een circuit 5 V geeft, dan dient de som van alle gebruikte voltages over de componennten gelijk zijn aan 5 V. Vereenvoudigde wetten van Kirchoff: gebruikte stroom is gelijk aan geleverde stroom. De hoeveelheid stroom dat een LED circuit binnenkomt lands Vdd is dezelfde hoeveelheid dat uit het circuit gaat via Vss. Indien je drie LEDs aan de BASIC Stamp hangt en elk LED circuit neemt 5 mA, dan dinet de BASIC Stamp 15mA hiervoor te voorzien.
Voorbeeld Berekening: Eén Circuit, Twee Circuits
berekeningen van hoeveel stroom een LED circuit afneemt in twee stappen: 1. Zoek uit wat het voltage over de weerstand is 2. Gebruik de wet van Ohm om de stroom in de weerstand te berekenen. Figuur F-2 toont hoe je kan uitzoeken wat het voltage over de weerstand is. Links is 5 V voorzien. Gebruikte voltage aan de rechter kant. Het ombekende voltage bij de aanvang is VR, voltage over de weerstand. We weten dat het voltage over de LED 1.6 V is.en we weten dat het voltage over alle componenten tesamen 5 V is, wegens de wet van Kirchoff. Het verschil tussen 5 V en 1.6 V is 3.4 V, dat is het voltage over de weerstand VR.
Appendix F: Meer over Elektric · Pagina 319
+
Vdd + VR = ? V
5V
+ 1.6 V
VR + 1.6V = 5V VR = 5V − 1.6V VR = 3.4V
Figuur F-2 Voltage bij het Circuit, Weerstand en LED
-
Vss
Kilo is metrisch 1000. 1000 is kilo, en wordt afgekort met een kleine letter k. In plaats van 1000 Ω te schrijven, kan je 1 kΩ schrijven. In ieder geval is het uitgesproken als een-kiloohm. Evenals 2000 Ω geschreven kan worden als 2 kΩ. Milli is metrisch 1/1000, en de afkorting gebeurd met de kleine letter m. Indien de BASIC Stamp een LED circuit geeft met 3.4 duizendste van een ampère, dan is dit 3.4 milliampère, of 3.4 mA. Wat is een mA? Uitgesproken als milliampère, het is de notatie voor een duizendste van een ampere. De ‘m’ in mA is de metrische nototatie voor milli, wat gelijk is aan 1/1000. De ‘A’ in mA staat voor ampère. Voeg deze twee tesamen en je hebt milliampères, dit is zeer handige benaming van de hoeveelheid stroom die door de BASIC Stamp en de circuits ermee vrebonden. Hoeveel stroom is 7.23 mA? Dat is de hoeveelheid die een LED afneemt, getoond op de rechter zijde van de Figuur F-3. Je kan de 470 Ω weerstand vervangen door een 220 Ω en dan zal het circuit 15.5 mA trekken, wat de LED helderder zal doen laten branden. Indien je een 1000 Ω weerstand gebruikt; zal het circuit 3.4 mA trekken en de LED zal meer gedimmd zijn. Een 2000 Ω zal de led nog minder fel laten branden en de stroom zal 1,7 mA zijn.
Figuur F-3 toont een voorbeeld van hoe je de stroom kan berekenen in het circuit met een weerstand van 470 Ω. Start met de wet van Ohm. Je weet het vorige antwoord op het Voltage (3.4 V) en de weerstand (470 Ω). Het enige wat je dient te doen is de stroom vinden, me de wet van Ohm.
Pagina 320 · Wat is een Microcontroller?
V = I×R 3.4V = I × 470 Ω I= +
I = 0.00723V
I X 470 Ω
3.4 V
3.4V 470 Ω
-
I = 0.00723 A
Ω
Figuur F-3 Stroom door de Weerstand
7.23 A 1000 I = 7.23 mA I=
Ja, het is juist ! 1 A = 1 V/Ω (Een ampère is een volt per ohm).
Indien je twee LEDs aanzet tergelijkertijd. De BASIC Stamp wordt geschakeld zoals in de circuits in Figuur F-4. Hebben we de 20 mA limiet bereikt? Laten we het uitzoeken. Ga de vereenvoudigde versie van de wet van Kirchoff’s na, die zegt dat de totale stroom de som is van alle stormen in een seriëel circuits. Dit betekent dat zoals in Figuur F-4 getoont, het totale amperage gelijk is aan de som van de twee taken. Het antwoord is dan 14.5 mA. Je bent nog steeds onder de 20 mA limit, uw circuit is goen en veilig. Vdd
I=?
I = I1 + I 2 + ...I i 7.23 mA
470 Ω
7.23 mA
470 Ω
LED
Vss
LED
Vss
I = 7.23 mA + 7.23 mA I = 14.5 mA
Figuur F-4 Totale Stroom geleverd aan de Twee LED Circuits
Appendix F: Meer over Elektric · Pagina 321
Uw beurt – Aanpassen van het Circuit
√ √ √ √
Herhaal de oefening in Figuur F-2, maar gebruik Vin – Vss = 9V. Het antwoord is VR = 7.4 V Herhaal de oefening in Figuur F-3, maar gebruik een 1 kΩ weerstand. Antwoord: I = 3.4 mA. Gebruik VR = 7.4 V voor de oefening in Figuur F-3 met een 1 kΩ weerstand. Antwoord: I = 7.4 mA. Herhaal de oefening vanuit Figuur F-4 me een of meerdere weerstanden van 470 Ω en de andere 1 kΩ. Antwoord: I = 7.23 mA + 3.4 mA = 10.63 mA.
Appendix G: RTTTL Formaat Samenvatting · Pagina 323
Appendix G: RTTTL Formaat Samenvatting Dit is een samenvatting bedoelt om het RTTTL formaat te begrijpen. De volledige RTTTL specificaties kunnen gevonden worden op meerdere websites. Gebruik een zoekmachine met de sleutelwoorden RTTTL specificatie om een overzicht te krijgen. Hier is een voorbeeld van het RTTTL formaat ringtoon: TakeMeOutToTheBallgame:d=4,o=7,b=225:2c6,c,a6,g6,e6,2g.6,2d6,p, 2c6,c,a6,g6,e6,2g.6,g6,p,p,a6,g#6,a6,e6,f6,g6,a6,p,f6,2d6,p,2a6 ,a6,a6,b6,c, d,b6,a6,g6
De tekst voor het eerste dubbele punt, is wat een mobiele telefoon toont als naam van het liedje. Hier is de ringtoon naam: TakeMeOutToTheBallGame:
Tussen het eerste en tweede dubbele punt kan je de standaard waarden zien d, o, en b. Hier betekenen ze : d – duration - lengte o – octaaf b – beats per minuut of tempo.
In TakeMeOutToTheBallGame, de standaard settings zijn: d=4,o=7,b=225:
De noten van het liedje staan na het tweede dubbele punt en worden gescheiden door een komma. Indien enkel de noot letter is gebruikt, zal die afgespeeld worden met de standaard waarden. Als voorbeeld uit TakeMeOutToTheBallGame is de tweede noot: ,c,
Aangezien het geen andere informatie bevat, zal de noot standaard waarden hebben, een vierde van de nootlengte (d=4), in het zevende octaaf (o=7). Een noot kan tot 5 karkaters bevatten tussen de komma’s ; hierbij wat elke karakter specifieert: ,duration
Als voorbeeld: ,2g#.6,
note
sharp
dot
octave,
Pagina 324 · Wat is een Microcontroller?
betekent: speel een halve noot G-sharp voor 1 ½ tijd van de halve noot in het zesde octaaf. Hier enkelevoorbeelden uit TakeMeOutToTheBallGame: ,2g.6, – halve noot, G, gepunt, zesde octaaf ,a6, – standaard kwart noot in zesde octaaf ,g#6, – kwart noot, g , sharp (kruis door #), zesde octaaf
de karakters: ,p,
staan voor pauze, wordt gebruit voor een rust. With no extra information, the p plays for the default quarter-note duration. You could also play a half note’s worth of rest by using: ,2p,
Hierbij een voorbeeld van een gepunte rust: ,2p.,
De rust duurt evenlang als een halve noot met een kwart erbij.
Index · Pagina 325
Index -%-
%, 177 -*-
*, 94 **, 244 */, 95, 244 -3-
3-positie schakelaar, 16 -7-
7-Segment Display, 165–70 -A-
Actief-High, 79 Actief-Low, 79 AD5220 Digitale Potentiometer
BASIC Stamp Editor Identificatie Venster, 19 Identificatie, 316, 317 Memory Map, 263 Software, 5 Probleem-Oplossing, 315
BASIC Stamp HomeWork Board, 14 BASIC Stamp HomeWork Board Componenten, 309
Batterij, 44 Beat, 226 Tweekleurige LED, 61 Binaire Getallen, 20, 77, 177 Bit, 55, 175, 247 Board of Education, 13
Pin Map, 268
Componenten, 308
Pin Naam en Functie, 268
Volledige Kit, 303
Algoritme, 96 Americaanse Standaard Code voor Informatie Uitwisseling, 30 Amp, 319 Anode, 40 Array, 292 ASCII, 30, 253 -B-
Base, 265 BASIC Stamp BASIC Stamp 2 Module, 1
Revisie label, 105 Servo Header, 106
Board of Education Rev B Componenten, 310
Boe-Bot, 3 Breadboard. See Prototype Plaats Byte, 55, 247 -C-
Cadmium Sulfide, 189 Capacitor, 143–45, 149
Components, 307
Keramisch, 150
HomeWork Board, 305
Pool – identificeren van terminals, 143
Page 326 · What’s a Microcontroller
Carriage return, 25 Kathode, 40 Opladen, 319 Circuit, 41 Collector, 265 COM Port, 15, 196 Commentaar, 24 Commentaar, 52 Compiler directives, 21, 24 Componenten BASIC Stamp, 307 BASIC Stamp HomeWork Board, 309 Board of Education, 308 Board of Education Rev B, 310
Conductor, 319 Tellen, 90 CR, 25 Stroom, 38, 44, 45, 319 Flow, 45 Milliampère, 324
Cyclus, 219 -D-
DATA, 230 DEBUG Command, 25
DEBUG Formaat CR, 25 DEC, 25
Debug Terminal, 23 Receive Windowpane, 120, 121 Transmit Windowpane, 120, 121
DEBUGIN, 120–23, 292 DEBUGIN Formaat STR, 292
DEC, 25, 120 Digitale Potentiometer, 267–77 Diode Forward Voltage, 323 DIRH, 175–78 Loskoppelen van de voeding, 32 Dot Noten, 238 Lengte, 222, 229, 231, 233–38 -E-
Echo, 120, 121 EEPROM, 197–203, 230, 263 Elektron, 45, 319 Embedded systeem, 1 Emitter, 265 END, 25 EXIT, 292 -F-
Fetch and Execute, 263 Flat, 228 FOR…NEXT, 53–56, 114 FREQOUT, 221 Frequentie Lengte, 222 Mixen, 222, 225–27 Muziek Noten, 227–30
-G-
GOSUB, 206 Grond, 323 Garantie, 3
Index · Pagina 327
-H-
Hertz, 219 HIGH, 49 Hz. zie Hertz -I-
I/O Pins. See Input/Output Pins IC. zie geintegreerd Circuit Identificatie Venster, 19 Identificatie, 316, 317 IF…ELSEIF…ELSE, 85 IF…THEN…ELSE, 81 IN3, 77 IN7, 151 Indicatie licht, 37 Input/Output Pin Input, 71
Input/Output Pins, 42 Standaard Richting, 177
Integer, 244 Integrated Circuit, 264 Pin Map, 268 Referentie Notch, 268
Interferentie, 226 -J-
Jumper, 106 -K-
kB, 199 KB, 199 KCL, 323 Kilo, 324 Kilobyte, 199 Wet van Kirchoff’s (Vereenvoudigd)
Stroom, 323 Voltage, 323
KVL, 323 -L-
Label, 206 Light Emitting Diode, 37–38, 40–41 Anode, 40 Tweekleurig, 61 Kathode, 40 Circuit Calculations, 323 Schematisch Symbool, 40 Terminals, 40
LOOKDOWN, 182 LOOKUP, 179–81 LOW, 49 -M-
mA, 324 Wiskundige Operaties, 242 Memory Map, 198, 263 Menu, 287 Metrisch stelstel, 324 Microcontroller, 1 Microseconde, 114 Milli, 324 Milliseconde, 49, 114 Mixen, 222, 225–27 Vermenigvuldigen, 94 Muziek Dot, 238 Flat, 228 FREQOUT en Noten, 229 Naturlijk, 228
Page 328 · What’s a Microcontroller
Notenlengte 229, 231, 233–38 Noten, 227
Voedingswaarschuwing, 314
Parallel
Piano Keyboard, 227
Bus, 173
Rest, 233
Toestel, 173
Ringtone, 245
Onderdeel Tekening
RTTTL Formaat, 327–28
7-Segment Display, 165
RTTTL Formaat, 245, 251–57
Tweekleurige LED, 61
Sharp, 228
LED, 40
Tempo, 233
Fotoresistor, 190
-N-
Natuurlijk, 228 nc, 167 Nested Loop, 223–25 Neutraal, 45 Nib, 55, 247 Geen verbinding, 167 Notes, 227 NPN, 265 -O-
Offset, 155 Ohm, 38, 319 Wet van Ohm, 323 Omega, 38 ON…GOSUB, 287–96 Operator, 95 OUTH \r, 174 Overflow, 247 -P-
Parallax Standaard Servo, 103
Piezoelectrische Luidspreker, 219 Potentiometer, 140 Drukknop – Normaal Open, 71 Weerstand, 38 Transistor (NPN), 265
PAUSE, 49 PBASIC Commando's DEBUG, 25 DEBUGIN, 120–23, 292 DEC, 120 DO…LOOP, 49 END, 25 EXIT, 292 FOR…NEXT, 53–56, 114 FREQOUT, 221 GOSUB, 206 HIGH, 49
Waarschuwing, 104, 154
IF…ELSEIF…ELSE, 85
Onderdelen, 104
IF…THEN…ELSE, 81
Index · Pagina 329
LOOKDOWN, 182
DCD, 243
LOOKUP, 179–81
Uitvoeringsorder 242
LOW, 49
Haakjes, 242
ON…GOSUB, 287 PAUSE, 49 PULSOUT, 113 RANDOM, 95
Fotoresistor, 189–90 RC-Tijd Circuit, 190
Piano Keyboard, 227 Piezo-electrisch
RCTIME, 151–52, 152
Element, 220
READ, 202–3, 230
Luidspreker, 219
RETURN, 206 SELECT…CASE, 246–50 TOGGLE, 272
Pin Map, 166, 268 Pitch, 219 Polling, 90 Potentiometer, 139–41
UNTIL, 93
Digitaal, 267–77
WRITE, 199–201, 230
Terminals, 140
PBASIC Aanwijzingen
Prototyping Area
DATA, 230–33
Input/Output Pins, 41
PBASIC, 24
Voeding Terminals, 41
PIN, 287 Stamp, 24
PBASIC I/O Registers DIRH, 175–78 IN3, 77 OUTH, 175–78
PBASIC Operators %, 177 *, 94 **, 244 */, 95, 244
Prototyping Areas Voet, 41
Pseudo Random, 96 Pull-Up Weerstand, 79 Puls, 113 PULSOUT, 113 Drukknop, 71–72 Circuit, 75–77 Normaal Open, 72
-R-
Radio Controle, 153 RANDOM, 95
Page 330 · What’s a Microcontroller
RCTIME, 151–52, 152 READ, 199, 230 Receive Windowpane, 120, 121 Referentie, 323 Referentie Punt, 268 Weerstand, 319 Weerstand, 38–40, 48 Kleur Codes, 39–40 draden, 38 Pull-Down, 79 Pull-Up, 79 Tolerantie, 39
Rest, 233 RETURN, 206 Ringtoon, 245 Robot, 2–4 RTTTL Formaat, 245, 251–57, 327–28 -S-
Verschalen, 155 Schematisch Dots Indicatie Connecties, 84 Tekening, 45
Schematisch Symbool 7-Segment Display, 166 Tweekleurige LED, 61 LED, 40 Fotoresistor, 190 Piezoelectrisch Luidspreker, 219 Potentiometer, 140 Drukknop – Normaal Open, 71
Weerstand, 38 Transistor (NPN), 265
Zaad, 96 SELECT…CASE, 246 Sensor, 189 Sensor Array, 281, 287 Servo, 103–4 Kabel, 103 Kist, 103 Opgelet Statement, 104, 154 Aansluiten van de BASIC Stamp, 105–13 Kop, 106 Waaier, 103 Jack, 103 Potentiometer Sturing, 153 Voedingswaarschuwing, 314
Sherp, 228 Luidspreker, piezoelectrisch, 220 Stamp Plot Lite, 193–97 Status indicator, 37 STR, 292 Subroutine, 206–13 Label, 206
Subsysteem Integratie, 281 Superpositie, 226 Syntax highlighting, 24 -T-
Tempo, 233 Terminal Piezoelectrische Luidspreker, 220
Index · Pagina 331
TOGGLE, 272 Token, 263 Tolerantie, 39 Transistor, 264, 265–67 2N3904, 265 Basis, 265 Basis Stroom, 266 Collector, 265 Emitter, 265 NPN, 265 Wisselen, 266
Transmit Windowpane, 120, 121 -U-
UNTIL, 93 US232B, 301 USB naar Seriël Adapter, 6, 16, 301 -V-
Variabelen, 53, 55, 247
Array, 292 Bit, 55, 247 Byte, 55, 247 Nib, 55, 247 Word, 55, 247
Vdd, 41, 46, 323 Vin, 41, 323 Volt, 319 Voltage, 45, 319 Vss, 41, 46, 323 -W-
Wat is een Microcontroller Onderdelen Kit, 303 Text, 303
Woord, 55, 247 WRITE, 199–201
Onderdelen en hoeveelheden in de verschillende Parts „What’s a Microcontroller“ kits kunnen veranderen zonder reden. Onderdelen kunnen afwijken van hoe ze op de tekening zijn getoond. Gelieve
[email protected] te contacteren bij verdere vragen omtrent de kit.