реклама на сайте
подробности

 
 
5 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> DS1307Z +AtMega128, Нет старта на TWI
MaksimYrievich
сообщение Jul 11 2011, 20:44
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 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 - часы. sad.gif

Сообщение отредактировал IgorKossak - Jul 12 2011, 07:29
Причина редактирования: Оформление кода
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Jul 12 2011, 04:59
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



1. Инициализировать регистры надо полностью, избавьтесь от &= и |=
Код
TWBR = (1<<TWBR6) | (1<<TWBR5) | (1<<TWBR1) | (1<<TWBR0);
TWSR = 0;
TWAR = 0;


2. i2c_start() вызывается в цикле или однократно? питание DS1307 скорее всего не скидывается?
Можно предположить, что ваши светодиоды зажигаются другой полярностью и ((~0xEC) & 0xF8)=0x10 - Restart transmitted
Значения 0xEC вообще нет в таблицах статусных кодов TWI

3. перепишите условие так:
Код
#define START     0x08
#define RESTART 0x10
......
......
unsigned char st;
......
......
st = TWSR & 0xF8;
if ((st== START) || (st==RESTART))
........


4. осциллом что видно на шине?
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 12 2011, 08:12
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828



Нет осциллографа. Сейчас попробую переписать код избавиться от &. После обязательньо отпишусь Функция i2c_start(); сейчас в коде вызывается однократно, питание на DC1307 не скидывается исключено.

Избавился от &. Ничего не дало. Код инициализации МК теперь такой:

//Инициализируем i2c шину.
TWBR |= 1<<TWBR6|1<<TWBR5|1<<TWBR1|1<<TWBR0;
TWSR = 0; //&= (~((1<<TWPS1)|(1<<TWPS0)));
TWAR = 0; //|= 1<<TWA0|1<<TWA1|1<<TWA3|1<<TWA5;
//TWAR //&= (~((1<<TWGCE)));
DDRD |= 1<<PD0|1<<PD1;
PORTD |= 1<<PD0|1<<PD1;

Теперь на светодиодах ничего не горит.Это как бы означает, что в TWSR всё по нулям. Диоды зажигаются не в инверсии. На экране горит единица. Да и еще заработал зумер, у меня это значит что МК начал проходить через начало программы, то есть через сторожевой таймер.

Если в TWSR всё по нулям значит ошибка формирования состояния старт. Буду приподнимать ноги у DS1307 c шины.

Приподнял ноги у DS1307 над платой и ничего не изменилось. На экране единица. Код я не изменял. На светодиодах пусто. Ничего не понимаю!!

Сообщение отредактировал MaksimYrievich - Jul 12 2011, 07:55
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Jul 12 2011, 08:17
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



погоняй в цикле старт-condition и стоп-condition с задержкой после старт в ~10 ms, и после стоп в несколько секунд.
И ищи осцилл
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 12 2011, 10:44
Сообщение #5


Профессионал
*****

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



Не знаю , конечно , но вот эти строчки мне абсолютно не нравятся.
Цитата
TWBR |= 1<<TWBR6|1<<TWBR5|1<<TWBR1|1<<TWBR0;
TWSR = 0; //&= (~((1<<TWPS1)|(1<<TWPS0)));


Поставька вместо них формулу
TWBR|=SYSCLK/(2*SCL_Freq)-8 ;TWI Bit Rate Register - TWBR
SYSCLK=14.7456МГц
SCL_Freq= 100Khz
В итоге в TWBR пишется 0х41 так, что ещё и прескалер нафинг не нужон
TWSR = 0; //&= (~((0<<TWPS1)|(0<<TWPS0)));


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 12 2011, 21:30
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828



Цитата(ILYAUL @ Jul 12 2011, 14:44) *
Не знаю , конечно , но вот эти строчки мне абсолютно не нравятся.


Поставька вместо них формулу
TWBR|=SYSCLK/(2*SCL_Freq)-8 ;TWI Bit Rate Register - TWBR
SYSCLK=14.7456МГц
SCL_Freq= 100Khz
В итоге в TWBR пишется 0х41 так, что ещё и прескалер нафинг не нужон
TWSR = 0; //&= (~((0<<TWPS1)|(0<<TWPS0)));


Да согласен так лучше. Видать ассемблер во мне еще не совсем переломался. Очень по деловому замутчено. Я поменял МК на мегу 64 и то же самое почти осталось за исключением кода в TWSR. Теперь в нем код стал читабельным и светодиоды его высветили как $A0, что, насколько я понимаю, означает "Было обнаружено состояние СТАРТ или ПОВСТАРТ в то время, когда устройство было адресовано в качестве ведомого". Всетаки 128 Мегу я чем то кайфанул maniac.gif . Да, но теперь, когда я от шины i2c откинул все ноги - шина сейчас пустая! Как может быть 0xA0?

Сообщение отредактировал MaksimYrievich - Jul 12 2011, 22:02
Прикрепленные файлы
Прикрепленный файл  AtMega128_PHR_04_02_Init.rar ( 1.15 килобайт ) Кол-во скачиваний: 29
 
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 13 2011, 06:06
Сообщение #7


Профессионал
*****

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



Цитата(MaksimYrievich @ Jul 13 2011, 01:30) *
Да согласен так лучше. Видать ассемблер во мне еще не совсем переломался. Очень по деловому замутчено. Я поменял МК на мегу 64 и то же самое почти осталось за исключением кода в TWSR. Теперь в нем код стал читабельным и светодиоды его высветили как $A0, что, насколько я понимаю, означает "Было обнаружено состояние СТАРТ или ПОВСТАРТ в то время, когда устройство было адресовано в качестве ведомого". Всетаки 128 Мегу я чем то кайфанул maniac.gif . Да, но теперь, когда я от шины i2c откинул все ноги - шина сейчас пустая! Как может быть 0xA0?

Ну и что я увидел в приложенном коде
Цитата
TWSR = 0; //&= (~((1<<TWPS1)|(1<<TWPS0)));

а что было написано чуть выше?
Ну и проц заменен , тогда и это надо менять
#include "AtMega128_PHR_04_02_Init.h"

ЗЫ Кстати формула взята из проекта на asm

ЗЫ ЗЫ И вот ещё
Цитата
DDRD |= 1<<PD0|1<<PD1;
//PORTD |= 1<<PD0|1<<PD1;

Шина TWI она же I2C требует внешних PULL резисторов - приблизительно 4,7 Ком поэтому внутренняя подтяжка (строчка 2) ей пофинг. Они у Вас есть? Внутренние ~ 30 Kom
Портам ,в режиме альтернатыных функций , например TWI - плевать как сконфигурирован порт (кроме специально обговорённых режимов- читать DS) . Вход он или выход, начхать, так что удаляйте эти две строки и если резисторов нет - "вешайте"


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 13 2011, 09:27
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828



Цитата(ILYAUL @ Jul 13 2011, 10:06) *
Шина TWI она же I2C требует внешних PULL резисторов - приблизительно 4,7 Ком поэтому внутренняя подтяжка (строчка 2) ей пофинг. Они у Вас есть? Внутренние ~ 30 Kom


Да внешние резисторы висят 4.7 кОм. Всё равно пишет что устройство уже адресовано код я тоже переделал. А может быть это какая нибудь наводка на шину идет? Может конденсаторы на нее прилепить?
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 13 2011, 09:45
Сообщение #9


Профессионал
*****

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



Вы прескалер убрали?


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 13 2011, 09:48
Сообщение #10


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828



Цитата(ILYAUL @ Jul 13 2011, 13:45) *
Вы прескалер убрали?


Да я Убрал прескаллер

Сообщение отредактировал MaksimYrievich - Jul 13 2011, 09:49
Прикрепленные файлы
Прикрепленный файл  AtMega128_PHR_04_02_Init.rar ( 1.14 килобайт ) Кол-во скачиваний: 22
 
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 13 2011, 10:28
Сообщение #11


Профессионал
*****

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



Цитата(MaksimYrievich @ Jul 13 2011, 13:48) *
Да я Убрал прескаллер

Вы , что старый код положили?

Цитата
//Инициализируем i2c шину.
TWBR |= SYSCLK/(2*SCL_Freq)-8 ;
//TWSR &= (~((1<<TWPS1)|(1<<TWPS0))); здесь деление частоты на 64 - эта строчка должна быть удалена. Это прескалер и где Вы его убрали?
TWAR |= 1<<TWA0|1<<TWA1|1<<TWA3|1<<TWA5;
//TWAR &= (~((1<<TWGCE)));
//DDRD |= 1<<PD0|1<<PD1;
//PORTD |= 1<<PD0|1<<PD1;
Эти две тоже - удалить


В asm ,раз уж Вы его знаете, это всё что нужно для инит I2C (TWI):
Код
;**************************************************
;*        ;;/Init Bit Rate fot TWI;;*              *
;**************************************************
        ldi    temp,SYSCLK/(2*SCL_Freq)-8 ;TWI Bit Rate Register - TWBR
        sts    TWBR,temp            ;+ TWI=384 Khz
;**************************************************


А так выглядит START и ПОВСТАРТ:

Код
;**************************************************
;*     ;;+Подпрограмма Init TWI_START;;*         *
;*  ;;+Формирование START и проверка ответа.;;*  *
;**************************************************
TWI_START:
        ldi        temp,(1<<TWINT)|(1<<TWSTA)|(1<<TWEN)
        sts        TWCR,temp        ; формирование режима START
waitST:
        lds        temp,TWCR        ; Проверка бита TWINT
        sbrs    temp,TWINT
        rjmp    waitST            ; Не получен -цикл
        lds        temp,TWSR        ; Проверка кода ответа
        cpi        temp,START
        breq    RETURN            ; Правильный код -выход из подпрограммы
        cpi        temp,REPSTART
        brne    TWI_START        ; Нет - повтор.
RETURN:
        ret


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 13 2011, 10:38
Сообщение #12


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828



Цитата(ILYAUL @ Jul 13 2011, 14:28) *
Вы , что старый код положили?


Так они же закоментированы?

Сообщение отредактировал MaksimYrievich - Jul 13 2011, 10:41
Прикрепленные файлы
Прикрепленный файл  AtMega128_PHR_04_02_Init.rar ( 1.08 килобайт ) Кол-во скачиваний: 21
 
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 13 2011, 10:44
Сообщение #13


Профессионал
*****

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



Цитата(MaksimYrievich @ Jul 13 2011, 14:38) *
Так они же закоментированы?

Да,не обратил внимание. SCL SDA не перепутали?

И закоментируйте
Цитата
TWAR |= 1<<TWA0|1<<TWA1|1<<TWA3|1<<TWA5;


И это почему осталось старой , если проц уже другой

Цитата
#include "AtMega128_PHR_04_02_Init.h"


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 13 2011, 10:46
Сообщение #14


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828



Цитата(ILYAUL @ Jul 13 2011, 14:44) *
SCL SDA не перепутали?


Нет не перепутал. причем даже если ноги у МК оторвать от шины то всё равно в TWSR 0xA0 получается
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 13 2011, 11:04
Сообщение #15


Профессионал
*****

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



Цитата(MaksimYrievich @ Jul 13 2011, 14:46) *
Нет не перепутал. причем даже если ноги у МК оторвать от шины то всё равно в TWSR 0xA0 получается

Да, нужен осцил . У Вас питания проца и DS не разные случайно? И судя по коду 0xA0 проц находится в режиме "ведомого приемника". И это из-за TWAR т.к. Вы внесли в него адрес
А как только в TWCR Вы устанавливаете TWEA и TWEN - он вкл. режим "Ведомый приемник" и ждёт когда его адресуют
TWAR - заносится личный адрес процессора на шине TWI, если процессоров в проекте не один и они могут адрресовать друг друга - в режиме с одним процем и если он должен быть мастером там должны быть 00000000


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 15 2011, 19:54
Сообщение #16


Частый гость
**

Группа: Участник
Сообщений: 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. Как тогда сделать "Ведущий Передатчик"?
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 15 2011, 22:38
Сообщение #17


Профессионал
*****

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



http://depositfiles.com/ru/files/i9jk81xui
1. Скачйте эту книгу и почитайте - популярно расписана шина TWI со всеми кодами и режимами работы
2. Осцил , это чтобы сигналы на шине посмотреть



--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 15 2011, 22:56
Сообщение #18


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828



Цитата(ILYAUL @ Jul 16 2011, 02:38) *
http://depositfiles.com/ru/files/i9jk81xui
1. Скачйте эту книгу и почитайте - популярно расписана шина TWI со всеми кодами и режимами работы
2. Осцил , это чтобы сигналы на шине посмотреть

1. У меня такая книга в издании. Раздел про TWI до дыр зачитал.
2. Я вот думаю, если шина грязная то может емкости на нее повесить?
Go to the top of the page
 
+Quote Post
alexeyv
сообщение Jul 18 2011, 03:53
Сообщение #19


Местный
***

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 18 2011, 17:01
Сообщение #20


Частый гость
**

Группа: Участник
Сообщений: 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. 05.gif Модуль TWI для меня остается загадкой.

Осциллографа у меня нет. Достать не где. Да и не тот это случай для того что бы его покупать.



Сообщение отредактировал MaksimYrievich - Jul 18 2011, 17:02
Прикрепленные файлы
Прикрепленный файл  PH_Regulator_PHR_04_02.rar ( 78.92 килобайт ) Кол-во скачиваний: 14
 
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 18 2011, 17:21
Сообщение #21


Профессионал
*****

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



Цитата(MaksimYrievich @ Jul 18 2011, 21:01) *
Я вообще ничего не понимаю что происходит. Такое ощущение что компилятор не записывает в TWCR то что я ему задаю, ну то есть старт например. Причём, если в строку TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN) добавить (1<<TWIE) до вида TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)|(1<<TWIE), то в этом случае прерывание не происходит. Хотя я его разрешил стандартной функцией SEI(); перед этим.

Осциллографа у меня нет. Достать не где. Да и не тот это случай для того что бы его покупать.

У Вас ведь есть файл проекта для AVRStudio - *.aps . Установите режим симуляции (Simulator2) в Select platform and device запустите отладку Debug и посмотрите что пишется в регистр TWCR


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 18 2011, 17:36
Сообщение #22


Частый гость
**

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 18 2011, 18:59
Сообщение #23


Профессионал
*****

Группа: Свой
Сообщений: 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
Прикрепленные файлы
Прикрепленный файл  DS1337_TWI.rar ( 3.96 килобайт ) Кол-во скачиваний: 19
 


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 27 2011, 19:50
Сообщение #24


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828



Не знаю. Что за такие проблемы. Я в отчаянии. Вообще не могу даже вызвать прерывание от модуля TWI. Флаг TWINT не сбрасывается а если сбросился то не устанавливается вообще. Регистр TWCR ведёт себя как простой регистр общего назначения - после записи в него значение в нем не меняется вообще!!!! Могу в него записать что хочу могу стереть прочитать... Ни старта ни стопа ни флага TWINT. Ребята, а есть такие кто запускал вообще модуль TWI именно на AtMega64,128?
Что бы я ни записывал в TWCR ничего не происходит. Шина молчит, в регистре статуса TWSR код не меняется и постоянно равен 0x30. Может кто сталкивался с такой проблемой? Как его запустить? Как вызвать хотя бы прерывание? Перепробывал ВСЁ. Разные коды, заменил три микроконтроллера. Может быть надо где то что то прописать помимо TWI, может прерывания какие. Ведёт себя TWI просто как мёртвый. Думал старта нет - ВООБЩЕ глушняк!!! Даже прерывание по TWINT сформировать не могу!!! Что это значит wacko.gif help.gif
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 27 2011, 20:47
Сообщение #25


Профессионал
*****

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



Если Вы смотрите в симмуляторе , то коды и флаги устанавливать надо в ручную - симмулятор служит только для проверки логики самой программы.
И кстати, как себя чувствует DS1307 ? Ну типа кварц - генерит, питание на ней есть? Не "сдохла ли?


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 27 2011, 21:16
Сообщение #26


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828



Цитата(ILYAUL @ Jul 28 2011, 00:47) *
И кстати, как себя чувствует DS1307 ? Ну типа кварц - генерит, питание на ней есть? Не "сдохла ли?

Не может она сдохнуть потому что у нее ноги в воздухе. Вы задавали вопрос почему в коде атмега 128. Да потому что это одинаковые по адресам МК вместе с 64 и взаимозаменяемые. Сейчас МК на шине ногами и ВСЁ!! Ну и плюс резисторы.

Представляете, мужики, Пишу СТАРТ в TWCR ну и читаю сразу чтобы проверить прописалось или нет в МК. А в TWCR как был код старта так и остается. Причет TWINT как по даташиту ATMEL единицей не сбрасывается а наоборот так единицей и прописывается ибо если до этого его обнулить и потом СТАРТОМ зашить появляется единица в восьмом разряде TWCR представляете?!
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 27 2011, 21:23
Сообщение #27


Профессионал
*****

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



Цитата(MaksimYrievich @ Jul 28 2011, 01:16) *
Не может она сдохнуть потому что у нее ноги в воздухе.

Интересно , у как же она оветить тогда сможет?


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 27 2011, 21:32
Сообщение #28


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828



Цитата(ILYAUL @ Jul 28 2011, 01:23) *
Интересно , у как же она оветить тогда сможет?

Да кокой ответить... МК старт даже не делает, вдумайтесь, на пустой шине. Прерывания по старту не наступает вообще. Глухо как в танке. В даташите на МЕГИ128 or 64 написано что регистр TWSR доступен только для чтения. У меня же в него и пишется и читается причем если его нулями проинициализировать, то получается после записи СТАРТ в регистр TWCR в нем так нули и остаются 05.gif

Я вот думаю может компилятор не в те адреса записи делает по написанному мной коду. Ну, типа TWCR должен в 0x74 должен писать а он ещё куда нибудь пишет. У меня просто версии уже кончаются...
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 28 2011, 08:15
Сообщение #29


Профессионал
*****

Группа: Свой
Сообщений: 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 и нажать F7
3. Установить BREAKPOINT на строку
Код
cpi     temp,START
в подпрограмме TWI_START
Запустить DEBUG
4.Посмотреть значение в регистре R16 (temp)
Прикрепленные файлы
Прикрепленный файл  test.rar ( 10.62 килобайт ) Кол-во скачиваний: 13
 


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 28 2011, 09:24
Сообщение #30


Частый гость
**

Группа: Участник
Сообщений: 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.
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 28 2011, 09:47
Сообщение #31


Профессионал
*****

Группа: Свой
Сообщений: 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 по обоим выходам
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 28 2011, 11:20
Сообщение #32


Частый гость
**

Группа: Участник
Сообщений: 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
 
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 28 2011, 13:09
Сообщение #33


Профессионал
*****

Группа: Свой
Сообщений: 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 , а что делает портВ?


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 28 2011, 13:33
Сообщение #34


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828



Заменил ещё раз микросхему код стал равен $38. сейчас буду пробовать снизить скорость

Можно DS1307 Выпаять а EEPROMку посадить на шину. Снижение скорости ничего не дало ошибку с кодом про DDD признаю, исправил.

Сообщение отредактировал MaksimYrievich - Jul 28 2011, 13:40
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 28 2011, 13:45
Сообщение #35


Профессионал
*****

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



Цитата(MaksimYrievich @ Jul 28 2011, 17:33) *
Можно DS1307 Выпаять а EEPROMку посадить на шину.

Попробуйте и покажите как вкл. LED и вопрос выше


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 28 2011, 13:48
Сообщение #36


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828



Цитата(ILYAUL @ Jul 28 2011, 17:09) *
Я так понял из кода , что информацию Вы выводите на 8 LED , а что делает портВ?

Защелкивает в регистре защёлке код с восьмиразрядной шины данных что бы горели светодиоды
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 28 2011, 13:54
Сообщение #37


Профессионал
*****

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



Цитата(MaksimYrievich @ Jul 28 2011, 17:48) *
Защелкивает в регистре защёлке код с восьмиразрядной шины данных что бы горели светодиоды

А сэтими , что?

1. Прозвонить SCL и SDA от проца к DS - есть ли контакт и совпадают ли по названиям шины между собой
2. Прсто подать питание на схему и посмотреть , есть ли на этих шинах уровень лог.1 - соответсвенно он зависит от питания Вашей схемы.
и можете нарисовать подкл. светодиодов


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 28 2011, 17:51
Сообщение #38


Частый гость
**

Группа: Участник
Сообщений: 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
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 28 2011, 19:01
Сообщение #39


Профессионал
*****

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



Цитата(MaksimYrievich @ Jul 28 2011, 15:20) *
Просто симулятор без двойки.

Я чего-то не могу понять, Вы используете симмулятор т.е. связи через специальные отладочные устройства с SDUDIO у Вас нет. Они перечислены в том скрине который я Вам выкладывал , когда написал -
Цитата
.... не симмуляторы

Симмулятор - в отличии от эммуляторов работает в ручную т.е. каждый бит можно установить и сбросить просто нажав мышкой на этот бит в окне I/O View в том числе и выставить необходимый код 0x08. Зная логику своей программы , Вы можете только проверить ее исполнение выставляя необходимые условия в РУЧНУЮ.
C отладочным устройством - в studio передается реальный код , полученный процессором - так вот есть у Вас хоть одно отладочное устройсво из приведенного мною списка?
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 28 2011, 19:44
Сообщение #40


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828



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

К сожалению нет таких устройств
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 28 2011, 19:47
Сообщение #41


Профессионал
*****

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



Цитата(MaksimYrievich @ Jul 28 2011, 23:44) *
К сожалению нет таких устройств

А программатор есть?
Очень возможно , что всё давно и прекрасно работает , но отладчик НЕОБХОДИМО купить ( понятно , что придётся потратиться , но оно того стоит (время , нервов и сил экономит - мама не горюй) - всё станет значительно проще , я вон код из другой темы написал и отладил за полчаса


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 28 2011, 19:53
Сообщение #42


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828



Цитата(ILYAUL @ Jul 28 2011, 23:47) *
А программатор есть?
Очень возможно , что всё давно и прекрасно работает , но отладчик НЕОБХОДИМО купить ( понятно , что придётся потратиться , но оно того стоит (время , нервов и сил экономит - мама не горюй) - всё станет значительно проще , я вон код из другой темы написал и отладил за полчаса

Программатор есть конечно. А по поводу что всё работает согласиться не могу с вами. А о каком отладчике идёт речь и вкратце что он делает и по каким проводам подключается?
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 28 2011, 19:59
Сообщение #43


Профессионал
*****

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



Цитата(MaksimYrievich @ Jul 28 2011, 23:53) *
Программатор есть конечно. А по поводу что всё работает согласиться не могу с вами. А о каком отладчике идёт речь и вкратце что он делает и по каким проводам подключается?

Они все в списке кроме симмуляторов. Откройте AVR STUDIO - HELP - ATMEL AVR Tools ON-line Help и в левом столбце с AVR ONE по ICE200 про них можно почитать. Я использую dragon.
Программатором сможете записать код , который мы с Вами сегодня рассматривали и посмотрите , что даст Ваш индикатор - по идее должен мигать светодиод позиции 8


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 28 2011, 20:06
Сообщение #44


Частый гость
**

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 28 2011, 20:55
Сообщение #45


Профессионал
*****

Группа: Свой
Сообщений: 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
 


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 29 2011, 21:10
Сообщение #46


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828



Цитата(ILYAUL @ Jul 29 2011, 00:55) *
Надо было написать так 0x08


Где написать?
Цитата(ILYAUL @ Jul 29 2011, 00:55) *
Я кое что подправил, если не бдет 0x08 ничего гореть не будет
Все коды указаны в файле test.inc

Сейчас прочитаю и запущу ваш код на своем МК. Попробовал, ничего и не горит.

Сообщение отредактировал MaksimYrievich - Jul 29 2011, 21:23
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 29 2011, 22:12
Сообщение #47


Профессионал
*****

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



Цитата(MaksimYrievich @ Jul 30 2011, 01:10) *
Где написать?

Я писал
Цитата
по идее должен мигать светодиод позиции 8

Надо было 0x08
Цитата(MaksimYrievich @ Jul 30 2011, 01:10) *
Сейчас прочитаю и запущу ваш код на своем МК. Попробовал, ничего и не горит.

Хреново!
1. Что это за плата, в Москве найду?
2. Питание на мс подается вообще?
3. Осцил не нашли?


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 30 2011, 05:36
Сообщение #48


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828



Цитата(ILYAUL @ Jul 30 2011, 02:12) *
1. Что это за плата, в Москве найду?
2. Питание на мс подается вообще?
3. Осцил не нашли?

1. В Москве не найти она моего изготовления.
2. Конечно да.
3. Нашел осциллограф. Померял питание. Очень чистое. Как у кота... Переменки на питании самой микросхемы отсутствует - строгая прямая линия +5 Вольт. Теперь про линии SDA и SCL. Полсле запитывания на обеих этих шинах +5 вольт и больше ничего не проскакивает. К нолю ни одна из шин не подтягивается. Изменений нет на шинах вообще
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 30 2011, 19:29
Сообщение #49


Профессионал
*****

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



Цитата(MaksimYrievich @ Jul 30 2011, 09:36) *

Вот после этих строчек
Код
ldi   temp,0x00
sts  TWAR,temp

Вставить
Код
        ldwi  Z,ILYAUL
Cycle1:
        lds temp,TWSR
        st  Z, temp
        rcall   WriteIndLed
        rjmp    Cycle1

Сообщите код который будет гореть


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 31 2011, 09:13
Сообщение #50


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828



Цитата(ILYAUL @ Jul 30 2011, 23:29) *
Сообщите код который будет гореть

0x39 горит. Я так понимаю что это 0x38. (0x39 & 0xF8 = 0x38).



Сообщение отредактировал MaksimYrievich - Jul 31 2011, 14:24
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 31 2011, 16:19
Сообщение #51


Профессионал
*****

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



Цитата(MaksimYrievich @ Jul 31 2011, 13:13) *
0x39 горит. Я так понимаю что это 0x38. (0x39 & 0xF8 = 0x38).

Хрень какая-то. Откуда Вы берете эту маску -0xF8? Где она накладывается?

Код
                               ldi temp ,1<<TWINT|1<<TWSTO; В команде ничего не изменять!!!
                                sts   TWCR,temp
Cycle2:
         lds   temp,TWCR
         sbrc TEMP,TWSTO
         rjmp Cycle2

Перед
Код
     ldwi  Z,ILYAUL
Cycle1:
        lds temp,TWSR
        st  Z, temp
        rcall   WriteIndLed
        rjmp    Cycle1


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 31 2011, 17:20
Сообщение #52


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828



Цитата(ILYAUL @ Jul 31 2011, 20:19) *
Хрень какая-то. Откуда Вы берете эту маску -0xF8? Где она накладывается?

В даташите так написано. Вам вот такие строки не знакомы?
Код
static unsigned char i2c_start(void)
{
TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN);     //Устанавливается состояние START
while (!(TWCR & (1<<TWINT)));           //Задержка до установки флага TWINT. Он означает что
                    //состояние START было передано
if ((TWSR & 0xF8) == 0x08)            //Проверяем значение в TWI Status Register
      return(0);
   else
      return(1);
}

Так вот 0xF8 это маска. Которую программист должен накладывать самостоятельно ибо в регистре TWSR состояние автомата TWI показывают только старшие 5 разрядов. Я конечно этой маски в вашем коде не вижу. Поэтому я вам и пишу в ответах на ваши вопросы два кода состояния: 1) без маски - это тот код который я получаю на светодиоды по вашей программе и он 100 пудово из TWSR = 0x39(это то что я из всего TWSR читаю), и второй код который я умственно умножаю в голове на 0xF8. Тогда он будет равен табличному значению- 0x38. Так что путаться здесь не в чем. Скажите а у Вас что читается из TWSR. Или читалось когда либо?

Попробовал загнал Ваш код с последними изменениями. Ничего не пишет на светодиодах. Что Вы думаете об этом? В приложении ваш код с учётом последних изменений- для контроля моих действий.

Сообщение отредактировал MaksimYrievich - Jul 31 2011, 17:34
Прикрепленные файлы
Прикрепленный файл  test_1_.rar ( 10.01 килобайт ) Кол-во скачиваний: 12
 
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 31 2011, 18:26
Сообщение #53


Профессионал
*****

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



Цитата(MaksimYrievich @ Jul 31 2011, 21:20) *
Скажите а у Вас что читается из TWSR. Или читалось когда либо?

Попробовал загнал Ваш код с последними изменениями. Ничего не пишет на светодиодах. Что Вы думаете об этом? В приложении ваш код с учётом последних изменений- для контроля моих действий.

Все коды взяты из абсолюно рабочего проекта- на столе лежит .

Стирайте этот код. И можете показать как запрограммированы FUSES
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 31 2011, 18:54
Сообщение #54


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828



Я даже просто включить автомат TWI не могу. В даташитах любой масти написано, что как только в TWCR записать 1 в разряд TWEN, автомат TWI должен взять управление выводами SDA и SCL на себя. Причем как сконфигцрированы эти выводы не важно.
Так вот если выводы МК AtMega128 SDA и SCL сконфигурировать как:
Код
DDRD = 0x03;
PORTD = 0<<DDD0|0<<DDD1;

то на выходе, МК, на этих ногах будут ноли, не взирая на внешние подтягивающие разисторы. Как только в TWCR записать 1 в разряд TWEN, автомат TWI должен взять управление выводами SDA и SCL на себя. Так вот в моём случае хоть записывай туда чего хочешь хоть не записывай там всегда остаются нули. Если же выводы МК AtMega128 SDA и SCL сконфигурировать как:
Код
DDRD = 0x00;
PORTD = 1<<DDD0|1<<DDD1;

то на выходе, МК, на этих ногах будут 1. И нолей я ни разу в жизни не увидел на осциллографе. Хоть обзаписывайся в TWCR чего угодно. Я вот думаю может чего то ещё необходимо для нормальной работы TWI в AtMega128 или AtMega64 инициализировать, фъюзы там выставить какие нибудь. Потому что не бывает так... Я поменял 4 МК. Ситуация одинаковая со всеми МК причем все МК рабочие!!!! и не работал только долбаный TWI. Я не знаю что можно назвать помехами, но в моем случае при установке на осциллографе цены деления на 5mV/дел. Колебания переменной состсвляющей на шинах SCL, SDA не превышают 1 деления. То есть просто идеально. Блок питания +5Вольт выполнен на MC34063.

ILYAUL скажите а в симуляторе, фото которого вы приложили в предыдущем топике вы ручками поднимаете? В частности больше всего интересует значения в TWSR и особенно 0x08 в TWSR? И если нет, то что это за версия AVRSTUDIO у вас?

Сообщение отредактировал MaksimYrievich - Jul 31 2011, 18:41
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 31 2011, 19:18
Сообщение #55


Профессионал
*****

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



Цитата(MaksimYrievich @ Jul 31 2011, 22:54) *
ЯILYAUL скажите а в симуляторе, фото которого вы приложили в предыдущем топике вы ручками поднимаете? В частности больше всего интересует значения в TWSR и особенно 0x08 в TWSR? И если нет, то что это за версия AVRSTUDIO у вас?

Это не симмулятор, это реальное состояние TWI/ Я Вам писал , что существуют специальные отладчики проектов , которые объединяются в одну систему
AVRStudio + отладчик ( в моём случае AVRDRAGON) + разрабатываемая плата . Поэтому в Студио , я вижу реально , что происходит с процессором , ничего не симмулируя ручками.
Я использую туже , что у Вас , в ней меньше ошибок , чем в предыдущих и последующих
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Jul 31 2011, 19:28
Сообщение #56


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828



Да это здоровская штука. У меня такой нет. sad.gif Пока нет. А знаете почему ваш код с последними добавлениями не хочет работать? Выполнение программы в нем просто не доходит до записи значения на светодиоды. зацикливаясь на проверке сброса флага TWSTO. Якобы после формирования состояния стоп на шине он должен быть сброшен. В моем случае ничего не сбрасывается даже флаг TWINT тупо записывается в TWCR и всё. Я в отчаянии sad.gif

Кстати, а вот у меня в TWSR в не значащих разрядах всегда считывается какое то значение хотя я его туда естественно не закидывал сам.

Сообщение отредактировал MaksimYrievich - Jul 31 2011, 19:40
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Jul 31 2011, 19:45
Сообщение #57


Профессионал
*****

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



В младшем byte Fuses давайте выставим в 4 и 5 бите галочки , при условии , что в Вашей программе они означают запись 1-цы т.е в младшем $FF и получим самый длинный из возможных сбросов
Цитата
Выполнение программы в нем просто не доходит до записи значения на светодиоды. зацикливаясь на проверке сброса флага TWSTO

Да я видел ,проверил на своём проекте
Да и в личку загляните

Так, возможно нащупал:
Цитата
ATmega103
Compatibility Mode
By programming the M103C fuse, the ATmega128 will be compatible with the ATmega103
regards to RAM, I/O pins and interrupt vectors as described above. However, some new features
in ATmega128 are not available in this compatibility mode, these features are listed below:
• One USART instead of two, Asynchronous mode only. Only the eight least significant bits of
the Baud Rate Register is available.
• One 16 bits Timer/Counter with two compare registers instead of two 16-bit Timer/Counters
with three compare registers.
• Two-wire serial interface is not supported.
• Port C is output only.
• Port G serves alternate functions only (not a general I/O port).
• Port F serves as digital input only in addition to analog input to the ADC.
• Boot Loader capabilities is not supported.
• It is not possible to adjust the frequency of the internal calibrated RC Oscillator.
• The External Memory Interface can not release any Address pins for general I/O, neither
configure different wait-states to different External Memory Address sections.



Похоже осталось только сбросить этот fuse в Extended Fuse Byte - второй справа, т.е убрать галочку и вернитесь к первому варианту test.asm - проверьте



--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Aug 1 2011, 17:36
Сообщение #58


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828



Цитата(ILYAUL @ Jul 31 2011, 23:45) *
Похоже осталось только сбросить этот fuse в Extended Fuse Byte - второй справа, т.е убрать галочку и вернитесь к первому варианту test.asm - проверьте

Похоже, что вы правы! Главное обратите внимание, что с завода два этих типа МК AtMega128,64 идут прошитыми как раз в режиме совместимости! Сейчас буду пробовать.

Только сначала необходимо переписать программу моего программатора ибо когда я её писал я ваще забыл про третий конфигурационный байт и даже не вывел его чтение на форму программы. Это само по себе не проблема, благо знаком с разными языками программирования, но потребует некоторого времени для переключения меня самого с CИ++ на Делфи. За образец мной брался код программатора из "В.Н. Баранов, Применение микроконтроллеров AVR: схемы, алгоритмы, программы" и переклёпывался с Windows98 на XP. One minit`s please!!!!
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Aug 2 2011, 17:12
Сообщение #59


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828



Усовершенствовал программатор. Перепаял AtMega64 на 128-ю, первую самую. Благо не ушатал её своими перепайками. И на самом деле этот бит сброшен оказался.
Получается, что два одинаковых и самых старших представителя семейства AtMega, с завода прошиваются в режиме совместимости с каким то обрубком - AtMega103, не имеющим TWI !!! И в таком виде поставляются в продажу!!!!! Господи... Какая кощунственность!!! sad.gif
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Aug 2 2011, 17:36
Сообщение #60


Профессионал
*****

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



Я так понял , что наконец-то всё заработало. Тогда - поздравляю biggrin.gif .
Ну и я на будущее изучил D/S - этих MEGA - никогда сними не работал , но вдруг пригодится


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
MaksimYrievich
сообщение Aug 2 2011, 17:42
Сообщение #61


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 10-08-09
Пользователь №: 51 828



Далее установил бит M103C как на рисунке, прошил и всё. TWI залетал как ошпаренный ни одной ошибки!!! Так что тема очень даже полезной получилась. Кровью написана. И отдельное спасибо тебе ILYAUL. Предлагаю свою дружбу. Чем могу помогу.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Aug 2 2011, 17:46
Сообщение #62


Профессионал
*****

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



Цитата(MaksimYrievich @ Aug 2 2011, 21:42) *
Далее установил бит M103C как на рисунке, прошил и всё. TWI залетал как ошпаренный ни одной ошибки!!! Так что тема очень даже полезной получилась. Кровью написана. И отдельное спасибо тебе ILYAUL. Предлагаю свою дружбу. Чем могу помогу.

Согласен - ДОГОВОРИЛИСЬ biggrin.gif beer.gif


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post

5 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 03:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.02402 секунд с 7
ELECTRONIX ©2004-2016