Newsgroup: it.hobby.elettronica.digitale
Titolo: Macchina a stati finiti

Dunque,
scartata la flash visto che quello che mi serve non è semplicemente
una rete combinatoria ma ho bisogno di "memoria. Infatti mi sono
accorto che quello di cui avevo bisogno era una macchina a stati
finiti. Quindi mi sono informato sulle MSF (
http://homes.dsi.unimi.it/~pedersin/AER/AER09_L09.pdf
 ).
Se la disegno mi viene molto elementare. Bene è già un inizio. Il
secondo passo e passare dallo schema dei stati alla realizazione
pratica... il problema è qui. E vi chiedo un aiuto.
Io devo realizare un pannello con degli interrutori, alcuni di questi
"inibiscono" il movimento di altri ( ovvero anche se li muovi lo stato
della macchina non cambia ).
Ci sono 2 tipi di leve. Quelle IT ( 3 posizioni ) che bloccano quelle
DEV ( 2 posizioni ). Per ogni tipo di leva ho creato una macchina a
stati. Quindi si puo' semplificare il tutto a 2 interrutori uno per
tipo.
La macchina a stati IT è la più semplice ha 3 stati e prevede 4
ingressi.
La macchina a stati DEV è più complessa ha 6 stati e prevede 4
ingressi.
Il diagramma degli stati della macchia "Dev" è questa:
[FIDOCAD]
EV 30 25 65 40
EV 130 25 165 40
LI 70 25 125 25
LI 70 40 125 40
PV 120 20 125 25 120 30
PV 75 45 70 40 75 35
TY 45 30 5 3 0 0 0 * n
TY 145 30 5 3 0 0 0 * n'
TY 80 20 5 3 0 0 0 * LR && !IT
EV 30 90 65 105
TY 40 95 5 3 0 0 0 * acn
EV 130 90 165 105
TY 145 95 5 3 0 0 0 * acr
PV 160 80 155 85 150 80
TY 160 45 5 3 270 0 0 * !CDB && LR
LI 155 45 155 85
EV 30 155 65 170
EV 130 155 165 170
PV 160 145 155 150 150 145
LI 155 110 155 150
TY 160 110 5 3 270 0 0 * CEFR && LR
TY 145 160 5 3 0 0 0 * r
TY 45 160 5 3 0 0 0 * r'
TY 90 35 5 3 0 0 0 * !LR
LI 70 105 125 105
PV 75 110 70 105 75 100
TY 90 100 5 3 0 0 0 * !LR
LI 75 90 130 90
PV 125 85 130 90 125 95
TY 95 85 5 3 0 0 0 * LR
LI 70 170 125 170
PV 75 175 70 170 75 165
LI 70 155 125 155
PV 120 150 125 155 120 160
TY 85 165 5 3 0 0 0 * !LR && !IT
TY 90 150 5 3 0 0 0 * LR
TY 45 150 5 3 90 0 0 * !LR && !CDB
LI 50 150 50 110
PV 45 115 50 110 55 115
LI 50 85 50 45
PV 45 50 50 45 55 50
TY 45 90 5 3 90 0 0 *  !LR && CEFL
Ora... come faccio per realizarla. Ho letto il documento linkato ma
non riesco a capire cosa devo fare.
A sto punto la domanda mi nasce spontanea, ha senso realizare tutto
con FF e compagnia bella? Non conviene schiaffare tutto dentro un bel
micro e tanti saluti? Il fatto e che io vorrei essere un minimo
modulare ( del tipo, un domani voglio aggiungere una leva non devo
riscrivere il tutto il codice... metto un altra "macchina" e tanti
saluti... ) ma il gioco vale la candela?
Se siete arrivati fin qui vi ringrazio, perché io mi sono già perso.

 Se siete arrivati fin qui vi ringrazio, perch� io mi sono gi� perso.
In un bicchier d'acqua.
Una macchina a stati finiti (che ho l'impressione non serva alla soluzione
del tuo problema) � implementabile semplicemente come (la descrizione di
ogni caso � identica alle altre):
while(1){
 switch(variabile di stato){
 case 0: Tratta gli input in un certo modo, se la loro configurazione �
  una in particolare, cambia la variabile di stato;
 case 1: Tratta gli input in tutt'altro modo, oppure in modo identico
  salvo che uno o pi� input, a seconda di quello che devi fare;
  Se la loro configurazione � una (o pi� di una) in particolare, cambia
  la variabile di stato;
 case 2: Altro giro, altra corsa. Quando necessario cambia la variabile
  di  stato;
 case 3: Fai qualcos'altro ancora con gli stessi input, se vuoi cambia
  persino la variabile di stato,
 case N: Fa' un po' quello che vuoi, se non cambi la variabile di stato,
   chiamala main;
 }
}

 In un bicchier d'acqua.
Concordo. Forse dato il sonno non avevo capito bene cosa diceva il
documento. Oggi l'ho capito, anche se sinceramente costruirmi una
tabella con 6x2^5 ( 6*32 = 192 ) celle non mi sembra molto logico.
Anche perché dubito che si possa sintetizare un circuito combinatorio
adeguato. A sto punto ritorna fuori la flesh dell'altro giorno ( di
almeno 2^8 x 3 ) per ogni leva.... mi sembra da pazzi...

 almeno 2^8 x 3 ) per ogni leva.... mi sembra da pazzi...
Non mi pare abbia alcun senso. Con un ATmega88 e tre 74HC165 fai tutto ci�
che ti serve, con spesa minore (il programmatore lo compri da Farnell a 35
euri, anche se, un paio di settimane fa, qualcuno ne ha proposto uno ancora
pi� carino e con gran facilit�. Non ci metterei manco il quarzo.

 pi� carino) e con gran facilit�.
E' questo: 
http://www.ixbat.de/index.php?page_id=165

 ACN sta per Attuazione Comando Normale
E LR, quello che condiziona tutti gli stati, che �? Linea Rovescia?
Gli LR (immagino tu ne abbia pi� d'uno) li collegherei direttamente al
controller. Ogni volta che un LR cambia di stato (tra l'altro, per
risparmiar corrente, puoi addirittura mandare l'AVR in sleep e farlo
svegliare quando cambia la linea LR) leggi i relativi CdB, CEFR, CEFL e IT
dai 74HC165.
Probabilmente ti basta un ATtiny24, costa un euro.
Il programma � banale:
enum{stateN, stateN1, stateACN, stateACR, stateR, stateR1};
state = stateN (o quel che l'�);
Su ogni transizione di LR esegui:
switch(stato){
case stateN: if(LR && !IT) stato = stateN1;
 break;
case stateN1: if(LR){if(!CDB) stato = stateACR;} else stato = stateN;
 break;
case stateACN: if(!LR){if(CEFL) stato = stateN;} else stato = stateACR;
 break;
eccetera

Non ci metterei manco il quarzo.
Questa del quarzo non l'ho capita.

 Il programma è banale:
Concordo.

 Questa del quarzo non l'ho capita.
Gli AVR hanno un oscillatore RC interno con una stabilit� pi� che
sufficiente per questa applicazione. E ci guadagni due pin che puoi usare
per lo I/O.

 per lo I/O.
Uh questa non lo sapevo. Anche i PIC possono lavorare senza quarzo ma
mi pare che almeno un paio di resistenze ci vogliono. Senza niente mi
pare non oscillino. Sinceramente ho sempre visto il bel quarzetto.

 qualcuna. Ti interessa?
Scusami. Non so perché non avevo capito cosa mi avevi scritto.
Rileggendolo 3/4 volte infine ho capito.
Le schede in se non mi interessano ( so tenere in mano un saldatore mi
compro una millefori e faccio il circuito intanto dovrei farlo
comunque attorno al micro che metto ) pero' se non sai cosa farci e le
vuoi sbolognare beh è un altro discorso. Tu di dove sei?
Tra parentesi prima ho detto che conosvevo un altro registro PISO
eccolo: CD4094 secondo te chi è meglio?

 eccolo: CD4094 secondo te chi è meglio?
Va beh. Il 4094 è il SIPO ovviamente il PISO è il 4021

 eccolo: CD4094 secondo te chi � meglio?
Non saprei, direi che fanno la stessa cosa. Non ho visto il datasheet,
generalmente i CD possono essere alimentati a 15V ma hanno diodi di
protezione agli input da 10 mA anzich� 20.

 Non saprei, direi che fanno la stessa cosa.
Io quando devo scegliere un integrato sono sempre indeciso. Ho visto
che tu hai una bella "libreria" di integrati, mi ha dato alcune dritte
( come il chip per fare il volmpetro ) abbastanza sviziose. Poi magari
sai solo usare google meglio di me. Tutto è possibile :D