Activa ChipSelect;
EscribeSPI(Dato1);
EscribeSPI(Dato2);
...
EscribeSPI(DatoN);
Desactiva ChipSelect;También tienes que ver si tu AD420 recibe el dato en Clock positivo o en clock negativo. Esta rutina está preparada para el segundo caso, por eso pongo SPI_CLK=0 cuando el dato está cargado.#include <16F818.h> //PIC a utilizar
#fuses XT //configuracion de fusibles
#fuses NOWDT
#fuses PROTECT
#fuses PUT
#fuses NOBROWNOUT
#fuses MCLR
#fuses NOLVP
#fuses CPD
#fuses NOWRT
#fuses NODEBUG
#use delay (clock=4000000)
#use fast_io(a)
#define LED PIN_A1 //LED de funcionamiento
#define AD420_LATCH PIN_B3
void main(void)
{
int16 val=0;
disable_interrupts(GLOBAL); //deshabilitar interrupciones
disable_interrupts(INT_EEPROM); //deshabilitar interrupcion EEPROM
disable_interrupts(INT_RB); //deshabilitar interrupcion portb
disable_interrupts(INT_TIMER0); //deshabilitar interrupcion del timer0
disable_interrupts(INT_TIMER1); //deshabilitar interrupcion timer1
disable_interrupts(INT_TIMER2); //deshabilitar interrupcion timer2
disable_interrupts(INT_CCP1); //deshabilitar interrupcion CCP1
disable_interrupts(INT_SSP); //deshabilitar interrupcion I2C / SPI
disable_interrupts(INT_AD); //deshabilitar interrupcion ADC
disable_interrupts(INT_EXT); //deshabilitar interrupcion RB0
setup_TIMER_0(RTCC_INTERNAL | RTCC_DIV_1); //preescaler=1
setup_TIMER_1(T1_DISABLED); //desactivar timer1
setup_TIMER_2(T2_DIV_BY_1,255,16); //preescaler=16
setup_CCP1(CCP_OFF); //desactivar modulo captura
setup_SPI(spi_master | SPI_L_TO_H | SPI_CLK_DIV_16);
setup_ADC_PORTS(AN0); //entradas analogicas
setup_ADC(ADC_CLOCK_INTERNAL); //activar modulo ADC
set_tris_a(0b00000000); //porta todo como salida
set_tris_b(0b00000010);
ext_int_edge(H_TO_L); //interrupcion externa en flanco de bajada
port_b_pullups(TRUE); //pullups portb activadas
enable_interrupts(GLOBAL); //interrupciones activadas
delay_ms(1000);
do
{
output_toggle(LED);
output_low(AD420_LATCH);
spi_write(val >> 8); // Send msb
spi_write(val & 0xFF); // Send lsb
output_high(AD420_LATCH);
delay_ms(1000);
val=val+500;
}while(TRUE);
}
#include <16F818.h> //PIC a utilizar
#fuses XT //configuracion de fusibles
#fuses NOWDT
#fuses PROTECT
#fuses PUT
#fuses NOBROWNOUT
#fuses MCLR
#fuses NOLVP
#fuses CPD
#fuses NOWRT
#fuses NODEBUG
#use delay (clock=4000000)
#use fast_io(a)
#define LED PIN_A1 //LED de funcionamiento
#define AD420_LATCH PIN_B3
void main(void)
{
int16 val=0;
disable_interrupts(GLOBAL); //deshabilitar interrupciones
disable_interrupts(INT_EEPROM); //deshabilitar interrupcion EEPROM
disable_interrupts(INT_RB); //deshabilitar interrupcion portb
disable_interrupts(INT_TIMER0); //deshabilitar interrupcion del timer0
disable_interrupts(INT_TIMER1); //deshabilitar interrupcion timer1
disable_interrupts(INT_TIMER2); //deshabilitar interrupcion timer2
disable_interrupts(INT_CCP1); //deshabilitar interrupcion CCP1
disable_interrupts(INT_SSP); //deshabilitar interrupcion I2C / SPI
disable_interrupts(INT_AD); //deshabilitar interrupcion ADC
disable_interrupts(INT_EXT); //deshabilitar interrupcion RB0
setup_TIMER_0(RTCC_INTERNAL | RTCC_DIV_1); //preescaler=1
setup_TIMER_1(T1_DISABLED); //desactivar timer1
setup_TIMER_2(T2_DIV_BY_1,255,16); //preescaler=16
setup_CCP1(CCP_OFF); //desactivar modulo captura
setup_SPI(SPI_MASTER | SPI_L_TO_H | SPI_CLK_DIV_16);
setup_ADC_PORTS(AN0); //entradas analogicas
setup_ADC(ADC_CLOCK_INTERNAL); //activar modulo ADC
set_tris_a(0b00000000); //porta todo como salida
set_tris_b(0b00000010);
ext_int_edge(H_TO_L); //interrupcion externa en flanco de bajada
port_b_pullups(TRUE); //pullups portb activadas
enable_interrupts(GLOBAL); //interrupciones activadas
delay_ms(1000);
output_low(LED);
do
{
output_toggle(LED);
output_low(AD420_LATCH);
spi_write(val >> 8); // Send msb
spi_write(val & 0xFF); // Send lsb
output_high(AD420_LATCH);
val=65535;
delay_ms(8000);
}while(TRUE);
}