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

|
Цитата(ILYAUL @ Jul 13 2011, 15:04)  1. Да, нужен осцил . 2. У Вас питания проца и DS не разные случайно? 3. И судя по коду 0xA0 проц находится в режиме "ведомого приемника". И это из-за TWAR т.к. Вы внесли в него адрес 4. А как только в TWCR Вы устанавливаете TWEA и TWEN - он вкл. режим "Ведомый приемник" и ждёт когда его адресуют TWAR - заносится личный адрес процессора на шине TWI, если процессоров в проекте не один и они могут адрресовать друг друга - в режиме с одним процем и если он должен быть мастером там должны быть 00000000 1. А что там нужно посмотреть, то осциллографом. 2. Как вам сказать, питание платы осуществляется от преобразователя на микросхеме MC34063 +12\+5В. Здесь на сайте посоветовали. Вторая такая же на +12\-5в. Для аналоговой части. А по плате расходится из одной точки одного конденсатора каждое (+5 вольт) к своей микросхеме (AtMega64,DS1307). Вроде конденсаторов понавешал везде керамических... Вобщем разность потенциалов на меге и на DS1307 минимальна. Суммарная емкость по питанию около 4 тысяч микрофорд Благо материнок старых полно. 3. Если в TWAR ничего не записывать, то код 0xA0 меняется на 0x90. 4. Как тогда сделать "Ведущий Передатчик"?
|
|
|
|
|
Jul 15 2011, 22:56
|
Частый гость
 
Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828

|
Цитата(ILYAUL @ Jul 16 2011, 02:38)  http://depositfiles.com/ru/files/i9jk81xui1. Скачйте эту книгу и почитайте - популярно расписана шина TWI со всеми кодами и режимами работы 2. Осцил , это чтобы сигналы на шине посмотреть 1. У меня такая книга в издании. Раздел про TWI до дыр зачитал. 2. Я вот думаю, если шина грязная то может емкости на нее повесить?
|
|
|
|
|
Jul 18 2011, 03:53
|
Местный
  
Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940

|
Попытайтесь зациклить функцию старта и функцию стопа TWI и осциллографом посмотрите уровни сигналов, форму сигналов/фронтов, наличие этих сигналов на шине и отсутствуе посторонних, отсутствие разлизных выбросов на шине, проконтролируйте временные задержки согласно ДШ. Дальше вставьте между функциями старта и стопа, фунцию посылки байта (т.е команды) и проконтролируйте наличие сигнала АСК от слейва. Если используете дисплей для вывода каких-либо результатов, то в конце цикла поставте задержку порядка нескольких секунд, что бы успеть зафиксировать результаты. Сраните полученный статус-код с дисплея и информацию полученную с шины с помощью осцилла. вот мой код инициализации TWI (в виде макроса): Код #define twi_init() \ do { PORT_TWI |= _BV(PIN_SDA);\ PORT_TWI |= _BV(PIN_SCL);\ TWAR = TWSR = 0; \ TWDR = 0xFF; \ TWBR = TWI_TWBR; \ twi_enable(); \ } while (0)
Сообщение отредактировал alexeyv - Jul 18 2011, 03:59
|
|
|
|
|
Jul 18 2011, 17:01
|
Частый гость
 
Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828

|
Сегодня ещё раз поменял микроконтроллер. Всё осталось без изменений. Неисправность микроконтроллера я решительно отбрасываю. Теперь только код из TWSR изменился и стал 0x30. И вообще получается, что все три поменяных мной микроконтроллера выдавали разные коды в TWCR после запуска подпрограммы старта. Всё что угодно кроме 0x08. Я вообще ничего не понимаю что происходит. Такое ощущение что компилятор не записывает в TWCR то что я ему задаю, ну то есть старт например. Причём, если в строку TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN) добавить (1<<TWIE) до вида TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)|(1<<TWIE), то в этом случае прерывание не происходит. Хотя я его разрешил стандартной функцией SEI(); перед этим. Всеръез начинаю подумывать о программной реализации i2c.  Модуль TWI для меня остается загадкой. Осциллографа у меня нет. Достать не где. Да и не тот это случай для того что бы его покупать.
Сообщение отредактировал MaksimYrievich - Jul 18 2011, 17:02
|
|
|
|
|
Jul 18 2011, 17:36
|
Частый гость
 
Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828

|
Цитата(ILYAUL @ Jul 18 2011, 21:21)  У Вас ведь есть файл проекта для AVRStudio - *.aps . Установите режим симуляции (Simulator2) в Select platform and device запустите отладку Debug и посмотрите что пишется в регистр TWCR Ну нужно просто Функцию SEI(); заменить на sei();. Это та Функция на которую я просто хотел обратить внимание. И вроде всё в порядке вообще то. Программа останавливается на шаге когда должен подняться флаг TWINT. И тупит там бесконечно до сброса WDT. А у Вас как? Кстати, у меня нет почему то в списке микросхем Simulator2 - AtMega64?
Сообщение отредактировал MaksimYrievich - Jul 18 2011, 17:41
|
|
|
|
|
Jul 18 2011, 18:59
|

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

|
Цитата(MaksimYrievich @ Jul 18 2011, 21:36)  Ну нужно просто Функцию SEI(); заменить на sei();. Это та Функция на которую я просто хотел обратить внимание. И вроде всё в порядке вообще то. Программа останавливается на шаге когда должен подняться флаг TWINT. И тупит там бесконечно до сброса WDT. А у Вас как?
Кстати, у меня нет почему то в списке микросхем Simulator2 - AtMega64? У меня всё на asm Извините просто Simulator , хотя у Вас в коде везде Код #include "AtMega128_PHR_04_02_Init.c" Код #include "AtMega128_PHR_04_02_Init.h" , а это разные Mega
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Jul 27 2011, 21:16
|
Частый гость
 
Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828

|
Цитата(ILYAUL @ Jul 28 2011, 00:47)  И кстати, как себя чувствует DS1307 ? Ну типа кварц - генерит, питание на ней есть? Не "сдохла ли? Не может она сдохнуть потому что у нее ноги в воздухе. Вы задавали вопрос почему в коде атмега 128. Да потому что это одинаковые по адресам МК вместе с 64 и взаимозаменяемые. Сейчас МК на шине ногами и ВСЁ!! Ну и плюс резисторы. Представляете, мужики, Пишу СТАРТ в TWCR ну и читаю сразу чтобы проверить прописалось или нет в МК. А в TWCR как был код старта так и остается. Причет TWINT как по даташиту ATMEL единицей не сбрасывается а наоборот так единицей и прописывается ибо если до этого его обнулить и потом СТАРТОМ зашить появляется единица в восьмом разряде TWCR представляете?!
|
|
|
|
|
Jul 27 2011, 21:32
|
Частый гость
 
Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828

|
Цитата(ILYAUL @ Jul 28 2011, 01:23)  Интересно , у как же она оветить тогда сможет? Да кокой ответить... МК старт даже не делает, вдумайтесь, на пустой шине. Прерывания по старту не наступает вообще. Глухо как в танке. В даташите на МЕГИ128 or 64 написано что регистр TWSR доступен только для чтения. У меня же в него и пишется и читается причем если его нулями проинициализировать, то получается после записи СТАРТ в регистр TWCR в нем так нули и остаются  Я вот думаю может компилятор не в те адреса записи делает по написанному мной коду. Ну, типа TWCR должен в 0x74 должен писать а он ещё куда нибудь пишет. У меня просто версии уже кончаются...
|
|
|
|
|
Jul 28 2011, 08:15
|

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

|
1. Запаять микросхему DS1307!!!!!2. Запустить проект из приложеннного файла в STUDIO 2a В меню DEBUG изменить параметры в подменю ( Select platform end device) под Ваши (какой у Вас отладчик, кстати?) 2b. Изменить строчки (раскоментировать - закоменнтировать) в зависимости от выбранного DEVICE, с которым Вы работаете именно в данный момент Код .include "m64def.inc" // .include "m128def.inc" Если будут изменения не забудьте сделать SAVE и нажать F73. Установить BREAKPOINT на строку Код cpi temp,START в подпрограмме TWI_STARTЗапустить DEBUG 4.Посмотреть значение в регистре R16 (temp)
Прикрепленные файлы
test.rar ( 10.62 килобайт )
Кол-во скачиваний: 13
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Jul 28 2011, 09:24
|
Частый гость
 
Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828

|
Цитата(ILYAUL @ Jul 28 2011, 12:15)  какой у Вас отладчик, кстати Сейчас попробую сделать так как вы пишите. О результатах немедленно сообщу. Теперь на счет отладчика, использую AvrStudio4.16, Build 628. Его использую как отладчик. Ну, там, смотрю как квадратики бегают, счётчики работают, конфигурирую порты и пр. А сами исходники в Programmers Notepad 2 каком то лобаю, в Help программы дословно написано v.2.0.8.718-basie.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|