На AVR128 подцеплены 3 АЦП AD7714
соеденены по SPI.
Пытаюсь прочитать что-то из АЦП-
результат-0 или какой-то мусор.
Может у меня косяк какой-то программный и я неправильно по SPI принимаю,
но я уже перепробывал все варианты и полярности и фазы менял.
Даже програмно SPI сделал, все бестолку-не хочет АЦП работать.
Вот так соеденено :
ad7714----->AVR128
CS1<---------PB0
SCLK<-------PB1
MOSI<-------PB2
MISO------->PB3
MCLK<-------PB4
MCLK запускается от таймера с частотой 2.45 МГц
Програмно сделано так:
CODE
/* Чипселекты для 3-х АЦП */
#define CS_PORT PORTB
#define CS1_ON() (CS_PORT &= 0b11111110)
#define CS1_OFF() (CS_PORT |= 0b00000001)
/* Выход "SCLK" на порте PB1 */
#define SCLK_PORT PORTB
#define SCLK_BIT 0x02
#define NO_SCLK_BIT 0xFD
#define SCLK_0() (SCLK_PORT &= NO_SCLK_BIT)
#define SCLK_1() (SCLK_PORT |= SCLK_BIT)
/* Выход данных MOSI */
#define MOSI_PORT PORTB
#define MOSI_BIT 0x04
#define NO_MOSI_BIT 0xfb
#define MOSI_0() (MOSI_PORT &= NO_MOSI_BIT)
#define MOSI_1() (MOSI_PORT |= MOSI_BIT)
/* Вход данных MISO */
#define MISO_PORT PINB
/* Прерывания */
#define DRDY1 (PINE & 0x20)
//Запускаю SPI так:
/* Запустить SPI, мастер полярность=0 и фаза = 0, скорость 1/128 Fclk , pol=0!!! нога полярности у микросхемы на 0 */
SPCR = (1 << MSTR) | (1 << SPR1) | (1 << SPR0);
SPCR |= (1 << SPE) /*| (1 << CPOL) | (1 << CPHA)*/;
/* Запись byte в регистр */
void AD7714_writeToReg(u8 byte)
{
char i;
/* Очистим флаги */
i = SPSR;
i = SPDR;
/* чипселект */
CS1_ON();
/* Поместим данные в регистр */
SPDR = byte;
while (!(SPSR & (1 << SPIF)));
///SCLK_0();
/* Защелкнем данные */
CS1_OFF();
}
/* Прочитать 3 байта из АЦП */
void AD7714_readData(void)
{
int i;
/* wait for /DRDY*/
while (DRDY1);
/* /CS is low */
CS1_ON();
for (i = 0; i < 3; i++)
{
SPDR = 0;
while (!(SPSR & (1 << SPIF)));
pointer->c[i] = SPDR;
}
SCLK_0();
CS1_OFF();
}
Уже неделю сижу все вхолостую, перепробывал все варианты, в чем проблема непонятно.
Поставил на SPI индикаторы (в Proteus)-все заработалона ура.
Может этот SPI нужно еще как-то включить еще каким-то образом (фузиками или чем-то еще)-
в отладчике например не видно, что в регистр SPDR приходят данные, хотя на осциле все в порядке-данные отправляются.
Но приема нет.
Помогите кто может!