
Recuerdan el auto fantástico? Bueno como se ve en la imagen, tenía una tira de LEDs que iban y venían de un lado a otro. Vamos a ver como podemos hacer esto con un PIC usando 8 LEDs y pudiendo cambiar el tiempo en que cada uno esté encendido. Para esto usaremos el compilador CCS y Proteus para la simulación.
Circuito
Bien simple, un PIC16F873A, una barra de 10 LEDs y un potenciómetro que permitirá regular el tiempo de encendido y dos resistencias: una fija un uno lógico en el pin MCLR y la otra limita la corriente por los LEDs.

Código
Con estas nuestro código aparecerá como el que
void main(){
long tiempo;
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
set_tris_b(0x00);
set_tris_c(0x00);
portb = 0;
portc = 0;
set_adc_channel(0);
do{
output_high(PIN_B0);
tiempo = read_adc();
delay_ms(tiempo);
output_low(PIN_B0);
output_high(PIN_B1);
tiempo = read_adc();
delay_ms(tiempo);
output_low(PIN_B1);
output_high(PIN_B2);
tiempo = read_adc();
delay_ms(tiempo);
output_low(PIN_B2);
output_high(PIN_B3);
tiempo = read_adc();
delay_ms(tiempo);
output_low(PIN_B3);
output_high(PIN_B4);
tiempo = read_adc();
delay_ms(tiempo);
output_low(PIN_B4);
output_high(PIN_B5);
tiempo = read_adc();
delay_ms(tiempo);
output_low(PIN_B5);
output_high(PIN_B6);
tiempo = read_adc();
delay_ms(tiempo);
output_low(PIN_B6);
output_high(PIN_B7);
tiempo = read_adc();
delay_ms(tiempo);
output_low(PIN_B7);
output_high(PIN_C0);
tiempo = read_adc();
delay_ms(tiempo);
output_low(PIN_C0);
output_high(PIN_C1);
tiempo = read_adc();
delay_ms(tiempo);
output_low(PIN_C1);
output_high(PIN_C0);
tiempo = read_adc();
delay_ms(tiempo);
output_low(PIN_C0);
output_high(PIN_B7);
tiempo = read_adc();
delay_ms(tiempo);
output_low(PIN_B7);
output_high(PIN_B6);
tiempo = read_adc();
delay_ms(tiempo);
output_low(PIN_B6);
output_high(PIN_B5);
tiempo = read_adc();
delay_ms(tiempo);
output_low(PIN_B5);
output_high(PIN_B4);
tiempo = read_adc();
delay_ms(tiempo);
output_low(PIN_B4);
output_high(PIN_B3);
tiempo = read_adc();
delay_ms(tiempo);
output_low(PIN_B3);
output_high(PIN_B2);
tiempo = read_adc();
delay_ms(tiempo);
output_low(PIN_B2);
output_high(PIN_B1);
tiempo = read_adc();
delay_ms(tiempo);
output_low(PIN_B1);
output_high(PIN_B0);
tiempo = read_adc();
delay_ms(tiempo);
output_low(PIN_B0);
}while(TRUE);}
Simulación
El resultado de la simulación se puede ver en este video, observar como varía el tiempo de encendido de cada LED a medida que se varía el potenciómetro:
[...] otro post, recordé el auto fantástico y como generar un efecto como el de las luces de la trompa de aquel auto. Acádejo un video del [...]
Pingback por Placa de desarrollo Explorer 16 « PIC Adicto — 17 agosto 2009 @ 9:40 |
muy bueno!!
Comentario por Adrian — 17 agosto 2009 @ 21:25 |
Felicitaciones por el sitio, espero que siga progresando. Estoy entrando en este mundo de los pic con CCS y espero contar con tu ayuda. Aprovecho para hacerte una consulta: se puede hacer un programa en pic con 16f84A de tal manera que colocando un 1 en un pin (porejuemplo RB0) haga activar otro pin por (RB1), por ejemplo 30 segundos y luego otro pin (RB2) por otros 30 segundos? La idea es, al activar RB0, RB1 se pone a 1 y me hace funcionar un motor CC, luego de un tiempo, se activa el RB2 y hace rotar el motor en sentido inverso. Algo importante, que no importe si el pin RB0 SIGUE activado con un 1. Muchas gracias y suerte.
Comentario por Justo Velarde — 17 agosto 2009 @ 21:31 |
@Justo: en estos días preparo un post con algo parecido a lo que necesitas, claro que se puede hacer con PICs!
@Adrían: Muchas gracias por los comentarios, en relación a tu comentario en el otro post tengo idea de hacer una especie de tutorial de cómo usar los programadores comerciales y caseros para programar los PICs.
Comentario por picadicto — 18 agosto 2009 @ 8:32 |
sorprendente!!!!!
Comentario por dany — 30 octubre 2009 @ 18:28 |
hola soy nuevo en esto y tengo un par de dudas…
la primera sobre el valor de las resistencias, y lo mas importante el pic viene programado es decir esto se monta sobre una placa se alimenta y funciona o tiene que estar conectado al ordenador?
Comentario por amoscalla — 13 diciembre 2009 @ 22:10 |
Gracias por la ayuda….se me olvida
Comentario por amoscalla — 13 diciembre 2009 @ 22:11 |
que tal, quiero armar ese de los leds
alguien me podria ayudar con que valor tienen las resistencias
gracias……..saludos
Comentario por MARTHA — 4 septiembre 2010 @ 20:17 |