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

Temas similares

09/09/2014 #1


Uso de dos display's de 7 segmentos con 8 bits
Hola que tal.

Tengo una gran duda sobre el microcontrolador ATMEGA328P.
¿Es posible encender dos display's de 7 segmentos con distintos
valores usando solo los puertos de B (PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0)
que estarían configurados como salidas?.

Gracias. ...
09/09/2014 #2


si se puede multiplexandolos osea de esos 8 bits si lo ocupas 7 para los 2 display y el octavo bit para encender el primer display y apagar el segundo esto es si no ocupawss el punto de cada display
09/09/2014 #3


proteus7 dijo: Ver Mensaje
si se puede multiplexandolos osea de esos 8 bits si lo ocupas 7 para los 2 display y el octavo bit para encender el primer display y apagar el segundo esto es si no ocupawss el punto de cada display

Excelente, tenía esa idea en la mente, pero no se como concretarla. Ese octavo bit que sería el bit de control del multiplexor como lo utilizo? Debe ser de entrada o algo parecido?
09/09/2014 #4

Avatar de TRILO-BYTE

yo usaria 4 bits para usar un 74ls47 y los otros 4 bits para encender display 1 y display 2
asi puedo conectar 4 displays
si le conectas un multiplexor le puedes poner hasta 15 displays
09/09/2014 #5


TRILO-BYTE dijo: Ver Mensaje
yo usaria 4 bits para usar un 74ls47 y los otros 4 bits para encender display 1 y display 2
asi puedo conectar 4 displays
si le conectas un multiplexor le puedes poner hasta 15 displays
Esa es una excelente idea, el decodificador de salidas. Lamentablemente tengo como restricción el uso único de esos puertos y lo que seria los display's.
09/09/2014 #6

Avatar de TRILO-BYTE

pero no tiene nada de malo

solo necesitas 1 decodificador aunque tengas 100 displays solo con 1 decodificador
bueno asi le hago si puedes usar el puerto directo pero desperdicias 7 bits y 1 para el punto decimal
09/09/2014 #7


TRILO-BYTE dijo: Ver Mensaje
pero no tiene nada de malo

solo necesitas 1 decodificador aunque tengas 100 displays solo con 1 decodificador
bueno asi le hago si puedes usar el puerto directo pero desperdicias 7 bits y 1 para el punto decimal
Claro entiendo tu comentario. La cantidad de combinaciones posibles con esos puertos es grande y usando demultiplexores externos, y el decodificador haría únicamente la conversión. El problema es que apenas me inicio en esto y tengo esa duda de como conectar ese octavo bit para que funcione como bit de control a pesar del desperdicio de esos 7 bits.
09/09/2014 #8

Avatar de TRILO-BYTE

no es dificil
solo tienes que usar mascaras
como NOT OR XOR AND y NAND

es facil usar un contador para hacer el barrido de izquierda a derecha de los displays
digamos que tenemos el numero 86
dibujamos el 6 primero y despues el 8 de derecha a izquierda

digamos que tenemos 4 digitos y tenemos el numero 1234
dibujando de derecha a izquierda
dibujamos
4
3
2
1
y asi

¿como lo hacemos?

digamos que en C usamos una instruccion de escribir en el puerto

hago la aclaracion que un puerto se comporta como un registro de memoria
ejemplo de registro es un CHAR

a un CHAR lo podemos sumar, restar , multiplicar, incrementar, decrementar, rotar y enmascarar

no se como se utilize un puerto en Avr studio pero mas o menos todos los micros usan la instruccion output

digamos en el puerto B puede ser cualquier otro escribimos lo que esta en mi CHAR que mi char vale un numero

ejemplo:

char numero;

numero=34;

outputB=(numero); //el puerto B escribio 34

ahorita veremos como usar mascaras

---------- Actualizado después de 25 minutos ----------

ahora veremos algo mas complicado que ami aveces se me olvida

digamos que tenemos en un entero un numero mas grande
como un 3453

y tenemos 4 displays debemos separar cada uno de esos digitos para irlos dibujando en nuestro arreglo de displays
debemos poner
3
5
4
3
¿como los separamos?

debemos dividir y usar el reciproco de una serie de operaciones
debemos tener varias variables para hacer esas separaciones y estas separaciones debemos meterlas en un arreglo para irlas aventando al display

ejemplo

3453

lo voy separando y lo voy metiendo en un arreglo de un valor definido digamos 4 arreglos

char numero[4]

numero[0] se carga con 3
numero[1] con 4
numero[2] con 5
numero[3] con 3

y despues con un barrido vamos dibujando de a uno en uno

ojo por que esto SE COMPLICA

ejemplo


char i=16;
char num=0;
char numero[4];
unsigned int32 valor;
unsigned int16 valor2;
unsigned int16 valor3;

valor=3453; //este numerito lo meteremos puedes cambiarlo

numero[0] =valor/1000;
valor2 =valor%1000;
numero[1] =valor2/100;
valor3 =valor2%100;
numero[2] =valor3/10;
numero[3] =valor3%10;

con esto cargamos nuestro arrglo numero con nuestro valor numerico

aqui usaremos una funcion llamada ROTAR que la debes rebisar y estudiar para saber que esta pasando aqui
la funcion ROTAR nos desplaza un bit como las luces del auto fantastico
asi encendemos display por display sin nececidad de usar un multiplexor
lo cargamos con 16 por ser el bit 4 y lo desplazaremos de izquierda a derecha
su funcion sera desplazarse mientras los otros 4 bits son los que se conectan al 74ls47 para mostrar los numeros

aca esta mas ejemplificado

if(num>=4) //indica los displays que usaremos en mi caso son 4
{
num=0;
}

if(i==0) //pregunta si mi incremento rotado llego a 0 "esto es por el desborde de memoria"
{
i=16; //si fue asi se carga con 16 nuevamente
}

outputb(numero[num]|i); //usamos una mascara OR el puerto envia mi numero y el display a encender

i=i<<1; rotamos 1 bit de derecha a izquierda
num++; //num sirve para seleccionar el display a encender recuerda que son 4

delay_us(100); //retardo



¿que es lo que hace?

1.-pregunta cuando es mayor que 4 displays regresa al primer display

2.-por desborde de memoria pregunta cuando el bit es mayor que 255 pero como no hay mayor que 255 osea se vuelve 0 debe cargarse a 16

3.-envia al puerto B el digito a dibujar y el display a encender todo con una OR
es decir me respeta mi nible alto que uso para multiplexar y mi nible bajo para el display
a eso se le llama MASCARA

4.-una vez dibujado en el puerto ROTAMOS nuestro bit es decir ahora sigue el display 2 luego el 3 despues el 4 y asi

5.-incrementanos num que se encarga de escojer que estaba dentro de nuestro arreglo
nuestro arreglo recuerda que contiene los digitos a mostrar

6.- un simple retardo
10/09/2014 #9

Avatar de ViCtorA

Hola catoo, entiendo que tu pregunta es por el Hardware del puerto de salidas y DS. Espero que esto te sirva. Un saludo.
10/09/2014 #10


ViCtorA dijo: Ver Mensaje
Hola catoo, entiendo que tu pregunta es por el Hardware del puerto de salidas y DS. Espero que esto te sirva. Un saludo.
https://dl.dropboxusercontent.com/u/4896326/2DS.jpg
Excelente es justo lo que comentaba, ambas respuestas funcionan. La de arriba un poco mas avanzada jeje pero el algoritmo es perfecto.
Entonces puedo llegar a la conclusión que sería imposible realizar el uso de dos display's con solo 8 bits (con esto me refiero a no usar dispositivos externos como transistores, compuertas, multuplexores, etc.)?
10/09/2014 #11

Avatar de Melghost

Claro. Con dos displays tienes 14 segmentos, pero sólo dispones de 8 bits. Necesitas poner algo más. Para sólo 2 displays me quedo con la solución de ViCtorA. Para seleccionar un display o el otro, sólo tienes que encender o apagar el bit 7.

Utilizando registros de desplazamiento con entrada serie y salida paralelo podrías conectar "infinitos" displays con sólo dos o tres bits.
10/09/2014 #12

Avatar de TRILO-BYTE

si los registros de desplazamiento es casi igual a usar un puerto de 8 bits

no me refiero a que sea menos efectivo ni nada de eso
me refiero a que se comportan todos los puertos sean serie , paralelo, etc.

como un registro de 8 bits es decir un bloque de memoria RAM de 1 byte

que no es mas que un descarado CHAR o un short int

el registro como dije lo pueden multiplicar dividir ,rotar ,enmascarar ,etc.
afin de cuentas el CPU asi lo trabaja y aventarlo al exterior ya tiene su algoritmo
igual al leer un puerto , ADC , serie ,etc.

cuando leemos algo es el mismo registro de 8 bits para los que quieran impresionar a la novia
les dicen ya puedo mover bien la memoria RAM

cuando en realidad movemos un CHAR :p
11/09/2014 #13

Avatar de JoaquinFerrero

Al leer este hilo me he acordado de que hay visualizadores con un tratamiento especial para el segmento C, ya que este está siempre encendido, salvo cuando hay que representar el valor 2.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

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