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

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

Сообщение Aheir »

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

Сообщение Lestat »

Aheir писал(а):Такое случается при проблемах с кабелем

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

Подскажите, люди добрые, как мне справиться с бедой?
Аватара пользователя
Brutaller
Встал на лапы
Сообщения: 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 многие не любят из-за ее ненадежности и глюковатости. Но не смотря на это, мне именно этот кристалл на бывшей работе приходилось зашивать в очень больших кол-вах и проблем не возникало. Да и сам я себе приобрел такой для обучения )) , и по сей день его мучаю, перешивал его уже наверно тысячу раз, пока живой ))
Аватара пользователя
@ndrey
Открыл глаза
Сообщения: 75
Зарегистрирован: Чт дек 06, 2007 22:26:18

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

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

Значится дело в другом...

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

Всем спасибо за участие!
Аватара пользователя
Brutaller
Встал на лапы
Сообщения: 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
Контактная информация:

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

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

Сообщение Lestat »

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

Значится дело в другом...

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

Всем спасибо за участие!

наверное на тех выходах микроконтролера (через которые вы прошываете) стоят светодиоды, вот у меня тоже иногда непрошывалась тини пока я нерозгрузил выводы.
Аватара пользователя
Lestat
Встал на лапы
Сообщения: 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
 ;----------
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
Откуда: Москва
Контактная информация:

Сообщение tych »

Lestat писал(а):хочу зделать чтобы МК после приема пакета по УСАРТ, через прерывание, выводил принятый байт в порт, но невыходит


Посмотрите как использовать UART USART в AVR
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Аватара пользователя
Lestat
Встал на лапы
Сообщения: 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 подключены светодиоды, и после того как с компьютера отправляю байт, они как не горели так и не горят.
Аватара пользователя
tych
Э...
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва
Контактная информация:

Сообщение tych »

Lestat писал(а):спасибо, курю, только я в асме роюсь.


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

Сообщение biDE »

Lestat писал(а):А вот прерывание по приему у меня не работает.


Для этого надо разрешить прерывание в регистре UCSRB, бит RXCIE
Аватара пользователя
Lestat
Встал на лапы
Сообщения: 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

Вы прочли моё замечание по поводу прикрепления файла к собщению? Сэр Мурр
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 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 байт) 552 скачивания
Аватара пользователя
Lestat
Встал на лапы
Сообщения: 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" ?
Аватара пользователя
Brutaller
Встал на лапы
Сообщения: 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 КБ) 641 скачивание
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 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
Аватара пользователя
Brutaller
Встал на лапы
Сообщения: 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»