|
DS1307Z +AtMega128, Нет старта на TWI |
|
|
|
Jul 11 2011, 20:44
|
Частый гость
 
Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828

|
Здравствуйте! Столкнулся с проблемой. Модуль TWI отказывается инициировать на шине состояние START. Точнее я не знаю, может оно и создается, но только после установки флага TWINT в TWCR в регистр TWSR почему то загружается значение (0xEC) вместо обещанного (0x08). Я в шоке. Чего я только не пробовал. Сразу приведу функцию установки состояния START. Если кто сталкивался с подобной проблемой подскажите в чём тут дело? Код //Инициализация i2c шины. TWBR |= 1<<TWBR6|1<<TWBR5|1<<TWBR1|1<<TWBR0; //Резонатор 14.7456МГц. TWSR &= (~((1<<TWPS1)|(1<<TWPS0))); TWAR |= 1<<TWA0|1<<TWA1|1<<TWA3|1<<TWA5; //задано произвольно просто чтоб было. МК - мастер. TWAR &= (~((1<<TWGCE))); //запрещаю всякие там общие вызовы моего МК. DDRD |= 1<<PD0|1<<PD1; //SDA и SCL делаю как выходы + PullAp. PORTD |= 1<<PD0|1<<PD1;
//************************************************* //А это сама функция старт i2c соединения //************************************************* static unsigned char i2c_start(void) { TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN); //Устанавливается состояние START while (!(TWCR & (1<<TWINT))); //Задержка до установки флага TWINT. Он означает что //состояние START было передано if ((TWSR & 0xF8) == START) //Проверяем значение в TWI Status Register {WriteDisplay(0x30); return(0);} else {WriteDisplay(0x31); WriteIndLed(TWSR); return(1);} } Почему то после прогона МК этой функции светодиоды зажигаются так, что это соответствует коду (0xEC). Значение "0" на дисплее не видел ни разу хоть умри. Кстати для чистоты эксперимента выпаял с шины все девайсы кроме DS1307Z - часы.
Сообщение отредактировал IgorKossak - Jul 12 2011, 07:29
Причина редактирования: Оформление кода
|
|
|
|
|
 |
Ответов
(30 - 44)
|
Jul 28 2011, 09:47
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата(MaksimYrievich @ Jul 28 2011, 13:24)  Теперь на счет отладчика, использую AvrStudio4.16, Build 628. Я имел ввиду вот это (фото). Симмуляторы естесвеннно не рассматриваются. И еще - в последнем Вашем коде, в *****_IniT.С Код DDRD |= 1<<PD0|1<<PD1; PORTD |= 1<<PD0|1<<PD1; Стоят не закомментированы , и так как приобращении к порту PORTD допущена ошибка доллжны быть PB0 и PB1, то очень возможно , что компилятор прописал 0 по обоим выходам
Эскизы прикрепленных изображений
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Jul 28 2011, 11:20
|
Частый гость
 
Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828

|
Попробовал ваш код, ILYAUL. То же самое высвечивается. Код из темпа или как я вас понял из TWSR имеет значение $37. Ноги у DS1307 посадил на дорожки шины. Изменений нет. Во вложении ваш код, который я немножечко под свой девайс модифицировал, для вывода значения из TWSR. Цитата(ILYAUL @ Jul 28 2011, 13:47)  Я имел ввиду вот это (фото). Симмуляторы естесвеннно не рассматриваются. Просто симулятор без двойки. Цитата И еще - в последнем Вашем коде, в *****_IniT.С Код DDRD |= 1<<PD0|1<<PD1; PORTD |= 1<<PD0|1<<PD1; Стоят не закомментированы , и так как приобращении к порту PORTD допущена ошибка доллжны быть PB0 и PB1, то очень возможно , что компилятор прописал 0 по обоим выходам Не понимаю в чём ошибка?
Прикрепленные файлы
test.rar ( 10.04 килобайт )
Кол-во скачиваний: 12
|
|
|
|
|
Jul 28 2011, 13:09
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата(MaksimYrievich @ Jul 28 2011, 15:20)  Не понимаю в чём ошибка? Рука дрогнула- в DDRD Код DDRD |= 1<<PD0|1<<PD1 ; Должно быть согласно m64def.incКод ; **** DDRD **** .equ DDD7 = 7 .equ DDD6 = 6 .equ DDD5 = 5 .equ DDD4 = 4 .equ DDD3 = 3 .equ DDD2 = 2 .equ DDD1 = 1 .equ DDD0 = 0 Код DDRD |= 1<<DDD0|1<<DDD1 но возможно компил C и так понял , что Вы хотели Но так как этот инит не имеет ровным счётом никакого значения для I2C- то и по фиг Итак шина у Вас не работает и похоже на физ. уровне Причин может быть несколько 1. Прозвонить SCL и SDA от проца к DS - есть ли контакт и совпадают ли по названиям шины между собой 2. Прсто подать питание на схему и посмотреть , есть ли на этих шинах уровень лог.1 - соответсвенно он зависит от питания Вашей схемы. 3. Не работает кварц DS1307 (32 768) - у MAXIMа есть аппликуха по данному поводу 4. По каким-то причинам она не тянет 100 khz в коде снизьте до 50000 в test.inc - проверьте Я так понял из кода , что информацию Вы выводите на 8 LED , а что делает портВ?
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Jul 28 2011, 13:33
|
Частый гость
 
Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828

|
Заменил ещё раз микросхему код стал равен $38. сейчас буду пробовать снизить скорость Можно DS1307 Выпаять а EEPROMку посадить на шину. Снижение скорости ничего не дало ошибку с кодом про DDD признаю, исправил.
Сообщение отредактировал MaksimYrievich - Jul 28 2011, 13:40
Эскизы прикрепленных изображений
|
|
|
|
|
Jul 28 2011, 13:48
|
Частый гость
 
Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828

|
Цитата(ILYAUL @ Jul 28 2011, 17:09)  Я так понял из кода , что информацию Вы выводите на 8 LED , а что делает портВ? Защелкивает в регистре защёлке код с восьмиразрядной шины данных что бы горели светодиоды
|
|
|
|
|
Jul 28 2011, 13:54
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата(MaksimYrievich @ Jul 28 2011, 17:48)  Защелкивает в регистре защёлке код с восьмиразрядной шины данных что бы горели светодиоды А сэтими , что? 1. Прозвонить SCL и SDA от проца к DS - есть ли контакт и совпадают ли по названиям шины между собой 2. Прсто подать питание на схему и посмотреть , есть ли на этих шинах уровень лог.1 - соответсвенно он зависит от питания Вашей схемы. и можете нарисовать подкл. светодиодов
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Jul 28 2011, 17:51
|
Частый гость
 
Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828

|
Цитата(ILYAUL @ Jul 28 2011, 17:54)  А сэтими , что?
1. Прозвонить SCL и SDA от проца к DS - есть ли контакт и совпадают ли по названиям шины между собой 2. Прсто подать питание на схему и посмотреть , есть ли на этих шинах уровень лог.1 - соответсвенно он зависит от питания Вашей схемы. и можете нарисовать подкл. светодиодов 1. Здесь 100%-ный верняк. 2. На шинах, обеих, постоянно висит +5вольт, образованных через внешние резисторы 4,7кОм. 3. Схема подключения светодиодов в приложении. Вобщем отключил DS1307 от шины подключил 24LC512 к шине. Изменений нет прошивка вашим кодом ну + моя функция вывода, но она, сами понимаете, ничего не меняет принципиально в Вашем коде. Без маски 0xF8 код в TWSR =0x3B. Соответственно после маски, то есть 0x38.
Сообщение отредактировал MaksimYrievich - Jul 28 2011, 17:53
Эскизы прикрепленных изображений
|
|
|
|
|
Jul 28 2011, 19:01
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата(MaksimYrievich @ Jul 28 2011, 15:20)  Просто симулятор без двойки. Я чего-то не могу понять, Вы используете симмулятор т.е. связи через специальные отладочные устройства с SDUDIO у Вас нет. Они перечислены в том скрине который я Вам выкладывал , когда написал - Цитата .... не симмуляторы Симмулятор - в отличии от эммуляторов работает в ручную т.е. каждый бит можно установить и сбросить просто нажав мышкой на этот бит в окне I/O View в том числе и выставить необходимый код 0x08. Зная логику своей программы , Вы можете только проверить ее исполнение выставляя необходимые условия в РУЧНУЮ. C отладочным устройством - в studio передается реальный код , полученный процессором - так вот есть у Вас хоть одно отладочное устройсво из приведенного мною списка?
Эскизы прикрепленных изображений
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Jul 28 2011, 19:44
|
Частый гость
 
Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828

|
Цитата(ILYAUL @ Jul 28 2011, 23:01)  C отладочным устройством - в studio передается реальный код , полученный процессором - так вот есть у Вас хоть одно отладочное устройсво из приведенного мною списка? К сожалению нет таких устройств
|
|
|
|
|
Jul 28 2011, 19:47
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата(MaksimYrievich @ Jul 28 2011, 23:44)  К сожалению нет таких устройств А программатор есть? Очень возможно , что всё давно и прекрасно работает , но отладчик НЕОБХОДИМО купить ( понятно , что придётся потратиться , но оно того стоит (время , нервов и сил экономит - мама не горюй) - всё станет значительно проще , я вон код из другой темы написал и отладил за полчаса
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Jul 28 2011, 19:53
|
Частый гость
 
Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828

|
Цитата(ILYAUL @ Jul 28 2011, 23:47)  А программатор есть? Очень возможно , что всё давно и прекрасно работает , но отладчик НЕОБХОДИМО купить ( понятно , что придётся потратиться , но оно того стоит (время , нервов и сил экономит - мама не горюй) - всё станет значительно проще , я вон код из другой темы написал и отладил за полчаса Программатор есть конечно. А по поводу что всё работает согласиться не могу с вами. А о каком отладчике идёт речь и вкратце что он делает и по каким проводам подключается?
|
|
|
|
|
Jul 28 2011, 20:06
|
Частый гость
 
Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828

|
Цитата(ILYAUL @ Jul 28 2011, 23:59)  Программатором сможете записать код , который мы с Вами сегодня рассматривали и посмотрите , что даст Ваш индикатор - по идее должен мигать светодиод позиции 8 Гореть по идее а не мигать, чтоб мигать я такого в Вашем коде не увидел. А почему восьмой то? Это какому коду должно соответствовать по вашему? Единице или 128? Да прекрасно всё пишется уже целый день его загоняю. По вашему коду загорается или 0x20? или 0x38. Причем они грязные какие то. То есть чтобы, например, 0x38 получилось надо выполнить операцию "И" с содержимым регистра TWSR в котором реально появляется код 0x3B после старта TWI. Скажите а у Вас какие коды читаются из TWSR прямо такие как по книжке?
Сообщение отредактировал MaksimYrievich - Jul 28 2011, 20:11
|
|
|
|
|
Jul 28 2011, 20:55
|

Профессионал
    
Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339

|
Цитата(MaksimYrievich @ Jul 29 2011, 00:06)  Гореть по идее а не мигать, чтоб мигать я такого в Вашем коде не увидел. А почему восьмой то? Это какому коду должно соответствовать по вашему? Единице или 128?
Да прекрасно всё пишется уже целый день его загоняю. По вашему коду загорается или 0x20? или 0x38. Причем они грязные какие то. То есть чтобы, например, 0x38 получилось надо выполнить операцию "И" с содержимым регистра TWSR в котором реально появляется код 0x3B после старта TWI. Скажите а у Вас какие коды читаются из TWSR прямо такие как по книжке? Надо было написать так 0x08 Я кое что подправил, если не бдет 0x08 ничего гореть не будет Все коды указаны в файле test.inc
Прикрепленные файлы
test.rar ( 10.94 килобайт )
Кол-во скачиваний: 11
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|