Страница 1 из 1

Как правильно послать STOP в I2C?

Добавлено: Пт июн 12, 2015 23:51:47
Jen0k
Курю ассемблер, паралельно колхожу TWI без богомерзких делеев, вводящих контроллер в кому.

Вот что наколхозил:
Изображение

Вот тут http://easyelectronics.ru/interface-bus-iic-i2c.html и тут http://www.gaw.ru/html.cgi/txt/interface/iic/iic5_2.htm говорят, что правильно как у меня один в один.

Что я делаю не так? Или это протеус глючит?

Re: Как правильно послать STOP в I2C?

Добавлено: Сб июн 13, 2015 01:21:46
Rtmip
Стоп условие сформировано, что смущает? То, что дебуггер сначала считывает SDA=0, а потом пишет, что это был стоп?

Re: Как правильно послать STOP в I2C?

Добавлено: Сб июн 13, 2015 02:05:02
Jen0k
Rtmip
Ну, да. По идее, из вывода дебага получается, что начинает передаваться второй байт и после первого его бита идет стоп, разве не так? Я не знаю, может так и должно быть?

Re: Как правильно послать STOP в I2C?

Добавлено: Сб июн 13, 2015 13:26:50
ILYAUL

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

;**************************************************
;*      ;;+Подпрограмма формирование STOP;;*      *
;**************************************************
STOP:
		outi	TWCR,(1<<TWINT)|(1<<TWSTO)|(1<<TWEN);/ Формирование режима STOP
waitTWIStop:
		lds		temp,TWCR			;= Считываем регистр управления
		sbrc	temp,TWSTO			;= Проверяем бит STOP
		rjmp	waitTWIStop			;= Не установлен - повторяем проверку
		ret

Re: Как правильно послать STOP в I2C?

Добавлено: Вс июн 14, 2015 01:14:39
Rtmip
Jen0k , все правильно, так и должно быть, иначе как вы будете ловить ошибки, в случае их появления? :idea:
А так, вы видите, что вы там "напередавали" :))

Re: Как правильно послать STOP в I2C?

Добавлено: Вс июн 14, 2015 23:16:45
Jen0k
Понял, оказывается зря панику поднял. Всем спасибо!