duminică, 1 mai 2011

Problema 5. Lumini rulante

Expunerea problemei: Să se elaboreze un automat „Lumini rulante” care va  monitoriza comportamentului unei benzi de lumini, care la rîndul său conţine 8 linii independente. Modificarea direcţiei trebuie să se efectuieze prin intermediul unui comutator.
Dispozitivul va include 8 linii de leduri conectate la 8 pini ai unui port şi un comutator care va fi conectat la un alt port. În locul liniilor de lumini rulante, vom conecta cîte un led, care ulterior se va putea înlocui cu o schemă în baza unui tiristor, la care vor fi conectate liniile de lumini propriu-zise. Exemplu de schemă bazată pe un teristor poate fi găsită în literatură de radioelectronică.

Algoritm:
Principiul luminilor rulante cu uşurinţă poate fi proiectat prin intermediul operatorilor de shiftare, care sunt incluse în sistemul de comandă a oricărui MCU. Aceşti operatori şiftează conţinutul unui registru cu un pas (unitate) în stînga / dreapta.
Dacă vom şifta conţinutul registrului, şi în urma fiecărei şiftări vom înregistra valoarea noului conţinut în portul C, ledurile conectate aestuia se vor aprinde succesiv.

            Schema electrică:
Algoritmul  general:
  1.  Evaluarea stării comutatorului de comandă;
  2.  Dacă contactele comutatorului sunt decuplate, se va efectua operaţia de shiftare la dreapta;
  3.  Dacă contactele sunt cuplate, se va efectua operaţia de shiftare la stînga;
  4.  La finalul întregului ciclu de shiftare (8 paşi consecutivi) se va trece la 1 pas.
    Astfel, atît timp cît contactele comutatorului sunt decuplate, programul va efectua operaţia de shiftare la dreapta. În cazul cînd, starea comutatorului nu s-a schimbat, shiftarea în aceeaşi direcţie va continua. La cuplarea contactelor comutatorului se va efectua shftarea la stînga. În urma unui ciclu întreg de shiftare la stînga, se efectuiază controlul stării comutatorului.
Dacă starea comutatorului este diferită de starea precedentă, direcţia de shiftare nu se va schimba, în cazul contrar, direcţia de shiftare se va schimba.

Algoritmul de shiftare:
  1.  Se înregistrează valoarea iniţială a registrului de lucru. Drept valoare iniţială se va utiliza un număr binar, la care un bit va avea valoarea „1” logic şi restul vor fi zerouri. Pentru efectuarea şiftării la dreapta, cel mai semnificativ bit al numărului se setează în „1” logic (0b10000000). Pentru shiftarea la stînga, setăm în „1” cel mai puţin semnificativ bit.
  2. Înregistrarea valorii registrului de lucru în portul C;
  3. Chemarea programului de reţinere (delay). Reţinerea oferă posibilitate ochiului uman să recepţioneze aprinderea succesivă a ledurilor, astfel viteza ar fi atît de mare încît ochiul ar recepţiona o lumină slabă al tuturor ledurilor.
  4. Shftarea conţinutului registrului de lucru la stînga / dreapta cu un pas.
  5. Verificarea ciclului întreg de shiftare (8 paşi).
  6. În cazul dacă, întregul ciclu de shiftare nu a fost parcurs, se va trece la pasul 2. Acest fapt va duce ca paşii 2, 3, 4, 5 şi 6 să fie repetaţi de 8 ori, după care întregul ciclu de shiftare va fi parcurs. 
Shiftarea logică la dreapta (lsr). Acest operator posedă un singur parametru – numele registrului, conţinutul căruia se va shifta. Schematic această operaraţie se petrece în felul următor:
0→d7→d6→d5→d4→d3→d2→d1→d0→C
Shiftarea logică la stînga (lsl). Acest operator efectuiază operaţia inversă a operatorului de mai sus. Astfel în cadrul bitului de transport C, se transferă cel mai semnificativ bit, restul fiind shiftat cu un pas la sînga. Cel mai puţin semnificativ bit ca deveni nul.
C←d7←d6←d5←d4←d3←d2←d1←d0←0
Shiftarea informaţiei în cadrul registrului de lucru: