ВСЁ по прошивке и программированию AT90S2313/ATTiny2313

Обсуждаем контроллеры компании Atmel.
Ответить
Модератор
Аватара пользователя
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург

Сообщение Aheir »

Такое случается при проблемах с кабелем
Оптимизм х (Опыт + Знания) = const
Контактная информация:
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 111
Зарегистрирован: Сб мар 31, 2007 13:53:07
Откуда: Lviv

Сообщение Lestat »

Aheir писал(а):Такое случается при проблемах с кабелем
походу дела плохой контакт земли, завтра перепаяю
Контактная информация:
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 75
Зарегистрирован: Чт дек 06, 2007 22:26:18

Сообщение @ndrey »

Доброго всем времени суток.
Замучался я программировать 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, шил многократно - все еще работает. Но что там можно сделать с тремя портами? Вот и решил взять что-то по-интереснее.
Перечитал эту ветку вдоль и поперек. Выполнил все, что здесь рекомендовали. Однако, безрезультатно. Завтра, конечно же я куплю новую микросхему, однако что-то мне подсказывает, что результат может стать таким же...

Подскажите, люди добрые, как мне справиться с бедой?
Встал на лапы
Аватара пользователя
Сообщения: 87
Зарегистрирован: Пн ноя 05, 2007 12:44:43
Откуда: C:\Russia\SPb

Сообщение Brutaller »

То, что было выставлено в порт, никакого отношения не имеет к прошивке. Я сначала подумал, что ты просто некорректно прошил фьюз CKSEL. Например, если он прошьется как CKSEL=0, то потом такой кристалл можно будет перешить только с подачей внешней тактовой. Но ведь ты говоришь, что пробовал внешний сигнал. Остается только пара вариантов, либо ты как-то спалил его. Либо некорректно зашились фьюзы SPIEN или RSTDISBL. А если произошла беда с этими фьюзами, то (если верить тому, что писали многие, а также одному пункту из раздела errata даташита) это равносильно смерти. Смотри в даташите раздел errata, пункт 2 "Parallel programming does not work". Если я не туплю, то получается, что кристалл может попасть в такое состояние, что и по SPI он не будет зашиваться и параллельным способом тоже. А вообще почитав разные форумы, я понял, что ATtiny2313 многие не любят из-за ее ненадежности и глюковатости. Но не смотря на это, мне именно этот кристалл на бывшей работе приходилось зашивать в очень больших кол-вах и проблем не возникало. Да и сам я себе приобрел такой для обучения )) , и по сей день его мучаю, перешивал его уже наверно тысячу раз, пока живой ))
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Открыл глаза
Аватара пользователя
Сообщения: 75
Зарегистрирован: Чт дек 06, 2007 22:26:18

Сообщение @ndrey »

Я же написал, что
@ndrey писал(а):Фузы, после того, как воспользовался советом Ксеньи больше не менял
Значится дело в другом...

В общем, решил я проблему так: укоротил 10-проводный шлейф до 10 см и все стало прошиваться.

Всем спасибо за участие!
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 87
Зарегистрирован: Пн ноя 05, 2007 12:44:43
Откуда: C:\Russia\SPb

Сообщение Brutaller »

@ndrey писал(а): В общем, решил я проблему так: укоротил 10-проводный шлейф до 10 см и все стало прошиваться.
А вот это меня удивило. Вспоминаю бывшую работу, так вот там длина шлейфа между микросхемой-буфером (HC244) и ISP разъемом была никак не менее 2-х метров(!). Хоть это и нарушение всех рекомендаций, но проблем с прошивкой никогда не возникало, а шить как я уже говорил приходилось очень много. В частности эту самую ATtiny2313 и всякие ATmega. На нынешней моей работе длина кабеля не менее одного метра. А дома шлейф на байтбластере тоже не менее 2-х метров. Обыкновенный байтбластер, плата и микросхема размещается в LPT разъеме.
Вобщем странно всё это...
Контактная информация:
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 978
Зарегистрирован: Пн ноя 27, 2006 07:52:01

Сообщение ИРБИС »

Потому как котятки одного простого правила не знают: нечётные проводники в шлейфе - сигнальные, чётные - земля. :)
Питаюсь копытными. Как исчезающий вид занесён в Красную книгу МСОП. Почему до сих пор не занесены в Красную книгу инженеры и учёные РФ?
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 111
Зарегистрирован: Сб мар 31, 2007 13:53:07
Откуда: Lviv

Сообщение Lestat »

@ndrey писал(а):Я же написал, что
@ndrey писал(а):Фузы, после того, как воспользовался советом Ксеньи больше не менял
Значится дело в другом...

В общем, решил я проблему так: укоротил 10-проводный шлейф до 10 см и все стало прошиваться.

Всем спасибо за участие!
наверное на тех выходах микроконтролера (через которые вы прошываете) стоят светодиоды, вот у меня тоже иногда непрошывалась тини пока я нерозгрузил выводы.
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 111
Зарегистрирован: Сб мар 31, 2007 13:53:07
Откуда: Lviv

Сообщение Lestat »

хочу зделать чтобы МК после приема пакета по УСАРТ, через прерывание, выводил принятый байт в порт, но невыходит, нужно какието конфиг. регистры менять?

Код: Выделить всё

.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
 ;----------------programa-------------
begin:	

out PortB,temp
rjmp begin	

	    
	    

;------------------pererivania-------------------
UART_RX:
in temp, UDR
reti
 ;----------------function-------------
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
Напоминаю, что подобные длинные цитаты надо оформлять в виде ПРИЛОЖЕНИЯ. Если сами не исправите, выкину вместе с ответом. Очень злой Сэр Мурр
Контактная информация:
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

Lestat писал(а):хочу зделать чтобы МК после приема пакета по УСАРТ, через прерывание, выводил принятый байт в порт, но невыходит
Посмотрите как использовать UART USART в AVR
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 111
Зарегистрирован: Сб мар 31, 2007 13:53:07
Откуда: Lviv

Сообщение Lestat »

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 подключены светодиоды, и после того как с компьютера отправляю байт, они как не горели так и не горят.
Контактная информация:
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

Lestat писал(а):спасибо, курю, только я в асме роюсь.
Вы можете скомпилировать примеры и посмотреть полученый правильный АСМ код в файлах .asm или .lst
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 84
Зарегистрирован: Пн ноя 12, 2007 20:53:05
Откуда: Одесса

Сообщение biDE »

Lestat писал(а):А вот прерывание по приему у меня не работает.
Для этого надо разрешить прерывание в регистре UCSRB, бит RXCIE
Встал на лапы
Аватара пользователя
Сообщения: 111
Зарегистрирован: Сб мар 31, 2007 13:53:07
Откуда: Lviv

Сообщение Lestat »

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
Вы прочли моё замечание по поводу прикрепления файла к собщению? Сэр Мурр
Контактная информация:
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск

Сообщение 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
Где собака зарыта?
Исходник в приложении.
Вложения
001.asm
Исходник
(618 байт) 555 скачиваний
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 111
Зарегистрирован: Сб мар 31, 2007 13:53:07
Откуда: Lviv

Сообщение Lestat »

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" ?
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 87
Зарегистрирован: Пн ноя 05, 2007 12:44:43
Откуда: C:\Russia\SPb

Сообщение Brutaller »

Как уже говорил 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 КБ) 644 скачивания
Контактная информация:
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск

Сообщение Chip115 »

Спасибо за поправочки. После работы обязательно гляну. Я хотел увидеть мигание светодиода в симуляторе т.к я есчо пока незнаю как ставить задержки. :)
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 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 секунд!!)
IN GOD WE TRUST
Контактная информация:
Встал на лапы
Аватара пользователя
Сообщения: 87
Зарегистрирован: Пн ноя 05, 2007 12:44:43
Откуда: C:\Russia\SPb

Сообщение Brutaller »

Степаныч, на самом деле странно, что у тебя получилось около 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

Т.е. у тебя к трем счетчикам добавляется еще один, который заставляет повориться все то, что уже было три раза )

Надеюсь идея ясна.

Удачи.
Контактная информация:
Ответить

Вернуться в «AVR»