ВСЁ по прошивке и программированию AT90S2313/ATTiny2313
Доброго всем времени суток.
Замучался я программировать Tiny2313 - в AVRStudio программа отлаживается нормально, в Proteus все работает отлично, но прошить никак не мог, до тех пор, пока не наткнулся на статью Ксеньи, за что ей огромное спасибо. Сделал все, как она прописала, тинька завелась и начала работать. На радостях стал баловаться - зашивать в нее разные программы и смотреть, что к чему. Все получалось до тех пор, пока я не вшил в нее код, который выставляет в "1" все порты B, а на портах D делает "бегущий огонек". Прошил, все работает, как доктор прописал, НО... больше тинька не шьется. А счастье было так близко...
Использую AVReal + ByteBlaster. При очередной прошивке программа выдает:
Что за такое? Никак не пойму. Что заставило тиньку так себя вести? Неужели на это повлияло то, что все порты B установлены в "1" и далее не дают нормально запрограммировать микроконтроллер? Думаю, что дело не в этом. Фузы, после того, как воспользовался советом Ксеньи больше не менял, следовательно это не должно было повлиять. Использую внешний кварц на 4MHz. Ставил на 8, 10 и 20 - результат тот же. Подавал на XTAL1 внешний сигнал - не помогает. До этого баловался с 90S2323, шил многократно - все еще работает. Но что там можно сделать с тремя портами? Вот и решил взять что-то по-интереснее.
Перечитал эту ветку вдоль и поперек. Выполнил все, что здесь рекомендовали. Однако, безрезультатно. Завтра, конечно же я куплю новую микросхему, однако что-то мне подсказывает, что результат может стать таким же...
Подскажите, люди добрые, как мне справиться с бедой?
Замучался я программировать 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, шил многократно - все еще работает. Но что там можно сделать с тремя портами? Вот и решил взять что-то по-интереснее.
Перечитал эту ветку вдоль и поперек. Выполнил все, что здесь рекомендовали. Однако, безрезультатно. Завтра, конечно же я куплю новую микросхему, однако что-то мне подсказывает, что результат может стать таким же...
Подскажите, люди добрые, как мне справиться с бедой?
- Brutaller
- Встал на лапы
- Сообщения: 87
- Зарегистрирован: Пн ноя 05, 2007 12:44:43
- Откуда: C:\Russia\SPb
- Контактная информация:
То, что было выставлено в порт, никакого отношения не имеет к прошивке. Я сначала подумал, что ты просто некорректно прошил фьюз CKSEL. Например, если он прошьется как CKSEL=0, то потом такой кристалл можно будет перешить только с подачей внешней тактовой. Но ведь ты говоришь, что пробовал внешний сигнал. Остается только пара вариантов, либо ты как-то спалил его. Либо некорректно зашились фьюзы SPIEN или RSTDISBL. А если произошла беда с этими фьюзами, то (если верить тому, что писали многие, а также одному пункту из раздела errata даташита) это равносильно смерти. Смотри в даташите раздел errata, пункт 2 "Parallel programming does not work". Если я не туплю, то получается, что кристалл может попасть в такое состояние, что и по SPI он не будет зашиваться и параллельным способом тоже. А вообще почитав разные форумы, я понял, что ATtiny2313 многие не любят из-за ее ненадежности и глюковатости. Но не смотря на это, мне именно этот кристалл на бывшей работе приходилось зашивать в очень больших кол-вах и проблем не возникало. Да и сам я себе приобрел такой для обучения )) , и по сей день его мучаю, перешивал его уже наверно тысячу раз, пока живой ))
Я же написал, что
Значится дело в другом...
В общем, решил я проблему так: укоротил 10-проводный шлейф до 10 см и все стало прошиваться.
Всем спасибо за участие!
@ndrey писал(а):Фузы, после того, как воспользовался советом Ксеньи больше не менял
Значится дело в другом...
В общем, решил я проблему так: укоротил 10-проводный шлейф до 10 см и все стало прошиваться.
Всем спасибо за участие!
- Brutaller
- Встал на лапы
- Сообщения: 87
- Зарегистрирован: Пн ноя 05, 2007 12:44:43
- Откуда: C:\Russia\SPb
- Контактная информация:
@ndrey писал(а):В общем, решил я проблему так: укоротил 10-проводный шлейф до 10 см и все стало прошиваться.
А вот это меня удивило. Вспоминаю бывшую работу, так вот там длина шлейфа между микросхемой-буфером (HC244) и ISP разъемом была никак не менее 2-х метров(!). Хоть это и нарушение всех рекомендаций, но проблем с прошивкой никогда не возникало, а шить как я уже говорил приходилось очень много. В частности эту самую ATtiny2313 и всякие ATmega. На нынешней моей работе длина кабеля не менее одного метра. А дома шлейф на байтбластере тоже не менее 2-х метров. Обыкновенный байтбластер, плата и микросхема размещается в LPT разъеме.
Вобщем странно всё это...
- Lestat
- Встал на лапы
- Сообщения: 111
- Зарегистрирован: Сб мар 31, 2007 13:53:07
- Откуда: Lviv
- Контактная информация:
@ndrey писал(а):Я же написал, что@ndrey писал(а):Фузы, после того, как воспользовался советом Ксеньи больше не менял
Значится дело в другом...
В общем, решил я проблему так: укоротил 10-проводный шлейф до 10 см и все стало прошиваться.
Всем спасибо за участие!
наверное на тех выходах микроконтролера (через которые вы прошываете) стоят светодиоды, вот у меня тоже иногда непрошывалась тини пока я нерозгрузил выводы.
- Lestat
- Встал на лапы
- Сообщения: 111
- Зарегистрирован: Сб мар 31, 2007 13:53:07
- Откуда: Lviv
- Контактная информация:
хочу зделать чтобы МК после приема пакета по УСАРТ, через прерывание, выводил принятый байт в порт, но невыходит, нужно какието конфиг. регистры менять?
Напоминаю, что подобные длинные цитаты надо оформлять в виде ПРИЛОЖЕНИЯ. Если сами не исправите, выкину вместе с ответом. Очень злой Сэр Мурр
Код: Выделить всё
.cseg
.org 0
rjmp Reset
rjmp INT_0
rjmp INT_1
rjmp Timer1_capt1
rjmp Timer1_comp1
rjmp Timer1_OVF1
rjmp Timer0_OVF0
rjmp UART_RX
rjmp UART_UDRE
rjmp UART_TX
rjmp ANA_COMP
;Reset:
INT_0:
INT_1:
Timer1_capt1:
Timer1_comp1:
Timer1_OVF1:
Timer0_OVF0:
;UART_RX:
UART_UDRE:
UART_TX:
ANA_COMP:
reti
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
Напоминаю, что подобные длинные цитаты надо оформлять в виде ПРИЛОЖЕНИЯ. Если сами не исправите, выкину вместе с ответом. Очень злой Сэр Мурр
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
Lestat писал(а):хочу зделать чтобы МК после приема пакета по УСАРТ, через прерывание, выводил принятый байт в порт, но невыходит
Посмотрите как использовать UART USART в AVR
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
- Lestat
- Встал на лапы
- Сообщения: 111
- Зарегистрирован: Сб мар 31, 2007 13:53:07
- Откуда: Lviv
- Контактная информация:
tych писал(а):Lestat писал(а):хочу зделать чтобы МК после приема пакета по УСАРТ, через прерывание, выводил принятый байт в порт, но невыходит
Посмотрите как использовать UART USART в AVR
спасибо, курю, только я в асме роюсь, до С лапы недоросли,
а использовать УСАРТ научился,
использую так
Код: Выделить всё
transmiter:
sbis UCSRA,UDRE
rjmp transmiter
out UDR,temp
ret
Receive: sbis UCSRA,RXC
rjmp Receive
in r16, UDR
ret
А вот прерывание по приему у меня не работает.
Даже если сделаю такое
Код: Выделить всё
UART_RX:
inc temp
out PortB, temp
reti
К порту B подключены светодиоды, и после того как с компьютера отправляю байт, они как не горели так и не горят.
- tych
- Э...
- Сообщения: 2792
- Зарегистрирован: Ср апр 04, 2007 08:39:14
- Откуда: Москва
- Контактная информация:
Lestat писал(а):спасибо, курю, только я в асме роюсь.
Вы можете скомпилировать примеры и посмотреть полученый правильный АСМ код в файлах .asm или .lst
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
- Lestat
- Встал на лапы
- Сообщения: 111
- Зарегистрирован: Сб мар 31, 2007 13:53:07
- Откуда: Lviv
- Контактная информация:
biDE писал(а):Lestat писал(а):А вот прерывание по приему у меня не работает.
Для этого надо разрешить прерывание в регистре 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
Вы прочли моё замечание по поводу прикрепления файла к собщению? Сэр Мурр
- Chip115
- Сверлит текстолит когтями
- Сообщения: 1132
- Зарегистрирован: Пт фев 16, 2007 14:18:20
- Откуда: Новосибирск
- Контактная информация:
Всем привет. Возникла проблема с програмированием 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
Где собака зарыта?
Исходник в приложении.
Программа простейшая т.к это мой первый опыт по програмированию контроллера. По задумке светодиод должен мигать.
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 байт) 552 скачивания
- Lestat
- Встал на лапы
- Сообщения: 111
- Зарегистрирован: Сб мар 31, 2007 13:53:07
- Откуда: Lviv
- Контактная информация:
Chip115 писал(а):Всем привет. Возникла проблема с програмированием 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" ?
- Brutaller
- Встал на лапы
- Сообщения: 87
- Зарегистрирован: Пн ноя 05, 2007 12:44:43
- Откуда: C:\Russia\SPb
- Контактная информация:
Как уже говорил 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 таймер или совсем его отключать. Вобщем смотрим исправленный исходник в приложении.
- Вложения
-
- 002.asm
- (1.07 КБ) 641 скачивание
- Степаныч
- Открыл глаза
- Сообщения: 68
- Зарегистрирован: Ср июн 20, 2007 18:46:54
- Откуда: Красноярск
- Контактная информация:
Добрый день!Ребята вы не можете подсказать новичку, я прочитал полностью обучалку по мк и хочу чтоб задержка была длительность около 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 секунд!!)
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 секунд!!)
IN GOD WE TRUST
- Brutaller
- Встал на лапы
- Сообщения: 87
- Зарегистрирован: Пн ноя 05, 2007 12:44:43
- Откуда: C:\Russia\SPb
- Контактная информация:
Степаныч, на самом деле странно, что у тебя получилось около 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
Т.е. у тебя к трем счетчикам добавляется еще один, который заставляет повориться все то, что уже было три раза )
Надеюсь идея ясна.
Удачи.
Т.е. если у тебя в начале проги было что то типа:
.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
Т.е. у тебя к трем счетчикам добавляется еще один, который заставляет повориться все то, что уже было три раза )
Надеюсь идея ясна.
Удачи.