Форум программистов, компьютерный форум, киберфорум
Наши страницы

Микроконтроллеры Atmega AVR

Войти
Регистрация
Восстановить пароль
 
wf778899
0 / 0 / 0
Регистрация: 10.07.2014
Сообщений: 10
#1

Модуль TWI - Atmega AVR микроконтроллер

24.10.2013, 14:15. Просмотров 2778. Ответов 4
Метки нет (Все метки)

Привет всем. Копаюсь с TWI в ATmega8, с этим модулем опыта у меня нет, поэтому закопался в начале. Работа с модулем, как я понимаю, основана на прерываниях и на считывании TWSR после каждого события. Если прерывания по какой-то причине невозможны, надо постоянно следить за флагом прерывания TWINT. Что-то ничего у меня не вышло. Следить получилось только за регистром состояния. Работаю в IARе 5.51. Ниже - примитивные наброски:

#ymstude <iom8.h>
#ymstude <intrinsics.h>
#defyme ENABLE_BIT_DEFINITIONS

int main()
{
DDRC = 0xFF;
DDRB = 0xFF;

//Задаём битрейт
TWBR = 0x10;
TWSR &= 0xF8;

//Формируем СТАРТ
TWCR = (1<<5)|(1<<7)|(1<<0)|(1<<2); //Установка TWSTA, TWIE, TWEN, сброс TWINT
while(TWSR != 0x08); //Ждём статус "СТАРТ сформирован"

//Передаём команду
TWDR = 0x90;
TWCR = (1<<7)|(1<<0)|(1<<2); //Установка TWIE, TWEN, сброс TWINT
while(TWSR != 0x18); //Ждём статус "Команда передана"

//?????????????????

while(1);

return 0;
}

Старт у меня формируется, а вот с командой ничего не получается. В циклах я слежу за реггистром состояния будучи уверен, что появится именно то состояние TWSR, которое указано в условии. Покажите кто-нибудь, пожалуйста, как здесь правильно работать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2013, 14:15
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Модуль TWI (Atmega AVR микроконтроллер):

TWI - Atmega AVR микроконтроллер
Всем привет) Подскажите, пожалуйста, ошибку. Сразу скажу, сам искал, читал, ни чего не нашел, только на Вас надежда))) Пишу в Atmel Studio6...

SPI v.s. TWI - Atmega AVR микроконтроллер
Задумался об организации совместной работы 2-х платок на атмегах-сестрах (48 и 168). Рассматривал сначала самое тупое взаимодействие: через...

Stop состояние TWI - Atmega AVR микроконтроллер
Ребята, а можно ли как-то без введения флага определить что произошло стоп-состояние шины TWI? Может какие-то комбинации TWSR и TWCR? Может...

CodeVisionAVR функции TWI - Atmega AVR микроконтроллер
Здравствуйте! Есть у кого нибудь, или, если знаете, где взять подскажите ссылку на описание функций TWI в CodeVisionAVR. Это более менее...

TWI не хочет работать - Atmega AVR микроконтроллер
ATmego328p, код следующий. После старта он по идее должен выключить лампочку. #defyme F_CPU 8000000UL #ymstude &lt;avr/io.h&gt; ...

Atmega8 & TWI/I2C - Atmega AVR микроконтроллер
День добрый. Уже пару часов ковыряюсь, не могу разобраться, почему не заводится TWI? Линии подтянуты резисторами в 10К. Слейвом сидит...

4
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
24.10.2013, 14:33 #2
Цитата Сообщение от wf778899
Копаюсь с TWI
... ...
Покажите кто-нибудь, пожалуйста, как здесь правильно работать?
"Правильно работать" - это поиск по форуму ;-)
Вот этой и этой темы imho достаточно, чтобы запустить TWI на любой ATmega.
0
wf778899
0 / 0 / 0
Регистрация: 10.07.2014
Сообщений: 10
24.10.2013, 15:48 #3
Не помогло. Вопрос у меня в другом - почему после формирования СТАРТА TWI уже ни на что не реагирует? Пробовал работать по прерываниям - всё прекрасно (почти). Но мне нужно написать код без прерываний. Может кто-нибудь показать, как тут следить за флагом и за состоянием TWSR?
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
24.10.2013, 16:23 #4
Цитата Сообщение от wf778899
Не помогло. Вопрос у меня в другом - почему после формирования СТАРТА TWI уже ни на что не реагирует? Пробовал работать по прерываниям - всё прекрасно (почти). Но мне нужно написать код без прерываний. Может кто-нибудь показать, как тут следить за флагом и за состоянием TWSR?
По ссылкам есть примеры кода без прерываний, и те примеры рабочие.
0
OtixPM
0 / 0 / 0
Регистрация: 11.01.2013
Сообщений: 5,483
24.10.2013, 16:29 #5
Цитата Сообщение от wf778899
В циклах я слежу за реггистром состояния будучи уверен, что появится именно то состояние TWSR, которое указано в условии.
Кстати, в TWSR битов состояния TWI-машины всего пять (старшие). Как правило, TWSR после чтения маскируют по 0xF8.
0
24.10.2013, 16:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.10.2013, 16:29
Привет! Вот еще темы с ответами:

Не проходит инициализация TWI - Atmega AVR микроконтроллер
Добрый день! Мучаюсь с TWI Хочу в учебных целях подключить внешнюю память типа 24C64a Взял текст программы из уроков DI-Halta. ...

Не запускается аппаратный TWI в ATmega128. - Atmega AVR микроконтроллер
Пытаюсь соединить две ATmega128 через TWI. Что бы я ни делал, интерфейс никак не реагирует. Смотрю на осциллографе линии SCL и SDA -...

I2C(TWI)+FreeRTOS+mega328 - Atmega AVR микроконтроллер
Добрый день, уважаемые коллеги! Прошу помощи в решении возникшей проблемы. Есть необходимость работать с шиной I2C из-под FreeRTOS. ...

TWI зависает при чтении - Atmega AVR микроконтроллер
Общаюсь с BMP085. При чтении транзакция зависает (постоянно SCL=1, SDA=0): &lt;Изображение удалено&gt; На рисунке: START, SLA+W...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru