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

 
 
> прошу помощи по 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 19 2013, 14:27
Сообщение #2


Участник
*

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



Прикрепленное изображение

схема
Осцилограмм сейчас нет, есть только ручной осцилл в 1 канал, и кнопка(брейкпоинт, по нажатию перехожу к следующему брейку), так и просматривал общую картину записывая на бумаге пошагово...

пробовал CS как в режиме постоянно на земле(для 1й микросхемы "0", для другой соответственно "1"), так и опускал в начале фрейма и подымал в конце... без результатов...

Цитата
потому как 60мс это очень большой период для SPI шины, непонятно что происходит на шине в момент, когда вы видите этот DOUT)

этот вот короткий импульс на Dout через 60 мс есть всегда после включения питания...
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Mar 19 2013, 15:10
Сообщение #3


Гуру
******

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



Цитата(StasUKR @ Mar 19 2013, 16:27) *
Осцилограмм сейчас нет, есть только ручной осцилл в 1 канал, и кнопка(брейкпоинт, по нажатию перехожу к следующему брейку), так и просматривал общую картину записывая на бумаге пошагово...

Вот и отсканируйте то что на бумаге нарисовали, может уже понятно будет. Кстати, у Вас какой-нибудь симулятор МК это нарисовать может?
Тут есть всего два варианта:
1. Ошибка в программе. Приведите Ваш исходник работы с АЦП. Я так понимаю, что полностью софтовое выпиливание? Это поддается симуляции на 100% (так как грубую процессорозавимую ошибку вроде неправильно сконфигурированной ноги осциллографом бы увидели). Некорректное выпиливание битов любой софтовый симулятор покажет, тут железо не нужно.
2. Железячная ошибка типа непропая или коротыша или ошибки при разводке на плате. Тут помочь дистанционно очень тяжело (Мне однажды так удалось найти ошибку в пайке по фотографии платы, но лучше так не делать sm.gif

Но все это теория. Лучше один раз посмотреть на осциллограммы. Это самый простой и надежный путь. Найдите осциллограф или логический анализатор, скорость-то клока можно и маленькую поставить.
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   Взял номальный 2х канальный осцилл, посмотрел осци...   Mar 20 2013, 07:57
|- - Ruslan1   Цитата(StasUKR @ Mar 20 2013, 09:57) ЗЫ. ...   Mar 20 2013, 14:40
|- - StasUKR   Цитата(Ruslan1 @ Mar 20 2013, 17:40) Ну, ...   Mar 21 2013, 07:31
|- - StasUKR   сейчас получаю ID от каждого АЦП по "4Е...   Mar 21 2013, 09:06
|- - Ruslan1   Цитата(StasUKR @ Mar 21 2013, 09:31) Опиш...   Mar 21 2013, 09:09
- - 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 Текстовая версия Сейчас: 24th July 2025 - 21:02
Рейтинг@Mail.ru


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