hola amigos, estoy leyendo un pote analogico por AN0 (PIC18F4520), y lo muestro en un display de 2 lineas en la variable tension. Mi problema es que si no uso:
delay_ms(500);
despues de la funcion:
printf(lcd_putc,"t=%lu v=%lu",tension .......
el lcd parapadea, osea muestra el dato y se manda a borrar y vuelve a mostrar el dato. Se puede eliminar el delay_ms(500) ? yo NO quiero usarlo por que en ese tiempo muerto necesito hacer otras cosas, ademas que me pone lerdo la visualizacion datos quiero que sea mas dinamica.
Ahi va el codigo completo, gracias.
delay_ms(500);
despues de la funcion:
printf(lcd_putc,"t=%lu v=%lu",tension .......
el lcd parapadea, osea muestra el dato y se manda a borrar y vuelve a mostrar el dato. Se puede eliminar el delay_ms(500) ? yo NO quiero usarlo por que en ese tiempo muerto necesito hacer otras cosas, ademas que me pone lerdo la visualizacion datos quiero que sea mas dinamica.
Ahi va el codigo completo, gracias.
Código:
-----------------------------------------------------------------------------------------
#include <18F4520.h>
#device adc=10 // Usa resolución de 10 bits
//#byte PORTB = 0X06
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP,NOBROWNOUT //ordenes para el programador
#include<lcd.c> // libreria del LCD.
#use fast_io(b)
#byte porta = 0xf80
#byte portb = 0xf81
#byte portc = 0xf82
#byte portd = 0xf83
#byte porte = 0xf84
unsigned int16 tension=0;
unsigned int16 valor;
void main()
{
lcd_init(); //inicializa lcd
setup_adc_ports(AN0); //|VSS_VREF);
setup_adc(ADC_CLOCK_DIV_32);//Tconv=64/48MHz=1.33us
setup_adc(ADC_CLOCK_INTERNAL);
// setup_adc(ADC_OFF|ADC_TAD_MUL_0);
// setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
// str_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
// setup_vref(FALSE);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
// TODO: USER CODE!!
set_tris_c(0x00);
set_adc_channel(0);
delay_us(10);
while(1){
delay_us(10);
tension=read_adc();
delay_us(10);
valor=tension/127;
lcd_putc("\f TODO OK\n"); // Escribe en el lcd
printf(lcd_putc,"t=%lu v=%lu",tension, valor); //Escribo en la segunda fila del LCD.
delay_ms(500);
PORTc=0B11111111;
switch(valor){
case 0: PORTC=0B00000000;
break;
case 1: PORTC=0B00000001;
break;
case 2: PORTC=0B00000011;
break;
case 3: PORTC=0B00000111;
break;
case 4: PORTC=0B00001111;
break;
case 5: PORTC=0B00011111;
break;
case 6: PORTC=0B00111111;
break;
case 7: PORTC=0B01111111;
break;
case 8: PORTC=0B11111111;
break;
}
}
}
Última edición por un moderador: