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

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

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

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

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

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

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы
Непрочитано 15.02.2015, 20:44  
pifa
Гражданин KAZUS.RU
 
Регистрация: 26.12.2005
Сообщений: 586
Сказал спасибо: 23
Сказали Спасибо 68 раз(а) в 45 сообщении(ях)
pifa на пути к лучшему
По умолчанию Контроль SDA и SCL на шине I2C

Atmega128 (Master), ATMega8535 (Slave), ATMega8 (Slave) связаны шиной I2C. Иногда возникает ситуация (очень редко), когда шина I2C "зависает" из-за того, что ATMega8535 садит глухо на "0" сигнал SCL. Вся остальная часть схемы на этом процессоре работает нормально. ATMega использует аппаратный I2c и работает по прерыванию. Проверял программу и ошибок, вроде, не нашел. Да и работать оно может неделю-две, а то и больше без проблем. В программе расставлены контрольные точки для Watchdog, в том числе и в программе прерывания I2C. Но они почему-то не срабатывают.
Пока решил контролировать состояние сигналов на шине I2C ("0" или "1") и проводить сброс процессора при зависании. Но как это контролировать? Пока ничего путного в голову не лезет.
Вложения:
Тип файла: zip adc_8535.zip (723 байт, 30 просмотров)
Реклама:

Последний раз редактировалось pifa; 15.02.2015 в 20:47.
pifa вне форума  
Непрочитано 15.02.2015, 20:58  
NewWriter
Почётный гражданин KAZUS.RU
 
Аватар для NewWriter
 
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,504
Сказал спасибо: 401
Сказали Спасибо 2,217 раз(а) в 1,315 сообщении(ях)
NewWriter на пути к лучшему
По умолчанию Re: Контроль SDA и SCL на шине I2C

В описании протоколоа I2C есть такая штука как арбитраж шины. И если возникает конфликт шины, то программа МК должна не забывать его обрабатывать.
NewWriter вне форума  
Непрочитано 15.02.2015, 21:15  
pifa
Гражданин KAZUS.RU
 
Регистрация: 26.12.2005
Сообщений: 586
Сказал спасибо: 23
Сказали Спасибо 68 раз(а) в 45 сообщении(ях)
pifa на пути к лучшему
По умолчанию Re: Контроль SDA и SCL на шине I2C

сейчас точно не помню, но, кажется, это касается нескольких мастеров на шине. Здесь Master один и с ним проблем нет, а на Slave он никак влиять не может, только через I2C.
pifa вне форума  
Непрочитано 15.02.2015, 23:45  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,789
Сказал спасибо: 2,912
Сказали Спасибо 3,120 раз(а) в 2,111 сообщении(ях)
ForcePoint на пути к лучшему
Стрелка Re: Контроль SDA и SCL на шине I2C

Сообщение от pifa Посмотреть сообщение
сейчас точно не помню, но, кажется, это касается нескольких мастеров на шине. Здесь Master один и с ним проблем нет, а на Slave он никак влиять не может, только через I2C.
Неважно совершенно. Согласно спецификации I2C, ведомый имеет право удерживать SCL в 0, если не успевает обрабатывать данные. Вот, несколько абзацев из фирменной доки.

Описание "TWI Control Register – TWCR. Bit 7 – TWINT: TWI Interrupt Flag":
Сообщение от mega8535
While the TWINT Flag is set, the SCL low period is stretched.

Разделы "Slave Receiver Mode" и "Slave Transmitter Mode" снабжены одинаковым абзацем:
Сообщение от mega8535
In all sleep modes other than Idle mode, the clock system to the TWI is turned off. If the TWEA bit is set, the interface can still acknowledge its own slave address or the general call address by using the Two-wire Serial Bus clock as a clock source. The part will then wake up from sleep and the TWI will hold the SCL clock low during the wake up and until the TWINT Flag is cleared (by writing it to one). Further data reception will be carried out as normal, with the AVR clocks running as normal. Observe that if the AVR is set up with a long start-up time, the SCL line may be held low for a long time, blocking other data transmissions.
ForcePoint вне форума  
Непрочитано 16.02.2015, 01:45  
pifa
Гражданин KAZUS.RU
 
Регистрация: 26.12.2005
Сообщений: 586
Сказал спасибо: 23
Сказали Спасибо 68 раз(а) в 45 сообщении(ях)
pifa на пути к лучшему
По умолчанию Re: Контроль SDA и SCL на шине I2C

Сообщение от ForcePoint Посмотреть сообщение
Неважно совершенно. Согласно спецификации I2C, ведомый имеет право удерживать SCL в 0, если не успевает обрабатывать данные.
Это я знаю. Но ведомый то работает с аппаратным TWI с прерываниями, а не устанавливается мной лично. И TWINTсбрасывается аппаратно
Вот по этому я и хочу отследить эту ситуацию и принудительно произвести RESET.
Возможно, где-то в процессе работы программы и возникает такая ситуация, но пока я её найти не могу. Программу обработки прерываний я привел. После приема одного байта команды процессор выдает 16 байт данных из буфера ADC_N.
pifa вне форума  
Непрочитано 16.02.2015, 23:12  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,789
Сказал спасибо: 2,912
Сказали Спасибо 3,120 раз(а) в 2,111 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: Контроль SDA и SCL на шине I2C

Если есть возможность куда-то выдать или где-то сохранить - вставьте проверку, не приходит-ли какое "неразобранное" состояние автомата TWI:
Код:
switch (TWSR & 0xF8){
	.....
	.....
	default:
		вот сюда
		break;
}
Скорее всего - именно так и происходит. Ведь в default: нет сброса TWINT.
ForcePoint вне форума  
Непрочитано 17.02.2015, 01:35  
pifa
Гражданин KAZUS.RU
 
Регистрация: 26.12.2005
Сообщений: 586
Сказал спасибо: 23
Сказали Спасибо 68 раз(а) в 45 сообщении(ях)
pifa на пути к лучшему
По умолчанию Re: Контроль SDA и SCL на шине I2C

Сообщение от ForcePoint Посмотреть сообщение
Скорее всего - именно так и происходит. Ведь в default: нет сброса TWINT.
Вполне возможно. В даной версии все состояния TWI не обрабатываются. Есть уже написаный код с обработкой всех состояний. Но я его даже не компилировал, не говоря уже об отладке.

Что касается проверки на "левое" состояние, то такой возможности нет. На плате с одной стороны аналоговые входы, а с другой - только TWI.
Возможно, сделать так:

Код:
switch (TWSR & 0xF8){
	.....
	.....
	default:
		TWCR = (1‹‹TWINT) | (1‹‹TWSTO);   /* переход в безадресный режим */
		break;
}
pifa вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
i2c debugger в proteus caffy Proteus 12 08.07.2020 22:52
Проблема с 24C16->I2C->PIC16F630 need help! tolyanv8 Микроконтроллеры, АЦП, память и т.д 25 08.05.2009 20:49
pic16f628 , I2C и ЕЕПРОМ 24С08 stepashka Микроконтроллеры, АЦП, память и т.д 13 07.03.2008 07:14
Нужна микросхема обработки звука суправлением по шине i2c VANDAL Аудиотехника 3 28.06.2004 17:42
проблема с записью в EEPROM Zero Микроконтроллеры, АЦП, память и т.д 0 26.04.2004 14:23


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


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