|
прошу помощи по AD7794/7795, Проблема интерфейса |
|
|
|
Mar 12 2013, 15:14
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 12-03-13
Пользователь №: 75 988

|
Не получается найти общий язык с АЦПехой AD7795... =( Вроде и все последовательности с времянками соблюдаю, а простейшие ID (как признак связи) читать не получается. Выкладываю куски кода, прошу помочь найти основную ошибку. ЗЫ. Пишу на WinAVRе, чуть почистил код перед выпиской сюда... Код void ADC_SendByte( char Byte) { uint8_t mask; for (mask=0x80; mask; mask>>=1 ) { // +++++++++++++++++++++ Shift out Bits loop ADC_Set_CLK(0); _delay_us(100); ADC_Set_DIN( Byte & mask); _delay_us(100); ADC_Set_CLK(1); _delay_us(100); }; // --------------------- Shift out Bits loop ADC_Set_DIN(1);//после каждой передачи поднять Din ADC_Set_CLK(1); };
uint8_t ADC_GetByte( uint8_t *BytePtr) { uint8_t mask; uint8_t Byte = 0; for (mask=0x80; mask; mask>>=1 ) { // +++++++++++++++++++++ Shift out Bits loop ADC_Set_CLK(0); _delay_us(100); if ( ADC_Get_DOUT() ) Byte |= mask; _delay_us(100); ADC_Set_CLK(1); _delay_us(100); }; // --------------------- Shift out Bits loop ADC_Set_CLK(1); *BytePtr = Byte; return(1); };
void ADC_Init( ) { uint8_t ID; // ................................... Reset all ADCs ADC_SendByte( 0xFF ); ADC_SendByte( 0xFF ); ADC_SendByte( 0xFF); ADC_SendByte( 0xFF ); ///................................... Reset all ADCs _delay_us(500); ADC_SendByte(0x60); ADC_GetByte(&ID);
tstw("ID=",ID); //форматный вывод результата } На выходе получаю в лучщем случае 0. ЗЫ. Поиск юзал, темы читал, как вписано в ДШ делал, но не получается считать даже ID, про преобразования молчу... глянул тут http://electronix.ru/forum/index.php?showt...6&hl=ad7792 но не понял в каком смысле дернуть 32 раза? 32 раза моргнуть циклом 1/0 ногой Din?(32 еденицы, 32 нуля в итоге)
|
|
|
|
|
 |
Ответов
|
Mar 20 2013, 07:57
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 12-03-13
Пользователь №: 75 988

|
Взял номальный 2х канальный осцилл, посмотрел осцилограммы и обнаружилось, что везде затянутые фронты... Далее железная проверка и после обращения внимания на инициализацию порта найдена ошибка. После исправления в ID читается 4e, все окей... Всем спасибо огромное!!!!!!!!!!!!!!!! ЗЫ. спасибо этому миру за хорошие 2х канальные осцилы!!!=)
|
|
|
|
|
Mar 21 2013, 07:31
|
Участник

Группа: Участник
Сообщений: 32
Регистрация: 12-03-13
Пользователь №: 75 988

|
Цитата(Ruslan1 @ Mar 20 2013, 17:40)  Ну, любой осциллограф сильно жизнь упрощает. А хороший упрощает сильно. Поздравляю!  Вроде разобрался, да не совсем пока еще=( Основная проблема была как писал из-за того, что фронтов почти небыло по сему по сути Клока небыло, как и нормального Din... Сейчас возникли такие вот вопросы, чтоб уже до конца наладить общение... Опишу проблему, на плате несколько AD7794, обращаюсь к первой, получаю 0x7F, меняю CS, запрашиваю ID и получаю 0 на всех остальных... Что не так? ну и вопросы: 1) обязательно ли начинать чтение ID с проверки RDY(ухода его в 0) ? 2) во время работы с фреймом(последовательность записи и чтения) CS держать в "0" и только после завершения фрейма его подымать в "1" ? 3) после power ON(с некоторой задержкой), если не делать сброс (записывать 4*FF и ждать 500us) должно читаться 0x XF, а после ресета(4*FF ) должен считаться 0x СОБСТВЕННЫЙ ID, который будет отличен от изначального, или он останется 0xXF? СПАСИБО
|
|
|
|
|
Mar 21 2013, 09:09
|
Гуру
     
Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025

|
Цитата(StasUKR @ Mar 21 2013, 09:31)  Опишу проблему, на плате несколько AD7794, обращаюсь к первой, получаю 0x7F, меняю CS, запрашиваю ID и получаю 0 на всех остальных... Что не так? Эти остальные чем-то отличаются от первого. Или по схеме подключения, или проблема на плате, или Вы их не инициализировали после включения. Или еще что-нибудь. Кстати, на будущее (к чтению ID не относится): я сталкивался с проблемой, что иногда по непонятным мне причинам AD7792 забывал конфигурацию. Такое теоретически возможно, так как длинная помеха на MOSI во время группы клоков может быть воспринята как команда RESET. Поэтому у меня есть проверка состояния регистров, влияющих на результат измерения (читаю конфиг и сравниваю с требуемым). Но это так, нюансы программирования необслуживаемых систем (когда годами работает не выключаясь)- проверить и предусмотреть все возможное, насколько это возможно без значительных дополнительных капиталовложений  Цитата(StasUKR @ Mar 21 2013, 09:31)  1) обязательно ли начинать чтение ID с проверки RDY(ухода его в 0) ? 2) во время работы с фреймом(последовательность записи и чтения) CS держать в "0" и только после завершения фрейма его подымать в "1" ? 3) после power ON(с некоторой задержкой), если не делать сброс (записывать 4*FF и ждать 500us) должно читаться 0xXF, а после ресета(4*FF ) должен считаться 0xСОБСТВЕННЫЙ ID, который будет отличен от изначального, или он останется 0xXF? 1. Нет 2. Да. Причем соблюдайте времянки согласно даташиту (рисунки 3 и 4), как внутри фрейма так и минимальный зазор между фреймами, то есть явно выдерживайте паузы не менее обозначенных в даташите (не полагайтесь на медленность ногодрыгания, заложите nop'ы с гарантированным временем выполнения). Например, до первого клока в начале операции чтения должно пройти не менее чем t1+t2 = 80 ns. И хотя в конце фрейма CS можно снять сразу после последнего клока (t6=t11=0), но вот данные на ноге DOUT имеют право присутствовать после этого еще t6+t5 = 80 ns (время освобождения шины). 3. Если не делать сброс после подачи питания- то никто никому ничего не должен. Это нештатная работа.
|
|
|
|
Сообщений в этой теме
StasUKR прошу помощи по AD7794/7795 Mar 12 2013, 15:14 Tanya Цитата(StasUKR @ Mar 12 2013, 19:14) Не п... Mar 12 2013, 16:50 Ruslan1 Цитата(StasUKR @ Mar 12 2013, 17:14) Не п... Mar 12 2013, 19:54 StasUKR Спасибо за ответ!
Свое отношение к технике п... Mar 13 2013, 08:33  Ruslan1 Цитата(StasUKR @ Mar 13 2013, 10:33) Крис... Mar 13 2013, 21:42   StasUKR Спасибо за ответ!!!
Сейчас еду в кома... Mar 14 2013, 07:07   StasUKR Цитата(Ruslan1 @ Mar 14 2013, 00:42) Еще ... Mar 18 2013, 10:20    StasUKR Доброе время суток
Пошагово проверил передачу 0x6... Mar 19 2013, 11:53     Ruslan1 StasUKR, чудес не бывает. Разберемся.
1. Покажите... Mar 19 2013, 13:34 Plain Вы бы показали здесь актуальный вариант того, кто ... Mar 19 2013, 12:51 StasUKR
схема
Осцилограмм сейчас нет, есть только ручной ... Mar 19 2013, 14:27 Ruslan1 Цитата(StasUKR @ Mar 19 2013, 16:27) Осци... Mar 19 2013, 15:10   StasUKR сейчас получаю ID от каждого АЦП по "4Е... Mar 21 2013, 09:06 StasUKR чтение же communication register дает 0x40...
сде... Mar 21 2013, 10:36 StasUKR подымая старую тему
С АЦП работу наладил, все ко... May 31 2013, 12:04
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|