TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: cmontoya en 20 de Agosto de 2014, 21:53:07
-
Hola amigos del foro
Tengo una actividad la cual toca hacer un contador 0 a 99, yo lo se hacer utilizando 2 puertos, ademas e visto muchos contadores 0 a 9999 en fin.
Me toca hacer el contador con multiplexeo sin utilizar interrupciones (TIMMER) como puedo hacer un multiplexeo sin eso hay alguna forma??
Gracias por su ayuda
-
algo que pense es , como la multiplexación usa una frecuencia de refresco tal que es imperceptible para el ojo humano, al hacerlo sin interrupciones el refresco de los display iría a mayor frecuencia.
-
Tambien podría ser sin multiplexar, usando el puerto B solamente, nibble alto para decena, nibble bajo para unidad y usar dos conversores bcd a 7 segmentos del tipo cd4511.
Maneras hay muchas, no se si es imprescindible que sea sin multiplexion o solamente el micro sin mas componentes externos.
Slds.
-
La logica seria hacer en contador solo con el micro pero el problema es el multiplexeo alguna solucion o codigo??
-
Hola
Por lo que entiendo utilizas un puerto para la unidad y otro puerto para la decena, para multiplexar
unidad y decena por un solo puerto:
1: escribes el valor de unidad en puerto X y activas el NPN correspondiente al display unidad con RA0 por ejemplo y pon 0 a RA1
2: Pones un temporizador de 100 o 200 mS
3: escribes el valor de decena en puerto X y activas el NPN correspondiente al display decena con RA1 por ejemplo y pon 0 a RA0
4: Pones un temporizador de 100 o 200 mS y vuelves al paso 1
Sdos. :D
, yo lo se hacer utilizando 2 puertos,
-
Hola
Pues anexe la pausa de 200ms pero no multiplexea bien alguna observacion??
#include <16F877A.h>
#fuses xt
#fuses nowdt
#fuses noprotect
#fuses put
#fuses nolvp
#use delay(clock=4000000)
#byte puertob= 0x06
#byte puertoc= 0x07
#byte puertod= 0x08
int conteo=0,conteo2=0;
int tab7seg[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67};
void main ()
{
set_tris_B(0xFF);
set_tris_c(0x00);
set_tris_d(0x00);
port_b_pullups(true);
puertoc=(0x00);
puertod=(0x00);
for(;;)
{
if(bit_test(puertob,2)==0){
while(bit_test(puertob,2)==0);
delay_ms(20);
conteo++;
if(conteo>9)
conteo=0;
if(conteo==0)
conteo2++;
if(conteo2>9)
conteo2=0;
output_high(PIN_D1);
output_low(PIN_D0);
delay_ms(200);
output_c(tab7seg[conteo]);
output_low(PIN_D1);
output_high(PIN_D0);
delay_ms(200);
output_c(tab7seg[conteo2]);
}
}
}
-
primero debes poner el dato en el puerto y luego activar como corresponda los displays, recuerda que usando delays "amarras" el procesador en esa rutina.