Sunteți pe pagina 1din 80

Capitolul 1: Notiuni de baza

ACTIVITATEA 1: Achizitionarea software-ului BASIC Stamp (versiunea 2.0 sau mai noua) este software-ul care v va folosi n cele mai multe activiti i proiectele din acest text. Vei folosi acest acest software pentru a scrie programe care vor rula in modulul BASIC Stamp. Putei folosi de asemenea, acest software pentru a afisa mesajele trimise de BASIC Stamp care va vor ajuta sa intelegeti semnificatiile liniilor de cod. ACTIVITATEA 2: Instalarea software-ului Kitul de instalare al lui BASIC Stamp Editor poate fi downloadat de pe web site-ul Parallax, sau poate fi localizat pe CD-ul Parallax. Instalarea softaware-ului BASIC Stamp Editor se realizeaza prin rularea pachetului de instalare si parcurgerea pasilor de instalare aferenti. ACTIVITATEA 3: Instalarea hardware-ului si testarea sistemului Modulul BASIC Stamp are nevoie sa fie conectat la o sursa de alimentare pentru a putea functiona. De asemenea trebuie sa fie conectata la un PC pentru a putea fi programata. Dup ace se fac aceste conexiuni, se poate utiliza BASIC Stamp Editor pentru a testa sistemul. ACTIVITATEA 4: Primul program Primul program pe care il vom scrie si testa va spune BASIC Stamp-ului sa trimita un mesaj PC-ului sau laptopului. Software-ul BASIC Stamp Editor are abilitatea de a detecta si afisa aceste mesaje pe care le vom vedea in curand. ' 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 Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin

ACTIVITATEA 5: Cautarea raspunsurilor In cele doua activitati pe care tocmai le-am incheiat, au fost introduce doua comenzi PBASIC: DEBUG si END. Putem afla mai multe despre aceste comenzi si cum pot fie le utilizate le putem cauta ori in Help-ul BASIC Stamp Editor sau in manualul BASIC Stamp. ACTIVITATEA 6: Introducerea in codul ASCII In Activitatea 4 am folosit DEC-ul de formatare in comanda DEBUG pentru a afisa valoarea decimala a terminalului DEBUG. Dar daca folosesti comanda DEBUG urmata de un numar fara formator, BASIC Stamp-ul va citi acel numar ca si un cod ASCII. Ca de exemplu: '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 Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin ACTIVITATEA 7: Cand ai terminat Este important sa deconectezi sursa de alimentare din BASIC Stamp si din placuta de dezvoltare. In primul rand bateriile vor tine mai mult daca placuta nu este conectata la sursa de alimentare. In al doilea rand, in curand vei construi circuite pe placuta de dezvoltare, in zona de prototipare. SUMAR Acest capitol v-a indrumat prin urmatoarele: O introducere a unor dispositive care contin microcontrolere; O introducere a modulului BASIC Stamp; Un tur prin cele mai interesante inventii facute cu modulele BASIC Stamp;

De unde se poate achizitiona software-ul BASIC Stamp Editor pe care il vom folosi in toate experimantele; Cum se instaleaza software-ul BASIC Stamp Editor; O introducere a modulului BASIC Stamp si a placutei de dezvoltare; Cum se instaleaza hardware-ul BASIC Stamp; Cum se testeaza software-ul si hardware-ul nostrum; Cum se scrie si ruleaza un program PBASIC; Utilizarea comenzilor DEBUG si END; Utilizarea controlului caracterelor CR si a formatorului DEC; Cum se utilizeaza Help-ul si manualul lui BASIC Stamp Editor; O scurta introducere a codului ASCII; Cum se deconecteaza de la sursa de alimentare placuta de dezvoltare; Intrebari: Ce este un microcontroller? Modulul BASIC Stamp este un microcontroller sau contine unul? Ce vreo idee daca aplicatiile ca si ceasul radioului sau un telefon mobil contin un microcontroller? Ce semnifica un apostrof la inceputul unei linii de cod a programului PBASIC? Ce comenzi PBASIC ai invatat in acest capitol? Sa spunem ca vrem sa luam o pauza de la proiectul nostru in BASIC Stamp, pentru a lua o gustare, sau poate vrem sa luam o pauza mai lunga, si ne intoarcem la proiect in cateva zile. C ear trebui intotdeauna sa facem inainte de a lua o pauza?

Raspunsuri: Un microcontroller este un fel de calculator in miniature care se poate gasi in produsele electronice. Modulul BASIC Stamp contine un microcontroller numit PIC 16C57. In cazul in care aparatul are butoane si un afisaj, acestea sunt bune indicii care ne spun ca , acesta are in interiorul sau un microcontroller. Un comentariu. DEBUG si END. Deconecteaza sursa de alimentare de la proiectul BASIC Stamp.

Exercitii: Explicati ce rol are asterixul in comanda urmatoare: DEBUG DEC 7 * 11 Inmulteste cei doi operatori 7 si 11, rezultand produsul 77. Asterixul semnifica semnul inmultirii.

Ghiciti ce afiseaza terminalul DEBUG daca rulam comanda urmatoare: DEBUG DEC 7 + 11 Terminalul DEBUG va afisa: 18

Exista o problema cu aceste doua comenzi. Cand rulam codul, numerele pe care le afiseaza sunt unite in asa fel incat arata ca si un numar mare in loc sa afiseze doua numere mici. Modificati cele doua comenzi in asa fel incat raspunsurile sa fie afisate pe doua linii diferite in terminalul DEBUG.

DEBUG DEC 7 * 11 DEBUG DEC 7 + 11 Pentru a rezolva problema se adauga un car de retur CR, caracterul de control: DEBUG DEC 7 * 11 DEBUG CR, DEC 7 + 11 Proiect: Folositi DEBUG pentru a afisa solutia problemei matematice: 1+2+3+4. '{$STAMP BS2} '{$PBASIC 2.5} DEBUG "What's 1+2+3+4?" DEBUG CR, "The answer is: " DEBUG DEC 1+2+3+4 END Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin Care linii de program le putem sterge din programul FirstProgramYourTurn.bs2 daca plasam comanda aratata mai jos pe linia de dinaintea comenzii END in program? DEBUG "What's 7 X 11?", CR, "The answer is: ", DEC 7 * 11

Raspuns: ' 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

Iesirea de la terminalul DEBUG este: Hello, it's me, your BASIC Stamp! What's 7 X 11? The answer is: 77

Capitolul # 2: LED-uri In acest capitol am studiat rolul diodelor emitoare de lumin in aplicatiile care folosesc microcontroler. ACTIVITATEA # 1: construirea si testarea circuitului cu LED-uri Aceast activitate se concentreaz pe construirea i testarea a dou circuite diferite cu LED-uri. Primul circuit este cel care face LED-ul emite lumin.Al doilea circuit este cel care face acesta sa nu emit lumina. ACTIVITATEA # 2: controlul ON / OFF cu Basic Stamp In aceast activitate, vei conecta circuitul cu LED-uri la Basic Stamp i realiza programul de a porni sau stinge LED-ul. 'What's a Microcontroller - LedOnOff.bs2 'Turn an LED on and off. Repeat 1 time per second indefinitely. '{$STAMP BS2} '{$PBASIC 2.5} DEBUG "The LED connected to Pin 14 is blinking!" DO HIGH 14 PAUSE 500 LOW 14 PAUSE 500 LOOP

Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin ACTIVITATEA # 3: numrarea i repetarea In aceast activitate, vom face circuitul cu LED-uri sa lumineze de 10 ori folosind Basic Stamp i realiza programul de a porni sau stinge LED-ul prin numarare. ' 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 Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin ACTIVITATEA # 4: construirea i testarea unui circuit cu 2 LED-uri n aceast activitate, vom repeta testul cu circuitul cu LED-uri de la activitatea # 1 si 2 ,dar pentru 2 LED-uri. ' What's a Microcontroller - TestSecondLed.bs2

' Turn LED connected to P15 on and off. ' Repeat 1 time per second indefinitely. ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Program Running!" DO HIGH 15 PAUSE 500 LOW 15 PAUSE 500 LOOP Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin

' What's a Microcontroller - FlashBothLeds.bs2 ' Turn LEDs 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 LOOP Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin ACTIVITATEA # 5: utilizarea directiei curentului pentru a controla un LED bi-color In acesta activitate se va conecta un circuit cu un LED bi-color la Basic Stamp si se va realiza programul care sa schimbe directia curentului astfel incat LED-ul sa lumineze in 2 culori. ' 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 LOW 15 HIGH 14 PAUSE 500 LOW 15 ' Off ' Green ' Red

LOW 14 PAUSE 500 LOOP Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin REZUMAT BASIC Stamp poate fi programat pentru a comuta un circuit cu o diod emitoare de lumin (LED), pornit sau oprit. Indicatorii cu LED-uri sunt utile ntr-o varietate de locuri inclusiv multe monitoare de calculator, uniti de disc, i alte dispozitive.LED-ul a fost a introdus, mpreun cu o tehnica pentru a identifica anodul i catodul. Un circuit cu LED trebuie s aib un rezistor pentru a limita curentul care trece prin ea. Rezistorii au fost introdusi mpreun cu una dintre mai multe scheme comune de codificare care se poate utiliza pentru a afla valoarea. BASIC Stamp comuta un circuit cu LED-uri pe pornit / oprit prin conectarea pe plan intern a unui pin I / O pe Vdd sau Vss. Comanda HIGH poate fi utilizat pentru a face BASIC Stamp sa conecteze la nivel intern unul dintre pinii I / O pini la Vdd, i comanda LOW poate fi utilizat pentru conectarea pe plan intern pini de I / O la Vss. Comanda PAUSE este folosita pentru a face BASIC Stamp sa nu execute comenzi pentru un interval de timp. Acest lucru a fost utilizat pentru a face LEDurile sa fie aprinse sau stinse pentru anumite intervale de timp. Acest interval este determinat de numarul utilizat in argumentul de durata a comanzii PAUSE. Secventa DO ... LOOP poate fi folosita pentru a crea o bucl infinit. Comenzile dintre DO i LOOP se vor executa de cate ori apar. Chiar dac acest lucru se numete o bucla infinita , programul poate fi restartat prin deconectarea i reconectarea la o sursa de putere sau apsarea i eliberarea butonului Reset. Un nou program, de asemenea, poate fi descrcat la BASIC Stamp, iar acest lucru va terge programul cu bucl infinit. Direcia actual i polaritatea tensiunii au fost introduse cu ajutorul unui LED bicolor. n cazul n care tensiunea se aplic pe circuitul cu LED, curentul va trece prin el ntr-o direcie, i straluceste o anumit culoare. Dac polaritatea tensiunii se

inverseaz, curentul parcurge circuitul n direcia opus i ea straluceste-o culoare diferit. ntrebri: 1. Care este numele acestei litere greacesti: , i la ce fel de unitate de masura se foloseste ? 2. Care Rezistenta ar permite mai mult curent prin circuit, una de 470 sau de 1000 ? 3. Cum conectai dou fire utiliznd un breadboard? Poi folosi un breadboard pentru a conecta patru fire mpreun? 4. Ce trebuie ntotdeauna s faci nainte de a modifica un circuit care ai construit pe un breadboard? 5. Ct timp va dura PAUSE 10000? 6. Cum realizezi ca BASIC Stamp sa nu faca nimic pentru un minut ntreg? 7. Care sunt diferitele tipuri de variabile? 8. Poate un octet ine valoarea de 500? 9. Ce va face comanda HIGH 7 ? Exerciii : Desenai schema unui circuit cu LED-uri ca cel pe care n lucrare la activitatea # 2, dar conectarea circuitului la P13 in loc de P14. Explicai modul n care trebuie modificat LedOnOff.bs2 de la pagina 48, astfel nct acesta va face LED-ul sa palpaia de patru ori pe secund. Explicai modul n care trebuie modificat LedOnOffTenTimes.bs2, astfel nct circuitul cu LED va palpaii de 5000 de ori nainte de a se opri. Sugestie: va trebui s se modifice doardou linii de cod. Proiect :

Realizati o numrtoare invers de 10 secunde folosind un LED galben i unul bi-color.Faceti in asa fel incat LED-ul bi-color sa se aprinda rou timp de 3 secunde. Dup 3 secunde, modificai sa devina verde. Cand acesta isi schimb culoarea n verde,LED-ul galben va palpaii o dat pe secund timp de zece secunde. n cazul n care LED-ul galben se face intermitent, LED-ul bi-color ar trebui s comute napoi la rou i ramana asa. Solutii : 1. Omega se refer la ohmi, care masoara cat de puternic ceva rezista unui debit de curent. 2. O rezistenta de 470 : valori mai mari rezista mai puternic dect valorile mai mici, prin urmare, valori mai mici permit mai mult curent sa curga. 3. Pentru a conecta 2 fire, conectai 2 fire n acelai rnd din 5 prize. Pentru a putea conecta 4 fire , toate cele 4 fire se conecteaza n acelai rnd din 5 prize. 4. Deconectai de la sursa de putere. 5. 10 secunde. 6. PAUZ 60000 7. Bit, Nib, Byte, i Word 8. Nu,cea mai mare valoare ce se poate stoca intr-un octet este de 255. Valoarea 500 este n afara intervalului de octet. 9. HIGH 7 va provoca BASIC Stamp sa conecteze intern I / O pin la P7 Vdd. E1.Durata PAUSE trebuie s fie redus la 500ms / 4 = 125ms. Pentru a utiliza I / O pin P13, 14 HIGH i LOW 14 au fost nlocuite cu HIGH 13 si LOW 13.

E2. Variabila counter trebuie s fie schimbata la dimensiunea Word, iar declaraia For care urmeaz s fie modificata pentru a numara de la 1 la 5000.

P1.Schema cu LED-ul bi-color pe stnga, este neschimbat de la Figura 2-20 de la pagina 64.Schema cu LED-ul galben se bazeaz pe Figura 2-11 de la pagina 48. Pentru tema proiectului P14 a fost schimbat n P13.

' 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 ' Red for three seconds HIGH 15 LOW 14 ' Bi-color LED Red

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 Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin Capitolul 3: INTRARI DIGITALE: Butonul In acest capitol am studiat rolul butoanelor in aplicatiile care folosesc microcontroler. ACTIVITATEA 1: Testarea unui buton folosind un circuit cu LED Daca poti sa folosesti un buton pentru a trimite semnal HIGH(1) sau LOW(0) catre un Basic Stamp, poti controla un LED cu un buton? Raspunsul este DA si in acesta activitate vei invata sa folosesti si sa testezi un buton: Butonul se leaga la Vdd, apoi se leaga in serie cu un LED si cu o rezistenta pentru a nu arde LED-ul si la masa(Vss). Cand se apasa butonul curentul trece de la Vdd la Vss prin LED si rezistenta si acesta se aprinde. AVTIVITATEA 2: Citirea unui buton cu Basic Stamp ' Bi Color LED Red ' Yellow LED off ' Yellow LED on ' Bi-color LED Green

In acesta activitate se va conecta un circuit cu buton la Basic Stamp si se va afisa pe ecran daca butonul este apasat sau nu. Se va scrie un program PBASIC care verifica starea butonului si o afiseaza in terminalul DEBUG. ' 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 Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin

ACTIVITATEA 3: Controlul cu ajutorul unui buton a unui circuit cu LED: Basic Stamp poate fi programata sa ia decizii in functie de intrarile pe care le citeste. In acesta activitate vom programa un LED sa palpaie de mai multe ori pe secunda cand butonul este apasat. ' What's a Microcontroller - PushbuttonControlledLed.bs2 ' Check pushbutton state 10 times per second and blink LED when pressed. ' {$STAMP BS2} ' {$PBASIC 2.5} DO DEBUG ? IN3 IF (IN3 = 1) THEN HIGH 14 PAUSE 50 LOW 14 PAUSE 50 ELSE PAUSE 100 ENDIF LOOP Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin

ACTIVITATEA 4: Doua butoane care controleaza doua circuite cu LED Sa mai adaugam un buton la proiect si sa vedem cum functioneaza. Pentru a face lucrurile un pic mai interesante sa mai adaugam un circuit cu LED si sa folosim al doilea buton pentru al controla. ' 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 Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin ACTIVITATEA 5: Testul timpului de reactie Se va realiza un circuit care sa masoare timpul de reactie al unei persoane. ' 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. DEBUG "Press and hold pushbutton.", CR, ' Display reaction instructions. "to make light turn red.", CR, CR, "When light turns green, let", CR,

"go as fast as you can.", CR, CR DO ' Begin main loop. DO ' Nested loop repeats... LOOP UNTIL IN3 = 1 ' until pushbutton press. LOW 14 ' Bi-color LED red. HIGH 15 PAUSE 1000 ' Delay 1 second. HIGH 14 ' Bi-color LED green. LOW 15 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, ' Display time measurement. " ms.", CR, CR, "To play again, hold the ", CR, ' Play again instructions. "button down again.", CR, CR LOOP ' Back to "Begin main loop". Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin SUMAR: Acest capitol introduce butonul si circuitele banale cu buton. De asemenea acest capitol ne invata cum sa construim un circuit cu buton cu care sa masuram starea acestuia sau a mai multor butoane. BASIC STAMP a fost programat sa ia decizii in functie de starea butonului sau butoanelor si foloseste informatia pentru a aprinde unul sau mai multe LED-uri. De asemenea s-a realizat un test care masoara timpul de reactie al unei persoane. De asemenea in acest capitol am invatat sa citim valorile butoanelor folosind variabilele existente in BASIC STAMP (IN3, IN4), precum si luarea deciziilor bazate pe valorile IN3 si IN4 utilizand IF, THEN, ELSE. Pentru a folosi mai multe conditii sau folosit si operatorii AND si OR. De asemena am folosit o bucla DO...LOOP. INTREBARI: 1. Care este diferena dintre trimiterea i primirea de semnale de tip High si Low folosind BASIC Stamp?

Trimiterea semnalelor foloseste I/O pin ca output pe cand primirea semnalelor foloseste I/O pin ca input 2. Ce inseamna "normal deschis" n ceea ce privete un buton? Normal deschis inseamn ca butonul in starea lui initiala nu inchide circuitul 3. Ce se ntmpl ntre bornele unui buton normal deschis, atunci cnd il apsail? Decalajul dintre terminale este traversat de un metal conductor. 4. Care este valoarea lui IN3 atunci cnd un buton se conecteaza la Vdd? Caree este valoarea lui IN3 atunci cnd un buton se conecteaza la Vss? IN3 = 1 atunci cnd butonul se conecteaza la Vdd. IN3 = 0 atunci cnd se conecteaz la Vss 5. Ce inseamna DEBUG ? dar IN3 ? IN3 trimite valoarea IN3 la terminalul de Debug. 6. Ce fel de blocuri de cod pot fi folosite pentru luarea deciziilor pe baza valorilor unuia sau a mai multor butoane? IF ... THEN ... ELSE i IF ... ELSEIF ... ELSE. 7. Ce face HOME in comanda DEBUG HOME? Trimite cursorul in stanga sus a terminalului de debug

EXERCITII: 1. Explicati cum se poate modifica ReadPushButton.bs2 astfel incat sa se citeasca valoarea butonul o data pe secunda nu o data la 0.25 secunde. Pentru a schimba se modifica valoarea pausei din 250 in 1000 DO DEBUG ? IN3 PAUSE 1000 LOOP 2.Explicati cum se poate modifica ReadPushButton.bs2 astfel incat citeste un circuit cu buton conectat la pinul 6 Se va modifica IN3 cu IN6. DO DEBUG ? IN6 PAUSE 250 LOOP

PROIECT: Modificarea testului timpului de reactie astfel incat sa poata fi folosit de doua persoane simultan: ' 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 Word ' Time score of player A timeCounterB VAR Word ' Time score of player B DEBUG "Press and hold pushbuttons", CR, ' Display reaction ' instructions. "to make light turn red.", CR, CR, "When light turns green, let", CR, "go as fast as you can.", CR, CR DO ' Begin main loop. DO ' Loop until both press ' Nothing LOOP UNTIL (IN3 = 1) AND (IN4 = 1) LOW 14 ' Bi-color LED red. HIGH 15 PAUSE 1000 ' Delay 1 second. HIGH 14 ' Bi-color LED green. LOW 15 timeCounterA = 0 ' Set timeCounters to zero timeCounterB = 0 DO PAUSE 1 IF (IN3 = 1) THEN ' If button is still down, timeCounterA = timeCounterA + 1 ' increment counter ENDIF IF (IN4 = 1) THEN timeCounterB = timeCounterB + 1 ENDIF 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 ' Play again instructions. DEBUG "buttons down again.", CR, CR LOOP ' Back to "Begin main Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin

Capitolul # 4: Controlul mi crii

ACTIVITATEA # 1: Conectarea i testarea SERVO n aceast activitate, vom conecta un servomotor la o surs de alimentare i la BASIC Stamp. Apoi vom verifica dac motorul fun ioneaz corect, programnd BASIC Stamp-ul s trimit semnale servomotorului care va controla pozi ia acestuia. Codul: ' {$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 Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin ACTIVITATEA # 2: Controlul pozi iei prin intermediul calculatorului Fabrica de automatizare implic adesea microcontrolere ce comunic cu calculatoare mai mari. Microcontrolere citesc datele de la senzonri si le trimit calculatorului principal. Calculatorul principal interpreteaz i analizeaz datele senzorului, apoi trimite informa ii privind pozi ia napoi microcontrolerului. Microcontrolerul ar putea apoi s modifice viteza unui conveior, pozi ia unui robot ce sorteaz sau alt sarcin mecanizat controlat cu servomotor. Codul: ' {$STAMP BS2} ' {$PBASIC 2.5} counter Var Word pulses Var Word duration Var 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 Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin ACTIVITY #3: Convertirea pozi iei la mi care n aceast activitate vom programa servomotorul s i schimbe pozi ia la curse diferite. Fcnd acest lucru, vom face ca axul servomotorului s se roteasc la diferite viteze. Putem folosi aceast tehnic pentru a efectua controlul mi carii servomotorului n loc de pozi ie. Codul: ' {$STAMP BS2} ' {$PBASIC 2.5} counter VAR Word DO DEBUG "Pulse width increment by 8", CR FOR counter = 500 TO 1000 STEP 8 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 Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin ACTIVITY #4: PUSHBUTTON CONTROLLED SERVO n aceast capitol avem scrise programe care fac ca servomotorul s treac printr-un set de mi cri, iar noi de inem controlul servomotorului folosind terminalul Debug. De asemenea putem programa BASIC Stamp-ul s controleze servomotorul folosind pe intrri butoane (pushbutton). n aceast activitate vom:

construi un circuit cu butoane pentru controlul servomotorului. programarea BASIC Stamp-ului pentru a controla servomotorul folosind pe intrri butoane. Un buton face ca servomotorul s se roteasc ntr-o direc ie, iar cellalt n cealalt direc ie. Atunci cnd nici un buton nu este apsat servomotorul i pstreaz pozi ia. Codul: ' {$STAMP BS2} ' {$PBASIC 2.5} duration VAR Word duration = 750 DO IF IN3 = 1 THEN IF duration > 500 THEN duration = duration - 25 ENDIF ENDIF IF IN4 = 1 THEN IF duration < 1000 THEN duration = duration + 25 ENDIF ENDIF PULSOUT 14, duration PAUSE 10 DEBUG HOME, DEC4 duration, " = duration" LOOP Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin Rezumatul n acest capitol am nva at s controlam mi carea unui servomotor prin intermediul unui microcontroler. Un servomotor este un dispozitiv care se rote te, i i men ine acea pozi ie, pe baza semnalelor electronice pe care le prime te. Aceste semnale sunt sub forma de impulsuri ce dureaz ntre 1 si 2 ms, i trebuie s fie trimise la fiecare 20 ms pentru ca servomotorul s i men in pozi ia. Un programator poate s foloseasc comanda PULSOUT pentru a face ca BASIC Stamp-ul s trimit aceste semnale. Deoarece trebuie s fie trimise impulsuri la fiecare 20ms pentru ca servomotorul s i men in pozi ia, comenzile PULSOUT si PAUSE sunt de obicei plasate ntr-o bucl. Pot fi folosite variabile pentru a stoca valorile folosite n argumentul Duration (durat) al

comenzii PULSOUT. Acest lucru face ca axul servomotorului s se roteasca n trepte. n acest capitol au fost prezentate cteva moduri pentru a da valori variabilelor. Variabila poate primi valoarea de la terminalul Debug folosind comanda DEBUGIN. Valoarea variabilei poate s treac printr-o secven de valori dac aceea i variabil este folosit ca index intr-o bucla FOR...NEXT. Aceast tehnic poate fi folosit pentru a comanda servomotorul sa fac mi cri rapide de rota ie dintr-un sens n cellalt. Declara ii IF...THEN pot fi folosite pentru a monitoriza dac este apsat sau nu un anumit buton i n func ie de acest lucru se adug sau se scade valoarea variabilei utilizat n argumentul Duration (durat) al comenzii PULSOUT. Acest lucru permite att controlul pozi iei ct i rapiditatea de a schimba sensul de rota ie depinznd de cum este construit programul si cum sunt operate butoanele. ntrebri i rspunsuri : 1. Care sunt cele patru pri externe privind un servomotor? Pentru ce sunt folosite acestea? Plug - conecteaza servomotorul la tensiune Cable - legatura dintre servomotor si plug Horn - partea care se misca la servomotor Case - carcasa-contine motorul si circuite de control 2. Este un circuit cu LED-uri necesar pentru a face o lucrare cu servomotor? Nu, LED-urile ne ajut s vedem ce se ntmpl cu semnalele de control. 3. Ce comanda controleaza semnalul low time trimis la un servomotor? Ce comand controleaz time high? Low time este controlat cu comanda PAUSE. High time este controlat cu comanda PULSOUT. 4. Ce element de programare putei folosi pentru a controla durata timpului n care un servomotor sta intr-o poziie anume? FOR NEXT LOOP 5. Cum se utilizeaz Terminal Debug pentru a trimite mesaje la BASIC Stamp? Ce comanda de programare este folosita pentru a face BASIC Stamp sa primeasca mesaje de la Terminal Debug? Facei clic pe cmpul alb de mai sus de pe panoul de afiare al mesajelor n Terminal Debug si scrieti mesajul pe care vreti sa il trimiteti . Utilizai comanda DEBUGIN pentru a primi caracterele tastate n BASIC Stamp. 6. Ce tip de cod se poate scrie pentru a limita gama de miscare a unui servomotor?

Cod IF THEN Exerci ii : 1. Scri i un cod care face ca valoarea PULSOUT care controleaz servomoturul sa varieze de la o Durat (Duration) de 700 la 800, iar apoi napoi la 700, n incrementul lui (a) 1, (b) 4. a) FOR counter = 700 TO 800 PULSOUT 14, counter PAUSE 20 NEXT FOR counter = 800 TO 700 PULSOUT 14, counter PAUSE 20 NEXT b) Add STEP 4 to both FOR loops. FOR counter = 700 TO 800 STEP 4 PULSOUT 14, counter PAUSE 20 NEXT FOR counter = 800 TO 700 STEP 4 PULSOUT 14, counter PAUSE 20 NEXT Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin 2. Aduga i o bucl FORNEXT pentru rspunsul de la exerci iul 1b pentru a trimite 10 impulsuri nainte de a incrementa cu 4 argumentul Duration(durat) din PULSOUT. 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 Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin Proiect 1. Modifica i programul de la activitatea #2 (ServoControlWithDebug.bs2) pentru a monitoriza un ntreruptor. Dac ntrerupatorul (P3 pushbutton) este apsat, terminalul Debug s nu accete nici o comand. Ci ar trebui s afi eze: Apas butonul Start pentru a porni ma inria. Atunci cnd butonul Start (P4 pushbutton) este apsat, programul s fun ioneze normal. Dac aimentarea este deconectat i reconectat, programul ar trebui s se comporte ca i cum ntreruptorul a fost apsat. Codul: ' {$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. ", CR ,CRSRUP 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 LOOP Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin

Capitolul 5: Masurarea rotatiei Activitatea 1: Construirea si testarea circuitului potentiometric Plasarea rezistorilor de marimimi diferite in serie cu un LED au ca urmare trecerea diferitelor cantitati de curent prin circuit. Rezistenta mare in circuitul LED are drept cauza trecerea curentului in cantitati mici prin circuit, si LED-ul straluceste slab. Rezistente mici in circuitul LED impun trecerea unui curent mare prin circuit deci LED-ul straluceste mai puternic. Conectand terminalul W si A la potentiometru, in serie cu un LED putem sa il folosim pentru a regla rezistenta in circuit. Astfel putem regla intensitatea luminoasa a LED-ului. In aceasta activitate am utilizat un potentiometru ca o rezistenta variabila si l-am folosit pentru a schimba luminozitatea LED-ului. Componente folosite: Potentiometru -10K, Rezistor 220K, LED (orice culoare), fir de legatura. Am construit montajul din figura urmatoare:

Am rotit potentiometrul in diferite pozitii si am observat cum se schimba luminozitatea LED-ului. Rezistenta totala in circuit este de 220 plus rezistenta dintre termiinalele A si W ale potentiometrului. Aceasta valoare poate varia intre 0 si 10K . Activitatea 2: Masurarea rezistentei prin masurarea timpului Aceasta activitate a introdus o noua componenta numita condensator. Un condensator se comporta ca o baterie reincarcabila doar ca retine incarcarea pentru perioade scurte de timp. Aceasta activitate introduce de asemenea RC-time , care este o abreviere de la rezistor-condensator timp. RC-time masoara cat de mult ii trebuie condesatorului pentru a pierde o anumita cantitate din sarcina incarcata in timp ce alimenteaza un rezistor. Masurand timpul care ii trebuie condesatorului sa se descarce cu rezistente de diferite marimi si condesatori diferiti, vom deveni mai

familiari cu RC-time. In aceasta activitate s-a programat BASIC Stamp pentru a incarca un condesator si s-a masurat timpul in care acesta s-a descarcat printr-o rezistenta. Componente folosite: condesator de 3300F si 1000 F , rezistente de 220 , 470 , 1K , 2K , 10k . Schema circuitului este prezentata in figura de mai jos:

S-a masurat timpul de descarcare al unui condesator de 3300F si 1000 F pentru un rezistor de 470 , 1k , 2k , 10k si s-a completat tabelul aferent. Programul folosit pentru BASIC Stamp: ' {$STAMP BS2} ' {$PBASIC 2.5} timeCounter VAR Word counter VAR 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 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 Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin Activitatea 3: Citirea potentiometrului cu BASIC Stamp In aceasta activitate am construit un circuit RC-time pentru a citi potentiometrul si am folosit Basic Stamp pentru a masura timpul. Condesatorul pe care l-am folosit a fost foarte mic si masurarea timpului a durat cateva milisecunde. Desi masurarea a fost pe durate scurte de timp, Basic Stamp a oferit o indicatie excelenta a rezistentei intre terminalele A si W ale potentiometrului. Componente folosite: potentiometru 10 k , resitenta 220 k , fire de legatura, condesator 0,1 F si 0,01 F. Schema circuitului:

Programul pentru Basic Stamp: ' {$STAMP BS2} ' {$PBASIC 2.5} time VAR Word DO HIGH 7 PAUSE 100 RCTIME 7, 1, time DEBUG HOME, "time = ", DEC5 time LOOP Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin

Activitatea 4: Controlarea unui servomotor cu un potentiometru Potentiometrul impreuna cu un servomotor pot fi folosite pentru a face multe lucruri distractive. Aceasta este baza pentru modelul de avioane, masini si barci. Aceasta activitate ne arata cum Basic Stamp poate fi folosita pentru a monitoriza un potentiometru si a controla pozitia unui servomotor. Componente folosite: potentiometru -10K, rezistenta de 220 , condesator de 0,1 F, servomotor standard Parallax, LED de orice culoare si fire de legatura. Pentru primul exemplu avem valorile de timp masurate de un tehnician Parallax: - toata cursa in sensul acelor de ceasornic: 1 - toata cursa in sens trigonometric 691 Programul pentru Basic Stamp este: ' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Program Running!" time VAR Word DO HIGH 7 PAUSE 10 RCTIME 7, 1, time time = time */ 185 ' Scale by 0.724 (X 256 for */). time = time + 500 ' Offset by 500. PULSOUT 14, time ' Send pulse to servo. LOOP Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin

Acest program foloseste aliasuri in locul aproape tuturor numerelor: ' {$STAMP BS2} ' {$PBASIC 2.5} scaleFactor CON 185 offset CON 500 rcPin CON 7 delay CON 10 servoPin CON 14 time VAR Word

DO HIGH rcPin PAUSE delay RCTIME rcPin, 1, time time = time */ scaleFactor ' Scale scaleFactor. time = time + offset ' Offset by offset. PULSOUT servoPin, time ' Send pulse to servo. DEBUG HOME, DEC5 time ' Display adjusted time value. LOOP Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin

Sumar Acest capitol a prezentat poteniometru, o parte adesea gsit n diferite butoane i cadrane. Poteniometru are un element rezistiv care se conecteaz de obicei la dou terminale i un terminal care stergtor date de contact un punct variabil pe elementul rezistiv. Poteniometru poate fi folosit ca un rezistor variabil n cazul n care terminalul de tergere i una dintre cele dou terminale exterioare sunt folosite ntr-un circuit. Condensatorul a fost, de asemenea, introduse n acest capitol. Un condensator poate fi utilizat pentru a stoca i elibera gratuit. Valoarea unui condensator de ncrcare poate stoca este legat de valoarea sa, care este msurat n Farads, (F). Notatia din inginerie pentru micro este , i aceasta nseamn onemillionth. Condensatori utiliza i n activitile acestui capitol au variat 0.01 3300 F. Un rezistor i un condensator pot fi conectate mpreun ntr-un circuit care are o anumit perioad de timp pentru a ncrca i de descrcare de gestiune. Acest circuit este cunoscut ca un circuit RCtime. Standul R i C n RC-time pentru rezistor i condensator. Atunci cnd o valoare (C, n activiti de acest capitol) este inut constant, schimbarea n timpul necesar pentru circuitul de la descrcarea de gestiune este legat de valoarea lui R. n cazul n care valoarea lui R se modific, valoarea de timpul necesar pentru circuit de a percepe i de descrcare de gestiune,

se schimb. Timpul total necesar circuitului RC-timp pentru descrcarea de gestiune pot fi scalate cu ajutorul unui condensator de o dimensiune diferit. De votare a fost folosit pentru a monitoriza timpul de descrcare a unui condensator ntr-un circuit RC n cazul n care valoarea de C a fost foarte mare. Rezistori diferi i au fost folosi i pentru a arta modul n care modificrile timpului de descrcare de gestiune ca valoare a rezistorului n circuit se schimb. Comanda RCTIME a fost apoi folosit pentru a monitoriza un poteniometru (o rezisten variabil) ntr-un circuit RC-time, cu condensatori valoare mai mic. Dei ace ti condensatori au cauzat descrcare de gestiune pentru gama de la aproximativ 2 la 1500 s (milionimi de secund), BASIC Stamp nu are nici o problem n a urmri aceste msurtori timp cu comanda RCTIME. Pini I / O, trebuie s fie seta i HIGH, i apoi condensatorul din circuitul RC-time, trebuie s i se permit s se ncarce folosind PAUSE nainte de a folosi comanda RCTIME. PBASIC de programare poate fi folosit pentru a msura un senzor rezistiv, cum ar fi un poteniometru i scar de valori, astfel c este util la un alt dispozitiv, cum ar fi un servo. Acest lucru implic efectuarea unor operaii matematice cu privire la timpul msurat de descrcare de gestiune RC, care stocheaz RCTIME comanda intr-o variabila. Aceast variabil poate fi ajustat prin adugarea unei constante, care vine la ndemn pentru a controla un servo. n seciunea Proiecte, ai putea folosi nmulirea i mprirea, de asemenea. Directiva CON poate fi folosit la nceputul unui program pentru a nlocui un nume pentru un numr. Ca i n cazul variabilelor naming, constantele de numire sunt, de asemenea, numite crearea unui alias. Dup ce un alias este creat, numele poate fi folosit n loc de numr tot parcursul programului. Acest lucru poate veni la ndemn, mai ales dac avei nevoie pentru a utiliza acelai numr de 2, 3, sau chiar 100 de locuri diferite n program. Avei posibilitatea s modificai numrul din directiva CON, i toate 2, 3, sau chiar 100 instane diferite ale acestui numr sunt actualizate automat data viitoare cnd vei rula programul.

ntrebri 1) Cnd rotii sau butonul de pe un sistem de sunet, ce componente sunt cel mai probabil ai de adaptare?

Un poten iometru. 2) ntr-un poteniometru tipic, este rezistena dintre cele dou terminale exterioare reglabil? Nu, e fix. Rezisten a variabil este ntre oricare dintre terminalele de exterior i tergtorul (mijloc) terminal. 3) Cum este un condensator ca o baterie rencrcabil? Cum este aceasta diferit? Un condensator este ca o baterie rencrcabil n sensul c poate fi ncrcat cu pn la dein de tensiune. Diferen a este c acesta de ine doar o ncrcare pentru o cantitate foarte mic de timp. 4) Ce se poate face cu un circuit RC-timp pentru a v oferi o indicaie a valorii unui rezistor variabil? Putei msura timpul necesar pentru ca acest condensator s se descarce (sau s se ncarce). Acest timp este legat de rezisten i capacitate. n cazul n care capacitatea este cunoscut i rezistena este variabil, atunci timpul de descrcare de gestiune ofer o indicaie de rezisten. 5) Ce se ntmpl cu timpul de desc rcare a unui condensator cnd R (rezistorul) are valori mai mici sau mai mari? La cre terea lui R, timpul de descrcare a circuitului RC cre te direct propor ional cu valoarea lui R. Cnd R scade, timpul de descrcare al circuitului RC scade direct propor ional cu valoarea lui R. 6) Ce face instruc iunea CON? Explica i n termeni de nume i numr. Instruc iunea CON nlocuie te un numr cu un nume. 5.3 Exerci ii 1. S presupunem c avei un condensator 0.5 F ntr-un circuit timer RC, i dorii de msurare pentru a ine 10-ori mai mult timp. Se calculeaz valoarea noului condensator. Cap nou = 10 x valoarea cap vechi

= 10 x 0.5F = 5F 5.4 Proiect Adaug un circuit bi-color LED pentru Activitatea # 4. Modificarea programului de exemplu, astfel nct bi-color LED este rou atunci cnd servomotoru se rotete invers acelor de ceasornic, verde atunci cnd servomotoru se rotete n sensul acelor de ceasornic, i se stinge atunci cnd servo ocup poziia sa. Rezolvare:

Schema Poteniometrului din Figura 5-11 p. 150, servomotoru din Figura 4-3 p. 106, LED-ul bicolor din Figura 2-19 p. 63, cu P15 i P14 i P13 schimbat la P12. Activitatea # 4 cu bi-color LED adugat. ' Ce este un microcontroler - Ch5Prj01_ControlServoWithPot.bs2 ' Citete poteniometru n circuitul RC time folosind comanda RCTIME. ' Intervalele de timp variabile de la 126 - 713, i este nevoie de un offset de 330

'LED-ul bi-color de pe P12, P13 ne spune direcia de rotaie a servomotoru: 'verde pentru CW, ro u pentru CCW, servomotorul se stinge atunci cnd deine poziia.

' {$STAMP BS2} ' {$PBASIC 2.5}

DEBUG "Program Running!" time VAR Word potentiometer prevTime VAR Word DO prevTime = time HIGH 7 PAUSE 10 RCTIME 7, 1, time time = time + 330 IF ( time > prevTime + 2) THEN CCW HIGH 13 LOW 12 ELSEIF ( time < prevTime - 2) THEN avansat la CCW LOW 13 HIGH 12 ELSE LOW 13 LOW 12 ENDIF PULSOUT 14, time ' Servo de ine pozi ia ' LED liber ' a crescut, pot a ' LED-ul bicolor verde ' a crescut, pot a avansat la ' LED-ul bicolor ro u ' Stocheaz citirea anterioar ' Se cite te folosind RCTIME ' Citirea anterioar

LOOP Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin Utilizati IF...THEN pentru a modifica programul exemplu de la Activitatea 4 astfel nct servomotorul s se roteasc doar ntre valorile PULSOUT 650 i 850. Rezolvare: Cheia este adaugarea blocului IF...THEN; spre exemplu: -se cite te poten iometrul n circuitul RC-time utliznd comanda RCTIME -variabila time are valori ntre 126 i 713 i este necesar un offset de 330

-se mofic astfel nct servomotrul se va roti de la 650 la 850 ' Ce este un microcontroler - Ch5Prj01_ControlServoWithPot.bs2 ' Citete poteniometru n circuitul RC time folosind comanda RCTIME. ' Intervalele de timp variabile de la 126 - 713, i este nevoie de un offset de 330

' Modific ca servomotorul s se roteasc de la 650 la 850

' {$STAMP BS2} ' {$PBASIC 2.5} DEBUG "Program Running!" time VAR Word DO HIGH 7 RCTIME PAUSE 10 RCTIME 7, 1, time `Se cite te valoarea cu

time = time + 330 servo IF (time < 650) THEN 850 time = 650 ENDIF IF (time > 850) THEN time = 850 ENDIF PULSOUT 14, time LOOP

' Scala de timp pentru intervalul ' Constrnge intervalul 650 to

Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin

Capitolul 6. Afisaj digital. In acest capitol veti programa microcontrolerele Basic Stamp sa afiseze cifre si litere pe un afisaj cu 7 segmente. Un afisaj cu 7 segmente poate fi descris ca un patrulater alcatuit din 7 linii (LEDuri) ce pot fi aprinse selectiv si astfel sa afiseze diverse caractere, litere sau cifre.

Activitatea 1: Crearea circuitului si testarea afisajului cu 7 segmente. Aprinderea LED-ului A:

Aprinderea LED-ului B:

Aprinderea cifrei 3 (LED-urile A,B,C,D,G):

Activitatea 2: Controlul afisajului cu 7 segmente.

Programul de incarcat in Basic Stamp: '{$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 Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin

Activitatea 3: Afisarea cifrelor. Afisarea cifrelor de la 0 la 9 pe afisajul LED cu 7 segmente: '{$STAMP BS2} '{$PBASIC 2.5} DEBUG "Program Running!" OUTH = %00000000 ' OUTH initialized to low. DIRH = %11111111 ' Set P8-P15 to all output-low. ' Digit: ' BAFG.CDE OUTH = %11100111 ' 0 PAUSE 1000 OUTH = %10000100 ' 1 PAUSE 1000 OUTH = %11010011 ' 2 PAUSE 1000 OUTH = %11010110 ' 3 PAUSE 1000 OUTH = %10110100 ' 4

PAUSE 1000 OUTH = %01110110 ' 5 PAUSE 1000 OUTH = %01110111 ' 6 PAUSE 1000 OUTH = %11000100 ' 7 PAUSE 1000 OUTH = %11110111 ' 8 PAUSE 1000 OUTH = %11110110 ' 9 PAUSE 1000 DIRH = %00000000 ' I/O pins to input, ' segments off. END Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin Exemplu de program ce numara de la 0 la 9:

'{$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, %01110111, %11000100, %11110111, %11110110 ], OUTH DEBUG " ", DEC2 index, " ", BIN8 OUTH, CR PAUSE 1000 NEXT DIRH = %00000000 END Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin

Activitatea 4: Afisarea pozitiei unui cadran (a unei scale). In acest exercitiu vom afisa pozitia unui potentiometru cu ajutorul afisajului cu 7 segmente.

Programul de incarcat in Basic Stamp: ' {$STAMP BS2} ' {$PBASIC 2.5} value VAR Byte index VAR 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, "LOOKDOWN command places in the ", CR, "index variable." END Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin Exemplu de afisare a pozitiei pe display a unui potentiometru:

'{$STAMP BS2} '{$PBASIC 2.5} DEBUG "Program Running!" index VAR Nib time VAR Word OUTH = %00000000 DIRH = %11111111 DO HIGH 5 PAUSE 100 RCTIME 5, 1, time LOOKDOWN time, <= [40, 150, 275, 400, 550, 800], index LOOKUP index, [ %11100101, %11100001, %01100001, %00100001, %00000001, %00000000 ], OUTH LOOP Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin Sumar: Acest capitol a prezentat afisajul LED cu 7 segmente si cum se citeste schema pinilor. De asemenea a prezentat tehnici pentru dispozitive si circuite cu intrari paralele. Variabilele DIRH si OUTH au fost introduse ca si mijloace de control a pinilor I/O P8-P15 de pe Basic Stamp. Comenzile LOOKUP si LOOKDOWN au

fost introduse ca si mijloc de referinta pentru lista de valori folosite la afisarea literelor.

Intrebari si raspunsuri: 1. ntr-un ecran cu 7-segmente alcatuite din LED-uri, care este factorul care face ecranul sa poata fi citit atunci cnd un microcontroler trimite un semnal de high sau low? -Elementele principale ale ecranului sunt ledurile 2. Ce reprezinta un catod comun? Ce reprezinta un anod comun? -Catod comun nseamn c toti catozi sunt conectati mpreun. Anod comun nsemna c toti anozi sunt conectati mpreun. 3. Care este grupul de fire care conduce semnale la si de la un dispozitiv paralel? -O magistrala bus paralela 4. Care sunt numele de comenzi care sunt utilizate pentru a gestiona listele de valori din acest capitol? -LOOKUP i LOOKDOWN

Exercitii:

Scrieti o comanda OUTH care sa seteze P8, P10, P12 inalte (high)si P9, P11, P13 joase (low). Presupunand ca toti pinii I/O au inceput ca fiind intrari, scrieti comanda DIRH care va cauza pinii I/O sa trimita semnale inalte/joase in timp ce parasesc P14, P15 configurati ca intrari. Rezolvare: Primul pas inspre configurarea OUTH este sa punem 1 pe pozitia fiecarui bit HIGH. Asadar bitii 8, 10, si 12 sunt setati cu 1. Dupa aceea valoarea 0 pentru toti ceilalti biti LOW, 9, 11, si 13. Pentru configurarea DIRH, pinii specificati, 8, 10, 12, 9, 11, si 13 trebuie setati ca iesiri setand acesti biti cu 1. 15 si 14 sunt configurati ca intrari setand valorile acestora cu 0. Urmatorul pas este traducerea celor spuse mai sus in cod PBASIC: Bit 15 14 13 12 11 10 9 8 Bit 15 14 13 12 11 10 9 8

OUTH 0 0 0 1 0 1 0 1

DIRH 0 0 1 1 1 1 1 1

OUTH = %00010101

DIRH = %00111111

Scrieti valorile comenzii OUTH necesare ptr a afisa literele: a, C, d, F, H, I, n, P, S.

Rezolvare: Cheia rezolvarii acestui exercitiu este desenarea fiecarei litere in parte si notarea segmentelor ce trebuie laminate. Puneti un 1 in fiecare din acele segmente ce trebuiesc aprinse. Transformati informatia in valoare OUTH binara.

Proiect: Scrieti FISH CHIPS And dIP intr-o bucla care se repeta intr-una pe afisajul LED cu 7 segmente. Faceti in asa fel incat literele sa dureze timp de 400 ms. Pentru rezolvarea problemei folositi exemplul de la activitatea 3 modificand cu modelele literelor de la exercitiul 1. In solutia oferita literele au fost considerate constant pentru a face programul mai intuitive. Folosind valorile binare

corespondente ajungem la acelasi rezultat dar aceasta metoda e mai predispusa la erori. ' 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 '{$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 ' All off to start DIRH = %11111111 ' All LEDs must be outputs index 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, " ", BIN8 OUTH, CR PAUSE 400 ' 400 ms between letters NEXT LOOP Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin

Cap. 7

Masurarea luminii

Activitatea #1: Construirea si testarea luxmetrului n aceast activitate, se va construi si testa comada RCTIME, care citete valoarea unui fotoresistor. Executarea comenzii, va oferii o idee despre nivelul luminii

de photoresistor. Valorile msurate de sesizat ctre comanda RCTIME vor fi afisate n Terminal Debug.

' {$STAMP BS2} ' {$PBASIC 2.5} time VAR Word DO HIGH 2 PAUSE 100 RCTIME 2, 1, time DEBUG HOME, "time = ", DEC5 time LOOP Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin Activitatea #2: Msurarea luminii folosind metoda grafic n aceast activitate se va monitoriza nivelul de lumina cu ajutorul graficelor de masurare. ' {$STAMP BS2} ' {$PBASIC 2.5} time VAR Word 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 Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin Activitatea #3: urmarirea evenimentelor din LUMINA Aceast activitate introduce o tehnica pentru stocarea nivelurilor msurate la lumin, i uemand a fi reutilizate din EEPROM. n aceast activitate, se va rula un program exemplu PBASIC care stocheaz o serie de msurtori n EEPROM. Dup ce programul s-a terminat, va rula un al doilea program care preia valorile de la EEPROM i le afieaz n Terminal Debug. ' {$STAMP BS2} ' {$PBASIC 2.5} time VAR Word eepromAddress VAR 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 Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin

Activitatea #4: Instrument de masurare a luminii n aceasta activitate s-a realizat un instrument de masurare a luminii, care va modifica felul n care palpaie un afi aj, n func ie de intesnitatea luminii detectat.

' {$STAMP BS2} ' {$PBASIC 2.5} DO DEBUG CLS, "Start main routine.", CR PAUSE 2000 GOSUB First_Subroutine DEBUG "Back in main.", CR PAUSE 2000 GOSUB Second_Subroutine DEBUG "Repeat main...", CR PAUSE 2000 LOOP First_Subroutine: DEBUG " Executing first " DEBUG "subroutine.", CR PAUSE 3000 RETURN Second_Subroutine: DEBUG " Executing second " DEBUG "subroutine.", CR PAUSE 3000

RETURN Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin REZUMAT Acest capitol a introdus un al doilea mod de a utiliza comanda RCTIME prin utilizarea acesteia pentru a msura nivelurile de lumina cu ajutorul fotorezistorului. Ca i poteniometrul, fotoresistorul este un rezistor variabil. Spre deosebire de poteniometru, rezistena fotoresistorului se schimb odat cu nivelurile de lumin i nu cu poziia sa. Stamp Plot Lite a fost folosit pentru reprezentarea grafic a unor msurtori suucesive de lumin, i a metodelor pentru nregistrarea i interpretarea datelor grafice ce au fost introduse. Comanda WRITE i comenzile READ au fost utilizate pentru a stoca i a regsi valori de la EEPROM, care a fost apoi folosit ntr-un RCTIME. n ultima activitate a acestui capitol, s-a realizat un instrument de masurare a luminii. Aceast aplicaie a utilizat subrutine pentru a ndeplinii cele trei func ii diferite, necesare pentru ca instrumentul de msur s funcioneze.

ntrebri 1. Ce pot detecta senzorii? Senzorii pot fi: senzori de pozi ie, senzori de presiune, senzori de temperatur, pentru vibra ii, fum, lumin sau de nivel. 2. Care este numele compusului chimic care face un fotorezistor sensibil la lumin? Compusul chimic care face un fotorezistor sensibil la lumina este Sulfatul de Cadmiu (CdS).

3. Cum este un fotorezistor asemanator cu un potentiometru? Cum este aceasta diferit? Asemanarea dintre cele dou elemente este dat de faptul ca ambele pot fi utilizate pentru un circuit RC-time, fiind asemanatoare si programele pe care acestea le folosesc, ambele afi nd valorile preluate de comanda RCTIME in terminalul Debug. n schimb, circuitul este diferit, precum si semnalele primite, poten iometrul detectnd pozi ia iar fotorezistorul, lumina. 4. Pentru ce este folosit EEPROM-ul? Este folosit pentru stocarea provizorie a datelor ce urmeaza a fi ulterior utilizate. 5. Ct de multi bytes(octe i) poate stoca EEPROM-ul din modulul BASIC Stampului? ci biti poate stoca? n EEPROM exist posibilitatea de a utiliza 2048 octei pentru a stoca 2048 numere diferite, fiecare avnd posibilitatea de a stoca o valoare ntre 0 i 255. De asemenea pot fi stoca i 2048 Kb (kilo bi i), adic 2048 numere diferite, dar fiecare numr este limitat la o valoare de 0 sau 1. 6. Ce comanda se utilizeaz pentru a stoca o valoare n EEPROM? Ce comanda se utilizeaz pentru a regsi o valoare din EEPROM? Care dintre ele necesit o variabil? Pentru a stoca o valoare in EEPROM se utilizeaz comanda WRITE, iar pentru a o regsii se utilizeaz comanda READ. Ambele utilizeaz variabile, ns doar comada READ necesit variabila. 7. Ce este o etichet? O etichet este un nume care poate fi folosit ca nlocuitor n programul dumneavoastr, cu ajutorul creia comanda GOSUB poate face saltul de la o etichet la alta. 8. Ce este o subrutin? O subrutin este un segment de cod ce depline te o func ie bine definit.

9. Ce comanda este folosita pentru a apela o subrutin? Ce comanda este folosita pentru a ncheia o subrutina? Pentru a apela o subrutin se utilizeaz comanda GOSUB urmat de numele etichetei, iar pentru a o ncheia se va utiliza comanta RETURN. Exerciii

RC-timp circuitul conectat la P5.

Desenai schema unui photoresistor

2. Modificati TestPhotoresistor.bs2 astfel nct sa funcioneze pe un circuit conectat la P5 n loc de P2. ' {$STAMP BS2} ' {$PBASIC 2.5} time VAR Word DO HIGH 5 PAUSE 100 RCTIME 2, 1, time DEBUG HOME, "time = ", DEC5 time LOOP 3. Explicai modul n care ar trebui modificat LightMeter.bs2, astfel nct modelul circular afiate de ecranul de 7 segmente cu LED-uri sa mearga n direcia opus. Modificam ordinea de aprindere a LED-urilor; IF index = 6 THEN index = 0 ' BAFG.CDE

LOOKUP index, [ %00100000, %00000001, %00000010, %00000100, %10000000, %01000000], OUTH index = index + 1 Proiect Utilizai un fotorezistor pentru a face sa palpaie LED-ul atunci cnd o umbra este peste el. ' {$STAMP BS2} ' {$PBASIC 2.5} Dark CON 25 time VAR Word DO HIGH 2 ' Read photoresistor with RCTIME PAUSE 100 RCTIME 2, 1, time DEBUG HOME, "time = ", DEC5 time ' Print value to Debug Terminal IF (time > Dark) THEN ' Compare reading to known dark value HIGH 14 ' Blink LED on pin P14 PAUSE 100 LOW 14 PAUSE 100 ENDIF LOOP Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin

Capitolul 8 : Frecvena i Sunet ACTIVITATEA 1 : Construirea si testarea unui SPEAKER.n aceast activitate,se va construi i testa circuitul unui difuzor piezoelectric. Terminalul negativ al difuzorului piezoelectric ar trebui s fie conectat la Vss, i borna pozitiv ar trebui s fie conectat la un pin de I / O.BASIC Stamp va fi apoi

programat pentru a trimite semnale HIGH/LOW la terminalul pozitiv al difuzorului piezoelectric Exemplu de program : Acest program trimite sunetul de 2 kHz la difuzor pe I / O pin P9 timp de 1,5 secunde.Putei utiliza terminalul Debug pentru a vedea cnd difuzorul ar trebui s emita un sunetsi cand trebuie s se opreasc. ' 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." Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin ACTIVITATEA 2 : Sunete de actiune. Multe jucrii conin microprocesoare, care sunt folosite pentru a face sunete de aciune. Sunetele de actiunea au tendina a isi schimba rapid frecventa cu care sunt emise de catre difuzor.Se pot obtine unele efecte interesante de la amestecarea a dou tonuri diferite, cu ajutorul FREQOUT de comand opional Freq2 argument. Aceast activitate introduce ambele tehnici. Programarea sunetelor de actiune : sunte de actiune cat si cele aplicative au 3 componente diferite : pauza,durata,frecventa. Pauza este timpul ntre tonuri, i avei posibilitatea s utilizai comanda PAUSE pentru a crea acea pauz. Durata este cantitatea de timp care indica ca dureaz un ton, pe care le putei seta cu ajutorul FREQOUT de comand Durata argument. Frecvena determin nlimea tonului. O frecventa mai mare , cu att mai mare este tonalitatea tonului,o frecventa mai mic rezulta o tonalitate mai mica. Acest lucru este, desigur, determinate de comanda FREQOUT de Freq1 argument. ' 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 VAR Word

frequency VAR 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 Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin ACTIVITATEA 3: Note muzicale si cantece simple. Comanda FREQOUT este, de asemenea, utila pentru note muzicale. Programarea BASIC Stamp pentru a reda muzic folosind un piezospeaker implic n urma o varietate de reguli folosite n muzica, utiliznd orice alt instrument muzical. Aceste norme se aplic pentru aceleai elemente pe care au fost folosite pentru a genera efecte de sunet, frecvena, durata, i pauz. Acest program va canta cateva note muzicale pe piezospeaker, fiecare cu o durata de o jumtate de secund. ' 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 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 Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin ACTIVITATEA 4 : Muzica cu microcontroler. Durata notelor muzicale nu se nregistreaz pe foaia de muzic, n termeni de milisecunde. n ceea ce sugereaza si numele, o not de jumtate dureaz jumtate cat o nota intreaga. Ct timp este o not de ansamblu? Aceasta depinde de piesa de muzic care este cantata. O pies poate fi jucat ntr-un ritm care determin o nota ntreagai s dureze timp de patru secunde, o alt pies ar putea avea o not de alte durata de timp.Pauzele sunt de timpi ntre note, atunci cnd nu jucate tonuri muzicale. Pauzele sunt, de asemenea,msurate ca ntreg, jumtate, sfert, al optulea, XVI-lea i al treizeci i doilea. ACTIVITATEA 5 : Tonuri de apel pentru telefonul mobil. Multe telefoane celulare redau muzica care poate fi descrcat de pe paginile web.Calculatorul trimite date despre notele muzicale la microcontroler n telefon, apoi red notele ori de cte intra un apel. Acestea sunt numite sunete de apel sau de multe ori doar tonuri de apel. Una dintre cel mai utilizate pe scar larg de a compune, de nregistrare i postarea ia act de faptul c este una iruri caracteristici de text care descriu fiecare not n cntec. Iat un exemplu de modul n format RTTTL: Beethoven5:d=8,o=7,b=125:g,g,g,2d#,p,f,f,f,2d

' 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 Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin

Sumar : Acest capitol a introdus tehnici pentru realizarea de sunete i tonuri muzicale utiliznd BASIC Stamp i un difuzor piezoelectric. Comanda FREQOUT poate fi folosit pentru a trimite unui difuzor piezoelectric semnale de HIGH/LOW care o creaza sunet i sau note muzicale. Comanda FREQOUT are argumente care controleaz pini I / O, semnalul este transmis la, Durata de ton, frecvena de ton (Freq1).Opional Freq2 poate fi folosit pentru a amesteca tonuri. Efectele de sunet poate fi fcut prin ajustarea de frecvena i durata de tonuri i pauza ntre ele. Valoarea de frecven poate fi, de asemenea, de valori amestecate pentru a crea o varietate de efecte. Redarea melodiilor simple cu BASIC STAMP, se poate face cu o secven de comenzi FREQOUT, dar exist modaliti mai bune pentru a stoca i a regsi date muzicale. DATE directivele mpreun cu etichetele lor opional Symbol au fost utilizate pentru a stoca valorile octet fara un prefix i valorile cuvnt folosind prefixul Word. Comanda READ a fost utilizat pentru a prelua valorile stocate de ctre directivele DATA. Intrebari 1:Ce cauzeaza ca un ton sa sune cu o tonalitate ridicata?Ce cauzeaza un ton sa aibe o tonalitate scazuta?

Frecventa determina tonalitatea tonului.O frecventa ridicata va genera un ton de tonalitate ridicata,iar o frecventa scazuta va genera un ton de tonalitate scazuta. 2:Ce face comanda FREQOUT 15 , 1000 , 3000?ce efect au numerele? Comanda FREQOUT trimite semnale HIGH/LOW catre difuzor pentru a genera sunet.Numerele indica pe rand I/O pin P15, durata sunetului de 1 secunda, cu o frecventa de 3kHz. 3:Cum se poate modifica comanda FREQOUT de la intrebarea 2,astfel incat sa transmita doua frecventa simultan? Se comanda generarea simultana a 2 sunete la frecvente diferite de exemplu FREQOUT 9, 2000, 2400 FREQOUT 9, 2000, 4200 4:Daca se apasa tasta B6 la pian,ce frecventa se obtine? Apasand tasta B6 la pian se obtine o frecventa de 1975.5 Hz. 5:Cum modifici directorul DATA sau comanda READ daca se doreste stocarea si returnarea de valori word? De exemplu daca avem Notes DATA "C","C","G","G","A","A","G".Putem utiliza comanda READ pentru a accesa aceste caractere.De exemplu daca dorim sa incarcam primal litera A intr-o variabila byte,denumita noteLetter,folosim comanda READ NOTES + 4 , note LETTER 6:Ce face SELECT...CASE? SELECT...CASE este utilizat pentru a)selectarea unei variabile sau expresii,b)evalueaza acea variabila sau expresie de la caz la caz,c)executa diferite blocuri de cod,in functie de cazul in care valoarea variabilei se potriveste cu cazul respectiv. EXERCITII 1:modificat tonul Alarm de la exercitiul ActionTones.bs2,astfel incat frecventa tonului sa creasca cu 500 de hz la fiecare repetare a tonului. DEBUG "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, 3500 PAUSE 500

2:explicati cum se modifica MusicWithMoreFeatures.bs2 astfel incat sa afiseze un mesaj de alerta in terminalul Debug de cate ori este cantata a nota punctata(se prelungeste sunetul). DEBUG "Program Running!" Notes DATA "C","E","E","E","D","E","F","E","E","D","D", "D","C","D","E","C","Q" Octaves DATA 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 Durations DATA 4, 2, 4, 4, 4, 4, 2, 2, 4, 2, 4, 4, 4, 4, 2, 2 Dots DATA 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 BeatsPerMin CON 320 index VAR Byte offset VAR Nib noteLetter VAR Byte noteFreq VAR Word noteDuration VAR Word noteOctave VAR Nib noteDot VAR Bit wholeNote VAR Word wholeNote = 60000 / BeatsPerMin * 4 DO UNTIL noteLetter = "Q" READ Notes + index, noteLetter LOOKDOWN noteLetter, [ "C", "d", "D", "e", "E", "F", "g", "G", "a", "A", "b", "B", "P", "Q" ], offset LOOKUP 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

LOOP END Proiect. Construiti un generator de sunet controlat de un pushbutton.Daca este apasat un pushbutton difuzorul sa genereze un sunet pentru 1/5 secunde la o frecventa de 2kHz.Daca celalalt pushbutton apasat sa genere un sunet de 3kHz pe o durata de 1/10 secunde. ' 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 ' 2000 Hz for 200 ms ELSEIF (IN3 = 1) THEN FREQOUT 9, 100, 3000 ' 3000 Hz for 100 ms ENDIF LOOP Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin

Capitolul 9: Constructia blocurilor electronice In acest capitol, vom lucre cu un transistor, si cu un circuit integrat numit potentiometru digital. Cum am mentionat mai devreme, tranzistorul este blocul de baza in constructia circuitelor integrate. Este, de asemenea, un element de constructive pentru multe alte circuite. Potentiometrul digital este utilizat in mai multe aplicatii. Trebuie sa reamintim ca pentru fiecare activitate pe care am parcurs-o in capitolele precedente, am parcurs foarte multe cai de a utiliza fiecare dintre aceste circuite integrate.

Activity 1

In aceasta activitate, vom folosi un transistor pentru a controla curentul ce trece printr-un LED. Putem folosi LED-urile pentru a monitoriza intensitatea curentului, atata timp cat ele devin mai luminoase la o intensitate mai mare a curentului care il strabat. Introducere in utilizarea tranzistoarelor Sunt diferite tipuri de tranzistoare. Cel pe care l-am folosit noi se numeste NPN, numele referindu-se la tipul de material din care sunt fabricate si modul cum aceste materilae sunt asezate pe placa de silicon. Cea mai buna modalitate de a caracteriza un transistor este de a-l compara cu o valve de curent. Tranzistorul controleaza cat curent trece prin collector(C) si cat se emite (E). Aceste foloseste cantitatea de curent acceptata in baza (B) pentru a controla trecere curentului de la colector la emitator. Exemple de tranzistori: (1) Tranzistor 2N3907 (2) Resistori 100 k (maro-negru-galben) (3) LED orice culoare (1) Potentiometru 10 k Construirea si testarea Tranzistorului in circuit

se construieste circuitul se verifica LED-ul, urmarindu-se luminozitatea in functie de intensitatea curentului se construieste programul ce transmite semnale de deschidere/inchidere pinului corespunzator LED-ului, de doua ori pe secunda

se ruleaza programul si se verifica daca LED-ul se aprinde si se stinge Activitatea 2: Introducerea Potentiometrului Digital

In aceasta activitate, vom inlocui potentiometrul ajustabil manual, cu un potentiometru care se ajusteaza digital. Programam BASIC Stamp-ul astfel incat sa ajustam potentiometrul digital, care ca modifica luminozitatea LED-ului in acelasi fel ca si cum face potentiometrul manual.

Caracteristicile pin-ilor:

1. CLK pinul care receptioneaza semnalele in legatura cu timpul 2. U/D pin-ul care seteaza directia semnalului. Acesta nu se modifica atata timp cat un semnal nu este trimis la pin-ul CLK 3.A1- Terminalul A1 al potentiometrului 4.GND- Impamantarea 5.W1- terminalul W al potentiometrului 6.B1- terminalul B al potentiometrului 7.Vdd- conectat la +5 V, care este Vdd pe BASIC Stamp.

Exemplu:

Acest exemplu de program modifica potentiometrul, de la maxim la minim, cauzand modificarea luminozitatii LED-ului. ' 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 HIGH 5 FOR counter = 0 TO 127 PULSOUT 6, 1 PAUSE 10 NEXT LOOP Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin

Sumar

Aces capitol a prezentat circtuitele integrate si cum pot fi acestea folosite pe BASIC Stamp. Tranzistorul a fost folosit ca valve de curent, si potentiometrul digital a fost folosit pentru a controla cantitatea de curent care a fost parcurs. Functia fiecarui pin al potentiometrului digital a fost discutata mai sus, la fel ca si structura dispozitivului. Comanda PBASIC, toggle a fost introdusa pentru a salva momoria programului.

INTREBARI

1.Cum se numest terminalele tranzistorului utilizat in acest capitol? 2.Care terminal controleaza curentul care trece prin transistor?

3.Ce se poate face pentru a creste/scadea curentul care trece printr-un transistor?

Raspuns: 1. Emitor, baza si colector 2.Baza controleaza curentul care trece prin transistor 3.Crestrea/scaderea curentului este permisa in baza tranzistorului.

Exercitiu Sa se scrie un program care modifica.. Raspuns Pentru a rezolva acest exercitiu primul lucru care trebuie facut, in faza de initializare, este setarea slotului pe pozitia cea mai de jos.Acesta este codoul: ' 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 CON 5 ' Set values of I/O pins ClkPin CON 6 ' connected to CLK and U/D. counter VAR Byte ' Counter for FOR...NEXT. LOW UdPin ' Set U/D pin for Down. FOR counter = 0 TO 128 ' Set tap to lowest position. PULSOUT ClkPin,5 PAUSE 1 NEXT

Proiect: Adaugati un potentiometru proiectului dumneavoastra astfel incat luminozitatea LED-ului sa se modifice in functie de fotorezistenta.

' 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 2000counter VAR Byte ' Counter for FOR...NEXT. oldTapSetting VAR Byte ' Previous tap setting. newTapSetting VAR Byte ' New tap setting. lightReading VAR Word ' reading from photoresistor oldTapSetting = 0 ' Initialize new and old newTapSetting = 0 ' tap settings to zero. LOW UdPin ' Set U/D pin for Down. FOR counter = 0 TO 128 ' Set tap to lowest position. PULSOUT 6,5 PAUSE 1 NEXT ' -----[ 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. Read_Photoresistor: HIGH PhotoPin PAUSE 100 RCTIME PhotoPin, 1, lightReading Return Calificativ FB Studenti: Ilioni Alin, Mardare Adrian, Soruica Sorin, Traila Florin

Capitolul 10:Detinerea controlului

Majoritatea activitatilor din acest text aduc in discutie cum sa programezi BASIC Stamp pentru a interactiona pe rand cu unul sau doua circuite.Multe microcontrolere trebuie sa se descurce cu zeci sau chiar sute de circuite.Acest capitol ne va arata cateva dintre tehnicile folosite pentru dirijarea mai multor circuite cu ajutorul unui singur microcontroler.Programarea microcontrolerului pentru a orchestra activitatile diferitelor circuite,executand functii unice este numita integrarea subsistemului. Exemplul din acest capitol foloseste o matrice de senzori care consista in doua circuite cu butoane,un circuit cu potentiometru si un circuit fotorezistor.Activitatile din acest capitol va vor ghida in construirea si testarea fiecarui subsistem in mod individual.Dupa ce fiecare subsistem este construit si testat,veti scrie un program care combina fiecare subsistem intr-o unitate lucratoare.Figura 10-1 ne arata schematica circuitului pentru sistemul pe care il vom construi ,iar lista cu partile principale se afla mai jos. Intotdeauna aduceti-va aminte:oricand este posibil,testati fiecare subsistem individual inainte de a incerca sa-l faceti sa functioneze impreuna.Daca respectati aceasta regula,proiectele voastre se vor desfasura mai usor iar sansele voastre de

succes se vor imbunatati.Activitatile din acest capitol va vor ghida de-a lungul acestui process. Sensor Array Parts List (4) Rezistoare 220 (red-red-brown) (2) Reszistoare 10 k (brown-black-orange) (2) Butoane normal-deschise (2) Capacitoare 0.1 F (1) Potentiometru 10 k (1) Fotorezistor (5) Fire de legatura Page 282-Whats a Microcontroller? Activitatea#1:Construirea si testarea fiecarui circuit cu butoane Aceasta activitate incepe cu construirea si testarea unui singur circuit cu butoane.Odata ce ati confirmat ca primul circuit cu butoane opereaza in mod corespunzator,puteti trece la construirea si testarea celui de-al doilea circuit cu butoane.

Partile circuitului cu butoane (2) Butoane normal deschise (2) Rezistori 10 k (brown-black-orange) (2) Rezistori 220 (red-red-brown) (2) Fire de legatura Construirea primului circuit cu butoane Construieste circuitul cu butoane reprezentat in Figura 10-2. Figure 10-2 Primul circuit cu butoane Testarea primului circuit cu butoane Scrierea unui program pentru testarea acestui circuit ar trebui sa fie foarte simpla deja,mai ales ca ati mai facut acest lucru si inainte.

Program exemplu:ReadPushbuttonState.bs2 Aceasta este o repetare a programului pentru testarea butoanelor din capitolul 3 Enter si rulati ReadPushbuttonState.bs2 Verificati daca BASIC Stamp este capabil sa citeasca acest buton. Corectati orice problema detectati inainte de a avansa la urmatorul circuit.Page 284-Whats Microcontroller?

Randul tau-Construirea si testarea celui ce-al doilea circuit cu butoane Odata ce primul circuit cu butoane a fost construit si testat,procesul poate fi repetat pentru cel de-al doilea circuit cu butoane. Adaugati circuitul cu butoane reprezentat in figura 10-3 Testati al doilea circuit cu butoane prin modificarea ReadPushbuttonState.bs2 in asa fel incat sa citeasca circuitul conectat la P4.Rulati programul si verificati daca cel de-al doilea buton functioneaza. Corectati orice problema pe care o detectati inainte de a merge mai departe la urmatoarea activitatea. Figure 10-3 Adaugarea celui de-al doilea circuit cu butoane la proiect Activitatea#2:Construirea si testarea fiecarui circuit RC-TIME Acuma ca cele doua circuite cu butoane au fost construite si testate,puteti merge mai departe la circuitele RC-time.

Extra parti pentru circuitele cu potentiometru si fotorezistor (2) Rezistori 220 (red-red-brown) (2) Capacitori 0.1 F (4) Fire de legatura

(1) Fotorezistori (1) Potentiometru 10 k

Construirea circuitului cu potentiometru Adaugati circuitul cu potentiometru reprezentat in figura 10-4 la proiect Figura 10-4 Adaugarea unui circuit cu potentiometru

Testarea circuitului cu potentiometru Puteti testa acest circuit folosind ReadPotWithRcTime.bs2.Acest program a fost prima data folosit in capitolul 5 pentru a citi circuitul cu potentiometru. Exemplu de program:ReadPotWithRcTime.bs2 Enter si rulati ReadPotWithRcTime.bs2. Page 286-Whats a Microcontroller? Verificati daca Basic Stamp inregistreaza masuratori de incredere de la potentiometru Corectati orice problema pe care o detectati inainte de a merge mai departe la urmatorul circuit Cod Randul tau-construirea si testarea circuitului fotorezistor Odata ce primul circuit RC-time a fost construit si testat,procesul poate fi repetat si pentru cel de-al doilea circuit RC-time Adaugati circuitul fotorezistor reprezentat in figura 10-5 proiectului de pe breadboard. Modificati ReadPotWithRcTime.bs2.astfel incat fotorezistorul sa fie conectat la P9

Corectati orice problema pe care o detectati inainte de a merge mai departe la urmatoarea activitate. Adaugarea circuitului fotorezistor Activitatea#3:Exemplu de integrare a subsistemului Acum ca toate elementele din matricea de senzori sunt construite si testate,puteti sa scrieti un program care foloseste toate circuitele cu patru senzori.Acest exemplu va demonstra cum sa programati Basic Stamp pentru a afisa un terminal cu un meniu pe care un technician l-ar putea folosi pentru a monitoriza senzorii. Programarea unui system meniu si folosirea pinilor input/output Comanda ONGOSUB poate fi foarte folositoare pentru meniuri. ON offset , GOSUB Target1, {Target2, Target3,} In urmatorul exemplu de program,comanda ONGOSUB foloseste valoarea unei variabile directionate la una dintre cele patru subrutine.Daca valoarea variabilei este 0,programul executa GOSUB Read_Pushbutton_1.Daca valoarea variabilei este 1,prograul executa GOSUB Read_Pushutton_2 si asa mai departe. ON request GOSUB Read_Pushbutton_1, Read_Pushbutton_2, Read_Pot, Read_Photoresistor Puteti sa folositi directive PIN pentru a da un nume fiecarui I/O pin pe care il veti folosi in programul PBASIC.BASIC Stamp Editor isi va da seama daca folositi I/O pin ca input sau output(sau amandoua).Sintaxa directive PIN este: PinName PIN PinNumber Urmatorul exemplu de program ne demonstreaza cum sa declaram si apoi sa folosim PinName.De exemplu,BASIC Stamp Editor presupune ca doriti sa afisati valoarea unui I/O pin(IN3) daca folositi Pb1Pin PinName intr-o comanda DEBUG.Aceasta comanda DEBUG va afisa un 1 sau un 0 in functie daca butonul conectat la P3 este apasat sau neapasat.De ce?pentru ca BASIC Stamp Editor sties a inlocuiasca IN3 pt.Pb1Pin Pb1Pin PIN 3 DEBUG CLS, ? Pb1Pin

Aici este un alt exemplu unde Basic Stamp Editor stie sa inlocuiasca valoarea lui 9 pentru ca PhotoPin PinName este folosit cu o comanda HIGH si o comanda RCTIME. PhotoPin PIN 9 HIGH PhotoPin RCTIME PhotoPin, 1, time Program exemplu:TerminalOperatedSensorArray.bs2. Figura 10-6 ne arata terminalul Debug afisat de TerminalOperatedSensorArray.bs2.Meniul principal este afisat in partea stanga si un exemplu de afisaj cand 4este selectat este afisat in partea dreapta.Aduceti-va aminte sa folositi fereastra superioara pentru a trimite selectiile meniului la BASIC Stamp. Enter si rulati TerminalOperatedSensorArray.bs.2. Dati click pe fereastra superioara a terminalului Debug si tipariti cifre pentru a va face selectiile meniului. Masuratoarea afisata este cea facuta in momentul cand selectia meniului este facuta,si este afisata pentru 1.5 secunde.Retine-ti asta cand tineti apasat butoanele,ajustati potentiometrul si aruncati umbra pe fotorezistor. Folosirea terminalului Debug pentru a selecta dintr-un meniu

RANDUL TAU Modificarea subritinelor Terminalele nu sunt singurele aplicatii pentru ONGSB. De ex: pentru apelarea celor 4 rutine diferite una dupa cealalta, se foloseste urmatoarea cale: 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 De retinut este faptul ca cele doua subrutine ce efectueaza munca terminalelor au comentate iar comanda ON..GOSUB au fost plasate in FOR..NEXT Salveaza programul sub numele de TerminalOperatedSensorArrayYourTurn.bs2 Modifica Rutina principal prin efectuarea schimburilor effectuate anterior Ruleaza programul si verifica daca functioneaza in conformitate cu cerintele

ACTIVITATEA 4: DEZVOLTAREA SI SI ADAUGAREA UNUI SUBSISTEM SOFTWARE Sa spunem ca colectia de senzori va fi plasata in dispozitivul in care doar anumiti angajati au voie sa-l foloseasca prin confirmarea cu parola. Inseamna ca trebuie sati extinzi programul deci asta va salva si verifica parola. Este mai bine sa scri un program parolat care sa functioneze doar pentru el la inceput iar apoi sa-l adaugi la programul principal. PROGRAMAREA UNUI VERIFICATOR DE PAROLA Iti poti salva parola in PBASIC prin folosirea unui directive data. De exemplu : Password DATA "pass!" Acelasi ca: Acest directiv DATA este acelasi ca si Password DATA p, a,s,s,!. Vei avea nevoie de cateva variabile pentru stocarea altor valori in acest program: Index temp VAR VAR Nib Byte

Daca folosesti o parola de 5 caractere, exista un tip special de apelare a variabilei (colectia de declaratii) ce se utilizeaza in declararea celor 5 variabile cu acelasi nume. userEntry VAR Byte(5)

Acum sunt 5 bytes alocati variabilelor numite userEntry: userentry(0), userentry(1), userentry(2), userentry(3), userentry(4). Comanda DEBUGIN are un un formator numit STR care in mod automat citeste caracterele dinto colectie. Ex: DEBUGIN STR userEntry \5 Daca introduci 5 caractere in terminalul TRANSMIT WINDOWPANE, primul va fi plasat in userentry(0) al 2-lea in userentry(1), etc... Exista un cuvant cheie in PBASIC numit EXIT pe care il folosesti sa iesi din bucla. Pentru a verifica o parola se foloseste procedura IF, THEN cu o comanda EXIT pentru a sfarsi o bucla in caracterele. Cand bucla se sfarseste mai repede inseamna ca fisierul INDEX nu a gasit toate cele 5 caractere, cea ce inseamna ca parola a fost incorecta. 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 Urmatorul exemplu de program plaseaza comanda DEBUGIN pentru bucla FOR..NEXT si procedura IF then inauntrul procesurii DO..LOOP UNTIL pana cand INDEX ia valoarea 5 EXEMPLU PROGRAM: PasswordChecker.bs2 Figura 10-7 arata terminalul Debug afisat de catre PasswordChecker.bs2. In timpul functionarii programul va astepta tiparirea caracterelor Pass! in raspuns rapid.

-Introducerea si rularea PasswordChecker.bs2. - Incercarea introducerii unor caractere combinate care sa nu constituie parola iar apoi a unor caractere care sa constituie o parola:pass!

' 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 VAR Nib ' Index variable. temp VAR Byte ' Stores single char. userEntry VAR Byte(5) ' Store user entered password. DO DEBUG "Enter password: " ' User instructions. Randul tau Modificarea Parolelor Modifica password DATA astfel incat sa folosesti 5 caractere diferite pentru parola Prin modificarea acestor 5 caractere diferite in program poti sa impui acceptarea unei parole de 4 caractere in locul uneia de 5 MODIFICAREA VERIFICATORULUI DE PAROLA PENTRU FOLOSIREA INTR-UN PROGRAM MAI LARG Scopul este sa usureze incadrarea programului passwordChecker in exemplul din activitatea 3. Doua lucruri vor ajuta. Primul, Programul verificator de parola trebuie modificat incat sa efectueze majoritatea muncii intr-o subrutina. Partile

diferite ale subrutinei ar trebui etichetate pentru a usura combinarea celor 2 programe. EXEMPLU DE PROGRAM: ReuseblePasswordChecker.bs2 ReuseblePasswordChecker.bs2 lucreaza la fel ca si PasswordChecker dar acum foloseste o subrutina pentru a face munca si a fost reorganizat in sectiuni reorganizate. Se verifica daca programul lucreaza la fel ca si PasswordChecker.bs2. Se examineaza daca DO..LOOP UNTIL a fost plasat in subrutina.

' -----[ 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 VAR Nib ' Index variable. temp VAR Byte ' Stores single char. userEntry VAR Byte(5) ' Store user entered password. ' -----[ Initialization Routine ]-----------------------------------------GOSUB Check_Password ' -----[ 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 ' Check array against DATA

READ Password + index, temp ' Get next password char IF temp <> userEntry(index) THEN EXIT ' Compare to user input, NEXT ' exit if not equal. IF index <> 5 THEN ' If exit, then index not equal DEBUG CR,"Password not correct.", CR ' to 5 and pass is not correct. ENDIF 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. TOPICA AVANSATA: RANDUL TAU COMBINAREA CELOR DOUA PROGRAME Acum ca amandoua au fost testate, cerinta este sa se combine. Programul final ar trebui sa verifice parola inainte sa sa iti permita cat u sa alegi care sensor sa citeasca folosind terminalul DEBUG. Se pot deschide ambele programe in basic stamp editor. Salveaza TerminalOperatedSensorArray.bs as PasswordedSensorterminal.bs2. Trebuie sa navighezi intre programe in timpul copierii sectiunilor din ReusablePasswordChecker si lipirea lor in PasswordedSensorterminal.bs2. Copierea directivului PASSWORD DATA din ReusablePasswordChecker.bs2. in PasswordedSensorterminal.bs2. chiar inainte de sectiunea I/O Definitions. Se copiaza declaratile variabilelor din ReusablePasswordChecker.bs2. in PasswordedSensorterminal.bs2. Acestea sunt adaugate la cele din PasswordedSensorterminal.bs2. asa ca nu va ingrijorati cu copierea titlului. Copierea sectiunii initialization din ReusablePasswordedChacker si lipirea lui intre sectiunile variables si main routine in PasswordedSensorTerminal.bs2.

Copierea intregii sectiuni subroutine din ReusablePasswordChecker.bs2 si lipirea lui dupa finalui ultimei subroutine in PasswordedSensorTerminal.bs2. Se testeaza PasswordedSensorTerminal.bs2. si se verifica daca functioneaza si se imbunatateste cat este nevoie.

Intrebari:

Inainte de a face subsitemele individuale de a lucra impreuna, cand ar trebui testate? De ce? Cate programe ai utilizat in acest capitol ce relationeaza cu celelalte capitol. Um se diferenteaza directivul PIN fata de CON si VAR. Care este diferenta dintre END si EXIT. Exercitii Procesul general in 3 pasi pe care ii vei utiliza tu sa adaugi un circuit piezospeaker la proiectul tau! Modificati parola password Checker.bs2. de la pagina 293 in asa fel incat mesajul You entered va aparea in terminalul Debug impreuna cu textul parolei. Proiecte Adauga un piezospeaker circuit la colectia de senzori pe care ai dezvoltato in acest capitol si scrie un program pentru testarea lor. Modifica TerminalOperatedSensorArray in asa fel incat in al 5-lea meniu bipul piezodifuzorului sa emita o fregventa de 2Khz pt 1,5 sec.

In timp ce lucrezi la una dintre proiectele acestei carti, acorda-ti un gand. Foloseste materialul ce l-ai invatat in aceasta carte pentru a inventa un Gaget sau Gizmo in design propriu.

Modificarea subrutinelor Terminalele nu sunt doar aplicatii pentru ONGOSUB.De exemplu,daca vrei sa apelezi la toate cele 4 subrutine diferite una dupa alta,aici este o metoda prin care poti sa o faci: 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 Observati ca cele doua subrutine care fac terminalul sa functioneze au fost conectate si comanda ONGOSUB a fost plasata in bucla FORNEXT. Salvati programul exemplu sub numele:TerminalOperatedSensorArrayYourTurn.bs.2 Modificati rutina principal facand schimbarile de care tocmai am discutat. Rulati programul si verificati daca se misca in ciclu prin masuratori

Activitatea#4:Dezvoltarea si adaugarea unui software subsistemului Sa spunem ca matricea cu senzori este pusa intr-un dispozitiv pe care doar anumiti angajati au permisiunea sa-l foloseasca si trebuie sa furnizeze o parola.Asta inseamna ca trebuie sa va extindeti programul pentru a salva si verifica o parola.Este mai bine sa scrieti un program parola care sa functioneze de unul singur in primul rand,iar apoi il adaugati programului dumneavoastra mai mare.

Programarea unui verificator de parole Puteti sa salvati o parola intr-un program PBASIC folosind o directive Data.De exemplu: Password DATA "pass!" Veti avea nevoie de cateva variabile pentru a stoca alte valori in program: index temp VAR Nib VAR Byte

Daca veti folosi o parola din cinci caractere,exista o declarative speciala de variabile(numita o matrice declaratie) pe care o folositi pentru a declara cinci variabile cu acelasi nume. userEntry VAR Byte(5) Acuma aveti un octet de cinci variabile numit userEntry:userEntry(0),userEntry(1),userEntry(2),userEntry(3) si userEntry(4) Comanda DEBUGIN are un formator numit STR care in mod automat incarca caractere intr-o matrice.De exemplu,puteti vedea: DEBUGIN STR userEntry \5

S-ar putea să vă placă și