реклама на сайте
подробности

 
 
> Подключение AD7714 + Atmega128, Не хочет работать АЦП, Do Help me please!!!
inventor
сообщение Feb 18 2010, 14:55
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Бьюсь уже неделю над такой проблемой-
На 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 приходят данные, хотя на осциле все в порядке-данные отправляются.
Но приема нет.
Помогите кто может!

Сообщение отредактировал IgorKossak - Feb 2 2012, 15:05
Причина редактирования: [codebox]!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
AHTOXA
сообщение Feb 18 2010, 18:18
Сообщение #2


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Не уверен насчёт меги-128, но помнится мне, что для нормальной работы SPI в режиме "мастер" нога SS либо должна быть сконфигурирована как выход, либо притянута к единице.


----

Да, посмотрел даташит:

Цитата
When the SPI is configured as a master (MSTR in SPCR is set), the user can determine
the direction of the SS pin.
If SS is configured as an output, the pin is a general output pin which does not affect the
SPI system. Typically, the pin will be driving the SS pin of the SPI slave.
If SS is configured as an input, it must be held high to ensure Master SPI operation. If
the SS pin is driven low by peripheral circuitry when the SPI is configured as a master
with the SS pin defined as an input, the SPI system interprets this as another master
selecting the SPI as a slave and starting to send data to it.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
inventor
сообщение Feb 19 2010, 05:56
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Цитата(AHTOXA @ Feb 18 2010, 21:18) *
Не уверен насчёт меги-128, но помнится мне, что для нормальной работы SPI в режиме "мастер" нога SS либо должна быть сконфигурирована как выход, либо притянута к единице.


----

Да, посмотрел даташит:

В общем у меня так и сделано
я сам выставляю CS
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 21:57
Рейтинг@Mail.ru


Страница сгенерированна за 0.01381 секунд с 7
ELECTRONIX ©2004-2016