Stap 4: Ken uw grenzen mcu en sluit de record drukknop
Waarschuwing!!: voordat u om het even welk verder moet u weten dat alle mcu de grenzen hebben op hoeveel stroom ze kunnen leveren en zinken. Levering huidige is hoeveel stroom de pin verlaat en het gaat in sommige externe apparaten. Wastafel huidige betekent dat de stroom vloeit in de pin en door de mcu aan de grond (Vss in dit geval). De limieten voor de BS2 zijn als volgt (dubbel te controleren de "Basic Stamp syntaxis en Reference Manual," pagina 14, tabel 1.2): elke pin kan zinken 25 mA en bron 20 mA. Elke groep van pins, P0 - P7 en P8 - P15 moet niet collectief zinken meer dan 50 mA of bron 40 mA als met behulp van een externe regulator voor 5 V. Deze nummers zijn wastafel 50 mA of bron 40 mA voor alle I/O pinnen als met behulp van de ingebouwde 5 V regulator.
ALS U DEZE LIMIETEN OVERSCHRIJDT, BESCHADIGT U UW MCU!!! Soms gewoon los je een I/O pin maar ergere dingen zou kunnen gebeuren. Dit betekent dat u wilt gebruiken voor uw de wet van Ohm, V = IR.
Je hebt waarschijnlijk gemerkt op dit punt dat de record knoppen en de tempo-pot op P15 en P14, respectievelijk en de rest van de i/o-pinnen. Dit is te wijten aan de informatie in de waarschuwing hierboven.
Op met de show:
De record-knop moet worden aangesloten. Verbinden met een jumper-draad van P15 PB0 in de drukknop sectie als u een VOB gebruikt. Zoniet sluit een NOPB zoals in het schema hieronder weergeven. Dit gebeurt ook als de manier waarop die het voorontwerp van begroting haar drukknoppen wired behalve om het even wat heeft kan worden aangesloten op het VOB niet alleen P15.
Kijk naar de foto om te zien:
U kunt de groene draad zien omdat het een boog over het solderless breadboard van P15 te PB0 op het voorontwerp van begroting uitmaakt.
Om de drukknop werken u zal zeer waarschijnlijk de opdracht knop. Mijn instructie ziet er als volgt uit:
KNOP recBtn, 0, 255, 0, btnData, 1, opnemen
Controleer de "Basic Stamp syntaxis en Reference Manual" voor een grondige uitleg. Hier, recBtn is de pin # 0 is de Downstate, 255 is de vertraging, 0 is het tarief, btnData is de werkruimte, 1 is TargetSate en Record is het adres. De recBtn is 15 voor P15 en 255 wordt gebruikt omdat ik wil een auto-repeat niet maar willen nog steeds de ontdendering. Tarief is 0 omdat ik niet wil dat elke meting van cycli. Ik gaf btnData slechts een Byte van de variabele ruimte omdat de nummers laag moeten hoe dan ook zijn zou. De TargetState is 1 omdat ik wil dat de knop voor het activeren van de BS2 opnamefunctie te selecteren wanneer deze wordt nog steeds ingedrukt. Stellen op 0 zou daardoor naar Record te gaan toen het werd uitgebracht. Het adres is de Record. Record is de subroutine die wordt geactiveerd wanneer de knop wordt gedrukt.
Hier is een uitstekende plek om te oefenen programmering technieken. U hoeft niet te schrijven hier in één keer alle afgewerkte code. Uw Record subroutine zou slechts een of twee DEBUG verklaringen. Hierdoor zal u vertellen dat uw knop instructie werkte en de BS2 ingestuurd opnamemodus. Als u probeert te schrijven alle code in een keer dan ben je vaak gefrustreerd vanwege de problemen die moeten eerst worden gesorteerd.
Item een) schrijven slechts een debuginstructie zoals:
"U zijn in Record Mode" DEBUG
Punt b) een tweede en misschien een derde instructie als volgt toevoegen:
DEBUG? potFreqVal
DEBUG? potTempoVal
Punt c) wanneer u de juiste woorden verschijnen in uw Terminal van de DEBUG u weet dat u in de opnamemodus bent, maar u ook weet dat het programma is met behulp van de variabelen van de twee potten hebt voor frequentie en tempo zien. Nu kun je werken op het verkrijgen van de rest van de opnamemodus om te werken, om ervoor te zorgen dat de frequenties worden geplaatst in uw array.
Voor deze stap besloten heb ik om een reeks IF, ELSEIF-instructies gebruiken. Het lastige deel is het verkrijgen van een goede spreiding instellen en het maken van zeker u Boole-expressies hebben de juiste aantallen voor elke noot. Ik besloot om gewoon de ene comparator gebruiken voor elke uitdrukking in plaats van met behulp van twee.
Een Comparateur: <>, die staan voor minder dan of groter dan respectievelijk
Twee comparatoren: < = >, die staan voor minder of gelijk aan of groter dan of gelijk is aan respectievelijk =
De één comparator gebruiken als ik dacht dat het zou een beetje langer duren om te evalueren van de expressie met twee comparatoren in tegenstelling tot één vergelijkingslocatie.
Merk op dat in de definitieve versie van het programma op voorwaarde dat er drie reeksen van notities deel uitmaakt van drie subroutines zijn. U moet de benodigde code na de indien ELSEIF verklaringen te nemen van de gesorteerde frequentie-waarde en het spelen zodat je kunt horen de toelichting die u selecteert door te draaien aan de potmeter. Als je wacht op te nemen die verklaringen ik betwijfel of dat de Record-subroutine werkt zoals gepland. Voor de eerste twee reeksen van IF, ELSEIF verklaringen bevat de laatste ELSEIF-instructie een instructie om naar het volgende bereik van notities met behulp van de opdracht GOSUB Subroutine_Name.
Merk op dat de knop-instructie wordt gebruikt in de tweede (van drie) keer hier. Hierdoor is de persoon te druk op de knop op elk gewenst moment en hebben het programma verlaten de opnamemodus en switch in afspeelmodus. Eigenlijk, de BS2 eigenlijk zal doorlopen alle opeenvolgende code voor zijn komst op de knop instructie zodat u even wachten wellicht voordat de verandering gebeurt.
Belangrijke TIP: Er zijn een paar functies beschikbaar met de Basic Stamp Editor IDE dat u vertrouwd met het gebruik van zou moeten worden. Twee zeer nuttige degenen zijn de syntaxis controleren en de geheugen kaart. Ik zeg dit hier, want toen ik schreef de verklaringen van de indien ELSEIF genest kwam ik erachter dat je kunt alleen 16 ELSEIF verklaringen naast de opening als-instructie. Met behulp van de geheugen kaart dit onder mijn aandacht gebracht. De syntaxis controleren zal hetzelfde doen. Hebt u meer zal dan het verschijnen wanneer u deze functies gebruikt. Geheugen kaart ons nuttig om erachter te komen hoeveel variabele ruimte u hebt verlaten. Het laat ook u weet hoeveel meer ruimte hebt om code te schrijven. Syntaxiscontrole is goed uit te voeren voordat u probeert uw programma uit te voeren. Het zal u laten weten zeer snel als geen syntaxis is buiten de orde zonder de extra tijd wilt openen van het mcu. Zodra u genoeg tijd programmering mcu besteden, zult u beide functies.