Підключення до контролера.
Підключити пам'ять до МК дуже просто. З обв'язки будуть потрібні тільки пара резисторів опором близько 4.7 кОм.
Для роботи з пам'яттю була розроблена бібліотека реалізує наступні функції:
i2c_init - налаштовує швидкість тактовихімпульсів йдуть по лінії SCL.
Мікросхема 24LC16 підтримує частоту до 400 кГц. Розрахувати частоту можна так:
CPU Clock frequency - частота на якій працює мікроконтролер
TWBR - число записане в однойменний регістр.
TWPS - переддільник. Значення предделителя задаються битами TWPS1 і TWPS0 в регістрі TWSR
Для контролера Atmega 32 справедлива така таблиця:
i2c_stop - відсилає стопову посилку
i2c_send - відсилає байт
i2c_recive - приймає байт
i2c_recive_last - приймає останній байт. Відмінність від попередньої функції полягає в тому, що коли байт прийнятий, мікроконтролер НЕ надсилає біт підтвердження. Якщо при прийомі останнього байта використовувати i2c_recive то лінія SDA залишиться притиснутою до землі.
Запис даних в мікросхему пам'яті
Біти A, B, C служать для вибору блоку пам'яті. Блоків пам'яті в мікросхемі 8 штук по 256 байт кожен. Відповідно біти ABC приймають значення від 000 до 111.
Для того щоб записати в мікросхему байт потрібно виконати наступну послідовність дій:
Приклад. Потрібно записати першу сторінку блоку 0.
Читання даних з мікросхеми
Із записом ніби розібралися, тепер приступимо до читання. Щоб прочитати байт потрібно зробити наступне:
Ну і наостанок прикладаю осциллограмму:
P.S. для розуміння роботи шини рекомендую ознайомиться зі статтею Di Halt'a