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

 
 
> Подключение 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
Ответов
GDI
сообщение Feb 19 2010, 13:48
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Сдается мне что вы невнимательно читали даташит. Во-первых, на стр. 30 есть алгоритм работы с АЦП, во-вторых на стр. 33 есть пример программы, правда для мотороллы, судя по всему, но логику работы можно понять оттуда. Я тоже прочитал даташит по горизонтали, но мне понятно что читать записывая в АЦП три нуля не получится, надо записать первым байтом 0х58(для чтения нулевого канала, 0х59 - для первого и т.д.). Хотя, может вы так и делаете, только нам не показали всю вашу программу?


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
inventor
сообщение Feb 24 2010, 09:11
Сообщение #3


Знающий
****

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



Цитата(GDI @ Feb 19 2010, 16:48) *
Сдается мне что вы невнимательно читали даташит. Во-первых, на стр. 30 есть алгоритм работы с АЦП, во-вторых на стр. 33 есть пример программы, правда для мотороллы, судя по всему, но логику работы можно понять оттуда. Я тоже прочитал даташит по горизонтали, но мне понятно что читать записывая в АЦП три нуля не получится, надо записать первым байтом 0х58(для чтения нулевого канала, 0х59 - для первого и т.д.). Хотя, может вы так и делаете, только нам не показали всю вашу программу?


Насколько я понимаю, для чтения одного байта из SPI я должен туда записать один байт.
Поэтому в цикле так и делаю.
Программу для моторолы я смотрел
и сделал так же.
Проблема в том, что я даже не могу прочитать содержимое регистра,
если я туда что-то записываю, я хочу получить из него записанное,
но читаю мусор.
Я даже написал SPI програмный.
И чтение делаю так - сунул БИТ, прочитал БИТ.
Но все то же самое.
И я вот думаю, может в плате какой-то косяк,
потому , что протокол очень простой, как гвоздь.
UART у меня работает, индикаторы работают, а аппаратный SPI нет :-(
Или в Атмеге нужно каким то образом как-то ДОПОЛНИТЕЛЬНО включить SPI.

Сообщение отредактировал inventor - Feb 24 2010, 09:37
Прикрепленные файлы
Прикрепленный файл  ad7714.rar ( 1.8 килобайт ) Кол-во скачиваний: 69
 
Go to the top of the page
 
+Quote Post
inventor
сообщение Feb 25 2010, 06:46
Сообщение #4


Знающий
****

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



Цитата(inventor @ Feb 24 2010, 12:11) *
Насколько я понимаю, для чтения одного байта из SPI я должен туда записать один байт.
Поэтому в цикле так и делаю.
Программу для моторолы я смотрел
и сделал так же.
Проблема в том, что я даже не могу прочитать содержимое регистра,
если я туда что-то записываю, я хочу получить из него записанное,
но читаю мусор.
Я даже написал SPI програмный.
И чтение делаю так - сунул БИТ, прочитал БИТ.
Но все то же самое.
И я вот думаю, может в плате какой-то косяк,
потому , что протокол очень простой, как гвоздь.
UART у меня работает, индикаторы работают, а аппаратный SPI нет :-(
Или в Атмеге нужно каким то образом как-то ДОПОЛНИТЕЛЬНО включить SPI.

разобрался-неправильно настроил порты
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 11th August 2025 - 11:57
Рейтинг@Mail.ru


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