microcontrolere

33
TEME MIC MICROCONTROLERUL 1.Ce sunt microcontrolerele şi unde se utilizează ? Microcontrolerul este un circuit care include pe acelaşi chip toate elementele componente ale unui microcalculator .Spre deosebire de microcalculatoarele din calculatoarele de uz general, microcontrolerul deserveşte o aplicaţie bine precizată:citeste dispozitive de intrare cum ar fi butoane si senzori, proceseaza date sau informatii, controleaza dispozitive de iesire: becuri, displayuri,motoare, speakere. 2. Ce este un sistem încapsulat „ Embedded systems” ? Un sistem încorporat este un sistem informatic conceput pentru a efectua una sau cateva funcţii dedicate, de obicei in timp real. Este inclus, ca parte a unui dispozitiv complet, incluzand deseori pe langa software si hardware şi componente mecanice. De exemplu ceasuri digitale, mp3 playere, telefoane, etc. 3. . Ce este BASIC Stamp 2 (BS2) şi care sunt principalele sale componente ? Basic Stamp 2 este o mica placa cu circuite imprimate care conţine elementele esenţiale ale unui sistem cu microprocesor: un microcontroler care conţine procesorul, un interpretor construit in ROM, memoria EEPROM,un rezonator cu cuartz, un regulator de tensiune, un bloc de conditionare a semnalului ( de la portul serial de la PC +/-12V la 5 V la Basic Stamp ). 4. Cum se numeşte microcontrolerul din BS2 şi ce rol are ? Microcontrolerul din BS2 se numeste PIC16C57 si are rolul de a citi intrarile, procesa informatiile, controla iesirile. 5. Câte porturi I/O are BS2 şi cum sunt notate ? BS2 are 16 pini de I/O notati P0...P15 6. În ce plajă se încadrează tensiunea de intrare Vin pentru BS2 5.5-15V 7. Ce valori au tensiunile Vdd şi Vss ? 1

Upload: dragos-pana

Post on 19-Jan-2016

36 views

Category:

Documents


4 download

DESCRIPTION

Generalitati

TRANSCRIPT

Page 1: Microcontrolere

TEME MIC

MICROCONTROLERUL

1.Ce sunt microcontrolerele şi unde se utilizează ?Microcontrolerul este un circuit care include pe acelaşi chip toate elementele componente ale unui microcalculator .Spre deosebire de microcalculatoarele din calculatoarele de uz general, microcontrolerul deserveşte o aplicaţie bine precizată:citeste dispozitive de intrare cum ar fi butoane si senzori, proceseaza date sau informatii, controleaza dispozitive de iesire: becuri, displayuri,motoare, speakere.2. Ce este un sistem încapsulat „ Embedded systems” ?Un sistem încorporat este un sistem informatic conceput pentru a efectua una sau cateva funcţii dedicate, de obicei in timp real. Este inclus, ca parte a unui dispozitiv complet, incluzand deseori pe langa software si hardware şi componente mecanice. De exemplu ceasuri digitale, mp3 playere, telefoane, etc.3. . Ce este BASIC Stamp 2 (BS2) şi care sunt principalele sale componente ?Basic Stamp 2 este o mica placa cu circuite imprimate care conţine elementele esenţiale ale unui sistem cu microprocesor: un microcontroler care conţine procesorul, un interpretor construit in ROM, memoria EEPROM,un rezonator cu cuartz, un regulator de tensiune, un bloc de conditionare a semnalului ( de la portul serial de la PC +/-12V la 5 V la Basic Stamp ).4. Cum se numeşte microcontrolerul din BS2 şi ce rol are ?Microcontrolerul din BS2 se numeste PIC16C57 si are rolul de a citi intrarile, procesa informatiile, controla iesirile.5. Câte porturi I/O are BS2 şi cum sunt notate ?BS2 are 16 pini de I/O notati P0...P156. În ce plajă se încadrează tensiunea de intrare Vin pentru BS25.5-15V7. Ce valori au tensiunile Vdd şi Vss ?5V si 0V8. Cum se numeşte softul folosit pentru programarea modulului BASIC Stamp 2 ?BASIC Stamp Editor.9. Care sunt directivele cu care începe fiecare program în PBASIC şi cum pot fi introduse?Directivele cu care incepe un program in PBASIC sunt cele referitoare la versiunea de PBASIC si la versiunea de Basic Stamp folosite.Pot fi introduse selectand din bara de meniu versiunea dorita. 10. Pentru ce sunt folosite comenzile DEBUG şi END ?Comanda DEBUG este folosita pentru a trimite date serial de la BASIC STAMP înapoi la computer pentru a fi afişate. Comanda END este folosita pentru a informat BS ca programul este complet.

1

Page 2: Microcontrolere

Ex.1 Descrieţi figura alăturată!Ce fac comenzile DEBUG şi DEBUGIN. Comanda DEBUG este folosita pentru a trimite date serial de la BASIC STAMP înapoi la computer pentru a fi afişate. DEBUGIN este folosita pentru a introduce date de intrare de la utilizator cu ajutorul ferestrei DEBUG.P1. Scrieţi un program prin care transmiteţi un mesaj spre monitor prin care afişaţi pe rânduri diferite:Numele şi Prenumele; rezultatul zecimal 7x11 ; codul ASCII pentru 7x11;rezultatul binar 1+2+3+4 '{$STAMP BS2}'{$PBASIC 2.5} DEBUG "Nume Prenume”, CRDEBUG DEC 7*11,CRDEBUG 7*11DEBUG BIN 1+2+3+4

CIRCUITE ELECTRONICE DE BAZA

1. Ce este LED-ul şi de ce este cel mai comun indicator luminos ?LED-ul este o dioda emiţătoare de lumină. Este o diodă semiconductoare ce emite lumină la polarizarea directă a joncţiunii p-n. Efectul este o formă de electroluminescenţă. Este cel mai comun indicator luminos deoarece are consum redus de energie , o viaţă lungă de funcţionare si este ieftin.2. La ce trebuie să fim atenţi când folosim un LED ?Trebuie avut un plus de atenţie la orintarea ledului în momentul conectării 3. Cum se limitează curentul prin LED ? (daţi un exemplu )Curentul printr-un Led se limiteaza cu ajutorul unui rezistor . Ex: V=I*R; V=5V-1.6V=3.4V. I=V/R.Pt R=220 ohm =>I=15,45 mA. Pt R=470 ohm => I=7.73mA4. Cum testăm un LED ? ( detalii: baterie, flux de electroni şi goluri, sensul convenţional al curentului etc).Într-o baterie, există un surplus de electroni, pe de o parte, şi un deficit de electroni, pe de altă parte (goluri). În cazul unui circuit închis format din baterie ,Led şi rezistenţă, există un flux de la o parte in alta. Acesta este numit curent. Curentul pot fi văzut în 2 feluri: Debit de electroni: electroni curg din partea negativă (-) la partea pozitivă (+) faţă sau Debitul de goluri sau debit convenţional: golurile, sau lipsa de electroni, trece de la pozitiv la negativ. LED-urile au două terminale:Anodul este terminalul mai lung,Catodul este terminalul mai scurt,in partea teşită a capsulei. Ledul se testeaza doar cu ajutorul circuitului : un pin al unei rezistente de 470 ohmi se conecteaza la Vdd. Anodul ledului se conecteaza la celalalt pin al rezistentei. Catodul ledului se leaga la Vss.5. Ce curent circulă prin LED dacă il conectăm direct la o tensiune de 9V ? Aceeaşi întrebare dacă îl inseriem cu o rezistenţă de 10 KΩ. Care este rezistenţa ideală pentru ca LED-ul cu consum normal să lumineze ? V=I*R; V=9V-1.6V=7.4V. I=V/R. Pt R=1 ohm =>I=7.4A. Pt R=10K ohm => I=0.74mA. Curentul maxim care trece printr-un led fara a-l distruge este de 30 mA. In

2

Page 3: Microcontrolere

functie de alimentare(5v sau 9v) se poate calcula ce rezistenta este necesara pentru a obtine 30 mA. Daca rezistenta e mai mare atunci ledul va lumina mai putin.6. Cât de lungă este întârzierea introdusă de PAUSE 500 ?500 milisecunde= 0.5 secunde7. De câte ori se repetă instrucţiunile cuprinse între DO-LOOP.Se repeta la infinit.8. Daţi exemplu de două bucle condiţionale! Care este comanda care repetă de un număr prestabilit de ori un grup de comenzi ?DO-LOOP WHILE (Conditie)-este o bucla conditionata. Comanda care repetă de un număr prestabilit de ori un grup de comenzi este FOR-NEXT. Ex: counter VAR Byte counter=1 DO HIGH 14 PAUSE 250 LOW 14 PAUSE 250 Counter=counter+1 LOOP While(counter<=10); EX: counter VAR Byte FOR counter = 1 TO 10 HIGH 14 PAUSE 500 LOW 14 PAUSE 500 NEXT9. Care sunt tipurile de variabile folosite de PBASIC ? Care este cel mai mic tip de variabilă pentru a număra până la 11 ?Bit,nib,byte,word. Nib(0-15) pentru a numara pana la 11 e cel mai mic tip de variabila.10. Este comanda LOW 16 rezonabilă ? Dacă da, de ce ? Dacă nu, de ce ? Comanda LOW 16 nu este rezonabila deoarece pinii de I/O sunt de la 0 la 15.Ex.1 Desenaţi schema electrică pentru un LED conectat la P15. Scrieţi programul prin care acesta se stinge şi aprinde odată pe secundă de 30 de oricounter VAR ByteFOR counter = 1 TO 30HIGH 14PAUSE 500LOW 14PAUSE 500NEXTENDP1. Desenaţi schema electrică prin care un led bicolor (roşu-verde) este conectat la P14 şi P15 , iar unul monocrom (galben) la P13. Scrieţi un program prin care ledul bicolor este aprins pe roşu 3 sec. după care se aprinde cel verde pentru 10 secunde, timp în care ledul galben clipeşte cu frecvenţa de o secundăcounter VAR ByteHIGH 15LOW 14PAUSE 3000LOW 15 HIGH 14FOR counter = 1 TO 10HIGH 13 ' Yellow LED onPAUSE 500LOW 13 ' Yellow LED offPAUSE 500NEXT

3

Page 4: Microcontrolere

P2. Semafor de trafic Nord-Sud (P13, P14 şi P15) , Est-Vest (P3, P4 şi P5). Timpi: 30 secunde, roşu (verde), 10 secunde galbenDOHIGH 15 ‘ VERDE N-S APRINSLOW 14 ROSU N-S STINSLOW 13 GALBEN N-S STINSHIGH 4 ROSU E-V APRINSLOW 5 VERDE E-V STINSLOW 3 GALBEN E-V STINSPAUSE 20000HIGH 13 GALBEN N-S APRINSLOW 15 VERDE N-S STINSPAUSE 10000HIGH 14 ROSU N-S APRINSLOW 13 GALBEN N-S STINSHIGH 5 VERDE E-V APRINSLOW 4 ROSU E-V STINSPAUSE 20000HIGH 3LOW 5PAUSE 10000LOOP

UTILIZAREA BUTOANELOR IN CIRCUIT

1. Care este diferenţa dintre depunerea şi recepţia unui semnal HIGH sau LOW cu BS2 ?

Diferenţa dintre depunerea şi recepţia unui semnal HIGH sau LOW cu BS2 este ca atunci cand se receptioneaza un semnal HIGH sau LOW pinul respectiv este folosit ca si pin de intrare, dar atunci cand se trimite un semnal HIGH sau LOW pinul este folosit ca si pin de iesire.2. Care sunt nivelele de tensiune pentru HIGH şi LOW

?LOW <1.4V HIGH >1.4 V3. Ce înseamnă Activ-High şi Activ-Low ? Desenaţi

două circuite de testare a unui buton folosind un LED !

Un buton este Activ-Low atunci cand trimite catre BS un semnal jos (Vss) cand butonul este activ (apasat). Butonul este Activ-High atunci cand trimite catre BS un semnal inalt (Vdd) atunci cand este activ (apasat).

2 circuite de testare a butonului cu LED(in fig)4. Ce comandă este utilizată pentru citirea stării

unei intrări a unui pin (ex. P3)? DEBUG ? IN3

4

Page 5: Microcontrolere

5. Care sunt schemele de conectare a unui buton cu rezistenţă pull-up şi pull-down la pinul P3 ? Ce rol are rezistenţa de Pull-Down ?

Rezistenta de Pull Down are rolul de a pune intrarea jos (la masa,Vss) atunci cand butonul nu este apasat.6. Care este programul pentru afişarea stării unui buton (legat la P3) la inerval de 1/4

sec.? ' {$STAMP BS2} ' {$PBASIC 2.5} DO

DEBUG ? IN3 PAUSE 250 LOOP7. Care este structura blocurilor de comenzi pentru luarea unor decizii bazate pe starea

unuia sau mai multor butoane?IF...THEN...ELSE... ENDIF IF...THENIF...THEN...ENDIFIF...THEN...ELSEIF...THEN... ENDIF

8. Care sunt operatorii logici folosiţi de PBASIC şi care sunt tabelele de adevăr ?

AND, OR si XOR9. Ce face formatorul HOME în instrucţiunea

DEBUG – HOME ?Formatorul HOME folositi in instructiunea DEBUG are rolul de a trimite cursorul in partea stanga sus a ferestrei DEBUG.

P1. a) Desenaţi schema electrică a unui circuit prin care două leduri monocrom (roşu şi verde) conectate la P15 şi P14 sunt comandate de două butoane PB1 şi PB2 conectate la P3 şi P4. b) Pseudocodul programului este: ampele butoane apăsate - ambele leduri aprinse, un buton apăsat un led aprins. Faceţi organigrama şi scrieţi codul programului cu comentarii.DODEBUG ? IN4DEBUG ? IN3IF (IN3 = 1 AND IN4 = 1) THEN ‘ daca buton1 si buton2 apasateHIGH 14 ‘ aprinde led 1HIGH !5 ‘aprinde led 2ELSEIF (IN3 = 1) THEN ‘daca buton1HIGH 14 ‘ aprinde led 1LOW 15 ‘stinge led 2ELSEIF (IN4 = 1) THEN ‘daca buton 2 apasatHIGH 15 ‘aprinde led2LOW 14 ‘stinge led1ELSE ‘ daca nuLOW 14 ‘stinge led1LOW 15 ‘stinge led 2ENDIF LOOPP2. Testarea timpului de reacţie a) Schema electrică . b) Pseudocodul programului c) Codul programului c)' {$STAMP BS2}

5

X1 X2 AND OR XOR0 0 0 0 00 1 0 1 11 0 0 1 11 1 1 1 0

Page 6: Microcontrolere

' {$PBASIC 2.5}timeCounter VAR Word ' variabila care numara timpulDO ' incepe bucla principala.DO ' ‘repetaLOOP UNTIL IN3 = 1 ' pana se apasa butonul.LOW 14 ' LED bicolor rosu.HIGH 15PAUSE 3000 ' pauza 3 secunde.HIGH 14 ' LED bicolor verde.LOW 15timeCounter = 0 ' atribuie valoarea 0 la timeCounterDO 'incepe bucla care numara timpul de reactie PAUSE 1 ‘ pauza 1 milisecundatimeCounter = timeCounter + 1 ‘ incrementeazaLOOP UNTIL IN3 = 0 ' pana cand butonul e eliberatLOW 14 ' opreste led.DEBUG "Timpul tau ", DEC timeCounter, ' afisaza timp"To play again, hold the ", CR, ' Play again LOOP ' inapoi in bucla principala

b) asteapta pana cand se apasa butonul ;aprinde LED rosu timp de 3 secunde ;aprinde LED verde; incrementeaza cu 1 ms variabila ce nr timpul scurs de la aprinderea ledului

verde pana cand butonul e eliberat; stinge led; afiseaza timp; repeta de la inceput programulP3. Dezvoltaţi testul de reacţie pentru doi jucători (P3 şi P4).timeCounterA VAR Word ' Time score of player AtimeCounterB VAR Word ' Time score of player BDEBUG "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, CRDO ' Begin main loop.DO ' Loop until both press' NothingLOOP UNTIL (IN3 = 1) AND (IN4 = 1)LOW 14 ' Bi-color LED red.

6

Page 7: Microcontrolere

HIGH 15PAUSE 1000 ' Delay 1 second.HIGH 14 ' Bi-color LED green.LOW 15timeCounterA = 0 ' Set timeCounters to zerotimeCounterB = 0DOPAUSE 1IF (IN3 = 1) THEN ' If button is still down,timeCounterA = timeCounterA + 1 ' increment counterENDIFIF (IN4 = 1) THENtimeCounterB = timeCounterB + 1ENDIFLOOP UNTIL (IN3 = 0) AND (IN4 = 0) ' Loop until both buttons' released.LOW 14 ' Bi-color LED off.DEBUG "Player A Time: ", DEC timeCounterA, " ms. ", CRDEBUG "Player B Time: ", DEC timeCounterB, " ms. ", CR, CRIF (timeCounterA < timeCounterB) THENDEBUG "Player A is the winner!", CRELSEIF (timeCounterB < timeCounterA) THENDEBUG "Player B is the winner!", CRELSE ' A & B times are equalDEBUG "It's a tie!", CRENDIFDEBUG CRDEBUG "To play again, hold the ", CR ' Play again instructions.DEBUG "buttons down again.", CR, CRLOOP ' Back to "Begin main

SERVO MOTOARE

1.Precizaţi patru tipuri de motoare şi dispozitive pentru mişcare ! Care dintre ele poate fi comandat direct de BS2 ?Motoare de curent continuu, de curent alternativ, pas cu pas, servomotoare. Servomotorul poate fi comandat direct de BS2.2. Care este componenţa unui servomotor standard RC (internă şi externă) ? Mufa pentru conectare, cablul, elicea , carcasa care contine in interior motorul de curent continuu, roti dintate si circuite pentru control.3.Prin câte fire se conectează servo la BS2 ? Specificaţi-le, inclusiv culorile !Prin 3 fire: negru la Vss, rosu la Vdd sau Vin si alb la un pin pentru semnal.4.Care este principiul de funcţionare al unui servo standard şi a unuia cu rotaţie continuă ? Desenaţi schema bloc şi explicaţi !. Cum este controlat un servomotor clasic, dar unul cu rotaţie continuă ?

7

Page 8: Microcontrolere

+

Servomotoarele standard sunt controlate in pozitie. Servomotoarele cu rotatie continua sunt provenite din servomotoarele standard dar avand unele modificari si anume eliminarea traductorului de pozitie respectiv a clapetelor de cursa.

Incarcare Unghi dorit e U=Kp*e

Unghi de iesire

-

Standard:Unghiul de iesire va depinde de valoarea lui U si de incarcare. Controlul este in pozitie.Rotatie continua: viteza motorului depinde de unghiul dorit si de incarcare. Controlul este in viteza5.Care sunt comenzile prin care comandăm lăţimea impulsurilor şi perioada între două impulsuri ? Specificaţi argumentele comenzilor! Exemplificaţi !PULSOUT pin, durata. Latimea impulsului este specificata prin parametrul durata. Aceasta durata este increment de 2 microsecunde. Pin specifica pinul folosit. Perioada dintre doua impulsuri este de 20 ms si se realizeaza prin comanda PAUSE 20.Ex: PULSOUT 14,750 PAUSE 20 trimite un impuls care dureaza 2*750= 1500 microsecunde=1.5ms la pinul 14 dupa care urmeaza pauza de 20 ms intre impulsuri.6. Care este plaja de valori pentru argumentul duration şi ce se întâmplă dacă o depăşim ?Plaja de valori pentru duration este intre 500 si 1000. Daca o depasim, chiar daca servomotorul nu se distruge, i se va scurta durata de viata. 7.Desenaţi diagrama de impulsuri pentru un servomotor clasic ( PARALLAX ) !8.Care sunt elementele de program prin care modificăm poziţia în timp a elicei servomotorului.Pentru modificarea in timp a pozitiei elicei trebuie construita o bucla FOR-NEXT in care introducem comenzile PULSOUT si PAUSE pentru specificarea duratei impulsului in fiecare pas al buclei.9.Cum se modifică viteza de deplasare a elicei servomotorului clasic ?Modificarea vitezei de deplasare a elicei servomotorului clasic se face prin modificarea argumentului instructiunii STEP in cadrul buclei FOR-NEXT. EX: FOR counter = 500 TO 1000 STEP 8

8

Regulator Kp

Motor+reductor

Senzor de unghi

Page 9: Microcontrolere

PULSOUT 14, counterPAUSE 20NEXT10.Care sunt comenzile prin care afişăm poziţia servomotorului şi prin care comandăm poziţia prin calculator ? Faceţi o paralelă între ele !DEBUGIN DEC pulses ‘ citeste nr impulsuri formator DEC - zecimalDEBUGIN DEC duration ‘ citeste durata impuls in format zecimal(comanda prin calculator)FOR counter = 1 TO pulsesPULSOUT 14, durationPAUSE 7 ‘ pauza 7 in loc de 20 deoarece comanda DEBUG de mai jos dureaza cateva secundeDEBUG DEC5 counter, CR, CRSRUP ‘ afisare pozitie counter, implicit pozitia servoNEXT ‘ formatorul DEC5 afiseaza nr zecimale cu 5 cifre

Ex.1 Scrieţi codul programului prin care durata se modifică între 700 şi 800 şi invers:a) Cu pas de 1 b) Cu pas de 4

FOR counter = 700 TO 800 FOR counter = 700 TO 800 STEP 4PULSOUT 14, counter PULSOUT 14, counterPAUSE 20 PAUSE 20NEXT NEXTFOR counter = 800 TO 700 FOR counter = 800 TO 700 STEP 4PULSOUT 14, counter PULSOUT 14, counterPAUSE 20 PAUSE 20NEXT NEXT

P1. a) Desenaţi schema electrică prin care un servo conectat la P14 este comandat cu două butoane (PB1 şi PB2 ) conectate la P3 şi P4. Scrieţi codul programului prin care servo se roteşte în sensul acelor de ceasornic (CW) dacă PB1 este apăsat şi în sens invers (CCW) dacă PB2 este apăsat' {$STAMP BS2}' {$PBASIC 2.5}duration VAR Wordduration = 750DOIF IN3 = 1 THENIF duration > 500 THEN ‘se verifica pt a nu cobora duration = duration – 25 ‘ sub 500ENDIFENDIFIF IN4 = 1 THENIF duration < 1000 THEN ‘ se verifica pt a nu duration = duration + 25 ‘ depasi 1000ENDIFENDIFPULSOUT 14, duration

9

Page 10: Microcontrolere

PAUSE 10DEBUG HOME, DEC4 duration, " = duration"LOOP

CIRCUIT CU POTENTIOMETRU

1.Ce este potenţiometrul ? Daţi câteva exemple unde se utilizează !Potentiometrul este un rezistor cu 3 terminale (unul este cursorul) care poate functiona ca o rezisternta variabila in functie de pozitia cursorului. Se utilizeaza in echipamentele audio, in joystick-uri,in servomotoare2.Potenţiometrul este un traductor de deplasare sau de poziţie ? Un servomotor conţine potenţiometru ? Dacă da , ce rol are acesta ?Potentiometrul este un traductor de pozitie. Un servomotor contine potentiometru. Acesta este folosit in bucla de reactie a sistemului pentru calculul abaterii dintre marimea prescrisa si marimea reala. Potentiometrul ne da pozitia reala a servomotorului.3. .Desenaţi un circuit de testare a unui potenţiometru folosind un LED4. Desenaţi un circuit RC pentru determinarea valorii unei rezistenţe şi explicaţi funcţionarea Cand butonul este apasat condensatorul de incarca. Cand este eliberat Basic Stamp incepesa numere si condensatorul sa se descarce. Basic Stamp continua sa numere pana cand intrarea de pinul 7 devine LOW adica coboara sub 1.4V. Timpul de descarcare contorizat de BS este proportional cu capacitatea si rezistenta. Cunoscandu-se valoarea capacitatii se poate calcula valoarea rezistentei in cauza.

5.Care este comanda folosită de BASIC Stamp 2 pentru măsurarea unei rezistenţe. Explicaţi argumentele acestei comenziRCTIME Pin, Stare, Variabila;Pin-pinul la care este conectat circuitul RC; Stare-starea initiala a pinului cand incepe numaratoarea (0 sau 1); Variabila- variabila in care se stocheaza in memorie valoarea timpului scurs, increment de 2 microsecunde.6. Desenaţi schema electrică de măsurare a unui potenţiometru conectat la P7. Scrieţi programul RC-time de afişare a valorii potenţiometrului şi explicaţi-l.time VAR Word ‘ declarare variabila ce contorizeaza timpDO ‘ bucla infinitaHIGH 7 ‘ pin 7 pe HIGH

10

Page 11: Microcontrolere

PAUSE 100 RCTIME 7, 1, time ‘intoduce in variabila time valoarea timpului RCDEBUG HOME, "time = ", DEC5 time ‘ afiseaza variabila timeLOOP7.Ce face directiva CON ? Explicaţi utilizarea pentru nume şi numere !Directiva CON poate substitui un nume sau un numar. De exemplu Offset CON 300 va substiui numarul 300 cu Offset. Este de folos daca avem in multe locuri de introdus in program valoarea offsetului ca fiind 300. E mai usor de inteles programul daca in locul unei valori numerice punem un nume sugestiv .E1. Într-un circuit RC condensatorul are valoarea C= 0,5 µF iar rezistenţa de 100 Ω. Doriţi o valoare a timpului de descărcare de 100 de ori mai mare. Ce soluţii aveţi ? Justificaţi soluţia aleasăExista mai multe solutii: un condensator de 50 µF sau o rezistanta de o rezistenta de 10kΩ, sau o combinatie de un condensator si o rezistenta care sa duca la un timp de descarcare dorit. Prefer solutia cu rezistenta de 10 kΩ pentru ca e eficienta , ieftina, la indemana.P2. Descrieţi programul (pseudo codul) prin care se poate controla poziţia unui servomotor cu un potenţiometru . Scrieţi codul programului cu comentarii ! scaleFactor CON 185offset CON 500rcPin CON 7delay CON 10servoPin CON 14time VAR WordDOHIGH rcPinPAUSE delayRCTIME rcPin, 1, timetime = 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

DISPLAY DIGITAL

1. Ce este un afişaj cu 7 segmente ? Daţi câteva exemple unde îl întâlnim în viaţa cotidiană!

Este un bloc dreptunghic format din 7 LED-uri in forma de bara de lungime egala aranjate astfel incat sa poata afisa cifre si cateva litere, in functie de ce leduri sunt aprinse. Se intalnesc peste tot in viata cotodiana, la afisajele aparatelor electrocasnice, la afisajul echipamentelor multimedia, ceasuri electronice, afisajul din bordul autoturismelor, etc.

11

Page 12: Microcontrolere

2. În figura alăturată se prezintă schematic un digit cu 7 segmente plus punctul. Este cu catod comun sau cu anod comun ? Desenaţi cazul contrar !

Este cu catod comun.

3.Care este valoarea rezistenţei prin care fiecare segment este legat la BS2 ? De ce nu poate fi mai mică ?1 kNu poate fi mai mica deoarece riscam sa ardem ledurile.4.Unde se conectează pinul 3 sau 8 în cazul de faţă ? Dar în cazul contrar ? In cazul de fata- catod comun, pinul 3 sau 8 se conecteaza la masa (Vdd). In cazul contrar se conecteaza la Vss.5. Pini 1,2,4, 5,6,7,9 şi 10 se conectează în ordine la pini P8, P9....P15. Scrieţi codul programului prin care se activează fiecare segment la interval de o secundă !pinCounter VAR NibDEBUG "I/O Pin", CR,"-------", CRFOR pinCounter = 8 TO 15DEBUG DEC2 pinCounter, CRHIGH pinCounterPAUSE 1000LOW pinCounterNEXT6.Explicaţi prin diagrama memoriei RAM: IN0, OUT0, DIR0, ....IN15, OUT15, DIR15; INA, OUTA, DIRA...........................................................INS, OUTS, DIRS !IN0, OUT0, DIR0, ....IN15, OUT15, DIR15- sunt registrii in care sunt stocate valorile pt pini 0...15,directia acestora (intrare 0 iesire 1) si starea iesirii (0 sau 1), ca si biti,fiecare pin in parteINA, OUTA, DIRA-registrii in care sunt stocate valorile pt pinii 0-3, directia si starea acestora, ca si variabile nibble, toti 4 impreuna. La fel INB, OUTB, DIRB; INC, OUTC, DIRC; IND, OUTD, DIRD pentru pinii 4-7;8-11;12-15; INL, OUTL, DIRL; INH, OUTH, DIRH –registrii care stocheaza valorile pt pini 0-7 respectiv 8-15,directia acestora (intrare 0 iesire 1) si starea iesirii (0 sau 1) ca si variabile de tip byte.INS, OUTS, DIRS registrii care stocheaza valorile pt pini 0-15,directia acestora (intrare 0 iesire 1) si starea iesirii (0 sau 1) ca si variabile de tip cuvant (16 biti).7.Scrieţi un program prin care afişaţi cifrele de la 0 la 9 la interval de ½ sec.'{$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.CDEOUTH = %11100111 ' 0PAUSE 500OUTH = %10000100 ' 1PAUSE 500

12

Page 13: Microcontrolere

OUTH = %11010011 ' 2PAUSE 500OUTH = %11010110 ' 3PAUSE 500OUTH = %10110100 ' 4PAUSE 500OUTH = %01110110 ' 5PAUSE 500OUTH = %01110111 ' 6PAUSE 500OUTH = %11000100 ' 7PAUSE 500OUTH = %11110111 ' 8PAUSE 500OUTH = %11110110 ' 9PAUSE 500DIRH = %00000000 ' I/O pins to input,' segments off.END8.Explicaţi comanda LOOKUP index, [ %11100101, %11100001, %01100001, %00100001, %00000001, %00000000 ], OUTH .In exemplul considerat indexul poate avea 6 valori, de la 0 la 5 conform nr de octeti din paranteza. In functie de indexul introdus in comanda, OUTH va primi valoarea octetului corespunzator indexului din comanda. De exemplu daca index=2 atunci OUTH va avea valoarea 01100001 corespunzatoare celui de-al treilea index.P1 Scrieţi un program prin care afişaţi data naşteri cu pauză de 0,5 sec.'{$STAMP BS2}'{$PBASIC 2.5}DEBUG "06 07 87”OUTH = %00000000 ' OUTH initialized to low.DIRH = %11111111 ' Set P8-P15 to all output-lowOUTH = %11100111 ' 0PAUSE 500OUTH = %01110111 ' 6PAUSE 500OUTH = %11100111 ' 0PAUSE 500OUTH = %11000100 ' 7PAUSE 500OUTH = %11110111 ' 8PAUSE 500OUTH = %11000100 ' 7PAUSE 500DIRH = %00000000 ' I/O pins to input,END

FOTOREZISTENTE

13

Page 14: Microcontrolere

1. Prezentaţi pe scurt câteva tipuri de senzori cunoscuţi. Detaliaţi senzorii de lumină.Butonul - senzor de presiune, potentiometrul-senzor de pozitie, de temperatura, de fum, de lumina. Din categoria senzorilor de lumina fac parte : fotodioda, fototranzistorul, fotorezistenta.Aceste elemente sunt sensibile la radiatia luminoasa, si isi schimba starea de conducere sau nu a curentului (fotodioda, fototranzistorul) sau isi modifica rezistivitatea electrica invers proportional cu lumina (fotorezistenta).2.Ce este o fotorezistenţă ? Ce substanţă chimică face fotorezistenţa sensibilă la lumină ?Cum sugereaza si numele, aceasta este un rezistor care reacţionează la lumină. Ingredientul activ Sulfatul de Cadmiu (CdS) permite electronilor să treacă mai uşor când energia luminii o loveşte, astfel scăzându-i rezistenţa (opoziţia la fluxul de curent ). Cu cât este mai puternică lumina cu atât mai mică va fi şi rezistenţa 3. Care este diferenţa între fotorezistenţă şi potenţiometru ? Desenaţi

simbolurile electrice pentru ambele.Fotorezistenta isi modifica rezistenta in functie de lumina, potentiometru in functie de pozitia cursorului.

4. . Ce înseamnă EEPROM. Câţi bytes pot fi memoraţi în EEPROM-ul din BS 2 ? Câţi biţi pot fi memoraţi?

Electrically Erasable Programmable Read-Only Memory) Cea mai importantă caracteristică a acestei memorii este că nu pierde conţinutul în timpul închiderii sursei de alimentare. Pot fi memorati 2kbytes adica 2048 bytes adica 2048*8=16384 biti.5. Ce comandă este folosită pentru a scrie în EEPROM caractere ? Detaliaţi cu exemple.WRITE Locaţii, {Word} Date . Ex: WRITE 7, 195 stocheaza valoarea 195 in locatia 7.WRITE 10, Word 50012 stocheaza valoarea 50012 in locatia 10. Se foloseste Word pt ca sunt necesari 2 bytes pt a stoca valoarea respectiva.6.Ce comandă citeşte date din EEPROM . DetaliaţiREAD Locaţie, {Word} Date . Citeste datele din Locatie, byte sau word si le introduce in variabila Date. Ex: READ 7, littleRR; READ 8, Word eepromValueA7.Există erorori în următoarea secvenţă de program ? Dacă da , explicaţi-le !WRITE 7, 125WRITE 8, 300WRITE 9, word 66700Da. 300>255 deci e nevoie de parametrul Word, ocupandu-se astfel 2 bytes, deci urmatoarea locatie libera fiind 10 nu 9.8.Ce este o subrutină ? Cum se apelează ? Cum se termină ? Exemplificaţi cu subrutina de citire şi afişare a valorii unei fotorezistenţe.Subrutina este o secventa de program separata de programul principal. Se apeleaza cu GOSUB Nume_subrutina si se sfarsesc cu RETURN. Ex: DO ' Main routine.GOSUB Get_Rc_TimeGOSUB DelayGOSUB Update_DisplayLOOP

14

Page 15: Microcontrolere

E1. Desenaţi schema de test a unei fotorezistenţe conectată la pinul P5. Scrieţi programul de testare şi afişare _DOHIGH 5PAUSE 100RCTIME 5, 1, timeDEBUG HOME, "time = ", DEC5 timeLOOPP1.a) Desenaţi schema unui „light Meter”. Scrieţi programul şi comentaţi-l. b) Modificaţi programul astfel ca segmentele circulare să se aprindă în sens invers. ' {$STAMP BS2}' {$PBASIC 2.5}DEBUG "Program Running!"index VAR Nib ' Variable declarations.time VAR WordOUTH = %00000000 ' Initialize 7-segment display.DIRH = %11111111DO ' Main routine.GOSUB Get_Rc_TimeGOSUB DelayGOSUB Update_DisplayLOOP' SubroutinesGet_Rc_Time: ' RC-time subroutineHIGH 2PAUSE 3RCTIME 2, 1, timeRETURNDelay: ' Delay subroutine.PAUSE timeRETURNUpdate_Display: ' Display updating subroutine.IF index = 6 THEN index = 0' BAFG.CDELOOKUP index, [ %01000000,%10000000,%00000100,%00000010,%00000001,%00100000 ], OUTHindex = index + 1RETURNB)Se modifica subrutina update_displayUpdate_Display: ' Display updating subroutine.IF index = 0 THEN index = 6

15

Page 16: Microcontrolere

' BAFG.CDELOOKUP index, [ %01000000,%10000000,%00000100,%00000010,%00000001,%00100000 ], OUTHindex = index - 1RETURN

MICROFON PIEZOELECTRIC

1.Faceţi referiri, în câzeva fraze, la următoarele: beep-ul electronic în viaţa cotidiană; principiul difuzorului piezoelectric; cum generează microcontrolerul suneteMicrocontrolerele produc sunete trimitand semnale high-low foarte repede la un speaker. Viteza la care semnalul se pereta este numita frecventa si este masurata in hertz. Difuzorul piezoelectric este comun, mic si ieftin si este folosit in multe dispozitive2.Ce face comanda FREQOUT 1,500,2000Trimite semnale high-low la pinul 1 cu durata de 0.5 la frecventa de 2000Hz.3.Cum putem modifica comanda de la 2 pentru a mixa două frecvenţe (2 KHz şi 3 Khz ) ?Comanda FREQOUT are un parametru optional Freq2 care permite cantarea a 2 frecvente simultanFREQOUT 1, 500, 2000, 30004.Care sunt parametrii pe care microcontrolerul îi poate modifica pentru ajustarea efectului unui sunetDurata, frecventa1, frecventa25.Ce face directiva DATA ? Cu cine este echivalentă ? Cum se scrie ? Exemplificaţi pentru scrierea secvenţei de note C,C,G,G ,A, A şi a frecvenţelor corespunzătoare ( C=2093, G=3136, A=3520 ).Directiva data stocheaza o lista de expresii. Este similara cu comanda WRITE.Notes DATA "C","C","G","G","A","A"Frequencies DATA Word 2093, Word 2093, Word 3136, Word 3136, Word 3520, Word 35206.Ce face directiva READ şi cum lucrează ? Exemplificaţi pentru citirea ultimei note şi a frecvenţei corespunzătoare (din secvenţă de la 5)READ citeste caracterele stocate in EEPROM. De exemplu pt ultima nota din exemplu anterior indexul este 5 . Index=5; READ Notes+index,noteLetter; READ Frequencies +(index*2), Word noteFreq7.Ce face SELECT.....CASE ? Daţi un exemplu de condiţionăriSELECT....CASE evalueaza o expresie (sau o variabila) si in functie de valoarea acesteia exista mai multe cazuri posibile. Pt o anumita valoare exista un singur caz cu un anumit set de instructiuni. De exemplu:SELECT characterCASE "A" TO "Z"

16

Page 17: Microcontrolere

DEBUG CR, "Upper case", CRCASE "a" TO "z"DEBUG CR, "Lower case", CRCASE "0" TO "9"DEBUG CR, "Digit", CRCASE "!", "?", ".", ","DEBUG CR, "Punctuation", CRCASE ELSEDEBUG CR, "Character not known.", CR,"Try a different one."ENDSELECTEx 1. Scrieţi un program prin care frecvenţa creşte de la 1500 la 3000 Hz cu pasul de 500 la fiecare ½ sec. Durata este constantă, de 500 ms.FOR frequency = 1500 TO 3000 STEP 500FREQOUT 9, 500, frequencyPAUSE 500NEXTP1. a) Desenaţi schema electrică a montajului în care două butoane PB1 şi PB2 conectate la pini P3 şi P4 comandă un piezospeaker legat la pinul P9.b) desenaţi organigrama programului prin care dacă sunt apăsate ambele butoane se emite un sunet cu frecveţă mixată , 2 Khz cu 3 Khz, cu durata de 1 sec. Dacă este apăsat PB1 se emite un sunet cu frecvenţa de 2 Khz, şi durata 0,5 sec, iar dacă este apăsat Pb2 sunet cu frecvenţa de 3Khz şi durata de 200 ms.c) scrieţi codul programului !DOIF (IN4 = 1 AND IN3 = 1)FREQOUT 9, 1000, 2000 ,3000ELSEIF (IN3 = 1) THENFREQOUT 9, 500, 2000 ' 2000 Hz for 500 msELSEIF (IN4 = 1) THENFREQOUT 9, 200, 3000 ' 3000 Hz for 100 msENDIFLOOP

POTENTIOMETRU DIGITAL

1.În figura alăturată se prezintă modulul BASIC Stamp 2. Precizaţi ce sunt cipurile mici indicate prin săgeţile 1, 2 şi 3 ! Ce funcţii au acestea ?1-EEPROM memoreaza programul chiar daca se intrerupe alimentarea.2-Regulator de 5V. Converteste tensiunea de alimentare in 5V3-microcontrolerul propriu zis care contine interpretor PBASIC

17

Page 18: Microcontrolere

2.Câte circuite integrate intră într-un tranzistor NPN ? R: a) de ordinul miilor; b) de ordinul zecilor de mii ; c) nici unul. Detaliaţi răspunsul.De ordinul miilor.Tranzistorul se afla la baza circuitelor integrate. In interiorul carcasei de plastic sau ceramica se afla un mic cip de silicon cu sute sau mii de tranzistori.3.Care sunt numele terminalelor unui tranzistor bipolar ? Desenaţi simbolul unui tranzistor NPN şi marcaţi terminaleleBaza, emitor, colector4.Cine controlează curentul Colector-Emitor prin tranzistor ? Desenaţi schema ! Curentul de pe B-E va controla curentul de pe C-E impreuna cu factorul de amplificare5.Desenaţi circuitul de testare a unui tranzistor cu ajutorul unui potenţiometru de 10 KΩ şi a unei rezistenţe de 50 KΩ în bază. Dacă factorul de amplificare hFE este 400, care este curentul ICE dacă cursorul potenţiometrului este la: a) mijloc, b) la capătul de jos, c) la capătul de sus ?a) (2.5V-0.7V)/50K = 36uA ;36uA x 400 = 14.4mAb) (0.7V-0V)/50K = 14uA ;14uA x 400 = 5.6mAc)(5V-0.7V)/50k=86uA; 86uA x 400 =34.4 mA6.Ce este potenţiometru digital şi ce conţine ? Desenaţi schematic un potenţiometru digital cu 128 trepte.Un potentiometru digital este un potentiometru care isi modifica rezistenta in functie de starea intrerupatoarelor. Acestea sunt in realitate tranzistoare7.Care sunt liniile de control ale potenţiometrului digital AD 5220 ?CS-chip select; CLK-clock ;U/D- up/downP1. În figura alăturată se prezintă un circuit de testare a unui potenţiometru digital. Descrieţi modul de funcţionare şi pseudo codul programului.Scrieţi codul programului adăugând comentariile necesare .counter VAR ByteDOLOW 5FOR counter = 0 TO 127PULSOUT 6, 1PAUSE 10NEXT

HIGH 5FOR counter = 0 TO 127PULSOUT 6, 1PAUSE 10NEXT LOOP

18

Page 19: Microcontrolere

APLICATII CU BOE-BOT

SERVO MOTOARELE BOE-BOT-ULUI

1. Servomotorul standard are un mecanism de feedback conectat la elice. Dupa ce este citita pulsatia, pozitia actuala este comparata cu cea initiala, iar elicea se va roti pana cand cele doua valori coincid. Servomotorul are un cuplu mare cand este pozitionat.Servomotorul cu rotatie continua are un mecanism de feedback care este ajustat la un puls de centru (750 or 1.5mS) pentru a opri servomotorul. Pulsuri cu valori mai mari sau mai mici ii permit sa se roteasca liber cu viteze diferite in ambele directii.

2. Deoarece serovmotoarele nu sunt pre-ajustate din fabrica, acestea se ajusteaza cu ajutorul unei surubelnite pentru a sta nemiscate. Acest lucru se numete centrarea servo. Dupa ajustare se va testa servomotorul pt a ne asigura ca ele functioneaza intr-un mod corespunzator.

3. Variabilele sunt folosite pt a stoca valori. Inainte de a putea utilize o variabila in PBASIC trebe sa ii dam un nume sis a specificam dimensiunea sa. Acest lucru se num declararea unei variabile. Tipuri de variabile: Bit(0-1), Nib(0-15), Byte(0-255), Word(0-65535 sau -32768 la +32767)

4. La un puls de 1.5 ms se foloseste comanda Pulseout 15, 750 pt rotire in sensul acelor de ceas. La un puls de 1.3 se foloseste comanda Pulseout 1.5 650.

5.

19

Page 20: Microcontrolere

P1. DEBUG "Program Running!"counter VAR WordFOR counter = 1 TO 120 ' Loop for three secondsPULSOUT 13, 850 ' P13 servo counterclockwisePULSOUT 12, 850 ' P12 servo counterclockwisePAUSE 20NEXTFOR counter = 1 TO 124 ' Loop for three secondsPULSOUT 13, 650 ' P13 servo clockwisePULSOUT 12, 650 ' P12 servo clockwisePAUSE 20NEXTFOR counter = 1 TO 122 ' Loop for three secondsPULSOUT 13, 650 ' P13 servo clockwisePULSOUT 12, 850 ' P12 servo counterclockwisePAUSE 20NEXTFOR counter = 1 TO 122 ' Loop for three secondsPULSOUT 13, 850 ' P13 servo counterclockwisePULSOUT 12, 650 ' P12 servo clockwisePAUSE 20NEXT

END

NAVIGAREA BOE-BOT-ULUI

1. Pt ca Boe-Bot-ul sa se deplaseze inainte roate stanga trebuie sa se roteasca invers acelor de ceas, iar cea dreapta in sensul acelor de ceas.

2. Cand Boe-Bot-ul pivoteaza sper stanga roata dreapta se roteste in sensul acelor de ceas iar roate stanga la fel. Comanda este : For counter=1 to 122

Pulseout 13, 650PULSOUT 12, 650NEXT

3. FOR counter = 1 TO 40 ' Stop one second.PULSOUT 12, 750PULSOUT 13, 750PAUSE 20NEXTFOR counter = 1 TO 122PULSOUT 13, 850PULSOUT 12, 650PAUSE 20NEXT

20

Page 21: Microcontrolere

5. Argumentul comanzii PULSOUT specifica ce roata executa miscare si in ce sens ( trigonometric sau acelor de ceas), iar bucla FOR counter=1 to 100 comanda cat timp sa se roteasca roata mentionata in PULSOUT.6. Pentru a stoca valori în memoria EEPROM a lui BASIC Stamp înainte de rularea unui program folosim Directiva DATA. Ex: DATA "FLFFRBLBBQ"7. Pentru a extrage o valoare stocată în memoria EEPROM şi pt a o copia unei variabile se foloseste comanda READ. Ex: DO UNTIL (instruction = "Q")

READ address, instructionaddress = address + 1' PBASIC code block omitted here.LOOP

8. Blocul de cod folosit pentru a selecta o anumită variabilă şi pentru a o evalua pe bază de caz este SELECT ... CASE ... ENDSELECT. EX: SELECT instruction

CASE "F": GOSUB ForwardCASE "B": GOSUB BackwardCASE "R": GOSUB Right_TurnCASE "L": GOSUB Left_TurnENDSELECT

9. Poate fi folosita conditia DO UNTIL (conditie) … LOOP permite buclei sa se repete pana cand conditia este indeplinita. Conditia DO WHILE(conditie) … LOOP perimte buclei sa se repete atata timp cat o stare exista. Conditia DO … LOOP UNTIL (conditie) permite buclei sa se repete pana cand caracterul Q este citit din EEPROM.Exercitii: 1. DEBUG "Program Running!"

counter VAR WordpulseLeft VAR WordpulseRight VAR WordpulseCount VAR ByteFREQOUT 4, 2000, 3000pulseLeft = 650: pulseRight = 850: pulseCount = 64: GOSUB NavigateENDNavigate:FOR counter = 1 TO pulseCountPULSOUT 13, pulseLeftPULSOUT 12, pulseRightPAUSE 20NEXTPAUSE 200RETURN

2. pulseLeft = 850: pulseRight = 850: pulseCount = 8( intoarcere de 30 de grade)pulseLeft = 850: pulseRight = 850: pulseCount = 12 (intoarcere de 45 de grade )pulseLeft = 850: pulseRight = 850: pulseCount = 16 (intoarcere de 60 de grade)

3. DEBUG "Program Running!"counter VAR WordpulseLeft VAR WordpulseRight VAR WordpulseCount VAR Byte

21

Page 22: Microcontrolere

FREQOUT 4, 2000, 3000pulseLeft = 850: pulseRight = 650: pulseCount = 64: GOSUB Navigate

NAVIGAREA CU FOTOREZISTENTE

1. Lumina puternică determina o valoare scazuta a rezistentei pe cand lumina slaba determina valori mai mari ale rezistentei, aproximativ 50 kΩ. Dacă nivelurile de lumină sunt între strălucitor şi întunecat valorile rezistentei vor fi undeva intre stralucitor si intunecat.2. nu. Valoarea tensiunii aplicate cauzeaza registrul de intrare sa schimbe ceea ce stocheaza. Dacătensiunea aplicată este mai mică de 1.4 volţi, stochează un 0. În caz contrar, stochează 1.3. Tensiunea de prag este o valoare care poate fi 1 logic daca este deasupra de prag si 0 logic daca este sub prag. Tensiunea de prag a unui pin I/O pt Basic Stamp este de 1,4 V.4. Valoarea Vo este determinată de raportul dintre rezistenţe . Valoarea tensiunii Vo se schimba daca valoare rezistentei se modifica.5. Acesta verifică senzori I intre fiecare puls, în loc de a avea manevre fixe ale mai multor impulsuri. Acest lucru face ca Boe-Bot –ul sa fie mult mai receptiv.6. Declararea unei constant spune compilatorului valoarea constantei d-voastra. O constanta da un nume util unui numar sau unei valori folosita intr-un program . Pentru a folosi o constanta trebuie scris numele constantei oriunde in program unde este nevoie de valoarea acesteia.7. Expresiile sunt evaluate de la stânga la dreapta. Acest lucru este diferit de cel standardde evaluare algebrice, în cazul în care înmulţire şi împărţire sunt evaluate înainte de aplus şi scăderea.8. În FlashLightControlledBoeBot.bs2, mediile au fost utilizate pentru a calcula pragul de iluminare. În RoamingTowardTheLight.bs2 este calculata o medie de citire intre stanga si dreapta . Ele difera prin faptul ca primul se calculeaza static prin declararea unei constante, iar al doilea se calculeaza dimanic ca program ce ruleaza. Ele sunt similare, în sensul că ambele adăuga două valori împreună şi se împarte la 2.P1. DEBUG "Program Running!"pulseCount VAR ByteFREQOUT 4, 2000, 3000DOIF (IN6 = 0) AND (IN3 = 0) THEN ' Both photoresistors detectsGOSUB Back_Up ' shadow, back up & U-turnGOSUB Turn_Left ' (left twice).GOSUB Turn_LeftELSEIF (IN6 = 0) THEN ' Left photoresistor detectsGOSUB Back_Up ' shadow, back up & turn right.GOSUB Turn_RightELSEIF (IN3 = 0) THEN ' Right photoresistor detectsGOSUB Back_Up ' shadow, back up & turn left.GOSUB Turn_LeftELSE ' Neither photoresistor detects

22

Page 23: Microcontrolere

GOSUB Forward_Pulse ' shadow, apply a forward pulse.ENDIFLOOPSubroutine :Forward_Pulse: ' Send a single forward pulse.PULSOUT 12,650PULSOUT 13,850PAUSE 20RETURNTurn_Left: ' Left turn, about 90-degrees.FOR pulseCount = 0 TO 20PULSOUT 12, 650PULSOUT 13, 650PAUSE 20NEXTRETURNTurn_Right:FOR pulseCount = 0 TO 20 ' Right turn, about 90-degrees.PULSOUT 12, 850PULSOUT 13, 850PAUSE 20NEXTRETURNBack_Up: ' Back up.FOR pulseCount = 0 TO 40PULSOUT 12, 850PULSOUT 13, 650PAUSE 20NEXTRETURN

23