codevision
Код
// SPI initialization
// SPI Type: Master
// SPI Clock Rate: 1000.000 kHz
// SPI Clock Phase: Cycle Start
// SPI Clock Polarity: Low
// SPI Data Order: MSB First
SPCR=0x51;
SPSR=0x00;
ADC_Reset();
void ADC_Reset()
{
CHIP_UNSELECT_AD7730_1;
CHIP_SELECT_AD7730_1;
spi(0xFF);
spi(0xFF);
spi(0xFF);
spi(0xFF);
CHIP_UNSELECT_AD7730_1;
}
unsigned char AD7730_Read_ModeReg()
{
unsigned char mode[2];
//unsigned int iTmp;
CHIP_UNSELECT_AD7730_1;
CHIP_SELECT_AD7730_1;
delay_ms(10);
spi(0x12);// switch com to mode reg
mode[0]=spi(0xFF);//hi
mode[1]=spi(0xFF);//low
CHIP_UNSELECT_AD7730_1;
//iTmp=iTmp<<8;
//iTmp=iTmp+mode[1];
PORTD.4=1; // вкл передачу RS485;
putchar(mode[0]);
delay_ms(1);
putchar(mode[1]);
delay_ms(1);
PORTD.4=0; // вкл передачу RS485;
//return iTmp;
}
void AD7730_Write_ModeReg(unsigned int iData)
{
unsigned char mode[2];
mode[0] = (unsigned char) (iData>>8);
mode[1] = (unsigned char) (iData&0x00FF);
CHIP_SELECT_AD7730_1;
delay_us(2);
spi(0x02);// switch com to mode reg
spi(mode[0]);//
spi(mode[1]);//
CHIP_UNSELECT_AD7730_1;
delay_ms(1);
PORTD.4=1; // вкл передачу RS485;
putchar('o');
delay_ms(1);
putchar('k');
delay_ms(1);
PORTD.4=0; // вкл передачу RS485;
}
if(getchar()==0x30) // запись значения в флеш
{
AD7730_Read_ModeReg();
}
if(getchar()==0x40) // запись значения в флеш
{
AD7730_Write_ModeReg(0xB132);
PORTD.4=1;// прием по RS485
printf("good");
delay_ms(4);
PORTD.4=1;// прием по RS485
}
// SPI Type: Master
// SPI Clock Rate: 1000.000 kHz
// SPI Clock Phase: Cycle Start
// SPI Clock Polarity: Low
// SPI Data Order: MSB First
SPCR=0x51;
SPSR=0x00;
ADC_Reset();
void ADC_Reset()
{
CHIP_UNSELECT_AD7730_1;
CHIP_SELECT_AD7730_1;
spi(0xFF);
spi(0xFF);
spi(0xFF);
spi(0xFF);
CHIP_UNSELECT_AD7730_1;
}
unsigned char AD7730_Read_ModeReg()
{
unsigned char mode[2];
//unsigned int iTmp;
CHIP_UNSELECT_AD7730_1;
CHIP_SELECT_AD7730_1;
delay_ms(10);
spi(0x12);// switch com to mode reg
mode[0]=spi(0xFF);//hi
mode[1]=spi(0xFF);//low
CHIP_UNSELECT_AD7730_1;
//iTmp=iTmp<<8;
//iTmp=iTmp+mode[1];
PORTD.4=1; // вкл передачу RS485;
putchar(mode[0]);
delay_ms(1);
putchar(mode[1]);
delay_ms(1);
PORTD.4=0; // вкл передачу RS485;
//return iTmp;
}
void AD7730_Write_ModeReg(unsigned int iData)
{
unsigned char mode[2];
mode[0] = (unsigned char) (iData>>8);
mode[1] = (unsigned char) (iData&0x00FF);
CHIP_SELECT_AD7730_1;
delay_us(2);
spi(0x02);// switch com to mode reg
spi(mode[0]);//
spi(mode[1]);//
CHIP_UNSELECT_AD7730_1;
delay_ms(1);
PORTD.4=1; // вкл передачу RS485;
putchar('o');
delay_ms(1);
putchar('k');
delay_ms(1);
PORTD.4=0; // вкл передачу RS485;
}
if(getchar()==0x30) // запись значения в флеш
{
AD7730_Read_ModeReg();
}
if(getchar()==0x40) // запись значения в флеш
{
AD7730_Write_ModeReg(0xB132);
PORTD.4=1;// прием по RS485
printf("good");
delay_ms(4);
PORTD.4=1;// прием по RS485
}
соответсвено считываю значение и передаю в порт. Может кто подскажет почему же данные для чтения принимаются,а данные на запись нет.
Вот еще, что забыл указать не могу увидеть частоту на кварце. Схема в приложении только, немного изменена и изменения указаны.