hola a todos!
estoy intentando comunicarme con el MAX1270, que es un adc de 12 bits, con rangos de entrada que se pueden configurar a traves de un micro. adjunto el cronograma que tengo que dan las hojas caracteristicas y el programa que tengo hecho y que no me funciona, ya que siempre visualizo un 0 en el display.
La señal de reloj del adc segun hojas caracteristicas debe estar entre 2mhz y 0,1mhz. tambien se puede usar el spi cone l max1270...pero no tengo ni idea y me estoy volviendo loco simplemente con el reloj externo
#include "D:\PROGRAMACION PROYECTO\PROGRAMACION\ADC\max1270-1.h"
#include "lcd.c"
#use fast_io(B)
#use fast_io(A)
/* pines
A0=sck
A1=cs
A2=din (dato de entrada del MAX1270, salida en el micro)
A3=dout (dato de salida del MAX1270, entrada en el micro)
A4=sstrb (en el programa no lo uso para nada)
*/
void main()
{
int config=0b10000001; //saldra el LSB el primero,
int i=0,j=0;
int16 dato_adq=0;
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
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_vref(FALSE);
// TODO: USER CODE!!
set_tris_a(0b00011000); //sck, cs, din pines de salida; dout,sstrb pines de entrada
output_high(PIN_A1); //configuracion inicial del puerto A cs=1
output_low(PIN_A0); //sck=0
output_low(PIN_A2); //din=0
lcd_init();
output_low(PIN_A1); //activamos cs MAX1270
delay_us(2); //esperamos tiempo activacion de sobra-->Tsdv=200n (espero 2us)
for(j=0;j<30;j++){ //para tomar 30 muestras
// This shifts 8 bits out PIN_A2, LSB first.
for(i=0;i<8;++i)
{
output_bit(PIN_A2,shift_right(&config,1,0)); //sacamos dato por PIN_A2
output_high(PIN_A0); //subimos reloj, adquiere datos el ADC
delay_us(2); //esperamos tiempo nivel alto reloj 250khz aproximadamente
output_low(PIN_A0); //bajamos reloj
delay_us(2); //esperamos tiempo nivel bajo reloj
}
for(i=0;i<5;i++)
{
output_high(PIN_A0);
delay_us(2); //esperamos tiempo nivel alto reloj
output_low(PIN_A0); //bajamos reloj
delay_us(2); //esperamos tiempo nivel bajo reloj
}
for(i=0;i<12;i++)
{
shift_left(dato_adq,2,input(PIN_A3)); //leemos datos de entrada dout
output_high(PIN_A0); //subimos reloj
delay_us(2); //esperamos tiempo nivel alto reloj
output_low(PIN_A0); //bajamos reloj
delay_us(2); //esperamos tiempo nivel bajo reloj
}
printf(lcd_putc,"\f"); //borramos display
printf(lcd_putc,"dato %u\n%Lu",j,dato_adq); //escribimos datos en el lcd
delay_ms(3000); //esperamos 3 segundos-->se toma nueva muestra
}
for(;;) {}
}
seguire probando pero la verdad que despues de 4 dias no consigo ver nada...
por cierto la parte de codigo que contiene shift_right y shift_left las saque de la ayuda del ccs o del foro (no me acuerdo muy bien) pero no llego a comprender todos los parametros.
alguien ve algun fallo entre el cronograma y el codigo o algo relevante por lo que no me funcionaria??
bueno un saludo a todos y gracias