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

 
 
> прошу помощи по AD7794/7795, Проблема интерфейса
StasUKR
сообщение Mar 12 2013, 15:14
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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 нуля в итоге)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
StasUKR
сообщение Mar 20 2013, 07:57
Сообщение #2


Участник
*

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



Взял номальный 2х канальный осцилл, посмотрел осцилограммы и обнаружилось, что везде затянутые фронты...
Далее железная проверка и после обращения внимания на инициализацию порта найдена ошибка.
После исправления в ID читается 4e, все окей...

Всем спасибо огромное!!!!!!!!!!!!!!!!

ЗЫ. спасибо этому миру за хорошие 2х канальные осцилы!!!=) a14.gif
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Mar 20 2013, 14:40
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(StasUKR @ Mar 20 2013, 09:57) *
ЗЫ. спасибо этому миру за хорошие 2х канальные осцилы!!!=) a14.gif

Ну, любой осциллограф сильно жизнь упрощает. А хороший упрощает сильно.

Поздравляю! sm.gif
Go to the top of the page
 
+Quote Post
StasUKR
сообщение Mar 21 2013, 07:31
Сообщение #4


Участник
*

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



Цитата(Ruslan1 @ Mar 20 2013, 17:40) *
Ну, любой осциллограф сильно жизнь упрощает. А хороший упрощает сильно.

Поздравляю! sm.gif


Вроде разобрался, да не совсем пока еще=(

Основная проблема была как писал из-за того, что фронтов почти небыло по сему по сути Клока небыло, как и нормального Din...
Сейчас возникли такие вот вопросы, чтоб уже до конца наладить общение...

Опишу проблему, на плате несколько AD7794, обращаюсь к первой, получаю 0x7F, меняю CS, запрашиваю ID и получаю 0 на всех остальных...
Что не так?

ну и вопросы:

1) обязательно ли начинать чтение ID с проверки RDY(ухода его в 0) ?
2) во время работы с фреймом(последовательность записи и чтения) CS держать в "0" и только после завершения фрейма его подымать в "1" ?
3) после power ON(с некоторой задержкой), если не делать сброс (записывать 4*FF и ждать 500us) должно читаться 0xXF, а после ресета(4*FF ) должен считаться 0xСОБСТВЕННЫЙ ID, который будет отличен от изначального, или он останется 0xXF?

СПАСИБО
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Mar 21 2013, 09:09
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(StasUKR @ Mar 21 2013, 09:31) *
Опишу проблему, на плате несколько AD7794, обращаюсь к первой, получаю 0x7F, меняю CS, запрашиваю ID и получаю 0 на всех остальных...
Что не так?

Эти остальные чем-то отличаются от первого. Или по схеме подключения, или проблема на плате, или Вы их не инициализировали после включения. Или еще что-нибудь.

Кстати, на будущее (к чтению ID не относится): я сталкивался с проблемой, что иногда по непонятным мне причинам AD7792 забывал конфигурацию. Такое теоретически возможно, так как длинная помеха на MOSI во время группы клоков может быть воспринята как команда RESET. Поэтому у меня есть проверка состояния регистров, влияющих на результат измерения (читаю конфиг и сравниваю с требуемым). Но это так, нюансы программирования необслуживаемых систем (когда годами работает не выключаясь)- проверить и предусмотреть все возможное, насколько это возможно без значительных дополнительных капиталовложений sm.gif

Цитата(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. Если не делать сброс после подачи питания- то никто никому ничего не должен. Это нештатная работа.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 10:59
Рейтинг@Mail.ru


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