Форум

Радиолюбительский форум.

Если у Вас возникли вопросы, задавайте их на форуме.

В сети

Пользователей: 162
Из них просматривают:
Аналоги: 32. Даташиты: 24. Инструкции: 2. Новости: 1. Остальное: 1. Производители: 2. Профиль пользователя: 28. Форум: 72.
Участников: 2
Гостей: 160

Google , Яндекс , далее...
Рекорд 2375 человек онлайн установлен 26.12.2015.

Партнёры


Партнёры

Новые объявления

В настоящее время нет объявлений.

Просмотр этой темы: 

 2 анонимных пользователей
AVR STUDIO ЛАБ. ИСПОЛЬЗОВАНИЕ ИНТЕРФЕЙСА І2С.
Школьник
Зарегистрирован:
07.11.2012 1:27
Из: Киев
Сообщений: 1
Не в сети
дОБРОЕ ВРЕМЯ СУТОК) ребята нужна ваша помощь..
есть програма но сделана не до конца помогите дописать , вот условие . Буду очень благодарна если поможете!
Використання інтерфейсу І2С.
Мета: Освоїти програмні методи реалізації інтерфейсу І2С та взаємодію контролера з інтегральним датчиком температури та годинником реального часу.
Хід роботи.
1. В середовищі AVR Studio скласти та відлагодити підпрограми необхідні для програмної реалізації інтерфейсу І2С:
1.1. генератора синхроімпульсів та запису байту;
1.2. генератора синхроімпульсів та читання байту;
1.3. формування умови «старт» та «рестарт»;
1.4. формування умови прийому та передачі імпульсу підтвердження;
1.5. формування умови «стоп».
2. Скласти програму читання коду температури з цифрового датчика DS1621, апаратний адрес 0х90. Записати програму в пам'ять ЕОМ, та перевірити її роботу на лабораторному макеті. Цифровий код перетворити в 0С та відобразити на екрані, в разі потреби удосконалити програму.
3. Скласти програму котра зчитує поточну дату та час з годинника реального часу DS 1302 та відображає результат на дисплеї. Записати програму в пам'ять ЕОМ та перевірити роботу на макеті.
4. Доповнити програму п.3 можливістю корекції дати та часу; вводу нових значень дати та часу. Для наглядності роботи використати РК – дисплей, текстові пояснення та мигаючий курсор.

Короткі теоретичні відомості.
Мереж І2С передбачає використання пристроями ліній як на вхід так і на вихід; всі пристрої, що об’єднані в мережу І2С мають вихід відкритий колектор. Вони можуть видавати лише сигнал лог. 0 (підкороти на нульову шину), а сигнал лог. 1 формується за допомогою додаткових резисторів, котрі «підтягують» мережу до шини живлення. Сигнал лог. 1 присутній лише тоді, коли виводи всіх абоненти мережі знаходяться в стані «на вхід», а видача хоча б одним абонентом лог. 0 встановить нуль на шині.
Будь трансакція по інтерфейсу І2С починається з умови «Старт»: обидві лінії мережі знаходяться в стані лог. 1, це передумова старту, пристрій Майстер переводить шину SDA з 1 в 0 при одиниці на шині SLC. При програмній реалізації І2С необхідно, як мінімум, два рази перевірити наявність лог. 1 на шині SDA (передумова старту).
Всі передачі по шині виконуються 8-ми розрядними байтами, починаючи з старшого біту. Кількість байт в посилці – необмежена, однак кожен байт повинен супроводжуватись бітом підтвердження (ASC). Сигнал свідчить про успішне отримання приймачем байту та про готовність приймати наступний.
Якщо приймач не готовий отримувати наступний байт даних він не видає сигналу підтвердження, це може свідчити також про несправність приймача, його відсутність, чи помилку в передачі.
Посилка складається з байту адресу відомого пристрою, молодший біт вказує на операцію читання якщо він рівний 1, чи запису молодший біт 0; потім пристрій майстер передає адрес регістру в пристрої слейв з котрим буде запис/читання, далі рестарт для читання чи байт для запису в вибраний регістр.

ReStart: ; Перевірка можливості старту
SCL_Dwn ;перевести шину SCL в лог.0
nop
SDA_Hi ; Шину SDA в 1
nop
rcall wait5us ; Цикл затримкики
nop
SCL_Up ; Наростаючий фронт SCL->1
RS1: sbis PinB,SCL ; Стан очікування відомого пристрою?
rjmp RS1
rcall wait5us ; Цикл затримки
Start:
SDA_Lo ; SDA = 0: умова старту
rcall wait4us ; Цикл затримки
Підпрограма запису байта в відомий пристрій:
WriteByte:
sec ; Прапорець переносу C = 1
rol dbyt ; Зсув вліво C->LSB, MSB->C
rjmp bit1 ; Особлива обробка для розряду 1
WriteBit:
lsl dbyt ; Якщо dbyt пустий, ...
bit1: breq GetAck ; ... то передача завершена
SCL_Dwn ; Спадаючий фронт SCL
brcc WriteLow ; Перехід, якщо прапорець C = 0
nop ; Щоб урівняти час виконання
SDA_Hi ; Встановити SDA в 1
rjmp SCL_High
WriteLow:
SDA_Lo ; Встановити SDA в 0
rjmp SCL_High ; Щоб зрівняти тривалість такту
SCL_High:
rcall wait4us ; Цикл затримки
SCL_Up ; Спадаючий фронт SCL
WB1:sbis PinB,SCL ; Стан очікування відомого пристрою?
rjmp WB1
rcall wait5us ; Цикл затримки
rjmp WriteBit

Підпрограма читання біта підтвердження:
GetAck:
SCL_Dwn ; Спадаючий фронт SCL
SDA_Hi ; SDA – високоомний стан
rcall wait5us ; Цикл затримки
SCL_Up ; Наростаючий фронт SCL
GA1:sbis PinB,SCL ; Стан очікування відомого пристрою
rjmp GA1
cbr Flg,1<sbic PinB,SDA ; якщо SDA = 1,
sbr Flg,1<rcall wait4us ; Цикл затримки
ret

Підпрограма читання байту з відомого пристрою:
ReadByte:
ldi dbyt,1 ; Назначаємо в якості лічильника бітів
RB1:
SCL_Dwn ; спадаючий фронт SCL
rcall wait5us
SCL_Up ; Наростаючий фронт SCL
RB2:
sbis PinB,SCL ; Стан очікування відомого пристрою
rjmp RB2
rcall wait5us
clc ; Прапорець C = 0
sbic PinB,SDA ; Якщо SDA = 1
sec ;то Carry = 1
rol dbyt ; Зсуваємо прочитаний біт в байті
brcc RB1 ; Перехід, якщо читання не завершено

SetAck: ; Видача біту підтвердження
SCL_Dwn ; Спадаючий фронт SCL
sbrs Flg,Ack ;Пропускаємо наступну команду, якщо
;Ack=1
rjmp SA1 ; Перехід, якщо Ack = 0
SDA_Hi ; Встановить SDA в 1
rjmp SA2
SA1: SDA_Lo ; Встановити SDA в 0
SA2: rcall wait5us
SCL_Up ; Наростаючий фронт SCL
SA3: sbis PinB,SCL ; Стан очікування відомого пристрою
rjmp SA3
rcall wait5us
ret

Видача умови завершення трансакції:
Stopp:
SCL_Dwn ; спадаючий фронт SCL
SDA_Lo ; SDA в 0
rcall wait5us
SCL_Up ; SCL в 1
rcall wait5us
SDA_Hi ; Наростаючий фронт SCL
rcall wait5us
ret



Поиск по форуму


Расширенный поиск

Разное

Интересно

Крупную деталь можно паять и обычным паяльником (25-40 Вт), если разогреть ее, например, на газовой плите.