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

 
 
> ATmega16 и ЦАП по SPI, Вопрос по подключению к AVR ЦАП AD7303
pev
сообщение Jul 11 2006, 10:48
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 19-09-05
Пользователь №: 8 710



Мне нужно подключить к ATmega16 ЦАП AD7303 по SPI интерфейсу.
Схему включения взял из datasheet на AD7303.
Код для МК писал в WinAVR.
Проблема возникла в том, что на выходе ЦАП появляется только первое значение, занесенное в ЦАП.
А последующие значение ничего не изменяют.
Может у кого-нибудь есть пример кода на С. Помогите пожалуйста.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 5)
SS85
сообщение Jul 11 2006, 11:34
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 44
Регистрация: 14-03-06
Пользователь №: 15 230



Пример работы с MAX522, у неё шестнадцетиразрядный формат данных.

Код
//Запись байта информации в ЦАП
void DataToDAC(unsigned char Data)
{
  PORTB |= DAC_CS;     //Разрешаем работу ЦАП

  SPI(0x23);                  //Передаем настройки ЦАП
  SPI(Data);                  //Передаем данные для ЦАП

  PORTB &= ~DAC_CS;  //Запрещаем работу ЦАП
}
Go to the top of the page
 
+Quote Post
pev
сообщение Jul 11 2006, 12:14
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 19-09-05
Пользователь №: 8 710



Цитата(SS85 @ Jul 11 2006, 17:34) *
Пример работы с MAX522, у неё шестнадцетиразрядный формат данных.

Код
//Запись байта информации в ЦАП
void DataToDAC(unsigned char Data)
{
  PORTB |= DAC_CS;     //Разрешаем работу ЦАП

  SPI(0x23);                  //Передаем настройки ЦАП
  SPI(Data);                  //Передаем данные для ЦАП

  PORTB &= ~DAC_CS;  //Запрещаем работу ЦАП
}


У AD7303 тоже шестнадцатиразрядный формат данных. Я использую такой же код, но не работает.
Может проблема в том, что вместо CS у AD7303 SYNC, который нужен, как я понимаю, для синхронизации. Пробовал не просто переключать его, а вырабатывал импульс. Эффект тотже самый.
Go to the top of the page
 
+Quote Post
Yura_K
сообщение Jul 11 2006, 15:49
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 185
Регистрация: 5-05-06
Из: Ekaterinburg, Russia
Пользователь №: 16 821



В datasheet на DAC сказано, что вовремя передачи по SPI данных сигнал SYNC, держать в низком состоянии (GND). Если у Вас точно такой же код:
Код
  PORTB |= DAC_CS;     //Разрешаем работу ЦАП
  .....
  PORTB &= ~DAC_CS;     //Разрешаем работу ЦАП

то это неверно, т.к. PORTB |= DAC_CS устанавливает высокий уровень на SYNC во время передачи, а надо наоборот:
Код
  PORTB &= ~DAC_CS;  //Синхронизация записи в ЦАП (SYNC='0')

  SPI(HI_byte);                  //Передаем настройки ЦАП
  SPI(LO_byte);                  //Передаем данные для ЦАП

  PORTB |= DAC_CS;    // (SYNC='1')


--------------------
Чудес не бывает - бывает мало знаний и опыта!
Go to the top of the page
 
+Quote Post
SpiritDance
сообщение Jul 11 2006, 17:57
Сообщение #5


Дух погибшего транзистора
****

Группа: Свой
Сообщений: 877
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 288



Сигнал ChipSelect(sync в даташите AD) в SPI на время предачи должен находится в низком состоянии. В неактивном состоянии - высокий уровень. Не забудьте с самого начала при инициализации SPI поставить его высокий уровень

Сам программил давно ЦАП от AD(щас уже не вспомню точно какой) на asm51. Диаграмму крутил ручками, так вот обнаружил одну особенность - ЦАП не воспринимал несколько старших бит. Мне пришлось выдавать несколько тактов до начала предачи информации , чтобы микросхема так сказать зацепилась. И на временной диаграмме даная фича была отрисована, при ближаешем рассмотрении. Так что смотрите очень внимательно на временные диаграммы и тщательно сверяйте с тем, что есть на самом деле.
Например какое у вас sync hold time?


--------------------
Yes, there are two paths you can go by But in the long run Theres still time to change the road youre on.
Go to the top of the page
 
+Quote Post
pev
сообщение Jul 12 2006, 10:38
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 19-09-05
Пользователь №: 8 710



Цитата(Yura_K @ Jul 11 2006, 21:49) *
В datasheet на DAC сказано, что вовремя передачи по SPI данных сигнал SYNC, держать в низком состоянии (GND). Если у Вас точно такой же код:
Код
  PORTB |= DAC_CS;     //Разрешаем работу ЦАП
  .....
  PORTB &= ~DAC_CS;     //Разрешаем работу ЦАП

то это неверно, т.к. PORTB |= DAC_CS устанавливает высокий уровень на SYNC во время передачи, а надо наоборот:
Код
  PORTB &= ~DAC_CS;  //Синхронизация записи в ЦАП (SYNC='0')

  SPI(HI_byte);                  //Передаем настройки ЦАП
  SPI(LO_byte);                  //Передаем данные для ЦАП

  PORTB |= DAC_CS;    // (SYNC='1')

Спасибо. Значения стали меняться, но возникло новая проблема. Все значения с кодом до 0xdf на выходе ЦАП 0В. А значения с кодом после 0xf0 дают на выходе ЦАП 4В. Но я думаю это из-за настройки ЦАП. (Для настройки ЦАП я передаю 0x31) Верно или нет?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 18:01
Рейтинг@Mail.ru


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