I2C шина

Тема в разделе "WASM.ELECTRONICS", создана пользователем lukash, 25 авг 2007.

  1. lukash

    lukash New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2006
    Сообщения:
    142
    Всем привет!

    Есть ARM7 – Samsung s3c44b0x
    и DS3904- небольшой элемент, который содержит в себе 3 переменных резистора(128 позиций):
    http://datasheets.maxim-ic.com/en/ds/DS3904-DS3905.pdf

    Связаны они по I2C интерфейсу.

    Проблема в том, что после START проходит некоторое время до того, как начнется передача данных, и это время каждый раз очень отличается. Т.е. все работает, но может сразу все отработать, а может секунд 10 ждать. Все сделал как в даташите описано, уже перебрал весь диапазон Tx clock’ов:)

    Там при попадании в обработчик прерывания в ком порт записываю символ, чтоб знать что попали в обработчик, а когда обработчик вызван ответом slave устройства, то дописывается еще один символ. Так, например, вот лог записи нового значения резистора:
    qqqqqqqqqqqqqqqqqqq…qqqqqqqqqqqqqqqqqqqqqeqeqe

    Так почему вызываеться столько “ненужных” прерываний??
    Смотрел JTAG отладчиком, как все регистры одинаковы во время “нужных” и “ненужных” прерываний – разница только в бите, отвечающем за ACK.
    Смотрел исходники Линукса ,так там вроде также…

    Посмотрите, кому не лень, плз.

    PS В архиве то, что на данный момент написал, правда, там чтение значения еще некорректно работает.
     
  2. lukash

    lukash New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2006
    Сообщения:
    142
    Совсем ничего??

    Хоть приблизительно, в каком направлении копать нужно?
     
  3. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    А схема включения верная?
     
  4. lukash

    lukash New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2006
    Сообщения:
    142
    Vov4ick

    Не совсем. Нет подтягивающих резисторов на SDA и SCL (по 4.7 кОм) и конденсатора. Правда, это не я собирал.

    А может быть из за этого? Тогда почему срабатывает через 10-100 раз, тогда ведь должно вообще не работать?
     
  5. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
  6. lukash

    lukash New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2006
    Сообщения:
    142
    Vov4ick
    Спасибо, посмотрел. Сейчас попробую подключить резисторы.

    Там вот что еще. Питание на Vcc (3 нога) 5 вольт, а сам проц подает при высоком уровне на SDA и SCL 3.3В. Сам элемент содержит 3 резистора - 2 из них на яркость/контраст, а через третий подключена эта 3-я нога (Vcc) к 5 вольтам. Т.е. получается можно регулировать напряжение питания этого DS3904.
    Т.е. если на линии "5В" где-то 5В, то сейчас на 3-ю ногу подается 4.9В. Пробовал менять значение этого резистора, чтоб получить 3.3В на Vcc, но оно почему-то не меняется, и напряжение то же остается. Т.е. вроде как меняется (судя из лога), но напряжение не меняется.
    А напряжение при высоком уровне на SDA и SCL обязательно должно быть равным Vcc? (в даташите и спецификации ничего по этому не написано, вроде, или это и так понятно должно быть?)
     
  7. Vov4ick

    Vov4ick Владимир

    Публикаций:
    0
    Регистрация:
    8 окт 2006
    Сообщения:
    581
    Адрес:
    МО
    У большинства логических схем высокий уровень напряжения примерно равен напряжению питания. На И2Ц выходе контроллера напряжения быть и не должно (относительно общего провода). Высокий уровень напряжения на шине обеспечивается подтягивающими резисторами, а низкий - открывающимися выходными транзисторами контроллера.
    ЗЫ А какова цель разработки, может можно сделать проще, без контроллера и микросхемы с резисторами и АЦП?
     
  8. lukash

    lukash New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2006
    Сообщения:
    142
    Vov4ick

    Ха! Работает! Теперь все стабильно - за один раз только 3 прерывания, и все сразу отрабатывает!

    Все дело было все-таки в этих подтягивающих резисторах - подключил их, и все заработало.

    Спасибо за внимание.

    С помощью этого контроллера управляется уровень контраста/яркости ЖК монитора. Выводы этих резисторов подключаются к еще двум контроллерам - к LT1615ES5 (формирование напряжения контраста) и к LTC1697EMS (питание CCFL лампы подсветки).