TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: allennet en 19 de Julio de 2009, 18:36:55
-
Un alma piadosa que me ayude
hola el problema es que no me lee el ADC en la practica porque en los display muetra 00.00 aqui esta el codigo
pero en la simulacion proteus 7.5sp3 si
uso ccs 4.088
es para 0-31.72v tengo que dividir el voltage en 6.144 para obtener en 31.72v/6.144=5v voltage de refencia +
#include <16F88.h>
#device adc=10
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Osc interno clock i/o
#FUSES NOPUT //No Power Up Timer
#FUSES NOMCLR //Master Clear pin desabilitado
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No programacion bajo voltage B3 usado for I/O
#FUSES NOCPD //No proteccion area de datos
#FUSES NOWRT //Proteccion de escritura de memoria de programa
#FUSES NODEBUG //No Debug modo para ICD
#FUSES NOPROTECT //Codigo protegido from reads
#FUSES NOFCMEN //Fail-safe clock monitor disabled
#FUSES NOIESO //Internal External Switch Over mode disabled
#FUSES CCPB3
#use delay(clock=8000000)
#use fast_io(A)
#use fast_io(B)
//variables
int bcd_datos[4]={0,0,0,0};
int16 volt, temp;
//Funciones
void espera_4ms();
///PROGRAMA
void main(void)
{
disable_interrupts(GLOBAL);
set_tris_a(0x01);
set_tris_b(0x00);
setup_adc_ports(sAN0|VSS_VDD);
setup_adc(ADC_CLOCK_DIV_16);
set_adc_channel(0);
setup_vref(FALSE);
setup_spi(FALSE);
setup_timer_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_oscillator(OSC_8MHZ|OSC_INTRC);
disable_interrupts(GLOBAL);
While(TRUE)
{
output_b(bcd_datos[3]|0b00010000);
espera_4ms();
output_b(bcd_datos[2]|0b00100000);
output_bit(PIN_A1,1);
espera_4ms();
output_b(bcd_datos[1]|0b01000000);
output_bit(PIN_A1,0);
espera_4ms();
output_b(bcd_datos[0]|0b10000000);
espera_4ms();
}
}
void espera_4ms()
{
int i;
delay_ms(4);
set_adc_channel(0);
delay_us(100);
volt= (long)read_adc();
temp= (long)volt*3;
for(i=0;i<5;i++)
{
bcd_datos[ i ]=temp%10;
temp=temp/10;
}
}
este no tiene problemas con la conversion de variable tipo long a bcd funciona
:)
-
envez de retardo no le deverias dar delay disculpa ??
-
Rectifico, ya lo simule y si me manda lectura tarda en aparecer en los display pero aun asi si la manda
-
Saludos allennet
Te comento que los problemas que he tenido en ISIS en LCd ha sido por la velocidad en que responde el LCD simulado, que es más elevada que un LCD normal. Tienes que agregar retardos variados por alguna de las funciones de LCDxxx.c. Un error que me hizo perder mucho tiempo está en la forma de leer al LCD, en ISIS la lectura de las localidades del LCD es normal, pero en hadware leía mal. Esto se solucionó con un retardo dentro de la función de lectura de localidad d eLCD.
Bytes...
-
Como dije lo simula pero en la practica aparece en los display 00.00 y se queda ahi ??
-
ya lo sulucione el problema era los capacitor de ruido 100nf que no puse en los reguladores porque esta al lado de un transformador de 80VA aunque siempre es recomendable ponerlos