Lär dig mer om mikrokontroller (16 / 18 steg)
Steg 16: Göra ett Joyful ljud.
För vår nästa uppsättning experiment, kommer vi att ansluta högtalaren. Efter diagrammet ovan, lägga till en mer jumper tråd från port B.3. Diagrammet visar denna nya tråd i lila. Igen, skönheten i ett development kit är som mest av högtalaren kretsar är redan där. för att lägga till hela högtalaren kretsen, allt du behöver är en enda jumper tråd.
Överväga, för en minut, elektromagneten som du gjorde när du var liten (om du inte kommer ihåg att magneten görs genom att Linda en tråd runt en spik. Titta på diagrammet ovan. När du ansluter ändarna av kabeln till ett batteri, nageln blir magnetiserat och du kan plocka upp saker som papper-klipp.) En högtalare är mycket lik en elektromagnet; När du gör nuvarande flöde och stopp strömmar genom spolen på en högtalare, orsakar det ett membran att vibrera, gör ljud.
Nu, ta en titt på den Schematisk bild av kretsen som talare. Nu, att hålla med våra prejudikat av använder Port B för utdata och Port D för indata, Port B.3 styr talaren. Ta en titt på schematiskt, ovan. När porten B.3 är inställd på hög, kommer nuvarande flöde från marken genom högtalaren och till produktionen stift. Detta kommer att fungera på samma sätt som när du anslutit kabeländarna i din electro-magnet till ett batteri, och kommer att aktivera electro-magnet inuti högtalaren. När du exporterar en låg på Pin B.3, blir det ingen positiv punkt i banan, så att ingen ström flyter, och electro-magneten att stängas av.
På samma sätt kommer att vi brukade loopar slå lysdioderna på och av flera gånger, vi igen använda loopar att magnetisera och de magnetisera electro-magnet inuti högtalaren. Den största skillnaden blir att vi kommer att använda mycket kortare förseningstid inom våra slingor. Använder din mall, Lägg till följande program och spara den med ett namn som högtalare Test.
Config PortB = utgång
"Huvudprogrammet
Göra "växla högtalare linje
ställa in PortB.3
waitms 1
återställa PortB.3
waitms 1
Loop
Igen, ta en titt på detta program: vi ser en standardslinga, inget nytt här. Vi se även vi inne i slingan, bildat port B.4 (högtalare pin) hög, vänta 1millisecond och sedan återställa det tillbaka till låg och vänta på en annan 1 millisekund. Eftersom dessa uttalanden är inom en loop, detta kommer att upprepa, slå magneten i högtalaren på och av på 500 gånger per sekund – två millisekunder av och på, och upprepade.
Kompilera programmet och ladda ner den till 2313. Vad händer? Med talare bör aktivering vid 500 Hz (Hertz eller gånger per sekund) du höra en ton kommer från högtalaren. Prova att ändra fördröjningstiderna, vad händer? Se hur stort du kan få fördröjningstiden innan det inte längre låter som en ton, utan snarare ett antal klick. Prova med olika värden för två fördröjningstiderna; Vad gör som till toner?
Det är en mer uttalande som jag vill presentera; for...next slinga. Denna slinga finns möjlighet för den registeransvarige att hålla räkningen på hur många gånger det utför slingan. I det är grundläggande format, loopen börjar med en för uttalande, och då är det slutar med ett nästa uttalande. Du kan bäst förstå denna slinga med ett exempel:
För cntr = 1 till 100
ställa in PortB.4
waitms 1
återställa PortB.4
waitms 1
Nästa cntr "växla högtalare linje 100 gånger
Lägg märke till likheten med andra slingor som vi redan har täckts. Det är en början till slingan (den för uttalande) och ett slut (nästa uttalande) och allt inuti får upprepas ett antal gånger. I början av slingan, den för sats använder ett särskilt område av minne, heter en variabel, för att hålla ett tal. Variabeln ges namnet "cntr", och det första ligger lika med den första siffran i den för uttalande (i detta fall 1). Inuti for...next loop sedan utförs de kommandon. I slutet av slingan, med nästa uttalande, två saker hända: först variabeln är jämfört med det högsta numret i den för uttalande (i detta fall 100), om antalet är lika (eller högre) sedan nästa uttalande avslutas loopen och programmet fortsätter efter slingan. För det andra, om variabeln, "cntr", är mindre än antalet som gräns (100), sedan "cntr" ökas och programflöde loopar tillbaka till den för uttalande.
Använda en variabel, måste du ställa in det särskilda området i minnet. För att göra detta måste du lägga till en ny konfiguration uttalande. Efter utgång config uttalande, tillägga den följande lina:
Dim cntr som byte
Detta kommer att avsätta en byte i minnet (en minnesplats) att hålla antalet som vi kallar cntr. En byte kan hålla ett heltal mellan 0 och 255. Vi använder denna konstiga stavning av counter eftersom ordet räknaren själv är reserverad för BASIC ska användas. Så vi ändrar bara namnet och allt fungerar bra. Om under din experimenterar, vill du använda mer än 255 i din for...next loop, kom ihåg att ändra parametern byte-prova att använda länge. (Titta på BASCOM manualen för mer information om variabler, och byten och långa typer.)
Så, första gången genom öglan, kommer variabeln "cntr" hålla nummer ett. I slutet av slingan, nästa uttalande kommer att kolla och se att "cntr" är mindre än 100 (gränsen, som ställs in genom den för satsen) kommer att öka "cntr" till 2, och då har programmet loop tillbaka till den för uttalande.
Nästa gång genom öglan, upprepas allt, förutom att "cntr" innehåller nummer 2. Detta upprepas med variabeln "cntr" som ökas varje gång, tills den når 100. När "cntr" är lika med 100, kommer att då nästa uttalande säga "det är tillräckligt många gånger genom öglan, gå till nästa uttalande."
Som ni kan se, är detta ett sätt att upprepa vissa steg ett visst antal gånger. Hur hjälper oss här? Hur omkring om vi skriver en slinga för att växla talaren magneten på och av ett visst antal gånger? Eftersom vi vet hur länge vi lämna magneten på och hur länge vi lämna magneten bort, kan vi beräkna hur länge tonen räcker. Ta en titt på ovanstående loopen; Hur länge kommer det sista? Om vi anser att magneten är till för 1 millisekund och stänger sedan av under en annan 1 millisekund, och sedan det loopar för 100 gånger, finner vi att tonen ska pågå för 200 millisekunder, eller 1/5: e sekund. Faktiskt, det kommer att pågå i drygt 200 millisekunder eftersom var och en av de andra rapporterna, inklusive uttalanden av loop själva, kommer att ta en liten mängd tid. Men för tillämpningen av den här klassen, kan vi bortse från overhead tid – bara hålla det på baksidan av ditt sinne, om du behöver bättre timing senare.
Tips: för högre lägrade frekvenser, ta en titt på BASCOM-AVR manuell under waitus uttalande.
Jag tror att min gamla ficklampa bara sprang iväg med förlägenhet!