Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos » Arduino y Raspberry Pi
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

22/08/2014 #1


¿Convertidor octal a bcd en display 7 segmentos arduino UNO?
Estoy aprendiendo arduino pero no sé me ocurre como hacer este programa.

Con un dip switch tengo que insertar un número en octal de 4 bits y se vean en un display de 7 segmentos.

Sé que necesito el circuito 74lS48 para la codificación del bcd, pero con un segundo display no sé si se conectan igual que como uno de binario a bcd.

¿Acaso hay forma de evitar el circuito con el código fuente?
22/08/2014 #2

Avatar de Scooter

La idea de usar arduino es no usar integrados. Si necesitas 4+7=11pines y el arduino tiene de sobra...
22/08/2014 #3


si solo fuera para un display lo entiendo, pero para números mayores a 7, se necesitan dos displays, en circutos lógicos vi como usar otro integrado para hacer el segundo digito, aqui me harian falta salidas porque se ve muy feo usar swtich/ if else para cada numero
22/08/2014 #4

Avatar de Scooter

Con un pin mas por display se multiplexa
22/08/2014 #5

Avatar de Dr. Zoidberg

Joder hombre!!!
Con los dip-switch pones (por ejemplo): 1010 (binario) --> tomás de a 3 y pasa a octal --> 001 010 --> 12 en octal
bien hasta ahí????
Bueno, los números octales y BCD son los mismos, solo que se usan del 0 al 7, bien hasta ahí???
Pues bueno, entonces le agregamos un 0 adelante a cada conjunto de 3 bits, y queda:
0001 0010... listo, problema solucionado: mando cada grupo de 4 bits a un decodificador BCD a 7-segmentos.. que si los empaqueto bien y pongo en cero el bit mas significativo del decodificador, ni siquiera tengo que agregar los 0-por-delante en el código.

Veamos un proyecto de código en C:
Código:
char dipSw, unOctal, dosOctal, resultado;

dipSw = funcion_que_lee_el_puerto_de_los_dipSwitches();

/* Supongamos que ahora los 4 bits menos significativos son los bits 0..3 de los dip switches
hay que separar los ultimos 3 y el cuarto... los demas valen 0 */
unOctal = dipSw & 0x07;   /* ahí va los tres ultimos */
dosOctal = (dipSw & 0x08) << 1; /* ahi va el cuarto bit solo pasado al nibble alto*/

/* ahora armamos los 8 bits para enviar a los decoders, por que los 0's ya estan puestos */
resultado = dosOctal | unOctal;

/* y lo mandamos al puerto donde estan los decoders conectados */
funcion_que_escribe_en_el_puerto_de_los_decoders( resultado );
.
Fácil ehhhh?????
Si suponés que los 4 bits de entrada de cada decoder están conectados EN ORDEN a los bits 0..3 y 4..7 del puerto, deberías ver perfectamente el resultado "octal codificado en numeritos BCD".

Se puede hacer mas corto, pero como no conozco cuanto sabés, dejalo así nomás...
22/08/2014 #6

Avatar de Scooter

¡¡Que manía de pagar!!

¿Para que quieres un decodificador de 7 segmentos sobrando pines?Cuando no queden pines hablamos del decodificador.

Incluso sin multiplexar hay pines
22/08/2014 #7

Avatar de Dr. Zoidberg

Yo no lo quiero!!!! El que lo quiere es quien hizo la pregunta, y si es feliz así.... todo OK!!!!
22/08/2014 #8

Avatar de Scooter

Dr. Zoidberg dijo: Ver Mensaje
Yo no lo quiero!!!! El que lo quiere es quien hizo la pregunta, y si es feliz así.... todo OK!!!!
Mmmm. Pues no sé, es confuso lo que quiere:

RAIGA dijo: Ver Mensaje
¿Cómo hacer un convertidor octal a bcd en display de 7 segmentos arduino UNO?
El BCD es una cosa y el 7 segmentos otra, así que o quiere una o la otra.
Si hubiese puesto "en BCD y en display de..." pero no existe el bcd_en_display_de_7_segmentos, existe el BCD y el 7 segmentos.

RAIGA dijo: Ver Mensaje
Estoy aprendiendo arduino pero no sé me ocurre como hacer este programa.
Muy bien, no hay dudas

RAIGA dijo: Ver Mensaje
Con un dip switch tengo que insertar un número en octal de 4 bits y se vean en un display de 7 segmentos.
¿Y en BCD?¿O el BCD ya no?

RAIGA dijo: Ver Mensaje
Sé que necesito el circuito 74lS48 para la codificación del bcd, pero con un segundo display no sé si se conectan igual que como uno de binario a bcd.
No necesariamente

RAIGA dijo: Ver Mensaje
¿Acaso hay forma de evitar el circuito con el código fuente?
Propongo ahorrar los dos desde el principio



Por cierto el cuarto dipswich enciende siempre el uno en el segundo display así que no hace falta decodificador ni arduino, solo conectar esos dos segmentos
Los otros tres son tal cual en bcd así que decodificador O arduino, los dos... por practicar solamente
22/08/2014 #9


Corrijo, el profesor no se explicó bien, es un número binario en 4 bits, para pasarlo a octal en display en bcd,

Lo vi con circuitos sin programa (ttl) con binario, el cual era sumarle 6 a los números mayores a 9, aquí sería sumarle 3 a los números mayores a 7 por cada múltiplo de 7 que alcance el número, lo del multiplexor, no tengo mucha idea, de arduino apenas empecé y de programación en c no lo vi para circuitos, esa parte lo medio vi en vhdl.

Esto es lo que llevo en código con 3 bits:

Código:
//programa diseñado para pasar un numero binario a octal y representarlo en octal en bcd de 7 segmentos

const int   a=2,b=3,c=4,d=5,e=6,f=7,g=8;
int E1=0,E2=0,E3=0,E4=0;

void setup() 
{
  Serial.begin(9600);
  
  pinMode(a,OUTPUT);  pinMode(b,OUTPUT);  pinMode(c,OUTPUT);
  pinMode(d,OUTPUT);  pinMode(e,OUTPUT);  pinMode(f,OUTPUT);
  pinMode(g,OUTPUT);
  
  pinMode(9,INPUT);   pinMode(10,INPUT);
  pinMode(11,INPUT);  pinMode(12,INPUT);
}

void loop() 
{
  //aquí solo tengo la lectura de las entradas
  E1=digitalRead(9);    
  E2=digitalRead(10);  
  E3=digitalRead(11);  
  E4=digitalRead(12);  

  /*Esto seria si solo es con 3 bits.
 // 0
  if (E1==0 && E2==0 &&E3==0)
  {
    digitalWrite(a,HIGH);digitalWrite(b,HIGH);digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);digitalWrite(e,HIGH);digitalWrite(f,HIGH);
    digitalWrite(g,LOW);delay(500);
  }
  
  //1
  if (E1==0 && E2==0 &&E3==1)
  {
    digitalWrite(a,LOW);digitalWrite(b,HIGH);digitalWrite(c,HIGH);
    digitalWrite(d,LOW);digitalWrite(e,LOW);digitalWrite(f,LOW);
    digitalWrite(g,LOW);delay(500);
  }
  
  //2
  if (E1==0 && E2==1 &&E3==0)
  {
    digitalWrite(a,HIGH);digitalWrite(b,HIGH);digitalWrite(c,LOW);
    digitalWrite(d,HIGH);digitalWrite(e,HIGH);digitalWrite(f,LOW);
    digitalWrite(g,HIGH);delay(500);
  }
  
  //3
  if (E1==0 && E2==1 &&E3==1)
  {
    digitalWrite(a,HIGH);digitalWrite(b,HIGH);digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);digitalWrite(e,LOW);digitalWrite(f,LOW);
    digitalWrite(g,HIGH);delay(500);
  }
  
  //4
  if (E1==1 && E2==0 &&E3==0)
  {
    digitalWrite(a,LOW);digitalWrite(b,HIGH);digitalWrite(c,HIGH);
    digitalWrite(d,LOW);digitalWrite(e,LOW);digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);delay(500);
  }
  
  //5
  if (E1==1 && E2==0 &&E3==1)
  {
    digitalWrite(a,HIGH);digitalWrite(b,LOW);digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);digitalWrite(e,LOW);digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);delay(500);
  }

  
  //6
  if (E1==1 && E2==1 &&E3==0)
  {
    digitalWrite(a,HIGH);digitalWrite(b,LOW);digitalWrite(c,HIGH);
    digitalWrite(d,HIGH);digitalWrite(e,HIGH);digitalWrite(f,HIGH);
    digitalWrite(g,HIGH);delay(500);
  }
  //7
  if (E1==1 && E2==1 &&E3==1)
  {
    digitalWrite(a,HIGH);digitalWrite(b,HIGH);digitalWrite(c,HIGH);
    digitalWrite(d,LOW);digitalWrite(e,LOW);digitalWrite(f,LOW);
    digitalWrite(g,HIGH);delay(500);
  }
  */
}
23/08/2014 #10

Avatar de Scooter

La frase octal en BCD es inconsistente.
Octal es octal: 0,1,2...7
Equivale a tres bits binarios: del 000 al 111
BCD es decimal codificado en binario. Si es decimal no es octal. Es como decir las docenas decimales, o son docenas o son decimales.

Para el segundo display no hace falta ni arduino ni circuito ninguno: el microswich enciende el 1 del display y ya está, un cable y una resistencia o dos.

Si lo quieres en código para gastar dos pines
If(swich3==1){
Poner el pin a 1
}
Else
{
Poner el pin a 0
}

O mejor:
Digitalwrite(Pindesalida,digitalread(pindeentrada) );
23/08/2014 #11

Avatar de Dr. Zoidberg

Scooter dijo: Ver Mensaje
La frase octal en BCD es inconsistente.
Octal es octal: 0,1,2...7
Equivale a tres bits binarios: del 000 al 111
BCD es decimal codificado en binario. Si es decimal no es octal. Es como decir las docenas decimales, o son docenas o son decimales.
@Scooter:
Entre que "el profe no se explica bien" y que este flaco tiene poca idea de lo que es octal y lo que es BCD, vamos a terminar jugando a las adivinanzas.


@RAIGA:
Para pasar de BINARIO a OCTAL solo tenés que partir el binario en grupos de 3 bits...Y LISTO!!! No hay que sumar ni restar nada, y te quedan numeros de tres bits entre 0 y 7. Como el BCD ocupa 4 bits, solo hay que agregar un CERO a la izquierda del bit mas significativo de cada grupo de 3 bits y ya queda un numero de 4 bits con valor entre 0 y 7.
Como ese valor NO ES MAYOR QUE 9, no hay que sumar ni restar NADA, así que lo mandas a los decoders y ellos te lo muestran en octal-BCD-lo que se sea que se llame eso.
El ejercicio es una estupidez mayúscula, y de todas formas - afortunadamente - las normas nos impiden hacer tu trabajo de la escuela, así que andá, estudiá y consultá con tu profesor si no entendés lo que pide.
Hasta aquí llego.
23/08/2014 #12

Avatar de Scooter

Si, mejor.
O el profesor no sabe explicar o el alumno no sabe escuchar o mitad y mitad...
23/08/2014 #13


es lo que digo, representar un numero de 4 bits binarios en sistema octal en displays
siendo el 8 el numero 1 en display "1" y "0" en el display 2
24/08/2014 #14

Avatar de Scooter

Pues ánimo, ya tienes parte hecha
24/08/2014 #15
Moderador

Avatar de Dano

No entiendo porque das tantas vueltas.

Es simple, no precisas cálculos matemáticos ni nada ya que no vas a tener arrastre en ningún caso.
El Dr. te explico paso a paso como hacerlo en el #11, y si todavia no lo entendés podes practicar con la Calc.

Por otra parte, si eso se te complica, podrias optar por la siguiente solución alternativa, que no es la mas correcta en esta situación pero que funciona tambien.

Hay que leer el puerto de entrada, pasar el dato por una LUT y mover el dato de la LUT al/a los puerto/s de salida derecho al/a los display/s.
25/08/2014 #16


La lo hice, extendí los pines de salida digital con los analógicos, el multiplexor lo usaré cuando me quede sin pines.

Estudiaré lo del comentario #11, gracias.
Pueden cerrar el tema
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Arduino y Raspberry Pi

Cerrar
Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos » Arduino y Raspberry Pi

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.