Flaskautomaten Ett design-exempel av Ingo Sander
System ontrol Vi skall designa blocket systemstyrningen, System ontrol Myntinkast (OIN REEIVER) AUMU- LATOR OIN_PRESENT GT_1_EURO EQ_1_EURO LT_1_EURO DE_A LR_A Systemstyrning (SYSTEM ONTROL) DROP DROP_READY RETURN_10_ENT HANGER_READY Flaskutkast (DROP BOTTLE) Myntutkast (OIN RETURN) Retur bara med 10 cent mynt.
Myntinkast Systemstyrningsenheten styr ett flertal delsystem från andra leverantörer. Myntinkast. Flaskutkast. Returmyntutkast. Myntinkast (OIN REEIVER) AUMU- LATOR OIN_PRESENT GT_1_EURO EQ_1_EURO LT_1_EURO DE_A LR_A Systemstyrning (SYSTEM ONTROL) En AUMULATOR räknar ihop summan erlagda mynt. Signalen OIN_PRESENT indikerar att det finns mynt och antalet anges med signalerna GT_1_EURO, EQ_1_EURO, LT_1_EURO. Med signalerna DE_A och LR_A kan systemstyrenheten minska summan med 10 cent eller 0-ställa AUMULATORN.
Myntutkast Systemstyrning (SYSTEM ONTROL) RETURN_10_ENT HANGER_READY Myntutkast (OIN RETURN) Med en puls på RETURN_10_ENT så lämnar myntutkastet 10 cent, och signalerar HANGER_READY när detta är utfört och enheten är redo för nästa kommando.
Flaskutkast Systemstyrning (SYSTEM ONTROL) DROP DROP_READY Flaskutkast (DROP BOTTLE) Med en puls på DROP så lämnar flaskutkastet en flaska, och signalerar DROP_READY när detta är utfört och enheten är redo för nästa kommando.
Blockdiagram Myntinkast (OIN REEIVER) OIN_PRESENT GT_1_EURO EQ_1_EURO LT_1_EURO DE_A LR_A Systemstyrning (SYSTEM ONTROL) DROP DROP_READY RETURN_10_ENT HANGER_READY Flaskutkast (DROP BOTTLE) Myntutkast (OIN RETURN) Signalegenskaper DROP_READY är aktiv för en klockperiod efter att flaskan har matats ut HANGER_READY är aktiv för en klockperiod efter att ett 10 ent mynt har matats ut På grund av de mekaniska egenskaper är följande signaler aktiva respektive inaktiva för flera klockperioder: OIN_PRESENT (aktiv för flera klockperioder efter myntinkastet ) DROP_READY (aktiv för flera klockperioder vid flaskutmatning) HANGER_READY (inaktiv för flera klockperioder vid myntutmatning)
Använd Moore-automat Tillstånd (State) Ingångssignaler Nästa tillstånd (NEXT STATE DEODER) Tillståndsregister (STATE REGISTER) Utgångsavkodare (OUTPUT DEODER) Utgångssignaler lk Konstruktion av en tillståndsmaskin för styrenheten till flaskautomaten Antaganden - Moore-Automat - Tillståndsregistret implementeras med D-vippor
Funktionsdiagram för flaskautomaten Nej Summa < 1 Reset Myntinkast registrerat? Ja Summa? Myntinkast 10 ent, 50 ent, 1 Euro Myntutkast 10 ent Flaskpris 1 Euro Summa= 1 Summa > 1 Mata ut flaskan Retur 10 ent Nollställ summan Minska summan
Vi ritar ett tillståndsdiagram från funktionsdiagrammet: Tillståndsdiagram LT _1_ EURO DROP _ READY EQ _1_ EURO DROP _ READY (d) (a) (b) (c) DROP OIN _ PRESENT OIN _ PRESENT OIN _ PRESENT OIN _ PRESENT GT _1_ EURO (f) HANGER _ READY RETURN _10 _ ENT HANGER _ READY (e) LR _ A (g) DE _ A
Tillståndsdiagram (a) Vänta på myntinkast (b) Registrering av myntinkast (c) Myntinkast är registrerat (3 fall) (d) Flaskutmatning (e) Nollställ summan (f) Retur 10 ent (g) Minska summan med 10 ent
Insignaler Blockschema Tillståndsregister Utsignaler OIN_PRESENT LT_I_EURO D A lk D A DROP EQ_I_EURO RETURN_I0_ENT GT_I_EURO DROP_READY HANGER_READY Next State Decoder D B lk D B Output Decoder LR_A A B D D DE_A lk
Tillståndskodning Idé: Låt tillstånd som är nära varandra i tillståndsdiagrammet ha koder på enhetsavstånd. (b) bredvid (c) (d) bredvid (e) (a) bredvid (b) (f) bredvid (g) 7 tillstånd kräver 3 tillståndsvariabler A, B, AB 00 01 11 10 0 a Ø d f 1 b c e g (Ø = don t care) Antalet insignaler är stort, 6 st, totalt kan det bli 9 variabler i Karnaughdiagrammen???
LT _1_ EURO DROP _ READY Tillståndskodningen EQ _1_ EURO DROP _ READY (d) (e) LR _ A B OIN _ PRESENT (a) 000 OIN _ PRESENT (b) (c) 110 100 DROP (f) OIN _ PRESENT OIN _ PRESENT GT _1_ EURO HANGER _ READY RETURN _10 _ ENT HANGER _ READY 111 101 (g) DE _ A A 001 011 AB 00 01 11 10 0 a Ø d f 1 b c e g (Ø = don t care) Tillståndsvariabeln AB, ex. i tillstånd (c) är A = 0, B = 1 och = 1
Kodad tillståndstabell? Från tillståndsdiagrammet kan man ställa upp följande kodade tillståndstabell. Hur undviker vi komplexiteten med nio variabler?
Variable-Entered Mapping (VEM) Variable-Entered Mapping kan vara till hjälp när man behöver Karnaugh-diagram med många variabler. Man skriver funktions-uttryck i Karnaugh-diagrammet. A + D A AB 00 01 11 10 0 0 Ø 1 1 1 0 EQ + GT 0 0 Variabler
Nästa tillstånd - D A A + D A AB 00 01 11 10 EQ : EQ_1_EURO GT : GT_1_EURO 0 0 Ø 1 1 1 0 EQ + GT 0 0 + A = DA = A B EQ + A B GT + A
Nästa tillstånd - D B B + D B AB 00 01 11 10 EQ : EQ_1_EURO P : OIN_PRESENT 0 0 Ø 1 0 1 P EQ 0 1 + B = DB = A B EQ + B + B P + A B Lätt att missa!
Nästa tillstånd - D + D AB 00 01 11 10 P : OIN_PRESENT DR: DROP_READY R: HANGER_READY 0 P Ø DR R 1 1 0 0 1 + = D + A B R + B = A P + B DR
Utgångssignaler Utgångssignalerna är de pulser som genereras när man passerar igenom tillstånden d, f, e, g. DROP = AB LR _ A = AB RETURN _10 _ ENT DE _ A = AB = AB
Vad händer i Φ tillståndet? AB 00 01 11 10 0 a Ø d f 1 b c e g Φ = (010) AB Φ + + A = A B EQ + A B GT + A A (010) AB = 1 1 EQ + 1 1 GT + 0 1 = EQ + GT B + + = A B EQ + B + B P + A B = A P + B DR + A B R + B + (010) AB = 1 1 P + 1 1 DR + 0 0 R + 0 0 = P + DR + + + A B = 1 = 010,110, 011,111 Φ, d, c, e B + ( 010) = 1 1 EQ + 1 1+... = 1 AB
Vad händer i Φ tillståndet? + + + A B = 1 = 010,110, 011,111 Φ, d, c, e Φ I Φ-tillståndet fastnar vi, eller går till (c) och sedan vidare. Eller går till (d) och bjuder på läsk, eller går till (e) och 0-ställer eventuell tidigare delbetalning. Helt uppenbart behöver vi köpa en RESET-krets som ser till att automaten alltid startar i (a) 000! Annars riskerar vi få berättigade klagomål från kunderna! RESET-generator