Доброго всем времени суток.
Замучался я программировать Tiny2313 - в AVRStudio программа отлаживается нормально, в Proteus все работает отлично, но прошить никак не мог, до тех пор, пока не наткнулся на статью Ксеньи, за что ей огромное спасибо. Сделал все, как она прописала, тинька завелась и начала работать. На радостях стал баловаться - зашивать в нее разные программы и смотреть, что к чему. Все получалось до тех пор, пока я не вшил в нее код, который выставляет в "1" все порты B, а на портах D делает "бегущий огонек". Прошил, все работает, как доктор прописал, НО... больше тинька не шьется. А счастье было так близко...
Использую AVReal + ByteBlaster. При очередной прошивке программа выдает:
AVReal писал(а):
Can't resync Reset pin released Adapter disabled
Что за такое? Никак не пойму. Что заставило тиньку так себя вести? Неужели на это повлияло то, что все порты B установлены в "1" и далее не дают нормально запрограммировать микроконтроллер? Думаю, что дело не в этом. Фузы, после того, как воспользовался советом Ксеньи больше не менял, следовательно это не должно было повлиять. Использую внешний кварц на 4MHz. Ставил на 8, 10 и 20 - результат тот же. Подавал на XTAL1 внешний сигнал - не помогает. До этого баловался с 90S2323, шил многократно - все еще работает. Но что там можно сделать с тремя портами? Вот и решил взять что-то по-интереснее.
Перечитал эту ветку вдоль и поперек. Выполнил все, что здесь рекомендовали. Однако, безрезультатно. Завтра, конечно же я куплю новую микросхему, однако что-то мне подсказывает, что результат может стать таким же...
Подскажите, люди добрые, как мне справиться с бедой?
То, что было выставлено в порт, никакого отношения не имеет к прошивке. Я сначала подумал, что ты просто некорректно прошил фьюз CKSEL. Например, если он прошьется как CKSEL=0, то потом такой кристалл можно будет перешить только с подачей внешней тактовой. Но ведь ты говоришь, что пробовал внешний сигнал. Остается только пара вариантов, либо ты как-то спалил его. Либо некорректно зашились фьюзы SPIEN или RSTDISBL. А если произошла беда с этими фьюзами, то (если верить тому, что писали многие, а также одному пункту из раздела errata даташита) это равносильно смерти. Смотри в даташите раздел errata, пункт 2 "Parallel programming does not work". Если я не туплю, то получается, что кристалл может попасть в такое состояние, что и по SPI он не будет зашиваться и параллельным способом тоже. А вообще почитав разные форумы, я понял, что ATtiny2313 многие не любят из-за ее ненадежности и глюковатости. Но не смотря на это, мне именно этот кристалл на бывшей работе приходилось зашивать в очень больших кол-вах и проблем не возникало. Да и сам я себе приобрел такой для обучения )) , и по сей день его мучаю, перешивал его уже наверно тысячу раз, пока живой ))
В общем, решил я проблему так: укоротил 10-проводный шлейф до 10 см и все стало прошиваться.
А вот это меня удивило. Вспоминаю бывшую работу, так вот там длина шлейфа между микросхемой-буфером (HC244) и ISP разъемом была никак не менее 2-х метров(!). Хоть это и нарушение всех рекомендаций, но проблем с прошивкой никогда не возникало, а шить как я уже говорил приходилось очень много. В частности эту самую ATtiny2313 и всякие ATmega. На нынешней моей работе длина кабеля не менее одного метра. А дома шлейф на байтбластере тоже не менее 2-х метров. Обыкновенный байтбластер, плата и микросхема размещается в LPT разъеме.
Вобщем странно всё это...
Потому как котятки одного простого правила не знают: нечётные проводники в шлейфе - сигнальные, чётные - земля.
_________________ Питаюсь копытными. Как исчезающий вид занесён в Красную книгу МСОП. Почему до сих пор не занесены в Красную книгу инженеры и учёные РФ?
Фузы, после того, как воспользовался советом Ксеньи больше не менял
Значится дело в другом...
В общем, решил я проблему так: укоротил 10-проводный шлейф до 10 см и все стало прошиваться.
Всем спасибо за участие!
наверное на тех выходах микроконтролера (через которые вы прошываете) стоят светодиоды, вот у меня тоже иногда непрошывалась тини пока я нерозгрузил выводы.
хочу зделать чтобы МК после приема пакета по УСАРТ, через прерывание, выводил принятый байт в порт, но невыходит, нужно какието конфиг. регистры менять?
reset: ldi Temp,RamEnd ;èíèöèàëèçàöèÿ ñòåêà out SPL,Temp
ldi Temp,0b11111111 ;íàñòðîéêà ïîðòîâ out DDRB,Temp
ldi Temp,0b1111011 ;íàñòðîéêà ïîðòîâ out DDRD,Temp
rcall init;³í³ö³àë³çàö³ÿ ÓÑÀÐÒ
SEI ;---------- begin:
out PortB,temp rjmp begin
;---------- UART_RX: in temp, UDR reti ;---------- init: ldi temp1,0 ldi temp,47 out UBRRH,temp1 out UBRRL,temp ldi temp, (1<<RXEN)|(1<<TXEN) out UCSRB,temp ldi temp,(1<<USBS)|(3<<UCSZ0) out UCSRC,temp ret
Напоминаю, что подобные длинные цитаты надо оформлять в виде ПРИЛОЖЕНИЯ. Если сами не исправите, выкину вместе с ответом. Очень злой Сэр Мурр
Для этого надо разрешить прерывание в регистре UCSRB, бит RXCIE
спасибо, догдался в даташит посмотреть:)
вот так выглядет функция настройки усарт: скорость 9600, кварц 7.37, прием, передача, перерывания после приема.
Код:
init: ldi temp1,0 ldi temp,47 out UBRRH,temp1 out UBRRL,temp ldi temp, (1<<RXEN)|(1<<TXEN)|(1<<RXCIE) out UCSRB,temp ldi temp,(1<<USBS)|(3<<UCSZ0) out UCSRC,temp ret
Вы прочли моё замечание по поводу прикрепления файла к собщению? Сэр Мурр
Всем привет. Возникла проблема с програмированием Tiny2313.
Программа простейшая т.к это мой первый опыт по програмированию контроллера. По задумке светодиод должен мигать.
AVR Studio при компиляции выдает:
Copyright (C) 1995-2006 ATMEL Corporation
C:\000\2313.asm(14): Including file 'C:\Fgyjns\tn2313def.inc'
C:\Fgyjns\tn2313def.inc(123): error: Attempt to redefine keyword 'z'
C:\000\2313.asm(14): info: 'C:\Fgyjns\tn2313def.inc' included from here
C:\Fgyjns\tn2313def.inc(383): error: Attempt to redefine keyword 'or'
C:\000\2313.asm(14): info: 'C:\Fgyjns\tn2313def.inc' included from here
Assembly failed, 2 errors, 0 warnings
Где собака зарыта?
Исходник в приложении.
Вложения:
Комментарий к файлу: Исходник 001.asm [618 байт]
Скачиваний: 530
Всем привет. Возникла проблема с програмированием Tiny2313. Программа простейшая т.к это мой первый опыт по програмированию контроллера. По задумке светодиод должен мигать. AVR Studio при компиляции выдает: Copyright (C) 1995-2006 ATMEL Corporation
C:\000\2313.asm(14): Including file 'C:\Fgyjns\tn2313def.inc' C:\Fgyjns\tn2313def.inc(123): error: Attempt to redefine keyword 'z' C:\000\2313.asm(14): info: 'C:\Fgyjns\tn2313def.inc' included from here C:\Fgyjns\tn2313def.inc(383): error: Attempt to redefine keyword 'or' C:\000\2313.asm(14): info: 'C:\Fgyjns\tn2313def.inc' included from here
Assembly failed, 2 errors, 0 warnings Где собака зарыта? Исходник в приложении.
в АВР студио:
проджект-асемблер опшнс- поставить версия 2.
как в асемблере зделать такое "если регистр_1>=14" ?
Как уже говорил Lestat, в AVRStudio надо переключиться на AVR Assembler version 2. Во вторых убрать строчку ".device ATTINY2313", она и так уже есть в файле "tn2313def.inc" и если ее оставить, то ассемблер будет выдавать warning по этому поводу. Далее, не надо указывать абсолютный путь к "tn2313def.inc", достаточно написать .include "tn2313def.inc", ассемблер сам найдет нужный файл, по умолчанию avrasm2 ищет его в \Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\ Если не используются прерывания, зачем делать в начале какие-то непонятные прыжки? Убираем строку "rjmp Init". Далее, зачем в данном случае устанавливать все порты на выход? Ведь у вас светодиод как я понял подключен к выводу PB0 ? Вот давайте этот пин и настроим на выход. Кстати, управлять подтягивающими резисторами можно до тех пор, пока в соответствующем бите DDRX находится "0", если вы закинули туда "1", то вывод уже работает на выход и изменяя биты в PORTX вы управляете уже не подтягивающими резисторами. Так что у вас там ошибочка в листинге. Далее, если мы будем переключать светодиод при тактовой частоте 4MHz, вы ожидаете увидеть какие-то мигания? Вы сможете увидеть только то, что СД светится в половину яркости. Так что между переключениями состояния надо бы задержку делать. И еще, надо бы взять за правило в самом начале программы инициализировать указатель стека и настраивать watchdog таймер или совсем его отключать. Вобщем смотрим исправленный исходник в приложении.
Добрый день!Ребята вы не можете подсказать новичку, я прочитал полностью обучалку по мк и хочу чтоб задержка была длительность около 1 минуты(+-5 сек.) можно ли вот эту задержку установить на минуту
Delay: out PortD,Temp
ldi Temp1,0
ldi Temp2,0
ldi Temp3,255
Loop: dec Temp1
brne Loop
dec Temp2
brne Loop
dec Temp3
brne Loop
Частота работы контроллера 4Мгц, максимально получалось установить на 27 секунд и небольше!Подскажите что нужно сделать либо цифры переставить либо задержку как то изменить?Кстати цифры раз 50 переставлял но минуты не получалось(не более 27 секунд!!)
Степаныч, на самом деле странно, что у тебя получилось около 27 секунд, должно было получиться примерно 12. Ну да ладно, 27 так 27 )) На самом деле все просто. Вобщем поиграйся со значениями, которые загружаются в переменные Temp1, Temp2, Temp3 так, чтоб задержка получилась 20 сек. (раз уж у тебя даже 27 получалось). Поиграться придется скорее всего только с Temp3. Потом присвой символьное имя Temp4 еще одному незадействованному регистру.
Т.е. если у тебя в начале проги было что то типа:
.def Temp1 = r16
.def Temp2 = r17
.def Temp3 = r18
то добавь в тот же список вот это:
.def Temp4 = r19
и приведи задержку к такому виду:
ldi Temp1, 0
ldi Temp2, 0
ldi Temp3, X ;вместо X значение, которое получилось для 20сек.
ldi Temp4, 3 ;все, что уже было повторим три раза =)
Loop: dec Temp1
brne Loop
dec Temp2
brne Loop
dec Temp3
brne Loop
dec Temp4
brne Loop
Т.е. у тебя к трем счетчикам добавляется еще один, который заставляет повориться все то, что уже было три раза )
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения