связь с AD7714 ногодрыгом

Обсуждаем цифровые устройства...
Ответить
Прорезались зубы
Аватара пользователя
Сообщения: 231
Зарегистрирован: Пн мар 30, 2009 15:58:32
Откуда: Украина Запорожье

Сообщение lkote68 »

Привет коллеги.
Читал даташит. Током инфы не нашел про регистры и как их считывать.
Мое железо Аtmega16 4.0Mhz
Соорудил код на основе картинок в даташите и какого то китайского сырца, но то ли тайменги не выдерживаю то ли еще что но чип не отвечает. Единственное что вижу на осциллографе реакцию DRDY падает в ноль. Вот мой код.

Код: Выделить всё

#define     adc_CLK       (PORTB.0)
#define     adc_CS        (PORTB.1)
#define     adc_DRDY      (PORTB.2)
#define     adc_DOUT      (PORTB.3)
#define     adc_DIN       (PORTB.4)
Функция инициализации

Код: Выделить всё

void My_Init()
{
    My_WritoTo_adc(0x27);
    My_WritoTo_adc(0x4f);
    My_WritoTo_adc(0x37);
    My_WritoTo_adc(0x0a0);
    My_WritoTo_adc(0x17);
    My_WritoTo_adc(0x20);
}
Функция записи

Код: Выделить всё

void My_WritoTo_adc(unsigned char byte)
{             
    int i;
    unsigned char maska;
    unsigned char sbuff;
    bit sBit;
   
    adc_CLK = 1;
    adc_CS = 0;
   
    maska = 0x80;;
    sbuff = byte;
    sBit = sbuff & maska;
   
        for(i=0;i<8;i++)
        {       
            adc_CLK = 0;
            adc_DIN = sBit;
            sbuff = sbuff >> 1;
            sBit = sbuff & maska;
            adc_CLK = 1;
        }     
    adc_CLK = 1;
    adc_CS = 1;
}
Функция чтения

Код: Выделить всё

unsigned char My_Read_adc()
{
     bit sBit;
     unsigned char result;
     while(adc_DRDY == 1){delay_ms(1);}
     
     My_WritoTo_adc(0x5c);
     
     result = 0;   
     adc_CLK = 1;
     adc_CS = 0;
     
     for(i=0;i<8;i++)
     {
       adc_CLK = 0;
       sBit = adc_DOUT;
       if(sBit)
       {
         result +=  2^(7-i);
       }
       adc_CLK = 1; 
     } 
     adc_CLK = 1;
     adc_CS = 1;             
     return result;
}

Реклама
Прорезались зубы
Аватара пользователя
Сообщения: 231
Зарегистрирован: Пн мар 30, 2009 15:58:32
Откуда: Украина Запорожье

Сообщение lkote68 »

Ошибочка в определениях.
Созреваю потихоньку.

Код: Выделить всё

#define     adc_CLK       PORTB.0  //avr output
#define     adc_CS        PORTB.1  //avr output
#define     adc_DRDY      PINB.2   //avr input
#define     adc_DIN       PORTB.3  //avr output
#define     adc_DOUT      PINB.4   //avr input
Но еще не пашет. Надо WriteTo_adc подправить.
Созрею отпишусь.
Реклама
Ответить

Вернуться в «Цифровая техника»