Stap 16: Maak een vrolijk geluid.
Voor onze volgende reeks van experimenten, zullen we om verbinding te maken met de spreker. Naar aanleiding van het bovenstaande diagram toevoegen u één meer jumper draad van poort B.3. Het diagram toont deze nieuwe draad in paars. Nogmaals, de schoonheid van een development kit is dat de meeste van de spreker circuit nog aanwezig; toe te voegen het hele spreker circuit, alles wat u nodig hebt is een enkele jumper wire.
Overwegen, voor een minuut, de elektromagneet die u hebt aangebracht toen je een kind (als u niet meer weet dat de magneet is gemaakt door inwikkeling een draad rond een spijker. Kijk naar het bovenstaande diagram. Wanneer u verbinding maakt met de uiteinden van de draad met een batterij, de nagel wordt gemagnetiseerde, en u kunt oprapen van dingen zoals paperclips.) Een luidspreker is net als een elektromagneet; Wanneer u stroom, en stop stroomt door de spoel van een spreker, veroorzaakt het een membraan te trillen, dat klinkt.
Nu, neem een kijkje op het schema van het circuit van de spreker. Nu, houden met onze precedent van het gebruik van poort B voor uitvoer en Port D voor input, Port B.3 zullen beheersen de spreker. Neem een kijkje op het schema, hierboven. Als poort B.3 is ingesteld op hoog, zal huidige stromen van grond door de speaker en aan de uitgang-Pins. Dit zal hetzelfde zijn als wanneer u de draaduiteinden in uw electro-magneet op een accu aangesloten en de electro-magneet binnen de spreker zal activeren. Wanneer u een laag op Pin B.3 uitvoert, zal er geen positieve punt in het circuit, dus geen huidige zullen vloeien, en de electro-magneet wordt uitgeschakeld.
Op dezelfde manier zullen dat we lussen gebruikt om te schakelen de LEDs in- en uitschakelen herhaaldelijk, we weer kunt lussen magnetiseren en gedemagnetiseerd, waardoor de electro-magneet binnen de spreker. Het belangrijkste verschil zal zijn dat we zullen veel korter vertragingstijden binnen onze lussen. Met behulp van uw sjabloon, toevoegen van het volgende programma en sla het met een naam als Speaker Test.
Config PortB = Output
' Hoofdprogramma
Doet "luidspreker lijn in-/ uitschakelen
set PortB.3
waitms 1
Reset PortB.3
waitms 1
Loop
Nogmaals, neem een kijkje op dit programma: we zien een standaard lus, niets nieuws hier. Ook zien we dat we binnen de lus, poort B.4 (de luidspreker-pin) te hoog, wachten 1millisecond en opnieuw het terug naar lage en wachten op een ander 1 milliseconde instellen. Omdat deze uitspraken binnen een lus, dit zal herhalen zijn, draaien de magneet in de luidspreker in- en uitschakelen op 500 keer per seconde – twee milliseconden aan en uit, en herhaalde.
Het compileren van uw programma en download het naar de ' 2313. Wat gebeurt er? Met de luidspreker hoort activeren bij 500 Hz (Hertz, of keer per seconde) u een Toon vanuit de spreker. Wijzig de vertragingstijden, wat gebeurt er? Zie hoe groot kunt u de vertragingstijd voordat het niet langer klinkt een Toon, maar eerder een aantal klikken. Probeer verschillende waarden voor de twee vertragingstijden; Wat doet dat met de tonen?
Er is één meer instructie set die ik wil voeren; de lus for... Next. Deze lus bevat de mogelijkheid voor de controller te houden van de telling van het aantal keren dat de lus wordt uitgevoerd. In het basis-formaat is de lus begint met een voor instructie, waarna het eindigt met een volgende verklaring. U kunt best begrijpen deze lus met een voorbeeld:
Voor cntr = 1 tot 100
set PortB.4
waitms 1
Reset PortB.4
waitms 1
Volgende cntr ' schakelen luidspreker lijn 100 keer
Merk de gelijkenis met andere lussen die hebben we al onder; Er is een begin van de lus (de voor verklaring) en het einde (de volgende verklaring) en alles binnen krijgt een bepaald aantal keren herhaald. Aan het begin van de loop, de voor instructie wordt gebruikgemaakt van een bijzonder gebied van geheugen, een variabele, om een aantal genoemd. De variabele krijgt de naam "cntr", en het eerste ligt gelijk aan het eerste nummer in de voor-instructie (in dit geval 1). De opdrachten binnen de lus worden vervolgens uitgevoerd. Aan het eind van de lus, met de volgende instructie, twee dingen gebeuren: eerst de variabele wordt vergeleken met het hoogste nummer in het instructie (in dit geval 100), als het getal is gelijk (of hoger) dan de volgende instructie sluit de lus, en het programma blijft na de lus. Ten tweede, als de variabele, "cntr", is minder dan het maximum aantal (100), vervolgens "cntr" wordt verhoogd, en programmeerstroom lussen terug naar de verklaring.
Om een variabele gebruikt, moet u instellen naar het bijzondere gebied van geheugen. Om dit te doen moet u een nieuwe configuratie-instructie toevoegen. Na de uitgang config-instructie, voeg de volgende regel:
Dim cntr als byte
Dit zal één byte van geheugen (een geheugenlocatie) te houden van het nummer dat we cntr noemen gereserveerd. Één byte kan een willekeurig geheel getal tussen 0 en 255 bevatten. We gebruiken deze vreemde spelling van teller omdat de woord-teller zelf is gereserveerd voor BASIC te gebruiken. Dus we alleen zijn naam veranderen en alles werkt prima. Als u wilt tijdens uw experimenteren, gebruik van meer dan 255 in uw lus for... Next, vergeet niet te wijzigen van de byte-parameter-Probeer lang. (Kijk naar de BASCOM-handleiding voor meer informatie over variabelen, en de byte en de lange typen.)
Dus, de eerste keer door de lus, de variabele "cntr" zal de nummer één. Aan het eind van de lus, de volgende instructie zal controleren en zien dat "cntr" minder dan 100 (de limiet, als instellen door de voor instructie,) zal verhogen "cntr" naar 2, en dan moeten de programma lus terug naar de verklaring.
De volgende keer door de lus, wordt alles herhaald, behalve dat "cntr" het nummer 2 bevat. Dit wordt herhaald, met de variabele "cntr" wordt verhoogd telkens wanneer, totdat zij 100 tot. Als "cntr" gelijk aan 100 is, zal dan de volgende instructie zeggen "dat is vaak genoeg door de lus, ga op de volgende verklaring."
Zoals u zien kunt, is dit een manier sommige stappen een aantal keer herhalen. Hoe helpt dat ons hier? Hoe zit het als we een lus schrijven om de spreker magneet aan en uit een bepaald aantal keren in-/ uitschakelen? Aangezien we weten hoe lang laten we de magneet op en hoe lang we laten de magneet af, kunnen we berekenen hoe lang het duurt om de Toon. Een andere blik op de bovenstaande lus; Hoe lang zal dat duren? Als we bedenken dat de magneet is ingeschakeld voor 1 milliseconde en vervolgens uitgeschakeld voor een andere 1 milliseconde, en vervolgens het lussen voor 100 keer, wij vinden dat de Toon voor 200 milliseconden, of 1/5 duren moet th van een seconde. Eigenlijk, het duurt iets meer dan 200 milliseconden omdat elk van de andere instructies, met inbegrip van de verklaringen van de lus zelf, een kleine hoeveelheid tijd zal nemen. Echter, voor de toepassing van deze klasse, we kunnen negeren de overhead tijd-houd het enkel aan de achterkant van je geest, voor het geval u nodig betere timing later.
Tip: voor hogere frequenties, neem een kijkje op de BASCOM-AVR handmatige onder de verklaring van de waitus.
Ik denk dat mijn oude zaklamp liep weg met verlegenheid!