duque1226
Usuario (Colombia)

Bueno en este post me dedicare un poco mas a lo que mas me apasiona que es la programacion en C . Hoy venimos con la busqueda mas frecuente de los aficionado y amateur's de la electronica, como contar con un display de 7 segmentos y un micro en lenguaje C; lastimosamente google nos genera unas "soluciones" que no son muy utiles ya que la mayoria de estos proyectos estan hechos en basic o ensamblador o en Arduino, pero casi nunca en C. Dejemonos de tanta parla y vamos a Programar!!!!!!!!!. Los materiales para este proyecto son: -Atmega16 (o cualquiera *) -Display 7 segmentos Catodo comun (mas adelante explico porque Catodo y no Anodo) -Fuente de 5v -Resistencias de 220ohm (rojo,rojo,cafe,dorado) *Aplican condiciones y restricciones Ustedes se deben estar preguntado porque digo que cualquier micro y lo digo por que es asi, les sirve cualquier Atmega que tenga los puertos A, B, C o D completicos osea los 8pines (Recordar que si elijen como salida el Puerto C deben des habilitar el Fuse JTAGEN para que les funciones Full). Como siempre voy a partir el post en Etapas en esta ocasion van a ser 3. 1ra Etapa el Display de 7 segementos 2da Etapa El Codigo en C 3ra Etapa El Montaje y Simulacion -------------------------> PRIMERA ETAPA EL DISPLAY DE 7 SEGMENTOS<------------------------- Para hablar sobre el display de 7 segmentos debemos meternos en nuestra cabeza que un display no es mas que 8 led's ubicados de cierta forma que generan una imagen o en este caso Numeros. Como pueden ver cada led tiene asignada una letra desde la 'a' hasta la 'g' esto es denominado 7 segmentos de alli el nombre display de 7 segmentos, ya que hay de muchos mas segmentos. Este proyecto podria ser mas "breve" si usamos un decodificador BCD / 7 segmentos ya que solo usariamos 4 pines del Micro, pero bueno yo lo quise hacer asi jajaja. Como todos ustedes saben un led es un semiconductor que posea dos "patas" para su alimentacion Anodo (+) Catodo (-), pues bueno en base a esto desarrolle el programa, ya que ustedes saben que cuando indico: PORTB=0b00000001 //Pongo el Bit1 en Alto. Binario PORTB=0x01; //Equivalente al de arriba solo que esto es Hexadecimal Se genera un 1 logico en la salida del micro lo que es aproximadamente 5V osea (+), por esto es que uso display de Catodo comun, ya que este display tiene conectadas entre si todas los Catodos y solo se encenderan cuando se genere un "Anodo" en cualquier pin del 'a' al 'g'. Por esto es de CATODO COMUN . ------------------------->SEGUNDA ETAPA EL CODIGO EN C<------------------------- Listo ya sabemos que lo que hace este programa no es mas que encender una secuencia de leds en un orden especifico. El orden lo damos sabiendo que el PRIMER pin del Puerto va a ser 'A' del display y el ANTEPENULTIMO va a ser 'G', el ultimo pin del puerto no se usa ya que ese corresponderia al Puntico del display. Acontinuacion vamos a ver como se generan los 4 primeros numeros del display en Binario y Hexadecimal: 1 --> 0b0000110 (binario) 0x06 (hexadecimal). //Se cuenta de Derecha a Izquierda 2 --> 0b1011011 (binario) 0x5B (hexadecimal). 3 --> 0b1001111 (binario) 0x4F (hexadecimal). 4 --> 0b1100110 (binario) 0x66 (hexadecimal). Les voy a mostrar los primeros cuatro numeros como se ven encendidos con 1 y 0 logicos. (simulacion) Ami me gusta trabajar mas con Hexadecimales, pero tambien se puede hacer en binario u octal. La lista de los numeros completos es esta: 1--> 0x06 2--> 0x5B 3--> 0x4F 4--> 0x66 5--> 0x6D 6--> 0x7C 7--> 0x07 8--> 0x7F 9--> 0x667 0--> 0x3F Para aprender a manejar los Hexa hay muy buenos tutoriales en google y otras paginas que os apareceran cuando busquen sobre este tema tan importante al momento de la programacion. El codigo COMPLETO queda asi: /* * Contador_Dis.c * * Created: 08/08/2012 11:48:50 a.m. * Author: JUAN PABLO */ #include <avr/io.h> #include <util/delay.h> int main(void) { DDRD=0xFF; //Defino el Puerto D como salida int i; int cont[9]={0x06,0x5B,0x4F,0x66,0x6D,0x7C,0x07,0x7F,0x67}; //Defino los numeros en Hexa del 0 a 9 while(1) //Ciclo Infinito { PORTD=0x3F; //Inicializo el Display en 0 for(i=0;i<=9;i++) //Comienzo a cargar Numero por Numero en el Display { _delay_ms(200); _delay_ms(200); _delay_ms(200); _delay_ms(200); _delay_ms(200); //Espero 1 segundo para cargar el siguiente Numero PORTD=cont; //Imprimo el Numero en el Puerto D // arriba no se ve bien pero es cont[ i ], quitan los espacion antes y despues de la i } } } Que hace este programa?? R:/ Inicializa un vector con unas salidas predeterminadas en hexa, abre un bucle o ciclo infinito y carga dato por dato del vector con retardo entre cada numero de 1 segundo aproximadamente. ------------------------->TERCERA ETAPA EL MONTAJE Y LA SIMULACION<------------------------- Bueno el esquema es el siguiente para un Atmega16, pero como ya les dije pueden usar un Atmega8, atmega168 y otros que tengan las salidas del puerto completas ya lo habia mencionado. Listoo eso es todo si tienen alguna duda o aporte no olviden en comentarlo muchas Gracias. P.D: Hay una excelente pagina para los apasionados como yo al AVR y es esta: Es un blog hecho por uno de los mejores profesores en C y unos estudiantes de mi Universidad.

Bueno Primero que todo les informo que en este post voy a mostrar como hacer dos proyectos electronicos que se relacionan entre si. -CONTADOR DE 0-9 SINCRONO: Cuando iniciamos en la electronica es vital saber el uso de la protoboard y como estan divididos sus contactos, estos tutoriales se encuentran en busquedas en Google; este post es uno de los primeros proyectos de optoelectronica que por lo general son: Secuanciadores, Osciladores, Matrices etc,etc. Para empezar con nuestro proyecto van los Materiales: -Circuitos integrados: NE555, 74ls90, 74ls47 -Resistencias: 5 res de 220 Ohm -Condensadores: 1 de 1000u electrolitico (Esto da el Pulso o mejor dicho la velocidad del conteo, Entre mayor sea mas lento corre) -Optoelectricos: 1 led rojo (o Cualquier color), 1 display de Anodo Comun. -Otros: Protoboard, Fuente de 5v o 9v. Bueno para empezar Armamos el pulso con el 555 asi: Este es el Esquema en PROTEUS, el Condensador de 47u se cambia por el de 1000u o el que deseen. En este Astable la salida del pulso es el PIN 3. Ahora seguimos a hacer las conexiones del 74ls90 al 74ls47 asi: Como el proteus no muestra todo el patillaje debido a que el hace la conexion logica de los integrados, las conexiones faltantes son: 7490: OJOOOO Pin 5 a Vcc osea POSITIVO. 7447: OJOOOO Pin 16 a Vcc POSITIVO. OJOOOO Pin 8 a Gnd NEGATIVO. Despues de hacer todos estos Pasos de conexion viene la Importante, CONEXION DEL 74LS47 AL DISPLAY DE ANODO COMUN asi: Como en la imagen no se la configuracion del Display aqui se las doy: Imagen sacado de: http://mantenimiento--electronica.blogspot.com/2010_07_01_archive.html | X | X | | Pin 13 | Disp A | | Pin 12 | Disp B | | Pin 11 | Disp C | | Pin 10 | Disp D | | Pin 9 | Disp E | | Pin 15 | Disp F | | Pin 14 | Disp G | Despues de tener todo montado PASO A PASO ahora se junta todo en un mismo circuito ya sabemos k la conexion que une al NE555 con el 74ls90 es: PIN 3 del 555--------------->PIN 14 del 74ls90. Y el esquema final es este: Y para que vean que el Proyecto si funciona He aqui el video subido por mi en YouTube: Para hacer el contador de 0-99 es EXACTAMENTE IGUAL a exepcion que: Se hace la misma conexion del 74ls90 y 74ls47 al display todo igual pero el pulso que entra del 555 al 74ls90 NO lo sacamos del 555 sino que del PIN 11 del PRIMER 74ls90 asi: y el respectivo Video: Muchas Gracias por su Atencion. PD: CUALQUIER DUDA LA COMENTAN
"TUVE UN PROBLEMA CON LAS IMAGENES ASI QUE COPIEN Y PEGUEN LOS LINKS, QUE PENA " Bueno despues de un largo año de salir de taringa, vuelvo con un proyecto electronico muy "practico" y que lastimosamente en internet siempre nos entregan un prototipo bastante viejo y caro. http://www.yoreparo.com/foros/diseno_electronico/cual-es-este-circuito-integrado-t387696.html Que fanatico de la electronica no ha deseado contar a través de un sensor todo lo que quiera y como siempre buscamos en google y nos aparece esta pagina, al ver esto nos sorprendemos ya que se observan 3 displays, dos integrados y una compuerta, para muchos el hecho de ver ese simbolito raro (compuerta) les parece "imposible" y optan por hacerse un contador con un 555, 7490 y 7447 y Listoo!!!!. (lo digo por experiencia propia) Bueno dejemonos de historias bobas y a lo que vamos: MATERIALES: -Protoboard -LM358 -CNY70 -7490 -7447 -555 -8 res de 220ohm (rojo,rojo,cafe,dorado) -1 res de 10k (cafe,negro,zapote,dorado) -Led -Pot de 10k -Cable UTP -Display Anodo Comun Bueno este post lo vamos a dividir en 3 etapas fundamentales: 1ra Sensado 2da Anti-Rebotes 3ra Conteo ------------->PRIMERA ETAPA SENSADO CON CNY70 <------------- El sensor que vamos a usar es el cny70, economico y de buen desempeño. Hay muchas formas de conectarlo, pero personalmente vamos a usar la mas comun y la basica http://i.imgur.com/uOqyq.jpg Para los que no sepan el diodo que lleva las 2 flechitas es el EMISOR osea en aspecto fisico el led de color entre azul y negro, el led de color transparente es el RECEPTOR. http://i.imgur.com/Bytum.jpg En la anterior imagen pueden ver claramente como se conecta cada componente, para conectar el cny70 por lo general es mejor soldarle cables, ya que en la protoborad no cabe. Para conectar el cny70 se coloca asi, el emisor a la izquierda y el receptor a la derecha | x o |, y los cables se conectan asi: En los puntos azules el emisor y en los zapotes el receptor (RECORDAR emisor Izq receptor Der) Posibles problemas: Pasas la mano por el sensor y no prende el led (Mover el Pot hasta conseguirlo) Observas el cny70 con una camara y no vez que prende (rectifica la soldadura de los cables muevelos hasta que consigas esto). ------------->SEGUNDA ETAPA ANTI REBOTES <------------- Este fue un verdadero problema para mi, ya que yo solo hacia la amplificacion del cny70 y la salida la mandaba al CLK del 7490 y supuestamente cada vez que pasara la mano por el sensor deberia contar, pero no fue asi porque la salida del OA no era un 0 constante sino una serie de señales aproximadas, entonces me puse a preguntar y a preguntar hasta que en un foro un moderador me dio la solucion: USAR UN MONOESTABLE Y ahi de una la coji, para los que no saben que es un monoestable, no es mas que un 555 conectado con 2 resistencias y un Condensador el cual se usa habitualmente para generar "pulsos" y poner a contar o hacer distintos procesos que requieran un CLK duty duty casi perfecto. http://i.imgur.com/3t02D.jpg Ahi esta el esquematico algo muy sencillo, el condensador es de la eleccion de cada uno ya que si se desea contar algo que es muy frecuente o muy rapido (contar caidas continuas) se debe usar un condensador pequeño de por ahi unos 220uf pero si va a contar algo no muy rapido ni muy exigente se puede usar perfectamente uno de 1000uf que es el que yo implemente en este circuito http://i.imgur.com/eeyN4.jpg Muchos se preguntaran porque el RESET lo conecte a Vcc y no directamente a pin 8, esto es porque conectar el RESET (pin4) a 8 es lo mismo que conectarlo a Vcc. Aclaro en mi protoboard Vcc es la Linea de ARRIBA y Gnd la linea de abajo ------------->TERCERA ETAPA CONTADOR <------------- sta es la etapa mas "cansona" porque son muchos cables los que hay que conectar y sobre todo la conexion del Display al 7447 es un poco dificil debido al poco espacio de la protoboard, pero bueno cada uno se las ingeniara para hacerlo bien. El esquematico es conocido por la gran mayoria no tiene ninguna modificacion alguna, solo que la fuente del CLK es un sensor pero bueno empezemos. http://i.imgur.com/gocf9.jpg Recuerden que el Proteus NO muestra los pines de alimentacion de los Integrados, pero obviamente se tienen que conectar y son: 7490: Pin 5 VCC y Pin 10 GND 7447: Pin 8 GND y Pin 16 VCC Ojo la conexion del 7447 al Display esta en orden alfabetico, iniciando el pin 13 del 7447 a la A y finalizando el pin 14 en la G . Es bueno que protejan el display conectado dos resistencias de 220ohm a VCC. (En internet hay muchas paginas de conexion de Display de 7 segmentos). http://i.imgur.com/PiiOB.jpg Y bueno para finalizar una foto del proyecto http://i.imgur.com/RD8lK.jpg Ojo muchachos si el display NO inicia en cero es porque hay un mal contacto o seguramente sus integrados ya estan algo atrofiados Espero les guste y ps nada que se lo gozen. Proximamente voy a subir un post de como controlar un motor BIPOLAR