bueno luego de terminar mi proyecto de matriz de led... me decidi a hacer un circuito pequeño, que no requiera tantos componentes, y me decidi por hacer un vumetro, e visto varios articulos de vumetros en su gran mayoria hechos con integrados ya muy conocidos por los electronicos y no tanto... tambien he visto hecho programas pero en basic, y hasta ahora no di con alguno ( o por lo menos no lo lei) de que lo halla hecho en c... entonces dije manos a la obra y hasta ahora, no hice casi nada porque estoy muy trabado, siempre tengo la costumbre de hacer muy rustico los programas
y no saber como simplificarlo, este es un caso...
ahora paso a comentarles mi situación, en proteus hice un circuito que tenga, el display lcd conectado al puerto D de un pic 16f877a, un potenciomentro en la entrada A1, (simulando brutamente una señal de audio), la cuestión, que pude hacer el efecto con asteriscos **, pero quise intentar hacer el efecto de barra y algo sale, pero lo veo muy grande al código del programa para dibujar las barras...
espero haber sido lo mas claro.. cualquier cosa háganme
saber...
Saludos...
Posteo el codigo del programa:
#include <16f877A.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#DEVICE ADC=10
#use delay(clock=4000000)
#byte porta=5
#byte portb=6
#byte portc=7
#byte portd=8
#use standard_io(D)
#use fast_io(a)
//****************************D I B U J O D E B A R R A S******************************************
int const caracter0_direccion[8]={0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47};
int const caracter0_datos[8]={0b10000,0b10000,0b10000,0b10000,0b10000,0b10000,0b10000,0b0};
int const caracter1_direccion[8]={0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f};
int const caracter1_datos[8]={0b11000,0b11000,0b11000,0b11000,0b11000,0b11000,0b11000,0b0};
int const caracter2_direccion[8]={0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57};
int const caracter2_datos[8]={0b11100,0b11100,0b11100,0b11100,0b11100,0b11100,0b11100,0b0};
int const caracter3_direccion[8]={0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f};
int const caracter3_datos[8]={0b11110,0b11110,0b11110,0b11110,0b11110,0b11110,0b11110,0b0};
int const caracter4_direccion[8]={0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67};
int const caracter4_datos[8]={0b11111,0b11111,0b11111,0b11111,0b11111,0b11111,0b11110,0b0};
//****************************P I N E S D E L D I S P L A Y*********************************************************
#define LCD_DB4 PIN_D0
#define LCD_DB5 PIN_D1
#define LCD_DB6 PIN_D2
#define LCD_DB7 PIN_D3
#define LCD_RW PIN_D6
#define LCD_RS PIN_D7
#define LCD_E PIN_D5
#define use_portd_lcd
#include "flex_lcd.c"
//*********************************************************************************************************************
#zero_ram //borra cualquier contendido en la memoria ram
//*********************************************************************************************************************
int const lenbuff=5; // Longitud de buffer, Ajustar
char cbuff[lenbuff]; //buffer con largo lenbuff
//------------------------------------------------------------------------------------------
char h_digit=0;
char l_digit=0;
long int l_digit_long=0;
long int h_digit_long=0;
long int diez=0;
int32 adaptar=0;
int i;
int contador;
int pico=0;
//**********************************Variables de Tension***************************************************************
long int tension_2=0;
long int car;
//**********************************S U B R U T I N A S****************************************************************
void muestra_tensiones(void);
void lee_canales_ad(void);
void hextoascii16(void);
void mensaje_inicio (void);
void muestra_grafica(void);
void muestra_grafica1(void);
void signo (void);
//*********************************************************************************************************************
void main(void)
{
disable_interrupts(global); //desabilitamos cualquier tipo de interrupcion
setup_adc_ports(ALL_ANALOG); //todos los puertos a como analogicos
setup_adc(ADC_CLOCK_INTERNAL); //seteamos q la velocidad de muestreo sea interno
delay_ms(100); //activamos las resistencias de pull-up interna del puerto b
lcd_init(); //inicializa display
delay_ms(100);
mensaje_inicio(); //muestra mensaje de inicio
signo();
delay_ms(100);
//*********************************************************************************************************************
while(true) //lazo principal programa
{
lee_canales_ad();
muestra_grafica1();
muestra_tensiones();
}
}
//******************************************************************************
void mensaje_inicio (void)
{
lcd_putc("\fTester de Fuente\n");
lcd_putc(" Korpaz =) ");
delay_ms(2000);
lcd_putc("\f");
}
//*******************************************************************************
void lee_canales_ad()
{
Setup_adc_ports( ALL_ANALOG ); //// A0 A1 A3 Ref=Vdd
setup_adc(ADC_CLOCK_INTERNAL);
//----------------lee temperatura horno 1 y la calcula--------------------------------
set_adc_channel(1);
delay_us(30);
tension_2=read_adc();
car=tension_2;
adaptar=tension_2;
adaptar=((adaptar*488*1000)/1000000);
tension_2=adaptar;
}
//********************************************************************************************
void muestra_grafica(void)
{
if(car<=64)
{
lcd_gotoxy(1,2);
lcd_putc("* ");
}
if(car> 64 && car <= 128)
{
lcd_gotoxy(1,2);
lcd_putc("** ");
}
if(car>128 && car <= 192)
{
lcd_gotoxy(1,2);
lcd_putc("*** ");
}
if(car>192 && car <=256)
{
lcd_gotoxy(1,2);
lcd_putc("**** ");
}
if(car>256 && car <= 320)
{
lcd_gotoxy(1,2);
lcd_putc("***** ");
}
if(car> 320 && car <= 384)
{
lcd_gotoxy(1,2);
lcd_putc("****** ");
}
if(car > 384 && car <= 448)
{
lcd_gotoxy(1,2);
lcd_putc("******* ");
}
if(car > 448 && car <= 512)
{
lcd_gotoxy(1,2);
lcd_putc("******** ");
}
if(car > 512 && car <= 576)
{
lcd_gotoxy(1,2);
lcd_putc("********* ");
}
if(car > 576 && car <= 640)
{
lcd_gotoxy(1,2);
lcd_putc("********** ");
}
if(car > 640 && car <= 704)
{
lcd_gotoxy(1,2);
lcd_putc("*********** ");
}
if(car > 704 && car <= 768)
{
lcd_gotoxy(1,2);
lcd_putc("************ ");
}
if(car > 768 && car <= 832)
{
lcd_gotoxy(1,2);
lcd_putc("************* ");
}
if(car > 832 && car <= 896)
{
lcd_gotoxy(1,2);
lcd_putc("************** ");
}
if(car > 896 && car <= 960)
{
lcd_gotoxy(1,2);
lcd_putc("*************** ");
}
if(car > 960 && car <= 1023)
{
lcd_gotoxy(1,2);
lcd_putc("****************");
}
}
//********************************************************************************************
void muestra_tensiones(void)
{
lcd_gotoxy(1,1);
l_digit_long=tension_2;
hextoascii16();
lcd_putc(cbuff[2]),lcd_putc("."),lcd_putc(cbuff[3]), lcd_putc(cbuff[4]),lcd_putc(" V"),lcd_putc(" (5v)");
}
//**********************************************************************************
void hextoascii16(void)
{
int i=0;
for(i = 0; i < 5; ++i)
{
cbuff[i]=0;
}
while (l_digit_long > 9)
{
i=0;
h_digit_long=l_digit_long;
diez=1;
while (h_digit_long > 9)
{
i++;
diez=diez*10;
h_digit_long=(h_digit_long/10);
}
cbuff[i]=h_digit_long; //guarda el primer valor en el buffer
l_digit_long=l_digit_long-(diez*h_digit_long);
}
cbuff[0]=l_digit_long;
for(i = 0; i < 6; ++i)
{
cbuff[i]=cbuff[i]+0x30;
}
h_digit=cbuff[4];
l_digit=cbuff[3];
cbuff[4]=cbuff[0];
cbuff[3]=cbuff[1];
cbuff[0]=h_digit;
cbuff[1]=l_digit;
}
//**********************************************************************
void signo (void)
{
for(contador=0;contador<8;contador++){
lcd_send_byte(0,caracter2_direccion[contador]); //modo comando
lcd_send_byte(1,caracter2_datos[contador]); // modo dato
}
lcd_send_byte(0,0x80);
for(contador=0;contador<1;contador++){
lcd_send_byte(1,contador);
} //modo dato
for(contador=0;contador<8;contador++){
lcd_send_byte(0,caracter0_direccion[contador]); //modo comando
lcd_send_byte(1,caracter0_datos[contador]); // modo dato
}
lcd_send_byte(0,0x80);
for(contador=0;contador<1;contador++){
lcd_send_byte(1,contador);
} //modo dato
for(contador=0;contador<8;contador++){
lcd_send_byte(0,caracter1_direccion[contador]); //modo comando
lcd_send_byte(1,caracter1_datos[contador]); // modo dato
}
lcd_send_byte(0,0x80);
for(contador=0;contador<1;contador++){
lcd_send_byte(1,contador);
} //modo dato
for(contador=0;contador<8;contador++){
lcd_send_byte(0,caracter3_direccion[contador]); //modo comando
lcd_send_byte(1,caracter3_datos[contador]); // modo dato
}
lcd_send_byte(0,0x80);
for(contador=0;contador<1;contador++){
lcd_send_byte(1,contador);
} //modo dato
for(contador=0;contador<8;contador++){
lcd_send_byte(0,caracter4_direccion[contador]); //modo comando
lcd_send_byte(1,caracter4_datos[contador]); // modo dato
}
lcd_send_byte(0,0x80);
for(contador=0;contador<1;contador++){
lcd_send_byte(1,contador);
} //modo dato
}
//************************************************************************************
void muestra_grafica1(void)
{
//************************************************************************************
//************************************************************************************
if(car<=13)
{
lcd_gotoxy(1,2);
lcd_putc(0);
lcd_gotoxy(2,2);
lcd_putc(" ");
}
if(car >13 && car <=24)
{
lcd_gotoxy(1,2);
lcd_putc(1);
lcd_gotoxy(2,2);
lcd_putc(" ");
}
if(car>24 && car<=36)
{
lcd_gotoxy(1,2);
lcd_putc(2);
lcd_gotoxy(2,2);
lcd_putc(" ");
}
if(car >36 && car <=48)
{
lcd_gotoxy(1,2);
lcd_putc(3);
lcd_gotoxy(2,2);
lcd_putc(" ");
}
if(car>48 && car<=60)
{
lcd_gotoxy(1,2);
lcd_putc(4);
lcd_gotoxy(2,2);
lcd_putc(" ");
}
//************************************************************************************
//************************************************************************************
if(car>60 && car<=72)
{
lcd_gotoxy(2,2);
lcd_putc(0);
lcd_gotoxy(1,2);
lcd_putc(4);
lcd_gotoxy(3,2);
lcd_putc(" ");
}
if(car >72 && car <=84)
{
lcd_gotoxy(2,2);
lcd_putc(1);
lcd_gotoxy(1,2);
lcd_putc(4);
lcd_gotoxy(3,2);
lcd_putc(" ");
}
if(car>84 && car<=96)
{
lcd_gotoxy(2,2);
lcd_putc(2);
lcd_gotoxy(1,2);
lcd_putc(4);
lcd_gotoxy(3,2);
lcd_putc(" ");
}
if(car >96 && car <=108)
{
lcd_gotoxy(2,2);
lcd_putc(3);
lcd_gotoxy(1,2);
lcd_putc(4);
lcd_gotoxy(3,2);
lcd_putc(" ");
}
if(car>108 && car<=120)
{
lcd_gotoxy(2,2);
lcd_putc(4);
lcd_gotoxy(1,2);
lcd_putc(4);
lcd_gotoxy(3,2);
lcd_putc(" ");
}
//************************************************************************************
//************************************************************************************
if(car> 120 && car<=132)
{
lcd_gotoxy(3,2);
lcd_putc(0);
lcd_gotoxy(2,2);
lcd_putc(4);
lcd_gotoxy(1,2);
lcd_putc(4);
lcd_gotoxy(4,2);
lcd_putc(" ");
}
if(car >132 && car <=144)
{
lcd_gotoxy(3,2);
lcd_putc(1);
lcd_gotoxy(2,2);
lcd_putc(4);
lcd_gotoxy(1,2);
lcd_putc(4);
lcd_gotoxy(4,2);
lcd_putc(" ");
}
if(car>144 && car<=156)
{
lcd_gotoxy(3,2);
lcd_putc(2);
lcd_gotoxy(2,2);
lcd_putc(4);
lcd_gotoxy(1,2);
lcd_putc(4);
lcd_gotoxy(4,2);
lcd_putc(" ");
}
if(car >156 && car <=168)
{
lcd_gotoxy(3,2);
lcd_putc(3);
lcd_gotoxy(2,2);
lcd_putc(4);
lcd_gotoxy(1,2);
lcd_putc(4);
lcd_gotoxy(4,2);
lcd_putc(" ");
}
if(car>168 && car<=180)
{
lcd_gotoxy(3,2);
lcd_putc(4);
lcd_gotoxy(2,2);
lcd_putc(4);
lcd_gotoxy(1,2);
lcd_putc(4);
lcd_gotoxy(4,2);
lcd_putc(" ");
}
//************************************************************************************
//************************************************************************************
if(car>180 && car<=192)
{
lcd_gotoxy(4,2);
lcd_putc(0);
lcd_gotoxy(3,2);
lcd_putc(4);
lcd_gotoxy(2,2);
lcd_putc(4);
lcd_gotoxy(1,2);
lcd_putc(4);
lcd_gotoxy(5,2);
lcd_putc(" ");
}
if(car >192 && car <=204)
{
lcd_gotoxy(4,2);
lcd_putc(1);
lcd_gotoxy(3,2);
lcd_putc(4);
lcd_gotoxy(2,2);
lcd_putc(4);
lcd_gotoxy(1,2);
lcd_putc(4);
lcd_gotoxy(5,2);
lcd_putc(" ");
}
if(car>204 && car<=216)
{
lcd_gotoxy(4,2);
lcd_putc(2);
lcd_gotoxy(3,2);
lcd_putc(4);
lcd_gotoxy(2,2);
lcd_putc(4);
lcd_gotoxy(1,2);
lcd_putc(4);
lcd_gotoxy(5,2);
lcd_putc(" ");
}
if(car >216 && car <=228)
{
lcd_gotoxy(4,2);
lcd_putc(3);
lcd_gotoxy(3,2);
lcd_putc(4);
lcd_gotoxy(2,2);
lcd_putc(4);
lcd_gotoxy(1,2);
lcd_putc(4);
lcd_gotoxy(5,2);
lcd_putc(" ");
}
if(car>228 && car<=240)
{
lcd_gotoxy(4,2);
lcd_putc(4);
lcd_gotoxy(3,2);
lcd_putc(4);
lcd_gotoxy(2,2);
lcd_putc(4);
lcd_gotoxy(1,2);
lcd_putc(4);
lcd_gotoxy(5,2);
lcd_putc(" ");
}
//************************************************************************************
//************************************************************************************
}
Saludos.-