Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: DS1307Z +AtMega128
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Страницы: 1, 2
ILYAUL
Цитата(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
MaksimYrievich
Цитата(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. Или читалось когда либо?

Попробовал загнал Ваш код с последними изменениями. Ничего не пишет на светодиодах. Что Вы думаете об этом? В приложении ваш код с учётом последних изменений- для контроля моих действий.
ILYAUL
Цитата(MaksimYrievich @ Jul 31 2011, 21:20) *
Скажите а у Вас что читается из TWSR. Или читалось когда либо?

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

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

Стирайте этот код. И можете показать как запрограммированы FUSES
MaksimYrievich
Я даже просто включить автомат 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 у вас?
ILYAUL
Цитата(MaksimYrievich @ Jul 31 2011, 22:54) *
ЯILYAUL скажите а в симуляторе, фото которого вы приложили в предыдущем топике вы ручками поднимаете? В частности больше всего интересует значения в TWSR и особенно 0x08 в TWSR? И если нет, то что это за версия AVRSTUDIO у вас?

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

Кстати, а вот у меня в TWSR в не значащих разрядах всегда считывается какое то значение хотя я его туда естественно не закидывал сам.
ILYAUL
В младшем 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 - проверьте

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

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

Только сначала необходимо переписать программу моего программатора ибо когда я её писал я ваще забыл про третий конфигурационный байт и даже не вывел его чтение на форму программы. Это само по себе не проблема, благо знаком с разными языками программирования, но потребует некоторого времени для переключения меня самого с CИ++ на Делфи. За образец мной брался код программатора из "В.Н. Баранов, Применение микроконтроллеров AVR: схемы, алгоритмы, программы" и переклёпывался с Windows98 на XP. One minit`s please!!!!
MaksimYrievich
Усовершенствовал программатор. Перепаял AtMega64 на 128-ю, первую самую. Благо не ушатал её своими перепайками. И на самом деле этот бит сброшен оказался.
Получается, что два одинаковых и самых старших представителя семейства AtMega, с завода прошиваются в режиме совместимости с каким то обрубком - AtMega103, не имеющим TWI !!! И в таком виде поставляются в продажу!!!!! Господи... Какая кощунственность!!! sad.gif
ILYAUL
Я так понял , что наконец-то всё заработало. Тогда - поздравляю biggrin.gif .
Ну и я на будущее изучил D/S - этих MEGA - никогда сними не работал , но вдруг пригодится
MaksimYrievich
Далее установил бит M103C как на рисунке, прошил и всё. TWI залетал как ошпаренный ни одной ошибки!!! Так что тема очень даже полезной получилась. Кровью написана. И отдельное спасибо тебе ILYAUL. Предлагаю свою дружбу. Чем могу помогу.
ILYAUL
Цитата(MaksimYrievich @ Aug 2 2011, 21:42) *
Далее установил бит M103C как на рисунке, прошил и всё. TWI залетал как ошпаренный ни одной ошибки!!! Так что тема очень даже полезной получилась. Кровью написана. И отдельное спасибо тебе ILYAUL. Предлагаю свою дружбу. Чем могу помогу.

Согласен - ДОГОВОРИЛИСЬ biggrin.gif beer.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.