Go Down

Topic: Decodificador BCD a Decimal (Especial) (Read 6597 times) previous topic - next topic

CX6DRA

Buenas tardes, soy de Uruguay y es la primera vez que escribo por aca, un saludo para todos.

Estoy desarrolando un decodificador bcd a decimal, son 4 bits de entradas, y pretendo usar un pin para cada salida que correspondera al decimal de entrada.

Lo de "especial", tengo una 5ta y 6ta entrada que haran que, cuando estas esten en alto, tres combinaciones de entrada se correspondan a una misma salida, cada entrada de estas, maneja tres combinaciones cada una, y nunca se intercambiarian entre si, y a su vez, son totalmente independientes entre ellas.

Lo que sigue aqui abajo, es lo que he logrado hasta ahora, que no se porque, no funciona como quiero...

La tabla de verdad de lo que pretendo:






https://www.youtube.com/watch?v=HdHgB8S2A4A

Espero puedan darme una mano.

Gracias.

surbyte

Esto ya se hizo. Lo que me hace pensar que es una tarea de colegio o universidad.
Búscala en este foro que esta resuelta.
busca 3_BAND

CX6DRA

Hola Surbyte, esto NO es una tarea de colegio, es un proyecto de quien escribe.

SI lo publique en otro foro.

surbyte

Bueno, alguien vino con el mismo tema y me arriesgo a decir que la tabla o imagen que muestras era la misma.

surbyte

Bueno, me equivoqué de foro aunque creo que aquí tmb está.
hice la búsqueda por ti, Manejo de salida con multiples lineas
Ahora entenderás cuando digo que es la misma tabla y resulta curioso no?

CX6DRA

Bueno, esa tabla la hice yo, distinto nickname.

surbyte

Y que pasó con ese código porque recuerdo haberlo seguido en el otro foro, pero no se que pasó.

noter

Pues yo debo estar un poco espeso, pero tras seis post, sigo sin entender qué se está intentando hacer. Este párrafo:
Quote
Lo de "especial", tengo una 5ta y 6ta entrada que haran que, cuando estas esten en alto, tres combinaciones de entrada se correspondan a una misma salida, cada entrada de estas, maneja tres combinaciones cada una, y nunca se intercambiarian entre si, y a su vez, son totalmente independientes entre ellas.
Me tiene aún perplejo.  :smiley-confuse:  :smiley-confuse:  :smiley-confuse:  :smiley-confuse:
¿Algún egiptólogo que me lo pudiera traducir, por favor? :)

CX6DRA

Pues yo debo estar un poco espeso, pero tras seis post, sigo sin entender qué se está intentando hacer. Este párrafo:Me tiene aún perplejo.  :smiley-confuse:  :smiley-confuse:  :smiley-confuse:  :smiley-confuse:
¿Algún egiptólogo que me lo pudiera traducir, por favor? :)
Hola, alli en el primer post esta la tabla de verdad que explica lo quw quiero hacer,

Pretendo hacer un decodificador bcd de 4 bits, que tendra dos entradas mas, que harán que cuando una este en alto,

Los números binarios 4 6 y 8 me decodifique el 4,

y cuando la otra este en alto, los números binarios 5 7 9, me los decodifique como 5.

surbyte

Pero no quedó resuelto? Ninguna de las soluciones propuestas en el otro foro te acercó a tu solución?

noter

Sigo sin entender mucho, pero a ver si esto hace algo similar a lo que buscas.

Code: [Select]
const int DATA_BCD[] = {8, 9, 10, 11};
const int WARC = 12;
const int BAND = 13;
//-----------------------------
const int SALIDA[]  = {A4, A5, 0, 1, 2, 3, 4, 5, 6, 7};



void setup()
{
      for (int i=0; i<4; i++) {
            pinMode(DATA_BCD[i], INPUT);
      }
      pinMode (WARC, INPUT);
      pinMode (BAND, INPUT);
      for (int i=0; i<10; i++) {
            pinMode(SALIDA[i], OUTPUT);
      }      
}

void loop()
{
      // leemos entradas
      int miValor = leevalor();

      // aquí irían los if para las transformaciones especiales de miValor
      
      // Encendemos el pin correspondiente al valor
      sacaValor(miValor);
}

int leevalor()
{
      int valorLeido=0;
      for(int i=0; i<4; i++) {
            if (digitalRead(DATA_BCD[i])) {
                  i += (1<<i);
            }
      }
      return(valorLeido);
}

void sacaValor(int valor)
{
      for (int i=0; i<10; i++) {
            if (i==valor){
                  digitalWrite(i, HIGH);
            } else {
                  digitalWrite(i, LOW);
            }
      }
}

CX6DRA

Sigo sin entender mucho, pero a ver si esto hace algo similar a lo que buscas
Hola, gracias por responder,

Quiero hacer un decodificador bcd a decimal!

Cada valor decimal obtenido, se correspondera a una salida, que se pondran en alto con cada combinación de entrada.

Lo unico diferente, son esas dos entradas (interruptores) que estando activados, uno de ellos hara que cuando la combinación de entrada sean 4 6 8 (binario) la salida activa sera la 4, y cuando el otro interruptor este activado y las entradas sean 5 7 9, la salida activa sera la 5,

Con ambos interruptores apagados, el decodificador funcióna normalmente.

Si me dicen como pegar el codigo, se los comparto.

surbyte

Pero no quedó resuelto? Ninguna de las soluciones propuestas en el otro foro te acercó a tu solución?
Ya que no respondes, te lo vuelvo a preguntar.
Hay mucha información y hasta código hecho en la referncia que te mencioné como para empezar desde 0 otra vez.

CX6DRA

Ya que no respondes, te lo vuelvo a preguntar.
Hay mucha información y hasta código hecho en la referncia que te mencioné como para empezar desde 0 otra vez.
Hola, no, no quedo resuelto y no pude encontrar el error.

Aqui se ve:

https://youtu.be/HdHgB8S2A4A

noter

¿Probaste el código que te propuse? Creo que como base debería servir a tus propósitos. Le faltarían dos condicionales para lo que acabas de decir.

Code: [Select]

void loop()
{
      // leemos entradas
      int miValor = leevalor();

      // aquí irían los if para las transformaciones especiales de miValor
      if (warc && (miValor==6||miValor==8)) {
            miValor=4;
      }
      if (band && (miValor==7||miValor==9)) {
            miValor=5;
      }
     
      // Encendemos el pin correspondiente al valor
      sacaValor(miValor);
}

Go Up