Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AD7730->atmega32, читает все регистры,в них не пишет.
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Метрология, датчики, измерительная техника
grek81
Добрый день. Мучаюсь с AD7730 ни как не получается залить данные и увидеть их изменения в регистрах. Читаются значения по умолчанию,а прописать ничего не могу. Протокол SPI роде как работает смотрел осцилографом все сигналы на мести и чистые. По сути AD7730 принимает команды на чтение и выдает данные. А команды на запись не принимает. Пробывал подвешивать входа на землю и на питание через резистор ничего не помогает.
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
             }


соответсвено считываю значение и передаю в порт. Может кто подскажет почему же данные для чтения принимаются,а данные на запись нет.
Вот еще, что забыл указать не могу увидеть частоту на кварце. Схема в приложении только, немного изменена и изменения указаны.
grek81
Все работает, проблема в питании пока не разобрался почему, но почему садится напряжение.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.