|
|
  |
Помогите добить TWI, Или он добьет меня |
|
|
|
Jan 5 2008, 23:45
|
Частый гость
 
Группа: Свой
Сообщений: 86
Регистрация: 18-09-07
Пользователь №: 30 627

|
Здравствуйте! Две AtMega, одна - Master, другая Slave. За основу взял программу на Си, предложенную, не соврать бы, haker fox'ом. Slave корябаю сам. TWI аппаратный. Проблемы: 1. При формировании Master'ом СТАРТ прерывания у Slave возникают на каждый второй запуск. Т.е., первый СТАРТ прошел (импульсы на шинах проскакивают, пробовал менять их длительнсть в широких пределах) - прерывания нет, на второй СТАРТ прерывание возникает, на третий - тишина, четвертый - есть и т.д. 2. При формировании СТАРТ код статуса Master не равен 0х08. Ну а дальше не смотрел. Добиться бы для начала хоть СТАРТ правильно делать. Помогите, кто может.
|
|
|
|
|
Jan 6 2008, 08:51
|
Участник

Группа: Validating
Сообщений: 56
Регистрация: 15-10-06
Пользователь №: 21 335

|
посмотри в сторону avrlib'а там есть кажись и то и другое (и Master и Slave) Procyon AVRlib для начала IMHO сам то .... Но она под gcc (WinAvr ) заточена .....
|
|
|
|
|
Jan 6 2008, 09:43
|
Участник

Группа: Участник
Сообщений: 21
Регистрация: 25-04-07
Пользователь №: 27 294

|
Посмотри у Атмела Application Note AVR311 и AVR315. Там есть и исходники на си для ИАРа. Для связи меги с памятью 24Схх я использовал адаптированный для avr-gcc исходник из AVR315. Все прекрасно работало.
|
|
|
|
|
Jan 6 2008, 21:45
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата 1. При формировании Master'ом СТАРТ прерывания у Slave возникают на каждый второй запуск. ... 2. При формировании СТАРТ код статуса Master не равен 0х08. Возможно тормозит слейв - держит 0 на линии, от этого у мастера не получается послать СТАРТ. Написание слейва это достаточно сложная задача, т.к. требует очень точной и быстрой обработки событий i2c шины. Неправильная обработка событий на стороне слейва может привести к "подвисанию" мастера. Я бы порекомендовал попрактиковаться вначале с готовым стандартным i2c слейвом, напр. AT24xx/DS13xx/FM31xx и т.п.. Когда мастер для стандартных слейвов у вас заработает, вы будете по крайней мере иметь представление, что должен делать ваш слейв. На момент отладки режима слейва ставьте небольшую скорость шины 1-2kHz.
|
|
|
|
|
Jan 9 2008, 21:36
|
Частый гость
 
Группа: Свой
Сообщений: 86
Регистрация: 18-09-07
Пользователь №: 30 627

|
Статус мастера не знаю, т.к. ни терминала, ни симулятора - ничего нет. Плата уже готовая. Единственное - подпаял к свободной ножке светодиод и написал - если код равен 0х08 - засветить диод. Не светится, гад. В принципе, можно перебрать хотя-бы F8 и 00 - может чего и прояснится. А прерывание у слейва срабатывает каждый второй раз - это уже железобетонно, даже если слейв в спящем режиме. Вот и хотел спросить, как же оно работает, если адрес еще не передавался? Хотя, с другой стороны, если до передачи адреса ни один из слейвов никак не откликнется, может ли мастер гарантировать, что старт отработан корректно? Не логично как-то... А на даташит уже смотреть не могу...
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|