Diagrames d'estat

De El raconet d'en Jordi

Dreceres ràpides: navegació, cerca

Contingut

Introducció

Un diagrama d'estats és una eina molt útil per elaborar programes.

Es tracta de representar gràficament els estats d'un sistema i les condicions que impliquen un canvi d'estat. Cada estat el represente per un cercle i cada transició per una fletxa.

Veiem un exemple

Requeriment

Volem dissenyar un sistema de control d'una persiana que puja quan hi ha poca llum i baixa quan hi ha molta. En valors intermedis es queda igual (així estalviem energia)

Diagrama de blocs

Definir el hardware ens ajudarà a definir els estats i les condicions.

Necessitarem 2 sortides per controlar el motor, dos entrades digitals pels finals de cursa i una entrada ADC per mesurar la llum mitjançant una LDR.

Imatge:Diagbloc3.png

Esquema electrònic

Únicament cal tenir en compte que hem de fer servir el L293D per amplificar la intensitat de les sortides.

Conveni de variables

0 1
in3 la persiana no està a l'extrem inferior la persiana està a l'extrem inferior
in4 la persiana no està a l'extrem superior la persiana està a l'extrem superior


molta llum poca llum
adc2 > 128 < 64


out0=0 out0=1
out1=0 motor aturat motor pujant
out1=1 motor baixant motor aturat


Diagrama d'estats

Imatge:Diagbloc4.png

Programa

El diagrama d'estat simplifica molt la programació. Cada estat és una etiqueta, i es representa per un valor del registre b1, i les condicions de transició s'estudien en un bucle principal. Inicialment no coneguem l'estat, per tant esperem un canvi de llum per entrar en la màquina d'estats:

          b1=0
inici:
          readadc 2,b0
          if b0 < 64  then pujant
          if b0 > 128 then baixant
          goto inici

observa:
          readadc 2,b0
          if b0 < 64  and b1=3 then pujant
          if b0 > 128 and b1=4 then baixant
          if pin3 = 1 and b1=2 then abaix
          if pin4 = 1 and b1=1 then adalt
          goto observa
pujant:
          high 0
          low 1
          b1=1
          goto observa
baixant:
          low 0
          high 1
          b1=2
          goto observa
abaix:
          low 0
          low 1
          b1=3
          goto observa
adalt:
          low 0
          low 1
          b1=4
          goto observa



Tornar a l'índex