Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 13.12.2010, 10:10  
chapa
Вид на жительство
 
Аватар для chapa
 
Регистрация: 13.05.2005
Сообщений: 386
Сказал спасибо: 9
Сказали Спасибо 44 раз(а) в 37 сообщении(ях)
chapa на пути к лучшему
По умолчанию Proteus 7.6sp0 не корректно работает I2C ( TWI ) в AVR.

ATMega16 при посылке STOP в конце пакета, STOP реально в шину проходит, а вот бит TWSTO в регистре TWCR автоматически не снимается, что должно быть. Не возможно программно отловить, что STOP выполнен. (задержку не предлагать.)
Может в позднем протеусе пойдет? кто может, проверьте, плиз.
проект в AVRStudio прикладываю, там же и файлик протеуса.

Код:
int main(void){

DDRA=255;
DDRC=0b00000000;
PORTC=0b00000011;

TWBR=32;
TWCR=(1‹‹TWINT)|(1‹‹TWSTA)|(1‹‹TWEN);				// даем START в шину
while (!(TWCR & (1‹‹TWINT))){};						// ждем выполнения STARTa
TWDR=DS1307_ADR;
TWCR=(1‹‹TWINT)|(1‹‹TWEN);							// даем адрес устройства
while (!(TWCR & (1‹‹TWINT))){};						// ждем выполнения
TWDR=0x07;
TWCR=(1‹‹TWINT)|(1‹‹TWEN);							// даем адрес памяти
while (!(TWCR & (1‹‹TWINT))){};						// ждем выполнения
TWDR=0b00010000;
TWCR=(1‹‹TWINT)|(1‹‹TWEN);							// даем данные в память
while (!(TWCR & (1‹‹TWINT))){};						// ждем выполнения
TWCR=(1‹‹TWINT)|(1‹‹TWSTO)|(1‹‹TWEN)|(1‹‹TWIE);		// даем STOP
while (TWCR & (1‹‹TWSTO)){};						// ждем выполнения STOPa
// ждать можно бесконечно, в PROTEUSe бит TWSTO автоматом не сбрасывается после выполнения STOP.

TWCR=(1‹‹TWINT)|(1‹‹TWSTA)|(1‹‹TWEN)|(1‹‹TWIE);		// даем START в шину

while (1){PORTA=0x55; PORTA=0xAA;}					// дергаем лапками			
}
Вложения:
Тип файла: rar i2c_test.rar (21.8 Кб, 79 просмотров)
Реклама:
__________________
В технике главное - кувалда. (с)
chapa вне форума  
Непрочитано 13.12.2010, 18:22  
nerozero
Вид на жительство
 
Регистрация: 26.07.2007
Сообщений: 483
Сказал спасибо: 18
Сказали Спасибо 107 раз(а) в 68 сообщении(ях)
nerozero на пути к лучшему
По умолчанию Re: Proteus 7.6sp0 не корректно работает I2C ( TWI ) в AVR.

Исходя из своего опыта, настоятельно рекомендую отлаживать I2C в железе, в свое время сильно измучался из-за кривости работы протеуса.
nerozero вне форума  
Непрочитано 13.12.2010, 22:54  
Vasiliy_72
Частый гость
 
Регистрация: 18.01.2007
Сообщений: 18
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
Vasiliy_72 на пути к лучшему
По умолчанию Re: Proteus 7.6sp0 не корректно работает I2C ( TWI ) в AVR.

В Proteus 7.7 SP2 работает.
P.S. Используйте в подтяжке шины не резисторы а pullup.
Vasiliy_72 вне форума  
Непрочитано 13.12.2010, 23:36  
pifa
Гражданин KAZUS.RU
 
Регистрация: 26.12.2005
Сообщений: 594
Сказал спасибо: 24
Сказали Спасибо 68 раз(а) в 45 сообщении(ях)
pifa на пути к лучшему
По умолчанию Re: Proteus 7.6sp0 не корректно работает I2C ( TWI ) в AVR.

В Proteus 7.5 SP3 тоже не работает, а 7.7 SP2 - нормально. На скриншотах видно, что в 7.5 после отработки состояния "СТОП" на шине I2C бит STO=1.
В 7.7 бит STO сбрасывается сразу после установки ( до отработки состояния самой шиной-см. I2C Debug)
Миниатюры:
Нажмите на изображение для увеличения
Название: I2C_7_5_SP3.gif
Просмотров: 133
Размер:	46.5 Кб
ID:	15765   Нажмите на изображение для увеличения
Название: I2C_7_7_SP2.GIF
Просмотров: 144
Размер:	450.2 Кб
ID:	15766  

Последний раз редактировалось pifa; 14.12.2010 в 03:07. Причина: исправлена ошибка
pifa вне форума  
Непрочитано 14.12.2010, 19:17  
Johni_M
Прохожий
 
Регистрация: 03.09.2007
Сообщений: 4
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Johni_M на пути к лучшему
По умолчанию Re: Proteus 7.6sp0 не корректно работает I2C ( TWI ) в AVR.

Я как-то тоже наступил на эти грабли https://kazus.ru/forums/showthread.p...046#post233046.
Johni_M вне форума  
Непрочитано 15.12.2010, 09:41  
chapa
Вид на жительство
 
Аватар для chapa
 
Регистрация: 13.05.2005
Сообщений: 386
Сказал спасибо: 9
Сказали Спасибо 44 раз(а) в 37 сообщении(ях)
chapa на пути к лучшему
По умолчанию Re: Proteus 7.6sp0 не корректно работает I2C ( TWI ) в AVR.

Спасибо всем откликнувшимся-попробовавшим.
нда в 7.7сп2 работает, причем другая крайность, биты сбрасываются раньше, чем происходит действие на шине. но это уже лучше, чем ничего.
__________________
В технике главное - кувалда. (с)
chapa вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книги dosikus Делимся опытом 11242 29.12.2015 23:45
Proteus не работает в связке с MPLAB-ом SergSit Proteus 11 11.05.2011 13:44
Загрузка прошивок в I2C EEPROM в Proteus Dok_Alex Proteus 1 21.08.2010 10:19
i2c proteus глюк? caffy Proteus 3 18.02.2010 19:57
proteus, atmega8, меняю ноги в hex - не работает digitest Микроконтроллеры, АЦП, память и т.д 3 08.10.2009 13:07


Часовой пояс GMT +4, время: 15:29.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot