TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: -Nem- en 19 de Octubre de 2010, 02:27:20
-
Holas.
tengo un problema con el proteus q hasta ahora no he podido solucionar. estoy haciendo un programa (CCS) para comunicación RS232 que hace q el PIC16F877A transmita lo que recibe por TX, y si recibe un 'a' manda el PIN_B0 a '1'.
el problema es q siempre q simulo con proteus me aparece el siguiente warning:
(PIC16 ADC)PC=0x0072 ADC conversion clock period (1e-07) is possibly invalid for device clock frequency
leyendo por ahi, encontre q el tiempo de conversion (TAD) debe ser minimo de 1.6us
por ejemplo para un cristal de 20Mhz (Tosc=50ns), asi q debo de configurar a 32Tosc (1.6us) es decir ADCS1=1 ADCS0=0.
yo uso un cristal de 40Mhz, asi q con 32Tosc no me es suficiente, que puedo hacer??? :(
ya intente omitir el warning y grabar mi programa al PIC, y aunque puedo apreciar q se envia y recibe data mediante LED's, los caracteres q aparecen en el hyperterminal no corresponden a los q pulso en el teclado, en lugar de ello aparecen caracteres extraños "|||||||" :shock:
Este es mi codigo:
//Archivo H del microcontrolador
#INCLUDE <16F877A.h>
//Configuración de trabajo general
#FUSES HS,NOWDT,NOPROTECT,NOLVP
#USE delay(clock=40000000)
#USE rs232(baud=9600, xmit=pin_c6, rcv=pin_c7)
#USE standard_io(B)
int q=0;
void MCU_init(){
setup_adc(ADC_CLOCK_DIV_32);
enable_interrupts(GLOBAL);
enable_interrupts(INT_RDA);
}
//Recepción Serial
#int_RDA
RDA_isr(){
q = getc();
}
void main(){
int i,j;
MCU_init();
while(1){
j = q=='a'? 1 : 0;
putc(q);
output_bit(PIN_B0,j);
delay_ms(500);
}
}
-
No sé como será en el 16F877A pero en el 16F877 la máxima frecuencia del cristal es de 20MHz.
Y de última podés configurar el ADC para que use su propio oscilador interno.
-
No sé como será en el 16F877A pero en el 16F877 la máxima frecuencia del cristal es de 20MHz.
Lo mismo para el 16F877 ;-)
-
No sé como será en el 16F877A pero en el 16F877 la máxima frecuencia del cristal es de 20MHz.
Lo mismo para el 16F877 ;-)
Lo imaginaba, pero como no tenía el datasheet a mano preferí no aventurarme
-
GRACIAS. :-/
ya pude ejecutar correctamente el programa. Tiene razon el PIC16F877A soporta hasta 20MHz como max (la prox leo con + detenimiento el Datasheet) :oops:.
aun asi aun me queda la duda de xq el proteus me sigue arrojando el mismo warning. :5]
Salu2.
-
Tal vez sea algún error del Proteus.
No veo en tu programa donde hagas uso del ADC. Tal vez el proteus te da el warning erroneamente al nunca hacer uso del ADC.