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

 
 
> Синхронная работа 3 АЦП AD7732
Leonmezon
сообщение Jun 1 2009, 14:29
Сообщение #1


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

Группа: Участник
Сообщений: 191
Регистрация: 11-02-09
Из: Краснодар
Пользователь №: 44 686



АЦП AD7732 имеет вывод Sync, возможно ли его использовать для синхронизации 3 АЦП?
(Примерно так: скажем удерживаем на нем 1, записываем в каждое АЦП регистры, выставляем Sync=0 и получаем по сигналу RDY результат (время преобразования на много больше времени считывания с 3 АЦП), получили заданную последовательность Sync=1, обработали полученные результаты и опять запустили новую последовательность, причем надо ли заново инициализировать АЦП и записывать регистры?).
Подобное решил, но с помощью аппаратной логики (но 8 корпусов получилось и 1 Atmega640 с 1 SPI) , хочу сделать без доп. корпусов на ATxmega128 (имеется сразу 3 SPI), т.е. каждый АЦП подключен к своему SPI порту (без объединения сигнала DIN и выбора по CS DOUT).
Есть правда еще вариант: когда все три SPI на передачу работают одновременно (а это самое главное: запустить АЦП записью в регистр), но честно не нашел (у Atmel) возможно ли чтобы по всем 3 SPI можно было одновременно послать нужную команду.

(Для Atmega 640 это решаться так: (но необходимы доп. корпуса) DIN обеденены, DOUT выбирается по CS :.

// Функция инициализации 3-х АЦП
void Init_ADC(void)
{
//Запись команд в АЦП
//Общий сброс АЦП
PORTF&=~BIT(0); // CS1 установить в 0 - выбор 1 АЦП
PORTF&=~BIT(1); // CS2 установить в 0 - выбор 2 АЦП
PORTF&=~BIT(2); // CS3 установить в 0 - выбор 3 АЦП
SPCR|=BIT(6);
NOP();
SpiWriteByte(0x00);
SpiWriteByte(0xFF);
SpiWriteByte(0xFF);
SpiWriteByte(0xFF);
SpiWriteByte(0xFF);
// Установка параметров для 3-х АЦП
// Записываем в регистры управления АЦП
// Установка регистра - время преобразования FW=125=0x7D -201 Гц примерно
SpiWriteByte(0x30);// Установка регистра для 1 канала
SpiWriteByte(0x80+0x7D);
SpiWriteByte(0x32);// Установка регистра для 2 канала
SpiWriteByte(0x80+0x7D);
// Установка режима работы -+10В и разрешение работы АЦП
SpiWriteByte(0x28);// Установка регистра для 1 канала
SpiWriteByte(0x08);
SpiWriteByte(0x2A);// Установка регистра для 2 канала
SpiWriteByte(0x08);
//Установка режима работы - непрерывный, самостоятельный, попеременный - Mode=0b00100010
SpiWriteByte(0x38);// Установка регистра для 1 канала
SpiWriteByte(0x02);
NOP();
PORTF|=BIT(0); // CS1 установить в 1
PORTF|=BIT(1); // CS2 установить в 1
PORTF|=BIT(2); // CS3 установить в 1
// режимы заданы, АЦП пока не работает
}

//По внешней команде:
#pragma interrupt_handler int0_isr:iv_INT0
void int0_isr(void)
{
//запуск АЦП на оцифровку данных
PORTF&=~BIT(0); // CS1 установить в 0 - выбор 1 АЦП
PORTF&=~BIT(1); // CS2 установить в 0 - выбор 2 АЦП
PORTF&=~BIT(2); // CS3 установить в 0 - выбор 3 АЦП
SpiWriteByte(0x38);// Установка регистра для 1 канала
SpiWriteByte(0x22); // Запуск АЦП - т.е. все 3 АЦП одновременно начнут преобразовывать.
PORTF|=BIT(0); // CS1 установить в 1
PORTF|=BIT(1); // CS2 установить в 1
PORTF|=BIT(2); // CS3 установить в 1
}

// Функция считывания результата (понятно по CS выбираем тип кристалла).
...
Go to the top of the page
 
+Quote Post



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

 


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


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