TODOPIC
Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: jesuz en 19 de Mayo de 2012, 17:43:54
-
hola que tal me podrian explicar como hacer un contador de 7 segmentos del 00-99 es que la verdad no le entiendo el proceso que
tengo que hacer estoy utilizando el pic16f84a con dos decodificadores 74ls47 cada uno para su respectivo display de 7 segmentos(anodo) pero no se hacerlo
ya tengo una idea pero no se, es colocar el 0-9 para las decenas(porta) y otro del 0-9 para las unidades(portb) y poner 10 retardos pero no se como colocarlos para que del 9 (unidades) pase al 1 (en decenas) y se coloque el 0 otra ves en las unidades y haci sucesivamente hasta llegar al 99 me podrian dar un ejemplo. de antemano gracias por las respuestas.. no se si me explique bien :oops:
-
mira aqui esta un ejemplo pero este no usa decodificadores, si no que mediante el puerto B escribo el numero que necesito y se va multiplexando
#include <16F88.h>
#USE DELAY( CLOCK=4000000)
#FUSES nowdt,noput,nobrownout,nolvp,noprotect,NOMCLR,INTRC_IO
byte CONST DISPLAY[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void main(){
byte ud=0,dec=0;
SET_TRIS_B(0x00);
SET_TRIS_A(0x00);
OUTPUT_B(0);
for( ;; ){
for (dec=0;dec<10;dec++){ //Cuenta digito decenas
for (ud=0;ud<10;ud++){
OUTPUT_A(0x02); //cat_D=apagado,cat_U=encendido
OUTPUT_B(DISPLAY[ud]); //Digito unidades
delay_ms(100); //Para evitar parpadeos
if (dec==0) output_a(0x03); //Si decenas=0, cat_D=apagado
else output_a(0x01); //Si decenas>0, cat_D=encendido
OUTPUT_B(DISPLAY[dec]); //Digito decenas
delay_ms(100); //Para evitar parpadeos
}
}
}
}
Algo que puedes hacer es que del B0 al B3 manejes las unidades y del B4 al B7 las decenas, solo tendiras que estar realizando impreciones.
Ahora viendo lo que pides hay que manejar el puerto a y el puerto b asi que con un par de If seria mas que aqui nuestro problema es saber que tipo de lenguaje usas para programar
-
mira aqui esta un ejemplo pero este no usa decodificadores, si no que mediante el puerto B escribo el numero que necesito y se va multiplexando
#include <16F88.h>
#USE DELAY( CLOCK=4000000)
#FUSES nowdt,noput,nobrownout,nolvp,noprotect,NOMCLR,INTRC_IO
byte CONST DISPLAY[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void main(){
byte ud=0,dec=0;
SET_TRIS_B(0x00);
SET_TRIS_A(0x00);
OUTPUT_B(0);
for( ;; ){
for (dec=0;dec<10;dec++){ //Cuenta digito decenas
for (ud=0;ud<10;ud++){
OUTPUT_A(0x02); //cat_D=apagado,cat_U=encendido
OUTPUT_B(DISPLAY[ud]); //Digito unidades
delay_ms(100); //Para evitar parpadeos
if (dec==0) output_a(0x03); //Si decenas=0, cat_D=apagado
else output_a(0x01); //Si decenas>0, cat_D=encendido
OUTPUT_B(DISPLAY[dec]); //Digito decenas
delay_ms(100); //Para evitar parpadeos
}
}
}
}
Algo que puedes hacer es que del B0 al B3 manejes las unidades y del B4 al B7 las decenas, solo tendiras que estar realizando impreciones.
Ahora viendo lo que pides hay que manejar el puerto a y el puerto b asi que con un par de If seria mas que aqui nuestro problema es saber que tipo de lenguaje usas para programar
la verdad soy novato en esto de microcontroladores no se la verdad que lenguaje uso pero son como MOVLF,MOVWF,CLRF.. etc.. :oops: :(
-
Estas usando assembler (ensamblador) aqui tienes uno de 0 a 999, con displays multiplexados, a continuacion lo tienes con decodificadores:
http://www.todopic.com.ar/foros/index.php?topic=24720.msg201403#msg201403