|
|
  |
Синхронная работа 3 АЦП AD7732 |
|
|
|
Jun 1 2009, 14:29
|
Частый гость
 
Группа: Участник
Сообщений: 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 выбираем тип кристалла). ...
|
|
|
|
|
Jun 1 2009, 14:52
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 3 096
Регистрация: 16-01-06
Из: Москва
Пользователь №: 13 250

|
Ответ: да, можно. Процесс описан правильно. SPI можно использовать программный, 3 провода на прием данных, один - на выдачу. АЦП должны быть синхронизированы одним генератором.
Как модератор: не надо пользоваться большими фонтами, разными цветами - читать внимательно здесь все умеют. Так обычно шизофреники любят писать, не уподобляйтесь. Считайте это устным предупреждением.
--------------------
Не бойтесь тюрьмы, не бойтесь сумы, не бойтесь мора и глада, а бойтесь единственно только того, кто скажет - "Я знаю как надо". А. Галич.
|
|
|
|
|
Jun 1 2009, 15:38
|
Частый гость
 
Группа: Участник
Сообщений: 191
Регистрация: 11-02-09
Из: Краснодар
Пользователь №: 44 686

|
Цитата(DS @ Jun 1 2009, 18:52)  Ответ: да, можно. Процесс описан правильно. SPI можно использовать программный, 3 провода на прием данных, один - на выдачу. АЦП должны быть синхронизированы одним генератором.
Как модератор: не надо пользоваться большими фонтами, разными цветами - читать внимательно здесь все умеют. Так обычно шизофреники любят писать, не уподобляйтесь. Считайте это устным предупреждением. По шифтам - ОК (не буду). А к чему ответ относиться: к SPI atxmega или использования вывода Sync? (Просто программаня реализация - не очень хорошо, придеться очень жестко контролировать все действия на микроконтроллере. Описанная последовательность решена на atmega640 полностью аппаратно за счет доп. корпусов и SPI (используем также апаратный встроенный),я же хочу уйти от лишних корпусов используя только 3 аппаратный SPI xmega).
|
|
|
|
|
Jun 1 2009, 15:42
|
Гуру
     
Группа: СуперМодераторы
Сообщений: 3 096
Регистрация: 16-01-06
Из: Москва
Пользователь №: 13 250

|
Цитата(Leonmezon @ Jun 1 2009, 19:38)  По шифтам - ОК (не буду). А к чему ответ относиться: к SPI atxmega или использования вывода Sync? (Просто программаня реализация - не очень хорошо, придеться очень жестко контролировать все действия на микроконтроллере. Описанная последовательность решена на atmega640 полностью аппаратно за счет доп. корпусов и SPI (используем также апаратный встроенный),я же хочу уйти от лишних корпусов используя только 3 аппаратный SPI xmega). Для чтения удобнее использовать программную реализацию, чтобы вводить сразу 3 линии данных. Если Ваши аппаратные SPI можно включить, чтобы они тактировались одним клоком и запускались одновременно, то хорошо. Иначе рискуете нарваться на возможность или рассогласования работы АЦП, или потерю данных.
--------------------
Не бойтесь тюрьмы, не бойтесь сумы, не бойтесь мора и глада, а бойтесь единственно только того, кто скажет - "Я знаю как надо". А. Галич.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|