Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: замена s1200 на tiny 2313
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Terapefft
Помогите пожалуста никак не могу разобратся с прогой, она написана под 1200, мне надо ее под тини2313 переделать. вторую неделю ничего не получается.... посмотрите пожалуста. она вроде компилится, но когда прошиваешь мк и на плату устанавливаешь то нифига не работает, просто я совсем недавно начал этим заниматся.....или посоветуйте какую нить книгу где асемблеру уделяется большое внимание, потому что я прочитал Естифеева и еще какую то, но там основной уклон на архитектуру, поэтому я никак не могу разобратся со всеми тонкостями
Семён
Вопрос на эту тему поднимался неоднократно, но повторюсь в AT90S1200 аппаратный стек, а в ATTiny2313 нет, его надо при старте установить, используя следующие команды:
ldi tmp,low(RAMEND)
out SPL,tmp
Также надо проверить, что там твориться с прерываниями (не для всех прерываний At20s1200, совпадают вектора прерываний в ATTiny2313, плюс в ATTiny2313 их больше), хотя думаю можно сначала только выставить стек. Плюс посмотреть используется компаратор или нет (в ATTiny2313 по умолчанию он включен.) И напоследок самое интересное: правильно нужно выставить фуз биты в ATTiny2313 их очень много, у Евстигнеева они очень неплохо описаны. И напоследок почитайте документ AVR093 на сайте Atmel.
Terapefft
Цитата(Семён @ Sep 13 2006, 11:14) *
Также надо проверить, что там твориться с прерываниями (не для всех прерываний At20s1200, совпадают вектора прерываний в ATTiny2313, плюс в ATTiny2313 их больше), хотя думаю можно сначала только выставить стек. Плюс посмотреть используется компаратор или нет (в ATTiny2313 по умолчанию он включен.) И напоследок самое интересное: правильно нужно выставить фуз биты в ATTiny2313 их очень много, у Евстигнеева они очень неплохо описаны. И напоследок почитайте документ AVR093 на сайте Atmel.


стэк уже выставлен давно и с фузами экспериментировал, прерывания вроде тож нормально, все равно на плате индикации либо ничего не высвечивается, либо частями
Семён
Схему и код в студию тогда. По другому думаю проблему не ришить. Скорей всего Вы всеже гдето ошибаетесь.
Alex_Pol
Насчёт стека и вектора прерывания я ему неделю как подсказал. Это он исправил. Там ещё есть обращение к ЕЕПРОМ, и могут гнездиться грабли. Сейчас нет времени разбираться. А схему я у него в самом начале попросил. Не даёт. Партизан, блин. smile.gif Начало истории - в ветке для чайников.
Terapefft
а вот и схема платы индикации
Семён
Цитата(Terapefft @ Sep 13 2006, 14:07) *
а вот и схема платы индикации

Данная схема не должна вызывать проблем с переносом, поэтому повторюсь Вы гдето ошибаетесь или у Вас неисправный чип. На всякий случай кладу руское описание на AT90S1200. Проверьте все регистры совподают по адресам с AtTiny2313
OLEG_BOS
Цитата(Terapefft @ Sep 13 2006, 13:07) *
а вот и схема платы индикации


Беглым взглядом по схеме, могу сказать: Невидно общей точки соединения цепи OV c общей шиной (точки соединения S1-S4, С1) wink.gif Есть она там или ее нет ?
Terapefft
Цитата(OLEG_BOS @ Sep 13 2006, 14:47) *
Беглым взглядом по схеме, могу сказать: Невидно общей точки соединения цепи OV c общей шиной (точки соединения S1-S4, С1) wink.gif Есть она там или ее нет ?

есть smile.gif
defunct
редко встретишь ветку, где все сообщения отредактированы.

Программа - "ужос".
имена tmp1, tmp2, tmp3 не добавляют читабельности, также как и метки pm1, pm2, pm3, pm4, pme1 и т.л..

Позволю себе предположить, что программу писали не Вы. Может быть проще просто купить s1200 и зашить туда оригинал программы (при условии, что программа работала под s1200).

Цитата
или посоветуйте какую нить книгу где асемблеру уделяется большое внимание, потому что я прочитал Естифеева и еще какую то, но там основной уклон на архитектуру, поэтому я никак не могу разобратся со всеми тонкостями

Весь ассемблер AVR помещается на двух листах - Instruction Set Summary. Спорные вопросы решаются с помощью документа AVR Instruction Set Reference. А вот программировать с помощью этого можно лишь только поняв архитектуру, о которой рассказывается в соответвующем даташите. Учитывая что Instruction Set Summary находится в даташите, то для программирования на ассемблере AVR необходимо и достаточно иметь в распоряжении только даташит на интересующий МК и help к ассемблеру (имеется AVR-Studio).
IgorKossak
Цитата(defunct @ Sep 14 2006, 01:04) *
редко встретишь ветку, где все сообщения отредактированы.

Надеюсь, хоть в этом случае научатся цитировать правильно, только то, на что отвечают, а не весь топик с самого начала со всеми вложенными цитатами.
Alex_Pol
2 terapefft попробуйте в это кусок:
EEWrite:
sbic EECR,EEWE ; if EEWE not clear
rjmp EEWrite ; wait more
out EEAR,zl ; output address
out EEDR,tmp3 ; output data
sbi EECR,EEMPE ; ВСТАВИТЬ ВОТ ЭТУ КОМАНДУ!!!
sbi EECR,EEWE ; set EEPROM Write strobe
inc zl
cpi zl,10
brne pme1
mov zl,tmp1

Это должно помочь.
defunct
Цитата(Alex_Pol @ Sep 14 2006, 15:06) *
sbi EECR,EEMPE ; ВСТАВИТЬ ВОТ ЭТУ КОМАНДУ!!!
sbi EECR,EEWE ; set EEPROM Write strobe
Это должно помочь.

и мои 5 копеек:

sbi EECR,EEMPE ; ВСТАВИТЬ ВОТ ЭТУ КОМАНДУ!!!
sbi EECR,EEPE ; set EEPROM Erase/Program strobe ; <-- поменять EEWE на EEPE

хоть сути это и не изменит.
Terapefft
2 Alex_Pol попробовал так как вы сказали, все равно индикатор не загорается, только когда нажимаешь кнопки зажигаются отдельные сегменты. может там что нибудь надо в схеме переделать? я уже пробовал кварц подключать - никакого эфекта...
Семён
Цитата(Terapefft @ Sep 15 2006, 10:13) *
2 Alex_Pol попробовал так как вы сказали, все равно индикатор не загорается, только когда нажимаешь кнопки зажигаются отдельные сегменты. может там что нибудь надо в схеме переделать? я уже пробовал кварц подключать - никакого эфекта...

Загрузил Ваш код в AVR-Studio, но он отказался компилироваться. Для того чтобы программа скомпилировалась пришлость вставить следующий оператор: def T4H =r12. В отладчике после этого на первый взгляд программа заработала. Детально изучать код нехочиться (про стиль уже писали), но навсякий случай я бы еще вручную сделал бы так:
;вектора прерывания
S1: rjmp start
rjmp ERR1
rjmp ERR1
rjmp ERR1
rjmp ERR1
rjmp ERR1
rjmp tim_0
rjmp ERR1
rjmp ERR1
rjmp ERR1
rjmp ERR1
rjmp ERR1
rjmp ERR1
rjmp ERR1
rjmp ERR1
rjmp ERR1
rjmp ERR1
rjmp ERR1
rjmp ERR1
rjmp ERR1


start ldi tmp1,low(RAMEND) ; определение начала
out SPL,tmp1 ; стэка в ОЗУ
далее ВАШ код
Далее напишите простенький код по метки ERR1 который зажигал бы какой небудь светодиод. И Вам сразу станет ястно Выскакивает ли программа по какому небудь прерыванию не предусмотреную в Вашей программе.
Alex_Pol
Цитата(Terapefft @ Sep 15 2006, 09:13) *
2 Alex_Pol попробовал так как вы сказали, все равно индикатор не загорается, только когда нажимаешь кнопки зажигаются отдельные сегменты. может там что нибудь надо в схеме переделать? я уже пробовал кварц подключать - никакого эфекта...
"Киса, я хочу спросить вас как художник художника - вы рисовать умеете?" У меня к вам вопрос несколько иного рода - вы авровский асм хоть немного знаете? Я показал вам фатальные ошибки, возникающие при миграции с S1200 на Tinny2314 в вашей программе. Причём, программа - явная лажа, потому как не компилится. Опять неопределённый ТН4. Т.е., вы подсовываете нам чёрте какой исходник, мы тут теряем время, а прошивка у вас не работает. И правильно делает. Потом, подозреваю, что она не имеет ничего общего с предъявленным исходником. Я вас ещё в ветке для чайков просил прислать HEX - файл, если нет исходника на асме. Тот, которы вы заливаете в МК. Надеюсь, вы не расчитываете, что кто - то будет лопатить 18кб кода, который не работает по определению. Мы здесь не ясновидцы, и не можем знать, что скрывается под именем ТН4. Может, это и впрямь, r12?Пока понятно только то, что исходник и рабочая прошивка - разные вещи.
2defunct "sbi EECR,EEPE ; set EEPROM Erase/Program strobe ; <-- поменять EEWE на EEPE" смысла нет. В файле tn2313def.inc есть магическая строчка:".equ EEWE= EEPE ; For compatibility
Семён
Извеняюсь за OFFTOP. Terapefft подъежайте комне с платой (всего четыре часа на электрички и 10 минут от Казанского вокзала пешком) через минут 20 скажу срок и стоимость переделки. Думаю это будет самый быстрый для Вас путь запустить плату.
defunct
Цитата(Alex_Pol @ Sep 15 2006, 13:49) *
2defunct "sbi EECR,EEPE ; set EEPROM Erase/Program strobe ; <-- поменять EEWE на EEPE" смысла нет. В файле tn2313def.inc есть магическая строчка:".equ EEWE= EEPE ; For compatibility

Да, я написал, что сути это не изменит, однако смысл в читабельности кода:
Или пишите
sbi EECR, EEMWE ; Master Write En
sbi EECR, EEWE ; Write En

или раз уж там EEMPE (Master Program En), то должен быть и EEPE (Program En).
иначе трудно понять к чему относится первая команда.
Terapefft
всем агромное спасиба!!! я наконец то заставил все это дело работать smile.gif
Alex_Pol
Цитата(Terapefft @ Sep 26 2006, 14:16) *
всем агромное спасиба!!! я наконец то заставил все это дело работать smile.gif

Молодца. cheers.gif Прошу прощения, что не успел помочь, как обещал. Запёрли в командировку, только сегодня вернулся. Не плохо было бы рассказать, в чём была проблема. С 2313 у многих при переходе со старых серий неувязки случаются.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.