Изучаю работу модуля TWI. Нужна помощь.

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Изучаю работу модуля TWI. Нужна помощь.

Сообщение O-LED »

До этого времени обходился без применения i2c шины. Решил разобраться с ней и застопорился. Для начала хочу просто записать/прочитать байт в 24С128. Написал вот такой код.
СТАРТ выводится нормально, код подтверждения (0x08) приходит, потом пихаю в TWDR адрес устройства + W, и даю команду на передачу, и ничего не происходит. В регистре TWSR остаётся код 0x08, а в TWCR - 0xEC (11101100)
Подскажите где я туплю??

Код: Выделить всё

TWSR=0x00;            //
TWBR=0x20;            //  СКОРОСТЬ 100.000 КГЦ
TWCR=0b01000100;      //  ВКЛЮЧАЮ МОДУЛЬ TWI

ПОТОМ В ОСНОВНОМ ЦИКЛЕ
      
      TWCR |= 0x20;          // ВЫДАТЬ В ЛИНИЮ СТАРТ 
      TWCR |= 0x80;          // СБРАСЫВАЕМ TWINT  
      while (TWCR & 0x80 ) {}// ЖДЕМ УСТАНОВКИ ФЛАГА TWINT
      if (TWSR==0x08)        // ЕСЛИ КОД ПОДТВЕРЖДЕНИЯ РАВЕН  0x08
        {
        TWDR=0b10100000;    // ЗАГРУЖАЕМ АДРЕС УСТРОЙСТВА К КОТОРОМУ ОБРАЩАЕМСЯ (SLA+W)
        TWCR |= 0x40;       // ИНИЦИАЛИЗАЦИЯ ПЕРЕДАЧИ 
        TWCR |= 0x80;       // СБРАСЫВАЕМ TWINT  
        while(TWCR & 0x80){}// ЖДЕМ УСТАНОВКИ ФЛАГА TWINT
       }
Пробую в железе.
Изображение
KIT
Реклама
orinoko

Re: Изучаю работу модуля TWI. Нужна помощь.

Сообщение orinoko »

http://www.gaw.ru/html.cgi/txt/app/micr ... AVR315.htm
http://blog.bevice.ru/posts/716.html
http://electronics-and-mechanics.azm.su/page8.html

вот интересные статьи. Тоже пришлось писать модуль TWI для себя, используя прерывания. Но я пишу сугубо на ассемблере (вот такой я мазохист :) ), поэтому больше ничего сказать не могу. Но если всё делать по описанию, то всё получается.
Реклама
vovksextra
Открыл глаза
Сообщения: 73
Зарегистрирован: Ср июн 15, 2011 02:22:15
Контактная информация:

Re: Изучаю работу модуля TWI. Нужна помощь.

Сообщение vovksextra »

orinoko

Re: Изучаю работу модуля TWI. Нужна помощь.

Сообщение orinoko »

Кстати, хочу обратить внимание на момент с работой с EEPROM-ками. Если потом вы захотите писать/читать не по 1 байту а блоками, то учесть следующее.
1. Читать можно, начиная с любого адреса и хоть всю память до конца, при этом автоинкремент адреса будет идти автоматом.
2. Писать можно блоками не более 16 байт. Блок начинается с адреса, кратный 16. Автоинкремент идёт только внутри блока, т.е. после ячейки 15 пойдёт 0. Запись блока в память начинается после передачи СТОП. После передачи текущего блока и перед записью следующего пауза не менее 10 мс (у ряда микросхем 5 мс - в ДШ на данный тип)
Реклама
Эиком - электронные компоненты и радиодетали
vovksextra
Открыл глаза
Сообщения: 73
Зарегистрирован: Ср июн 15, 2011 02:22:15
Контактная информация:

Re: Изучаю работу модуля TWI. Нужна помощь.

Сообщение vovksextra »

orinoko писал(а):Кстати, хочу обратить внимание на момент с работой с EEPROM-ками.
Замечание очень важное. Только для протеуса длина блока не должна превышать 8 байт и пауза перед записью следующего блока должна быть не менее 50 мс.
Реклама
orinoko

Re: Изучаю работу модуля TWI. Нужна помощь.

Сообщение orinoko »

Вы знаете. лично недавно, когда проверял свою программу, видел, что Протеус прекрасно схомячил 16-байтный блок. Но я заметил, что не все епромки одного типа одинаково эмулируются (у меня использовалась 24с16). И 10 мс осилил.
Реклама
Аватара пользователя
ds1307
Грызет канифоль
Сообщения: 260
Зарегистрирован: Чт янв 13, 2011 18:54:29
Откуда: Минск

Re: Изучаю работу модуля TWI. Нужна помощь.

Сообщение ds1307 »

Я тоже изучал TWI. Использовал прерывание, мне так показалось проще. Особенно после прочтения http://easyelectronics.ru/avr-uchebnyj- ... c-i2c.html автор Di Halt.
Но для моих целей не подошло, делал типа анализатора.
Учиться, учиться, ...
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»