From 2af7b15180fd2b2889ba91e593cc6b1bdc333a3d Mon Sep 17 00:00:00 2001 From: hneemann Date: Tue, 15 Jan 2019 08:24:59 +0100 Subject: [PATCH] allows an input shape to avoid the active low state; see #177 --- .../java/de/neemann/digital/core/element/Keys.java | 9 +++++++++ src/main/java/de/neemann/digital/core/io/In.java | 1 + .../de/neemann/digital/draw/shapes/InputShape.java | 13 ++++++++++--- src/main/resources/lang/lang_de.xml | 3 +++ src/main/resources/lang/lang_en.xml | 3 +++ 5 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/main/java/de/neemann/digital/core/element/Keys.java b/src/main/java/de/neemann/digital/core/element/Keys.java index 7af8959c7..653edd27b 100644 --- a/src/main/java/de/neemann/digital/core/element/Keys.java +++ b/src/main/java/de/neemann/digital/core/element/Keys.java @@ -395,6 +395,15 @@ public final class Keys { public static final Key IS_HIGH_Z = new Key<>("isHighZ", false).allowGroupEdit().setSecondary(); + /** + * flag to avoid active low at an input + */ + public static final Key AVOID_ACTIVE_LOW + = new Key<>("avoidActiveLow", false) + .setDependsOn(IS_HIGH_Z) + .allowGroupEdit() + .setSecondary(); + /** * the description of an element */ diff --git a/src/main/java/de/neemann/digital/core/io/In.java b/src/main/java/de/neemann/digital/core/io/In.java index 6bd2df69c..3510f7503 100644 --- a/src/main/java/de/neemann/digital/core/io/In.java +++ b/src/main/java/de/neemann/digital/core/io/In.java @@ -35,6 +35,7 @@ public class In implements Element { .addAttribute(Keys.LABEL) .addAttribute(Keys.INPUT_DEFAULT) .addAttribute(Keys.IS_HIGH_Z) + .addAttribute(Keys.AVOID_ACTIVE_LOW) .addAttribute(Keys.DESCRIPTION) .addAttribute(Keys.INT_FORMAT) .addAttribute(Keys.PINNUMBER); diff --git a/src/main/java/de/neemann/digital/draw/shapes/InputShape.java b/src/main/java/de/neemann/digital/draw/shapes/InputShape.java index 3b03f51ad..0fc97ab20 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/InputShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/InputShape.java @@ -32,11 +32,12 @@ public class InputShape implements Shape { private final String label; private final PinDescriptions outputs; private final IntFormat format; + private final boolean isHighZ; + private final boolean avoidLow; private IOState ioState; private SingleValueDialog dialog; private Value value; private Value inValue; - private final boolean isHighZ; /** * Creates a new instance @@ -56,6 +57,8 @@ public class InputShape implements Shape { format = attr.get(Keys.INT_FORMAT); isHighZ = attr.get(Keys.INPUT_DEFAULT).isHighZ() || attr.get(Keys.IS_HIGH_Z); + + avoidLow = isHighZ && attr.get(Keys.AVOID_ACTIVE_LOW); } @Override @@ -74,8 +77,12 @@ public class InputShape implements Shape { if (value.getBits() == 1) { modelSync.access(() -> { if (isHighZ) { - if (value.isHighZ()) value.setValue(0); - else if (value.getValue() == 0) value.setValue(1); + if (value.isHighZ()) { + if (avoidLow) + value.setValue(1); + else + value.setValue(0); + } else if (value.getValue() == 0) value.setValue(1); else value.setToHighZ(); } else value.setValue(1 - value.getValue()); diff --git a/src/main/resources/lang/lang_de.xml b/src/main/resources/lang/lang_de.xml index dc6aac32c..bbed43250 100644 --- a/src/main/resources/lang/lang_de.xml +++ b/src/main/resources/lang/lang_de.xml @@ -993,6 +993,9 @@ Sind evtl. die Namen der Variablen nicht eindeutig? Eingang kann hochohmig sein Wenn gesetzt, ist ein hochohmiger Eingang erlaubt. Bei einem Eingangselement ist ein hochohmiger Eingang auch erlaubt, wenn der Vorgabewert auf hochohmig ("Z") gesetzt wird. + Keine Ausgabe von Null. + Vermeidet die Ausgabe von Null. Ist vor allem beim Aufbau von Relaisschaltungen + hilfreich. Kann nur aktiviert werden, wenn ein hochohmiger Ausgang erlaubt ist. Beschreibung Eine kurze Beschreibung des Elementes. Frequenz/Hz diff --git a/src/main/resources/lang/lang_en.xml b/src/main/resources/lang/lang_en.xml index 807281f2d..2861d0b40 100644 --- a/src/main/resources/lang/lang_en.xml +++ b/src/main/resources/lang/lang_en.xml @@ -988,6 +988,9 @@ Is three-state input If set the input is allowed to be in high-z state. At the input component this is also allowed if high-z ("Z") is set as the default value. + No zero output. + Avoids zero output. This is especially helpful when setting up relay circuits. + Can only be activated if a high-z output is allowed. Description A short description of this element and its usage. Frequency/Hz