Hola muy buenas,
Yo estoy usando un PIC16F877, que es el homólogo al de la familia 18F que estás utilizando. Al ver tu mensaje, yo tengo unas dudas, ya que coloco en el programa el siguiente código en C, programado mediante CCS, y no consigo leer el valor de un LM35, y posteriormente visualizarlo en el display. Es correcto el código que genero para conseguir la conversion de 12 bits de mi MAX187?, porque como consigo los 13 pulsos de reloj que necesita mi conversor para convertir el dato? Haber como lo realizas, para ver si debo corregir algún error:
// Configuracion chip y compilador
#include "16F877.h"
#fuses EC_IO,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP
#use delay(clock=10000000)
#use rs232(baud=57600, xmit=PIN_C6, rcv=PIN_C7)
// Definición de pins ADC
#define MAX187_CS = 7.2
#define MAX187_SCLK = 7.3
#define MAX187_DOUT = 7.4
// Funciones
int leerMAX187(void);
void main(void)
{
// Variables
int dato;
// Configuracion de los puertos
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#use fast_io(D)
#use fast_io(E)
set_tris_a(0b00000000);
set_tris_b(0b00000000);
set_tris_c(0b00110110);
set_tris_d(0b00000000);
set_tris_e(0b00000000);
// Inicializacion del SPI
output_high(MAX187_CS); // Activo el pin CS a nivel bajo
// Inicialización del puerto SPI
setup_spi(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_16);
while(1)
{
dato = leerMAX187();
printf("Este es el valor procedente del ADC: %d
",dato);
delay_us(100);
}
return;
}
int leerMAX187(void)
{
int datoMAX187;
output_low(MAX187_CS); // Seleciono CS para decirle al ADC que va ha comenzar la adquisición de datos
delay_us(MAX187_Aquire_Time); // Espera
datoMAX187 = spi_read(0); // Adquiero el dato del MAX187
output_high(MAX187_CS); // Desabilito el ADC
return datoMAX187;
}
No se si estoy realizando lo correcto y si te servirá de ayuda.
Un saludo,