Amigos buen día, recurro a ustedes en busca de ayuda con un proyecto. Estoy aprendiendo a usar el ADC de los PIC bajo MikroC, sólo que en todos los ejemplos que he encontrado (incluyendo los de MikroC), no he encontrado información detallada acerca de lo que hace cada función, y los comentarios son muy vagos. Pongo un ejemplo:
Por ejemplo, no entiendo el porque ponen dos veces TRISA, según la segunda es para hacer el PORTA como entradas, pero y la primera? Otra sería el funcionamiento y descripción de ANSEL, ANSELH, ADCON1, ADC_READ, pero sobretodo no entiendo lo que hace cuando empieza a multiplicar el adc_rd por 5000 y todas las operaciones con % que hace.
Espero me puedan ayudar, apenas estoy empezando en esto, al final después de entender este proceso quisiera hacer un medidor de temperatura básico con LM35 pero tampoco se como convertir los volts a ºC. Muchísimas gracias por su tiempo!!
Código:
char ch;
unsigned int adc_rd;
char *text;
long tlong;
void main() {
INTCON = 0; // disable all interrupts
ANSEL = 0x04; // Configure AN2 pin as analog input
TRISA = 0x04;
ANSELH = 0; // Configure other AN pins as digital I/O
Lcd_Init(&PORTB);
LCD_Cmd(LCD_CURSOR_OFF);
LCD_Cmd(LCD_CLEAR);
LCD_Out(1,1,"Temperature");
LCD_Out(2,3,"LCD Example");
ADCON1 = 0x82; // configure VDD as Vref, and analog channels
TRISA = 0xFF; // designate PORTA as input
Delay_ms(2000);
text = "voltage=";
while (1) {
adc_rd = ADC_read(2); // get ADC value from 2nd channel
LCD_Out(2,1,text); // print string a on LCD, 2nd row, 1st column
tlong = (long)adc_rd * 5000; // covert adc reading to milivolts
tlong = tlong / 1023; // 0..1023 -> 0-5000mV
ch = tlong / 1000; // extract volts digit
LCD_Chr(2,9,48+ch); // write ASCII digit at 2nd row, 9th column
LCD_Chr_CP('.');
ch = (tlong / 100) % 10; // extract 0.1 volts digit
LCD_Chr_CP(48+ch); // write ASCII digit at cursor point
ch = (tlong / 10) % 10; // extract 0.01 volts digit
LCD_Chr_CP(48+ch); // write ASCII digit at cursor point
ch = tlong % 10; // extract 0.001 volts digit
LCD_Chr_CP(48+ch); // write ASCII digit at cursor point
LCD_Chr_CP('V');
Delay_ms(1);
}
}//FIN
Por ejemplo, no entiendo el porque ponen dos veces TRISA, según la segunda es para hacer el PORTA como entradas, pero y la primera? Otra sería el funcionamiento y descripción de ANSEL, ANSELH, ADCON1, ADC_READ, pero sobretodo no entiendo lo que hace cuando empieza a multiplicar el adc_rd por 5000 y todas las operaciones con % que hace.
Espero me puedan ayudar, apenas estoy empezando en esto, al final después de entender este proceso quisiera hacer un medidor de temperatura básico con LM35 pero tampoco se como convertir los volts a ºC. Muchísimas gracias por su tiempo!!