Mega8 I2C проблема...

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Мучитель микросхем
Аватара пользователя
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

Настраиваю TWI:

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

ldi tmp, (1<<TWINT)|(1<<TWSTA)|(1<<TWEN) ;start
out TWCR, tmp
Бит TWINT ни в какую не хочет устанавливаться.
Что в VMLAB, что в железе.
Реклама
Опытный кот
Аватара пользователя
Сообщения: 703
Зарегистрирован: Вс янв 18, 2009 21:12:49

Сообщение asteroid7 »

А зачем Вам его устанавливать?
Это флаг. Он устанавливается только аппаратно. Сбрасывается программно записью в этот бит "1", что Вы и делаете.
Реклама
Мучитель микросхем
Аватара пользователя
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

Он сбрасывается аппаратно, когда модуль TWI выполнил очередное действие. Устанавливается прогаммно. По умолчанию он сброшен, и по этому невозможно изменить состояние TWDR. Для этого его сначала надо установить.
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

Pooher писал(а):Он сбрасывается аппаратно, когда модуль TWI выполнил очередное действие. Устанавливается прогаммно. По умолчанию он сброшен, и по этому невозможно изменить состояние TWDR. Для этого его сначала надо установить.
Вы неправы, читайте внимательней описание регистра TWCR и его бит.
Реклама
Эиком - электронные компоненты и радиодетали
Мучитель микросхем
Аватара пользователя
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

Может я и не прав, но вот что выдаёт VMLAB:

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

TWI: Attempt to write TWDR register while TWINT flag is low
Реклама
Опытный кот
Аватара пользователя
Сообщения: 703
Зарегистрирован: Вс янв 18, 2009 21:12:49

Сообщение asteroid7 »

Из оф. ДШ атмела:
• Bit 7 – TWINT: TWI Interrupt Flag
This bit is set by hardware when the TWI has finished...
"TWI: Attempt to write TWDR register while TWINT flag is low" -
Попытка записи в регистр TWDR, когда его флаг TWINT установлен в низкий уровень.

Если не секрет, Вы каким справочником пользуетесь?
Реклама
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

Pooher писал(а):Может я и не прав, но вот что выдаёт VMLAB:

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

TWI: Attempt to write TWDR register while TWINT flag is low
Я ни разу не пользовался VMLAB, но думаю, что он хочет вас предупредить о том, что если вы пишете в TWDR когда TWINT равен 0, то это может привести к ошибке, поскольку возможно не выполнилась предыдущая операция на шине (старт, рестарт, передача байта или стоп). Т.е. пока флаг TWINT не установится (аппаратно) не стоит записывать в TWDR данные.
Запись же в TWCR

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

ldi tmp, (1<<TWINT)|(1<<TWSTA)|(1<<TWEN) ;start
out TWCR, tmp
вы делаете правильно т. е. с одновременным сбросом TWINT, как и рекомендует атмел.
Мучитель микросхем
Аватара пользователя
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

Спасибо огромное всем за ответы!
Разобрался. Теперь VMLABу доверия нет:)
Родился
Сообщения: 19
Зарегистрирован: Вт ноя 04, 2008 17:16:12
Откуда: Пенза

Сообщение Spy1313 »

Всем добрый день когда-то, давно приходилось разбираться с аппаратным I2C (TWI) в микроконтроллерах AVR. Хочу выложить готовые, рабочие подпрограммы для работы с ним, написанные на Ассемблере. Если кому пригодится буду только рад.
Вложения
TWI.txt
Подпрограммы для работы с модулем TWI(в режиме мастер).
(4.61 КБ) 308 скачиваний
ICQ-476243579
Контактная информация:
Мучитель микросхем
Аватара пользователя
Сообщения: 491
Зарегистрирован: Вс янв 07, 2007 01:45:48
Откуда: Российская Федерация, будь она неладна...

Сообщение Pooher »

Если не секрет, Вы каким справочником пользуетесь?
Даташитом на м8 :))
"TWI: Attempt to write TWDR register while TWINT flag is low" -
Попытка записи в регистр TWDR, когда его флаг TWINT установлен в низкий уровень.
Вопрос был не в том "ЧТО ЭТО ЗНАЧИТ?" а "ПОЧЕМУ ЭТО ТАК?"
This bit is set by hardware when the TWI has finished...
Ну я так и писал. Только вот сбрасывается он исключительно программно.
Закрыто

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