bueno aqui les dejo un proyectico realisable en 15 min:
se trata de la realisacion de un ecualizador grafico de 8 canales con un pic 16f877a una lcd y 8 potenciometros.
el codigo se basa en la lectura de los ocho canales de antrada analogicos de el pic para la posterios asignacion de los mismos segun el valor leido a la pantalla lcd jejeje no es muy complicado espero lo entiendan:
#include <16f877a.h>
#byte puerto_a = 0x05
#byte puerto_b = 0x06
#byte puerto_c = 0x07
#byte puerto_d = 0x08
#byte puerto_e = 0x09
#use delay(clock=4000000)
int byte_c,byte_d,valor,incremento;
void control(byte_c)
{
bit_clear(puerto_c,1);
bit_clear(puerto_c,0);
puerto_d=byte_c;
delay_us(100);
bit_set(puerto_c,1);
delay_us(1);
bit_clear(puerto_c,1);
}
void dato(byte_d)
{
bit_clear(puerto_c,1);
puerto_d=byte_d;
delay_us(100);
bit_set(puerto_c,1);
bit_set(puerto_c,0);
delay_us(1);
bit_clear(puerto_c,1);
}
void inicio_lcd()
{
control(0x01);
delay_ms(20);
control(0x38);
delay_ms(5);
control(0x38);
delay_ms(5);
control(0x38);
delay_ms(5);
control(0x0c);
control(0x06);
}
void main()
{
set_tris_a(0xff);
set_tris_e(0xff);
set_tris_d(0x00);
set_tris_c(0x00);
setup_adc_ports( ALL_ANALOG );
setup_adc(adc_clock_div_2);
inicio_lcd();
for(;
{
for(incremento=0;incremento<=7;incremento++)
{
set_adc_channel(incremento);
delay_ms(15);
valor=read_adc();
if(valor>=50)
{
control(0xd4+incremento);
dato(0xff);
}
if(valor<=50 && valor>=0 )
{
control(0xd4+incremento);
dato(0x00);
}
if(valor>=100)
{
control(0xd4+incremento);
dato(0xff);
control(0x94+incremento);
dato(0xff);
}
if(valor<=100 && valor>=50 )
{
control(0xd4+incremento);
dato(0xff);
control(0x94+incremento);
dato(0x00);
}
if(valor>=150)
{
control(0xd4+incremento);
dato(0xff);
control(0x94+incremento);
dato(0xff);
control(0xc4+incremento);
dato(0xff);
}
if(valor<=150 && valor>=100 )
{
control(0xd4+incremento);
dato(0xff);
control(0x94+incremento);
dato(0xff);
control(0xc4+incremento);
dato(0x00);
}
if(valor>=200)
{
control(0xd4+incremento);
dato(0xff);
control(0x94+incremento);
dato(0xff);
control(0xc4+incremento);
dato(0xff);
control(0x84+incremento);
dato(0xff);
}
if(valor<=200 && valor>=150 )
{
control(0xd4+incremento);
dato(0xff);
control(0x94+incremento);
dato(0xff);
control(0xc4+incremento);
dato(0xff);
control(0x84+incremento);
dato(0x00);
}
}
}
}ademas de esto no se como subir las imagenes para que vean en el proteus como es el montaje jeje me da problemas, a otra cosilla quisiera saber si me pueden dar ayudas
acerca de como hacer filtros para no tener que darles los valores manuales a los potenciometros, gracias que disfruten.