AVR Studio ликбез

Установка.
Сначала надо с сайта atmel.com скачать последнюю версию AVR Studio. Весит она что то около 30 метров. Можно и старые релизы использовать, не преступно, но там может не оказаться новых микроконтроллеров. AVR Studio, как и многие буржуйские программы, крайне хреново понимает русские имена и длинные пути. Поэтому ставь ее по максимально простому пути, что то вроде C:\AVR\ А сами проекты тоже держи как можно ближе к корню, У меня, например, это D:\Work\AVR — никаких имен длинней 8 символов и, конечно же, никаких русских символов. Привет родимый DOS, как говорится.

Да, если планируешь (если не планируешь, то все равно скачай и поставь, не помешает) писать на Си, то рекомендую скачать GCC aka WinAVR и установить ее ДО студии, туда же, поближе к корню. Тогда студия подхватит ее в качестве своего плагина. Если поставить после, то тоже, может быть подхватит, но возможны проблемы.

Первый запуск и знакомство с оболочкой
При старте Студия сразу же кидается в тебя мастером создания нового проекта.

В центре будут уже созданные проекты, а нас интересует кнопка New Project. Жми ее и вводи параметры будущей разработки.

Выбирай тип языка на котором будешь писать: Си или Ассемблер, а также имя будущего проекта. Также не помешает указать путь к папке с проектами. Студия умная и запомнит ее раз и навсегда и под каждый новый проект будет генерить новую папку. Так что скоро там будет полный гадюшник :))))) Дальше есть две кнопки Finish и Next. Тебе надо жать на Next. Нажмешь на финиш и получишь пустой проект в котором даже процессор то не определен. А вот если Next, то будет следующий диалог:

Сильно сомневаюсь, что у тебя первоначально сразу же будет AVR Dragon или какой нибудь ICE 2, так что мы будем симулировать. Выбирай симулятор. Чем отличается AVR Simulator от AVR Simulator2 я так и не понял, работают одинаково. Выбрал? Вот теперь FINISH HIM! В смысле жми Finish.

Во, появилось пустое окно проекта. Оглядим что тут есть:

Увеличить скриншот

Слева — окно ресурсов МК. Тут ты будешь глядеть что происходит с твоим контроллером. Какие где биты стоят, что на портах, что в счетных регистрах, что в регистрах конфигурации. В центре окно кода, справа же окно проекта — тут будут все файлы показаны. Внизу, под окном кода, отрыг сообщений компилятора. Там все ошибки и косяки отображаются при компиляции проги.

Вверху главное меню. Все там на хоткеях, поэтому заучивай их сразу и будет тебе счастье.

Подробно по пунктикам. Первый ряд.

  • Бинокль — поиск в коде. Кроме поиска там есть еще Mark ALL — пометить строки с найденым барахлом. Появляются такие голубенькие меточки возле строк.
  • Синий флажок и компания — поставить/снять пометку вручную. Удобнейшая вещь эти пометки. Пользуйся!
  • Две фиговины для форматирования блоков текста. Типа выделил процедуру, а потом подвинул ее влево или вправо. Сишники оценят :)
  • Синяя муть и птичка — кнопки для программаторов понтовых. Если их у тебя нет, то забей.
  • Стрелка Play — запуск симуляции.
  • Квадратик Stop — остановка симуляции. Все просто.
  • Листок со стрелочкой — запуск программы.
  • Пауза — остановка программы там где получилось
  • синяя стрелка аля Enter — виртуальный Reset контроллера
  • Желтая стрелка — показать где программа находится сейчас. Жутко полезно когда проект побит на части, и ты пытаешься найти где прога стоит в данный момент.
  • Три стандартные кнопки любого отладчика Step Into — сделать шаг по тексту программы. Step Over — сделать шаг по тексту, но не заходить в процедуры и функции (процедуры и функции при этом выполняются, просто нам это не показывают). Step-Out — Выход из процедуры на уровень выше. Конечно, назад МК шагать не умеет, но вот если там цикл какой, то Step Out это равносильно тому, что МК сделает одну итерацию цикла и встанет над инструкцией.
  • Фигурные скобки и стрелка — выполнить программу до текущего положения курсора. Пощелкай этой кнопочкой и сам поймешь что это
  • Красная точка — BreakPoint поставить бряк. О брейпоинтах ниже.
  • Крестик и красная жопа — нажмешь ее и всем брейкпоинтам в проге настанет жопа — их удалит.
  • Очки — это Watch, способ подглядывать за какой нибудь переменной, адресом в памяти или регистром. О них тоже потом.
  • Кнопки переключалок окон, включать выключать разные блоки интерфейса. Потыкайся по ним и поймешь сам.


Второй ряд:
Тут ничего не работает, т.к. нет подключенных девайсов (JTAG или STK500) и нас интересуют только две последние кнопки.
Первая из них это компиляция проекта, вторая компиляция и запуск симуляции.

Теперь если ты забьешь в проект простейший код, например,

1
2
3
4
5
	.include "m8def.inc"	; Используем мега8
M1:	NOP			; Ничего не делаем (команда NOP просто пропускает один такт и занимает одно слово в памяти)
	NOP			; Опять ничего не делаем
	NOP			; И снова ничего не делаем
	RJMP M1			; Возвращаемся к метке М1 и снова ничего не делаем

Куда уж проще :) То сможешь скомпилировать проект и запустить процесс отладки.

При запуске симулятора повылазит куча разных новых окошек, о которых я тебе сейчас расскажу. Гляди на скриншот:

Увеличить скриншот

I/O View
Окно переферии, то что справа. Обрати внимание на заголовок окна I/O View — там есть строка поиска и ряд кнопочек. Потыкай их, чтобы получить наиболее удобное представление. Я обычно ставлю Tree View. Каждый регистр можно развернуть. Каждый бит подписан и во всплывающей подсказке написано его назначение. Также настоятельно рекомендую прошерстить контекстное меню в этом блоке и выставить там галку Show Bit numbers — удобно. Черный квадратик — бит есть. Белый — бита нет. Там же указано значение в байте. В процессе отладки каждый бит можно вручную принудительно выставить или сбросить. Сэмулировав, например, нажатие кнопки.

Processor
Слева есть окно Processor, в нем указана вся подноготная ядра в текущий момент.

  • Program Counter — счетчик адресов. По нему можно узнать куда уйдет программа на следующем шаге. Когда отлаживаешь всякие индексные переходы, да извращенские конечные автоматы с переходами вида:

    1
    2
    3
    4
    5
    
     	LDI R16,AddresL ; Кто сказал, что индексные переходы только по спец регистрам?
     	LDI R17,AddresH
     	PUSH R17
     	PUSH R16	; ICALL? Щаз! Откуда хотим оттуда и скачем. 
     	RET		; Наш извращенский метод!

    Вот когда такие конструкции отлаживаешь PC становится твоим любимым регистром :)

  • Туда же Stack Pointer — указатель стека. Сначала глядим туда, потом в память куда он указывает, и палим где у нас косяк со стеком. Либо если SP не вышел на 0, а по идее доложен был, то у нас срыв стека и неизбежная упячка пыщь пыщь!!!111.
  • Слово из трех букв — три индексные пары X, Y, Z — вообщет это те же регистры от 26 до 31го, а тут для удобства выведены.
  • Cycle Counter — просто счетчик тиков процессора. Ни разу не пригождался.
  • Frequensy — текущая частота эмулируемого процессора. Сразу выставляй ее правильно. Как ее сменить? О! Золотой вопрос. Тому кто придумал прятать эту настройку в задницу надо гвоздь в голову забить. Ничего, нашли, читай ниже.
  • Stop Watch — а вот это мега вещь! Время от старта. По нему можно вычислять сколько времени выполняется тот или иной кусок кода. Например задержка. Только изначально он показывается в микросекундах. Нам такие величины обычно не нужны, поэтому лезь в контекстное меню и переключай его в миллисекунды.
  • SREG это понятно — флаги.
  • Ну и 32 регистра. Правда под регистры я выделил отдельное окошко (слева внизу). Кстати, можно вручную во время эмуляции вписать любое значение в регистр.


Memory
Окно памяти. Можно в списке выбирать любое адресное пространство. Хочешь флеш, хочешь епром, или ОЗУ.

Watch
Это Watch лист. Можно на любой адрес, переменную или любой регистр навесить гляделку и там всегда будет отображаться его содержимое. Удобно при отладке, чтобы не шерстить по коду. Также содержимое регистров/переменных подсвечивается в подсказке при наведении мыши.

Отладка в AVR Studio
Код ты написал, он у тебя даже скомпилировался. Но от радости прыгать не получается — не работает как задумано. Чтож, бывает. Начинаем избавлять код от лажи — отлаживать.
Сначала подготовь плацдарм и выстави требуемую частоту процессора.

Как выставить частоту процессора в AVR Studio:
Загадка века, между прочим. Сходу фиг найдешь. Короче, запускай процесс симуляции. Только в этом случае появится нужный пункт меню. А потом лезь в меню Debug -> AVR Simulations Options. Ну не козлы, а? В такие гребеня прятать столь важный параметр. Я почти два месяца его в свое время искал. Там же можно выставить адрес бутлоадера (он зависит от Fuse Bits в реальном МК).

Итак, симуляция запущена, а желтая стрелка бодро указывает на первую команду. Потыкай на клавишу F11, погляди как процессор шагает. Если все нормально, то переходи на то место, где у тебя предпологаемый затык. Например, не выставляется бит в порт. Можно поставить в это место курсор и нажать Run to Cursor, это если по быстрому. Но лучше использовать брякпоинт.

BreakPoint
Это точка останова. Т.е. если какое то условие совпадет, то процессор встанет как вкопанный, пока ты не примешь решение, что же делать дальше. Мощнейшее средство отладки. Самый простой случай это установка Breakpoint — кнопкой F9, она же его и убирает. Через контекстное меню брейпоинт можно временно дезактивировать. Все, если теперь ты нажмешь на F5 то проц, пойдет молотить код подряд, пока не дойдет до брейкпоинта. Где встанет как вкопаный, перейдя в пошаговый режим.

Техническое отступление, при желании можно его пропустить
Не получилось? Прождал полтора часа, а бряк так и не наступил? Ну значит где то у тебя косяк, зациклило прогу. Жми паузу и смотри где переклинило процессор. Можешь пошагово потрейсить и посмотреть в каком именно месте оно крутится. А дальше уже думать. Отработка больших циклов, может быть очень длительной. Например, задержка длительностью в двадцать секунд, эмулируется в Студии порядка пяти минут!!! (на моем древнем Athlon 950) так что если у тебя где то тупит, то не помешает глянуть на показания StopWatch — может на самом деле все еще нормально, просто подождать надо. Чтобы не тупить на таких циклах я их на время отладки закомменчиваю или меняю предделитель таймера с 1024, на 1. На логику же это не влияет, так что можно проскочить их по быстрому.

Бряки бывают разные. Добавляются Брейкпоинты из меню Debug -> New Breakpoint их там два вида. Programm Breakpoint — это тупо точки останова на конкретном месте. Их проще расставлять не отсюда, а прям в коде на нужной строке. А вот ;Data Breakpoint это уже куда интересней. Погляди на выпадающий список — есть где развернуться. Тут тебе и совпадение битов, и равенство нужному числу, и просто обращение к адресу/регистру/памяти. Причем можно указывать сразу битовую маску. А в разделе Location выбрать любой байт памяти или регистр конфигурации. Мало того, в настройках брейка можно выбрать после скольких событий должен сработать этот бряк. Например, ты поставил брейк на начало цикла, нужно тебе поглядеть что происходит на какой-нибудь 140 итерации. Не будешь же ты тыкать пока оно там все 140 раз не прокрутится. Ставим в свойствах бряка число хитов которые он должен пропустить — 140 и на 140 итерации он тормознет программу. Удобно, черт возьми!
Все брейкпоинты видны в окне Breakpoint and tracepoint. Которое возникает внизу, там же где и сообщения об ошибках, в виде закладки. Оттуда им можно менять свойства, там же можно вывести отображение числа хитов и другие свойства бряка.

Работа с портами, эмуляция кнопок и прочего внешнего оборудования.
Есть в отладке AVR Studio одно небольшое западло, точнее особенность. Когда ты устанавливаешь порт на вход, делая подтяжку на резистор:
DDR= 0
PORT=1
То вывод виртуального МК остается равен нулю!!! Таким образом, все кнопки в отладчике AVR Studio по дефолту оказываются нажатыми! Нужно вручную выставить значение PIN, протыкав соответствующие галочки. Неудобно, но так.
А еще можно заказать вывод лога из порта или заливку туда данных извне! Вот это ваще мега фича. Во время отладки, в меню Debug->Simulation Options в разделе Stimuli&Loggin можно выбрать на какой порт, повесить либо логгер, либо же загнать дамп нужных циферок. Входные данные задаются в файле *.sti в формате такого вида [номер таката]:[значение] примерно так:

000000006:01
000000010:02
000000014:03
000000018:04
000000022:05
000000026:06
000000030:07

Можно задавать его вручную, можно написать программу в той же студии, которая тебе его сгенерит :)))) А можно применить одну зашибенную программку stimuligenerator_net20, которую написал широко известный в узких кругах товарищь ARV обитающий на сайте arv.radioliga.com Кстати, рекомендую к посещению, достойный ресурс.
Программка проста как мычание — выставляешь нужные биты по времени, не забыв указать частоту принимающего МК (чтобы такты выставило правильно). Опа и никаких забот :) Для работы программка правда требует .NET окружение, поэтому вначале придется скачать 30МБ .Net Frame Work если ты его себе еще не поставил.

Выходящий лог можно наблюдать в Студии в окне Message (вкладка рядом с сообщениями об ошибках компиляции) и потом поглядеть в файле. Формат там такой же (номер такта:значение порта). Такты идут по порядку при старте процессора, с нуля. Его же можно также открыть stimuligenerator‘ом. Короче, программа Must Have.

Работа с прерываниями
Ну тут все просто, хочешь прерывание — ткни вручную бит ее флага, мол вот оно, и прерывание начнется. Особенно это актуально для всяких внешних источников. Вроде UART или INT. После ручного вызова, например, RX прерывания не грех будет взять и вбить ручками в нужный регистр якобы принятое значение. Опа и словно так и было :)))))

Ладно, на сегодня хватит. Потом еще парочку телег по отладке в AVR Studio толкну. Мне, например, уже давно никакие эмуляторы вроде Proteus не нужны. На все хватает родимой студии, да UART вывода. Ну еще парочка примочек, но о них в следующий раз.

342 thoughts on “AVR Studio ликбез”

          1. Ну как бы видит, на работе под ХП через СТК200 понькой прошивал на раз. Да и что пони, что дудка это все тоже кустарные поделки :)

              1. Ну запросто. Оно же все с портом работает через жопу, аки в добром досе. А винда так просто к LPT не пускает. По хорошему надо делать по принципу USBASP/910 с промежуточным контроллером. Тогда никаких проблем.

                1. всётаки STK200 только есть… а как ему разрешить пустить?(ставил некий драйвер из винавра, который батником ставится… файл скопировал, и ничего больше наглядного не делал(в реестр и тп не лез))

                  1. Ахез. Я СТК200 юзал только на уровне кнопки «Прошить» в понипроге. Сам себе я его никогда не собирал и не ставил. Предпочитал либо на COM либо на USB программаторы.

                    1. Я к тому, что Там просто все уже было настроено до меня. Чо там делали я не знаю.

              2. Я пятью проводками с LPT через UNIPROF шью ATMEL до Меги 32 из под XP pro rus, проц E6850, без проблем, причем подключаюсь к порту через удлинитель метра 1,5 — 2 (шел со сканером). Настройки стандартные, никаких «тормозов» не включал. PIC — прошиваю через COM порт программой IC-prog, программатор JDM, тоже без проблем, тоже с удлинителем. Также IC-prog прошивал и ATMEL (с LPT 5ю проводками), до Меги 8. Года два назад комп был еще с WIN 98SE, P III 1000 МГц, тоже все шил без проблем.

  1. Скопировать GIVEIO.SYS в каталог (например, SYSTEM32 в системном каталоге Windows)
    Запустить LOADDRV, указать полный путь к каталогу, в котором находится GIVEIO.SYS и нажать «Install»
    Перегрузить компьютер
    Загрузить менеджер устройств (из закладки «Оборудование» системной Панели управления)
    Выбрать опцию меню для показа скрытых устройств
    Найти GIVEIO среди драйверов non-plug&play, нажмите правую кнопку и выберите «Свойства»
    Выберите закладку «Драйвер» в сойствах и выберите «Автомат»
    Перегрузите компьютер

    вон чяво нашёл, завтра помучаю

  2. А вообще, парни, вот такой совет: Купите ATAVRDGAGON, не пожалеете. У меня и дракон есть, и постарше — е-туллзовский AVRJTAG.Он, само собой, левый, и с ним немного геморроя. Под каждый релиз студии приходится в него ручками новую прошивку втакливать. Дракон, само собой, правый, и таких проблем нет. Зато есть внутрисхемная отладка.
    Цена? Оба прибамбаса купил под проекты, включив их цену в стоимость. Заплатил, таким образом заказчик. А если проектов нет, а возня с контроллерами — просто хобби? На это могу сказать, что хобби тоже стоит денег.
    Есть вариант сделать клон AVRJTAG — в интернете полно схем. Но, единожды попробовав внутрисхемную отладку, вы, парни, больше ничего в этой жизни не захотите. К хорошему привыкают не то, чтобы быстро, а вообще — мгновенно.

    1. НУ дык. Jtag я себе еще спаяю. Просто пока работаю в основном с тиньками всякими да восьмерками, а там на жтаг больно дофига ног уходит либо его нет ваще. Вот буду чо нибудь на мега 128 делать, так сразу. А у тебя на драконе DW заработал? А то Иван тут жаловался, что у него дракон не хочет работать по DW

      1. Да, дебагвайр тоже заработал. Пробовал на меге48, тини 2313, и тини 25. Единственно, что не пробовал у дракона — HVPP. Пока такой необходимости не возникало. А с дебагвайром всё просто. Надо, чтобы девайс был подключен ISP шлангом. Запускаешь сессию отладки, оно совсем чуть-чуть думает, и говорит, что нет такой буквы в этом алфавите, и может быть фуза DWEN не включена, так давай включим… Тут надо согласиться, оно включает фузу и всё случается.
        Но !
        Здесь возможна вот какая засада — при включенной фузе DWEN, не работает ISP, и некоторые из нас, у кого нервы послабже, подключив девайс в следующий раз, могут напугаться — Как так не работает??? Почему не читается???? Аааааа, камень упалили !!!!
        Тут эмоций не надо, ситуация описана в хелпе от дракона, как эту фузу вырубить.

        1. Люди , человеки не парьтесь со всяким Г… , а закажите по почте ТРИТОН+ V5.7T USB , я разорился как то раз и всё незнал проблем , обновляются для не во прошивки , вешь , профессиональная , увлекаюсь пиками , блин , офигенный.
          ссылка http://triton-prog.ru/
          там и панельки есть под всё , заказав программатора и панелек кучку закажите , а то они заказы исполняют только не меньше 2000 р .

    2. +100. Я тут уже отмечался с аналогичным комментом… рад, что есть люди, которые мыслят аналогично. Юзаю JTAG ICE MkII, и жизни без него не мыслю в серьезной разработке. А еще видел вживую работу AVR ONE! — вот это тема! Скорость офигенная, особенно на отладке AVR32, там все в реалтайме летает.

  3. Долгожданная для многих статья….. в частности для меня ! ))
    Особенно мне очень нужна была такая фича как Frequensy ! До усёра пытался найти как сменит частоту проца, но …безрезультатно ((
    Если бы DI сваял сие писание чуть-чуть пораньше, сколько бы тогда разбитых в кровь лбов(…об стол или стену) можно было бы избежать! )))))

  4. А мне она как-то не понравилась… Пробовал когда-то, но в итоге пишу в CodeVisionAVR, а отлаживаю в Proteus если уж приспичит. Хотя в 99% случаев спасает отладка через UART и осциллограф…

      1. Мне нравятся вот эти симуляторы: http://www.oshonsoft.com/
        Все просто, понятно, есть куча примеров, для отладки достаточно HEX кода програмы, (пиши хоть на С), но есть ассемблер, дизассемблер, и довольно мощный Бэйсик, который компилируется в ассемблерный листинг. При отладке для перекомпиляции кода после изменений листинга встроенным редактором можно использовать как встроенный, так и внешний компилятор.
        Эмулируется, кроме контроллера, много разной периферии: CD и ЖК символьные и графические индикаторы, шаговые двигатели, осциллограф, генератор… Триальный срок 30 дней, но ключи легко находятся Гуглем или Яндексом на любую версию.
        Протеус пробовал года 3 назад. Все, что запомнилось — неуклюжий, неудобный, убогий, глючный. Поставил на нем жирный крест. Также и на Алгоритм буилдере.

      2. делаю прнцпльные схемы и разводку на протеусе, очень удобно. в простых случаях даже автотрасситровка устраевает. очень радует быстродействие на моем celeron900 та же eagle еле ползает, а протеус очень даже бодренько.

        1. Я когда-то пользовался PCAD 4.50, ORCAD 2.50, и более поздние. Последние лет 10 хватает CircuitMaker/TraxMaker (CM2000),( занимаюсь теперь электроникой в основном для себя). Когда нужно, добавляю в библиотеку отсутствующие компоненты.
          Трассировку предпочитаю делать вручную, при наличии опыта намного лучше, чем на автомате. Но NetList, контроль соединений и оптимизацию связей время от времени использую, чтобы проверить, нет ли ошибок. Печатаю разводку на лазернике прямо из TraxMaker, и утюжком…

        1. У меня без ошибок все работает, симулирует класс … Правда мне светодиодами-то поморгать (я в самом начале пути :)))) ) — вот и работает, а с твоими проектами, видишь, даже Proteus не справляется :)))) Еще раз спасибо за плату, мучаю родную … Да, может не по теме, но ты писал (ударение на второй слог)…»… Также, зашив контроллер демоплаты специальной прошивкой ISP программатора, демоплата легко превращается в ISP программатор. Которым легко прошить AVR контроллер другому независимое устройству, например вашей самостоятельной разработке. Для этого нужен всего лишь специальный шнур (входит в комплект)…» — а где взять прошивку? Очень хочется …

          1. В учебном курсе AVR было. Но тебе она уже не нужна. У тебя же версия 1.1 должна быть. Так? А если так, то там уже встроен программатор на FTDI лезть на форум, в раздел документации и качай инструкцию по самопрошивке. Там описание работы программатора.

  5. Отличие между AVR Simulator и AVR Simulator2 — существенное, код второго переписали практически полностью и он позволяет реализовать некоторые вещи, которых нет в первом. Но на втором крайне мало МК.
    IMHO у меня панельки расположены симметрично =), хотя, может от того, что GCC

    [quote=DiHaltT]Есть в отладке AVR Studio одно небольшое западло, точнее особенность. Когда ты устанавливаешь порт на вход, делая подтяжку на резистор:
    DDR= 0
    PORT=1
    То вывод виртуального МК остается равен нулю!!! Таким образом, все кнопки в отладчике AVR Studio по дефолту оказываются нажатыми! Нужно вручную выставить значение PIN, протыкав соответствующие галочки[/quote]
    Может я чего не понимаю, по вроде как за порт отвечают три регистра.
    вы используете два которые определяют состояние входа, а для того, чтобы считать состояние необходимо обратиться к PIN, т.к. напряжение на входе(ножке) определяется значением напряжения подключенного источника к этой самой ножке. При симуляции в Proteus’е ножки в таком состоянии будут серыми(неопределённое состояние). Так, что ваш ноль — похоже всего лишь предыдущее состояние ножки, до того как вы выставили ножку на подтягивание(вход).

    1. Речь шла о том, что когда в студии делаешь подтяг, то она не выставляет PIN в 1, в то время как в реальном МК это происходит если, конечно, на ноге ничего не висит, что бы тянуло ногу к земле.

      1. Я понимаю, но AVRstudio не может симулировать внешнее оборудование, так, что всё остаётся на уровне абстракции. Микроконтроллер(точнее его симулятор) не знает в каком состоянии находится вход и следовательно не может изменить состояние ноги(точнее регистра PIN) самостоятельно(по крайней мере это было бы не логично).

        1. Не может, согласен. Но получается что в таком случае по дефолту считает что там ноль, а это категорически расходится с практическим опытом. Т.к. если нога ставится на подтяг, то дефолтом все же чаще считается подтянутое состояние, т.е. 1, а все остальное исключение (вспомни хотя бы i2c, там свободное сотояние именно подтяг до 1, а все что кроме это рабочий режим). Просто было бы удобней отлаживать, только и всего. Галочку бы чтоль тогда поставили, чтобы можно было укзать дефолтное состояние.

          1. Не может знать — он берёт предыдущее состояние порта в случае симуляции или напрямую считывает то что вы устанавливаете галочками. Тогда:
            если вам необходимо, чтобы при установке входа на подтягивание на нём была единичка, тогда можно использовать следующую конструкцию

            DDRA=0xFF; //ставим порт на выход
            PORTA=0xFF; //единички на выходе
            DDRA=0x00; //ставим порт на вход

            тогда единички останутся при переходе порта на вход

            данный приём поможет вам в отладке на симуляторе, а при компиляции на готовое устройство можно удалить строчку(в любом случае она не сильно увеличивает время выполнения и объём программы, но при этом не возникает вопросов)

        2. Может и нелогично, я лично ставил тупо
          pinx=0xff;
          и все нормально выставлялось.Делал исключительно для отладки.

          1. Такое канает только в некоторых новых сериях. Вроде мега48, мега88 и тыды. Какой был контроллер?

      1. не знаю, как у почтенной публике, но у меня на 4.19 Studio в AVR Simulator2 даже частота процессора не менялась. И входной лог как-то непонятно куда крепить и выходной откуда забирать. Лично я вернулась на просто Simulator

  6. SWG, попробывал я эту софтину с http://www.oshonsoft.com/ ну и долго она ка-то считает :). Мне, например, надо дождаться момента времени 500мс, даже при самом быстром просчете мне пришлось бы весь вечер ждать :) Протеус даже если и не в режиме реального то достаточно бысторо эмулирует. Хотя в той проге много чего, конечно, посмотреть.
    DI HALT, не подскажешь, в «Хакере» в каком выпуске на диске студия была, июньском кажется? А диск как там выглядит — не жёлтый ли весь и с одной надписью Fedora?
    Кстати, на сайте атмела онавесит вродк под 90метров, последняя версия

    1. Да уже не помню. Все первые номера за 2008 год содержали вроде бы студию. Но я не уверен. Я же журнал не покупаю :)

    2. На время эмуляции я в больших задержках временно уменьшаю значения циклов до минимальных, удобных для наблюдения. При отладке нет смысла отслеживать тысячи проходов цикла, хватит и десятка, если этот цикл кроме временнной задержки ничего не делает. Кроме того, там есть несколько режимов прогона с разной скоростью, я обычно использую 5 или 6.
      Зато хорошо видно содержимое регистров, работа индикаторов, состояние выходов. В общем, удобно. В то же время намного проще Протеуса. Загрузил код, указал тип процессора, если надо, подключил индикаторы и приборы, и погнал.
      Опять же, много примеров по использованию разных устройств — АЦП, UART, ШИМ, I2C, и прочего. Все просто и наглядно, осваивается за полчаса. Для простых применений — за глаза. А сложные вещи я предпочитаю отлаживать в готовом устройстве, делая контрольный вывод нужной информации в критических местах программы через порты или UART. Отлаживаю кусками, добавляя к уже отлаженным следующие. Все равно никакой симулятор не заменит реального устройства с его периферией (датчиками, двигателями, и прочими), реальными связями и инерционностью.

  7. Признаюсь, у меня в CVAVR функция lcd_init(), вот на неё и уходит много времени. Может ее выкинуть, но врядли тогда что-то будет работать. Хотя все равно мне кажется медленовато она работает. А вот если задержка в действительности нужна — от нее может зависеть, например, результат оцифрованного значения

  8. Народ,подскажите чайнику мож есть какой нить пример(очень простенький)типа-открой это,напиши это,нажми это,получи HEX,прошей и попробуй.Именно для AVR studio.Короче для особо тупых???

    1. AVR учебный курс. Первый урок. Куда уж проще. Если это не понятно, то может продуктивней будет заняться чем нибудь другим? ;)

  9. Можно и другим.Наверное не получается из-за AVR studio v4.0
    А мож чё не так делаю,первый урок не совпадает с фейсом.

    1. Тыб написал чтоль чо у тебя там не получается. Да и студия не самая древняя. Поставли то, надеюсь, ее по короткому пути без пробелов и русских символов?

  10. Завтра качнут 4.16,поставлю как дохтур прописал,возникнут проблемы-обращусь.Ещё вопроц,GCC 4.0.3 скачал в зипе,разархивировал-как его устанавливать?

    1. Ставишь вначале WinAVR, куда нибудь по простому пути. А потом рядом ставишь студию. Студия подцепляет винавр как плагин и можно будет выбирать язык Си при создании проекта.

      1. Самое интересное,что в архиве ни одного слова про Win AVR?!!!!
        Мож я не то скачал?Дайте ссылку Плизз,чтобы носом.
        Спасибо за консультации.

        1. Ну дык WinAVR это отдельный продукт и к Атмел отношения не имеет, хоть и является плагином для студии. Нагугливается в момент.

    1. Я с протосом не работал. Спроси у автора под что он его закашивал. Вроде бы студия должна его видеть как 500ку.

  11. SWG, а oshonsoft прерывания обрабатывает? :) Что-то она крутиться у меня в цикле и все. Ну цикл то я сделал, а вот прерывания должны быть, но результата я их не вижу

  12. Здравствуйте господа!
    Кто может ответить ? Всё время писал проги в AVR_Studio и задавал значения в Flash так:
    data: .db 0,1,2,3,4,5
    Но скачал версию AVR_Studio4.16 теперь во всех этих строчках после компилирования (Buld) пишет ОШИБКА. Вставлял везде вначале команду .cseg — ни чего не помогло !
    Кто может подсказать почему ?

    1. Ошибка или варнинг? Потому что у меня тоже последняя версия студии и все нормально вставляется именно таким образом. А варнинги вот выдает, если значение строки не выравнивается по два байта.

      1. Спасибо !
        Да, в строке 3 байта. А почему я не могу сделать по 3 байта ? Раньше же так было и всё работало ?

        1. Раньше работало и варнинги тоже слались. Не знаю почему ты их не замечал.

          Записать ты можешь нечетное число байт, но вот адресовать метку можешь только по словам, т.к. это память программ и компилятор работает там исключительно с словами. Так что либо ты выравниваешь строку нулем, либо игнроируешь ошибки.

  13. Обьясните пжлст, почему компилятор ругается, когда я хочу прописать это:


    .ORG PCINTaddr ;Pin Change Interrupt
    RETI

    (тини 2313.)
    Заранее благодарен.

    1. Хм, в самом деле. Видимо я его с АТ902313 перепутал. Ты видимо тоже. Какой инклюд файл подцепил к проекту?

          1. Говорит вот что:

            «C:\AVR\test.asm(35): error: Use of undefined or forward referenced symbol ‘PCINTaddr’ in .org

            C:\AVR\test.asm(36): error: Overlap in .cseg: addr=0x0 conflicts with 0x0:0x1»

            1. Фигня какая то. Студия по какому пути стоит? Обычно такая лажа когда компилятор родной инклюдник найти не может. Студия должна стоять либо в программ файлс, либо в корне по короткому пути. Русские символы она не понимает. Можешь мне замылить весь проект, у себя запущу.

      1. я думаю на меня разработчики не сильно обидятся если я им один семестр попользуюсь. хотя у нас какой-то иар валяется, просто распокавал и работаешь в нем. лицензию вроде не просит

  14. DI HALT в статье писал:
    Чем отличается AVR Simulator от AVR Simulator2 я так и не понял, работают одинаково.

    Я так понимаю Simulator2 для AVR Assembler Version 2. Расширенная версия — понимает больше команд и соответственно ключевых ключевых слов там больше. При компиляции во второй например Atmega16 ругается на m16def.inc, там в UCSRA третий бит имеет два варианта названия, один из них OR (соответствует «или»), если этот вариант удалить то дальше всё нормально.

    Попробовас наконецто разобраться с языкм С, установил WinAVR, возник вопрос: где брать m16def.h?

  15. simulavr2 поддерживает больше функций и заточен под новые модели процов.
    Например обычный simulavr не поддерживает запуск и моделирование таймера1 в attiny25.

    Для тактового сигнала таймера1 примененен хитрый pll генератор на 64 мгц (PLL — означает генератор с фазовой автоподстройкой частоты). Через некоторое время после включения он синхронизируется с основным тактовым генератором процессора (чтобы их частоты отличались в целое число раз) и при этом выставляет в младший бит регистра pllcsr единичку.
    Только после появления этой единички можно настраивать коэффициент деления и выставлять задержку таймера 1.
    На сях процедура примерно такая:
    PLLCSR=0x02; // включить pll 64 МГц
    while ((PLLCSR&1)==0); //крутится в цикле пока в младшем бите не пояаится единичка
    pllcsr|=0x04; // подключить делитель таймера к PLL
    TCCR1=0x21; // здесь rl=1 сброс ОС1A при совпадении счетчика и OCR1A

    simulavr процедуру контроля синхронизма pllscr проосто пропускает, а счетчик таймера остается нулевым.
    simulavr2 воспроизводит работу правильно, счетчик считает

    Совет вычитал на каком-то буржуйском сайте

  16. Помогите скачать эту программу, ну нигде найти толком не могу, да и только без лицензии…
    на атмеле все по английски. а я в нем… вообщем не понимаю… ткните ссылку на прямое скачивание свежей версии…

    1. Регистрация там бесплатная, хотья муторная да. Прямой файл постоянно меняется :/ так что регайся по честному и учи аглицкий :)

      1. Да вроде не похоже, что часто меняется, вот прямая ссылка на последнюю версию сейчас:
        http://www.atmel.com/dyn/resources/prod_documents/AvrStudio4Setup.exe
        вообщем лежит в той же папке, что и все остальное по avr studio, так что даже если в другую папку и переложат, то главное название файла знать.

        А в форме регистрации пофиг что писать, там нет даже минимальной проверки на валидность, главное чтобы в каждом помеченном поле был хотя бы один символ, только почта должна быть настоящая, они туда ссылку отправляют. Рекомендую 10minutemail.com и asdasd.ru

  17. Di HALT: Чем отличается AVR Simulator от AVR Simulator2 я так и не понял, работают одинаково.

    Привожу пример с которым только-что столкнулся. Задача: 2313 спит, просыпается через 64 мс по переполнению WD, опрашивает 4 ноги и засыпает снова. Нечто подобное раньше делал на ATtiny261, все нормально симулировалось. На 2313 — доходит до команды sleep, и зависает. Причем счетчик команд считает, флаг переполнения WD горит, но программа дальше ни в какую. Мучился полдня, всю инфу и даташиты поднял. Проблема была именно в AVR Simulator (2313 нет в AVR Simulator2). Ради эксперимента, перенес часть кода и сделал пробную програмку для ATtiny13 с той же задачей. Так вот — в AVR Simulator проблема повторилась, а в AVR Simulator2 все начало работать как часы. Так что я согласен с devila, который писал, что различия между этими двумя симуляторами очень существенны, и всем рекомендую использовать AVR Simulator2.

    1. ХЗ я пока не столкнулся с какими либо косяками второго или первого. Второй поддерживает больше процов.

  18. Да, пока копался, нарыл еще один косяк, может кому будет полезно. AVR studio вдруг начал ругаться, на неправильно выбранный режим энергосбережения. я ставлю powerdown, a студия показывает standby. Смотрю в даташит, все верно выставлено. С начала начал грешить на студию, но пока искал описанные постом выше косяки на родном атмеловском сайте, решил скачать еще раз даташит на 2313, и о чудо, даташиты разные!!!! предыдущий откуда я брал сейчас уже не вспомню, но одно и тоже сочетание битов определяет разные режимы энергосбережения. Причем эта ошибка из даташита видимо перекочевала и в разные печатные издания. Например, в книге Белова «МК в радиолюбительской практике» режимы сна так же определены неверно.

  19. А какой самый простой программатор можно использовать совместно с AVRStudio?

    Я когда-то собрал PonyProg, и он отлично программирует, но похоже AVRStudio его не опознаёт…

  20. На один «косяк» в AVR Studio при подключении подтягивающих резисторов, который заключается в неправильном представлении информации на PINx, нашел другой «косяк», которым это можно исправить
    например:

    CBI DDRD,2 ; вкл подтяг. рез.
    SBI PORTD,2 ; PORTD,2 в еденицу
    IN R16,PIND ; Считывание
    SBRC R16,2 ;—R16,2=0?
    RJMP YES ;—НЕТ — идем на метку «YES»
    RJMP NO ;—Да — идем на метку «NO»

    если ничего не менять в AVR Studio то вместо «YES» попадем на «NO» и результат получится обратный тому который ожидаем, но этот глюк я лечу другим глюком:
    во второй строке (SBI PORTD,2) (PORTD,2 меняю на PIND,2) и всё начинает работать правильно.
    CBI DDRD,2 ; вкл подтяг. рез.
    SBI PIND,2 ; PORTD,2 в еденицу
    IN R16,PIND ; Считывание
    SBRC R16,2 ;—R16,2=0?
    RJMP YES ;—НЕТ — идем на метку «YES»
    RJMP NO ;—Да — идем на метку «NO»

    Правда непосредственно перед прогаммированием контроллера надо всё вернуть назад
    Что характерно PINx не расчитан чтобы в него производилась запись, его задача — отображение информации однако, AVR Studio проглатывает это и даже не ругается
    пользутесь на здоровье

  21. Во время дебага есть возможность посмотреть значение в переменных в окне Watch… как-то так, нет сейчас под рукой студии… Так вот не пойму, как в нем сделать просмотр занчений элементов массива. Просто переменную не проблема. А вот массив — не могу понять как. По-моему там задаётся имя переменной, а это даст тот же адрес, т.е. 1-й элемент массива. А адрес вроде нередактируемый

    1. Если в Си, то он покажет массив, без вопросов.

      В ассемблере нет понятия массив. Тут проще открыть RAM и смотреть изменения там.

  22. Да, забыл указать — ассемблер. :) Да, в в нем нет массива как такового. Имелось ввиду последовательно расположенные данные в памяти. Можно, конечно, в RAM смотреть, но там не очень удобное представление. В окне Watch, конечно, по лучше будет.

  23. Dihalt, твои статьи и заметки в жж попадались мне на глаза и раньше, когда я шатался по сети в поисках всякого разного. И очень здорово что «логи киберсатаниста» со временем переросли в этот замечательный проект. Начав читать твои статьи про AVR, я уже не могу оторваться — столько всего интересного! Огромный труд, да еще такое бурное разъяснение в комментах. Огромное спасибо тебе и твоей команде! Как говорится — респект и уважуха.
    Именно начитавшись этих статей, я взял себя за шкирку, и забыв всё чему учили в институте, учусь заново. Сел за ассемблер, несмотря на яростоную агитацию моим другом в пользу Си и IAR’а. И пока не жалею.
    Вчера долго мидитировал в своих кодах и заметил такое. Вот кусок из дизассемблера AVR Studio:
    +00000000: E1E4 LDI R30,0x14 Load immediate
    +00000001: E0F0 LDI R31,0x00 Load immediate
    +00000002: E003 LDI R16,0x03 Load immediate
    Но почему когда я открываю память программ, вижу тоже самое, слова идут в том же порядке но байты как-будто переставлены местами (например, E1E4 E4E1)?
    000000 E4 E1 F0 E0
    000002 03 E0 E0 0F
    Это меня сбивает с толку, когда разбираю свой же код. Какое логическое объяснение этой чехарде? :)

  24. А кто шо скажет по поводу EasyAVR 5A от микроэлектроники? http://www.mikroe.com/en/tools/easyavr5a/ Купил, Еще не было времени потестить, но я не могу представить что может быть что-то более нафаршированое. И красивинькая! После покупки уже не возможно оторвать себя от изучения всего-всего, будучи движимым желанием непосредственно управлять этой красотой!

    1. Хорошая плата. Но вот так ли она нафарширована? Что там есть на самой плате?

      В голом виде там ничего толком и нету — кнопочки да лампочки, ну подтяжку можно на порты включить. Ну, а дополнительные модули стоят уж очень негуманно.

      1. В голом виде есть все кроме двух ЖКИ и тачскрина. Т.е. USB, COM, SD-Card,JTAG, контроллеры тачскрина и экранов, 7-сегментых индикаторов 4 шт, клавиатурная матрица здоровая. Пул ап/пул даун — перемычками. Кнопки садишь на землю или питание перемычкой. легкосменный кварц(ура! разгон!), сменный температурный сенсор, ну и удобные выходы с перемычками на все ноги. маленький и большой ЖКИ с тачскрином обошлись в +20 баксов где-то. По сравнению с ценой платы- капля в море.
        Мне плата вообще золотая вышла. Я в Европе живу, и тут только товары из стран ЕС налогами не облагаются. Мне даже в голову не пришло посмотреть откуда эта контора. Из Сербии оказалось. Но это я при получении узнал, как сказали еще 60 евро «растаможки» заплатить.

        1. USB в виде конвертера FTDI? А развязка под программынй USB от obdev есть? Или его городить придется самому?

          SD card это хорошо.

          JTAG??? Там есть встроенный JTAG адаптер? Или только штырьки для его подключения?

          Входы удобные, это да. Семисегментник тоже вещь полезная.

          Есть возможность средствами платы получить RC цепочку? Или аналоговое напряжение, хотя бы простым переменником? Есть источник пониженного напряжения 3.3 вольта (часто нужен для запитки периферии).

          1. Ох, какие вопросы-то сложные. УСБ- нативный, т.е. это НЕ переходник УСБ-КОМ. Даже Вин7 х64 его определяет(переходники-нет). Если на картинку посмотрите- там видно все, УСБ-программатор, 5 микросхем, кварц. По остальному затрудняюсь ответить. По ссылке- вниз соскрульте, там вроде все описано.
            ЖТАГ- штырьки. А зачем адаптер? 3.3В- от УСБ. Т.е. если в УСБ вставлено- в сеть подключать ненужно.
            У микроелектроники еще более новая модель есть-6. Но когда я заказывал не было в наличии. А еще там есть универсальная отладочная плата- типа такой как у меня- но она под ВСЕ основные МК(PIC, dsPIC, PSOC, AVR, 8051 and ARM ).

            1. Эммм я немножно не это имел ввиду. Программатор это хорошо, но вот представь захотел ты подсоединиться к компьютеру из своего микроконтроллера. На выходе есть COM порт, но в компе ком порта может уже и не оказаться, а есть там усб-ком конвертер?

              Жтаг штырьки это считай что ничего :) А вот адаптер это мега вещь. Позволяет пошагово выполнять программу прямо в железе, наблюдая за всеми регистрами, памятью и прочими ресурсами. Незаменимо при отладке.

              3.3 вольта полезно при отладке низковольной периферии, например дисплея от сотовых телефонов.

          2. О! А еще на задней стороне платы очень клево все компоненты нарисованы- как на принципиальной схеме, с подписями, комментариями, номиналами резисторов-конденсаторов. Очень удобно.

        2. Graphic LCD — $24.00
          2×16 LCD — $15.00
          а я уж обрадовался, что можно нахаляву дисплейчиков нахватать :(

          P.S. у них на сайте почему-то в опере не работают хоткеи с CTRL, типа CTRL+f, CTRL+tab, CTRL+j, хотя CTRL+u работает.

      2. Да, а что еще бывает на отладочных платах? Что бы вы хотели еще видеть в Идеальной УберПлате?
        Я при покупке, кстати, изходил из следующих соображений- увлечение микроконтроллерами это не на два дня, так? Так почему же видеокарту купить за 300 баксов- это недорого, проц от 300- тоже нормально- так и плату для мк за 150, над которой ты будешь проводить даже не часы- а недели а может и годы- разве дорого?
        Я, к слову, безработный — с деньгами проблем нет. В смысле проблем куда их девать. Нет денег-нет проблем! Ура!

    2. А прикольно было бы взять эту плату, поставить над ней камеру, и поместить все это….в облако! Т.е. пользователь за небольшую сумму денех арендует время, например час и получает доступ к плате- и тестит свою программу на физической плате из плоти и крови, наблюдая процесс в прямом эфире. А?!

  25. А можно вопрос ? :) Какого хрена она мне пишет ошибку при установке, что мол студия уже установлена. Никаких путей даже задать не успеваю.

  26. Добрый день. Не подскажите, может ли АVR Studio строки нумеровать. Нигде не могу найти как это сделать. Пишу из-за этого в «левом редакторе».

      1. А когда высвечивается ошибка, пишется номер строки(переходить легче), да и вообще интересно знать сколько строк налабал. Да кстати курс рульный, из того что я видел — самый внятный! А я много всего в инете перелопатил (для начинающих, было тяжеловато).

        1. Вопрос возник из-за того, что по двойному щелчку не получалось перейти на строку с ошибкой, пришлось копировать код в другой редактор, а потом править. А вы пользуетесь родным редактором AVR Studio?

          1. У меня дабл клик по ошибке всегда работал. Пользуюсь только авр студией, другие редакторы вообще не признаю :)

  27. МАААленькое примечание:) Оно возможно не треба, но «около 30 мб» весит ток сервиспак под студию) Сама студия весит 116 мб, и то что весит 30 метров ставится сверху и успешно работает :)

  28. Купил AVR Dragon, решил поиграцца) Но тут же расстроился — после выбора отладчика в студии нельзя выбрать атмегу8(она затенена постоянно), тиньки 2313 вообще в списке нет. В чём может быть проблема, подскажите пожалуйста ?

  29. Я присваиваю метке — некий адрес в SRAM. Скажите, как мне написать во второй и последующих строках, следующий адрес метки вместо символа $, чтом компилятор присвоил метке srtxd0=112 и так далее ?

    Вот как бы хотелось:
    .equ srrxd0=96 ;RXD0 (GSM)
    .equ srtxd0=$+16 ;TXD0 (GSM)
    .equ srrxd1=$+1 ;RXD1 (GPS)
    .equ srtxd1=$+1 ;TXD1 (GPS)

    От не знания, приходится писать так:
    .equ srrxd0=96 ;RXD0 (GSM)
    .equ srtxd0=srrxd0+16 ;TXD0 (GSM)
    .equ srrxd1=srtxd0+1 ;RXD1 (GPS)
    .equ srtxd1=srtxd1+1 ;TXD1 (GPS)
    В этом случае, если в середине вставить новую метку, то нужно в следующей строке изменять имя метки (не очень этого хочется постоянно делать).

    1. .DSEG
      srrxd: .byte 16 ; 16 количество байт в переменной.
      srtxd: .byte 1

      и так далее. Компилер сам распишет все адреса.

      Ну а потом
      .CSEG и пошел основной код.

      Читайте чуть дальше в учебном курсе. Там описано как адресовывается память.

  30. На этапе выбора устройства (3ий рисунок), там же выбираем симулятор, у меня доступен только один камушек atmega128, остальные не активны.
    Мне нужно доустановить какие то библиотеки? если да, то где их взять?

    1. Скорей всего у тебя что то криво установилось, т.к. ничего дополнительно качать не надо.

  31. И вдогонку вопрос:) Где можно найти описание ошибок компилятора в A.S?
    Я только начинаю осваиваться в нём, не всегда понимаю в чём заключается ошибка, и что он от меня хочет

    1. Хм, хз. Никогда не заморачивался на это. Обычно хватает краткого английского описания, что идет сразу же после кода ошибки.

    1. слово надо разбивать на адекватные слова. Иначе исходное число мало того, что не является 16ртичным (нет признаков 0х или $) так еще и не влазит в одно слово по размеру.

      shablgsm: .dw $0100,$B030,$0002,$4090,$8015

      1. дело в том что это не Шестнацетиричные слова, а просто текст.
        тогда я напишу так:
        shablgsm: .dw ASDFGHJKLZXCVBNM

        всё равно пишет: Undefined variable referenced
        Мне во флеш надо сделать текстовую строку ?

  32. А почему в эмуляции сбацанной программки (хоть пошагово, хоть как) когда приходит прерывание оно не выполняется визуально (пошагово или ещё как нибудь) как основная программа ?

    1. Как это не происходит? В ассемблере происходит переход вначале на вектор, потом оттуда на обработчик, как обычно.

      В Си — курсор сразу же появляется в обработчике прерывания. В чем проблема то?

      Как ты в симуляторе прерывание вызываешь?

      1. Первая команда на Асме, обработка RESET, там как правило инициализация и пошла основная программа ! Например, по истечении времени таймер вызвал прерывание, вот его визуально не происходит ! я вижу лижь по результату обработки (по результатам в регистрах) что оно обработалось ! А пошагово нет ?

          1. Они есть, всё там есть. Переход на них есть, соответствующий ! они выполняются ! Но пошагово я не могу их увидеть как выполняются ?

            1. А как ты пытаешься выполнить прерывание? Запускаешь программу (F5) и выставляешь галочки в окне преиферии?

              1. Я нажимаю AutoStep и сижу смотрю пока глаза не лопнут. Как какой нибудь таймер или событие вызовет прерывание оно выполняется невидимо, так как значения после прерывания в регистрах становится таким какое надо ! Но шагами AutoStep — прерывания я не вижу ?

                1. А тут может и не прокатить. Знаешь как надо входить в прерывания — ставь брейпоинт на начало обработчика нужного прерывания и запускай на выполнение как угодно. Хоть по Run и он воткнется туда, а дальше его пошагово.

  33. После выполнения копирования всей строки в Y, почему в ОЗУ я не вижу этo: 0123456789QWERTYUIOPASDFGHJKLZXCVBNM ? ведь она должна туда скопироваться ! (в конце зациклил специально (выполняю пошагово)!)
    ldi r28,$60
    ldi r29,$0
    ldi r30,low(ggggg*2)
    ldi r31,high(ggggg*2)
    rrrrr: lpm rga,z+
    st y+,rga
    rjmp rrrrr
    ggggg: .db «0123456789QWERTYUIOPASDFGHJKLZXCVBNM»

      1. Непонятно, что у меня ! Но увидев открытое окно I/O View — круто ! Тоже так себе сделал ! Удобно, всё видно !

        1. Я разобрался почему не видно строку: 0123456789QWERTYUIOPASDFGHJKLZXCVBNM в ОЗУ ! Я использую ATmega128 и компилятор присваивает первой метке .dseg адрес $0060 (режим mega103), а в нормальном режиме у ATmega128 ОЗУ начинается с $0100, вот по этому её небыло ! Не подскажете где изменить адрес ОЗУ на $0100 в AVRStudio (где выставляется частота процессора, там же на mega103 галочки нет) ?

          1. первые 0x60 заняты всякими переменными sreg, timsk и всеми такими.
            их .equ можно посмотреть в подключаемом m128def.inc

            там же может быть указано что-нить вроде SRAM_START 0x0060

          2. По идее срам старт прописан в инк файле, а чтобы в студии в окошке РАМ начиналось с нужного адреса там надо в этом же окошке смещение вручную прописать. Вверху тама.

  34. А как написать, чтоб регистру присвоился код символа ?
    типа так: ldi r16,»F»
    AvrStudio на эту команду пишет ошибку !

  35. Будьте добры, подскажите как трактовать адреса отображаемые в AVR Studio
    к примеру : TCCR0 0x33(0x53) Написал вставку на асме для WinAvr (файл.S), но используя стандартные заголовки получаю не работающую ерунду — адреса не те, хотя контроллер указан верно (mega16)

    1. У авр двойная адресация портов. То что 0х33 это адресация в пространстве ввода вывода (канает только для команд IN OUT) а вот 0х53 это адресация в пространстве memory (подходит для работы с командами LD, ST) Думаю сишный указатель будет все же работать с ними как с памятью.

  36. Здравствуй DI HALT!!! Спасибо за потрясающий проект!!! Я новичёк в этом, и прошу о помощи, не могу установить avr studio. Скачал с официального сайта, а он говорит нужна инсталяция. Не пойму ничего. :-(

      1. Я зарузил файл, открываю его, пишет: «AVR Studio 4.18 must be installed» 1 Фаил 28 метров с логотипом (жуком) Что это? Может я не то качаю?

        1. Это сервис пак для студии (дополнение) ты скача. А саму студию ты не скачал. Она чуть больше 100 мегабайт весит ! Качай !

  37. Спасибо за проект, очень информативный.
    Мне необходимо симулировать свой проект с секундными и больше временами. Когда делал простой на атмега48 все получилось в протеусе.
    Согласен с определением найденым на Вашем сайте:ПРОТЕУС? Все, что запомнилось — неуклюжий, неудобный, убогий, глючный.
    Сейчас у меня другой проект на 8515 в ПРОТЕУС не идет.
    Мой вопрос а возможно ли вообще симулировать в AVR STUDIO проекты в реальном (нормальном)времени? Если да — то как это делать??

    1. Зашить свою прогу в микроконтроллер — это самое реальное (нормальное) время ! А если нужно при этом что то отладить, то через JTAG или другие интерфейсы (зависит от МК). Я отлаживаю так: все необходимые значения выдаю на USART и через терминалку (COM port Toolkit 3.9) на компе всё вижу !

    2. Студия не дает отладки в реальном времени, но может показывать время пройденное с момента отладки (графа stop watch) в этом случае все отлаживается по цифрам. Но нужен мощный комп, т.к. у меня, например, секунда реального времени эмулируется около минуты.

  38. Кто подскажет как задать адрес метки в SRAM ?
    Пример:
    .dseg
    metka1: .byte 1
    metka2: .byte 15
    metka3: .byte 1
    metka4: .byte 256
    metka5: .byte 1
    .cseg
    Необходимо чтоб metka4: начиналась с младшего адреса $00-$FF, для того чтоб все 256 байт находились в пределах адреса младшего регистра Z (R30), иначе необходимо делать проверку на переход в старший адрес ?

    1. Так и задается. Но контроллировать значение чтобы было меньше 255 не нужно. Z это двухбайтный регистр!!! R30:R31 и поэтому охватывает весь диапазон оперативной памяти.

      1. Я наверно не совсем понятно написал. У меня вертится по кругу только R30, так:
        inc r15 ;r15 меняется 0-255
        ldi r30,0
        add r30,r15
        st z,r16

        в данном случае R31 не учавствует в сложении и когда metka4 начинается не с $00, то портятся ячейки до метки4 и не записываются выше $FF, потому что надо прибавлять 1 к R31, а я этого не хочу (нужна производительность) ! ?

        1. Ну тогда тебе поможет директива .org с ее помощью ты сможешь поставить переменную на нужный адрес.

  39. DI HALT подскажи пожалуйста! не горит синий флажок и в окне message пишет: Loaded plugin Proteus VSM Viewer
    Loaded plugin STK500
    gcc plug-in: No WinAVR installation found. The AVR GCC plug-in can still be used if you set up your own build tools.
    Loaded plugin Atmel AVR Assembler
    Loaded partfile: C:\Program Files\Atmel\AVR Tools\PartDescriptionFiles\ATmega8.xml
    Project is readonly and cannot be saved
    Project is readonly and cannot be saved, что делать?

  40. У меня текст рассположен во FLASH в metka: .db.
    Если просто ldi r31,high(metka*2), то всё нормально ! А вот когда ldi r31,(high(metka*2+18) — это адрес «ТЕКСТ4» в этом случае когда metka+18 переходит за значение 256, то необходимо прибавить к R31 еденицу. Я вывел формулу в строке ldi r31,… но она не работает, может подскажете как сделать по другому ?

    ldi r30,low(metka*2+18)
    ldi r31,(high(metka*2))+(((low(metka*2))+18)/512)
    metka: .db «ТЕКСТ1″,»ТЕКСТ2″,»ТЕКСТ3″,»ТЕКСТ4″,»ТЕКСТ5»

    1. А зачем тебе делать это формулой?

      Ну напиши под каждый ТЕКСТ отдельную метку

      LDI R30,low(TEKCT4*2)
      LDI R31,High(TEKCT4*2)

      Все равно команда LDI оперирует ТОЛЬКО константами и смысла их хитро вычислять директивами математики компилятора резона нет вообще.

      Либо если уж очень нравится вычислять смещение, то делается это так*
      LDI,R30 low(metka*2+[смещение в байтах до нужного элемента])
      LDI,R31 high(metka*2+[смещение в байтах до нужного элемента])

      Выражения в операндах LOW и HIGH должн быть ВСЕГДА одинаковые, т.к. по сути дела мы берем разные байты одного и того же числа. КОмпилятор, конечно, сожрет и твою запись, ему пофигу. Но вот правильно работать она не будет.

      1. Ваша строка:
        LDI,R31 high(metka*2+[смещение в байтах до нужного элемента])
        не пройдёт, так как +[смещение в байтах до нужного элемента] не даст 1 ! а будет больше !
        Вроде добился, получилось так:
        ldi r30,low(metka*2+18)
        ldi r31,(high(metka*2))+((low(metka)+18)*2/256)
        Может кому пригодится !
        А в Студии есть ограничения на количество меток в программе или ей пофиг сожрёт огромное количество ?

        1. Не даст оно больше, оно даст ровно столько сколько нужно. Не тормози, это операнд выборки байта!

          Например выражение
          metka*2+[смещение в байтах до нужного элемента] дает результат вида 0xMMNN — это адрес нужного тебе байта.

          low возьмет отсюда только NN
          High возьмет отсюда только MM

          и в результате в Z будет адрес MMNN и байт твой нормально выберется.

          1. Напрямую указывать метку, то получится как вы пишите MMNN ! А со смещением +, вы пишете просто MM возьмёт — так не проходит, попробуйте ! И если интересно попробуйте мою формулу !

            1. А куда оно денется то? Адрес есть адрес!

              И он двубайтный. И маразм вычислять старший и младший байты адреса независимо.

              Все оно работает:

              LDI R30,low(metka*2+7)
              LDI R31,high(metka*2+7)

              LPM R16,Z
              RJMP PC ; чтобы не выполнить строку метка: как код зациклим …

              metka: .db «1TEKCT,2TEKCT,3TEKCN»

              По результатам работы этой конструкции в R16 оказалось 32 — код двойки из 2ТЕКСТ

  41. проблема такая… установил всё работало.. потом перестал компилировать… показывает на команды на С и ругается… чё делать та?

            1. Нет не шутка. Поскольку наши штатные телепаты в отпуске, а по вашим сведениям понять что именно сломалось и как оно сломалось непонятно, то это единственно адекватный и рабочий совет.

              1. А не Касперский ли у Вас, стоит? У меня с ним такие чудеса случались. Он у меня кампилятор и другие софтины переодически в карантин закидывал.Надо указать компилятор доверенным. А лучше его вообще снести. Дома у меня NOD стоит, а на работе касперского навязали, будь он не ладен.

                1. А не Касперский ли у Вас, стоит? У меня с ним такие чудеса случались. Он у меня кампилятор и другие софтины переодически в карантин закидывал.Надо указать компилятор доверенным. А лучше касперского вообще снести. Дома у меня NOD стоит, а на работе касперского навязали, будь он не ладен.

  42. А как можно делить 2 числа. Ведь в контроллере есть только умножение MUL, а деления нет, а когда умножаю на 0,ххх погрешность получается ?

    1. На степени двойки умножают и делят сдвигом. Сдвиг вправо — деление на два, сдвиг влево — умножение:

      010 = 2
      сдвигаем
      100 = 4

          1. А где должен находиться вложенный файл ?
            Пишу:
            .include zq1mhz.asm
            Файл лежит в папке где весь проект (проект называется rtc.asm).
            Студия пишет:
            C:\Temp\….\RTC\rtc.asm(45): error: Missing include file name — там лежит мой проект, туда же положил файл zq1mhz.asm

            1. По идее там же где и проект. У тебя скорей всего криво пути в переменной %PATH% прописались.

              Можешь в инклюд вписать полный путь файла от С.. и так далее.

              1. Вписал полный путь:
                .include c:\TEMP\SEA\Razrabotka\RTC\RTC_USART\zq1mhz.asm
                ту же самую ошибку выдаёт:
                c:\TEMP\SEA\Razrabotka\RTC\RTC_USART\rtc.asm(45): error: Missing include file name
                Не пойму что не нравится ?

                1. а в кавычки кто будет вносить путь?

                  .include «c:\TEMP\SEA\Razrabotka\RTC\RTC_USART\zq1mhz.asm»

                  думаю и в первый раз проблема в них была.

  43. Я хочу вложить wav файл в прошивку, и пишу так:
    sound: .include «DingDong.wav»
    Но студия компилирует его когда нажимаю Build и естественно выдаёт ошибки, как мне сделать чтоб этот файл не компилировался, а занесён был во Flash как просто данные ?

    1. инклюд работает только с текстовыми файлами.

      Тебе надо твою вавку превратить в

      data: .db ……………..
      вид и так по байтам. Вроде бы еще как то можно хекс вкомпилить, но я не знаю как.

    1. Это файлы описания железа. Там все символические имена привязываются к конкретным адресам в памяти.

      Должны быть обязательно. У меня они лежат и подхыватываются из
      d:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\

      Для Тини 2313 этот файл зовется как tn2313def.inc
      для меги48 m48def.inc

      Но если у тебя сильно старая версия студии, то их может и не быть. Это довольно новые камни, особенно м48. Какая версия студии?

      1. Ну да версия старая 4.0.6
        Я понял что это описания железа. А можно из кода выбросить эти .inc а просто написать имена через equ?

          1. Я не долбаюсь, пишу те имена которые использую. Из даташита выделяешь — вставляешь и добавляешь equ. Я так сделал свои inc файлы, так как когда подключаешь из студии то она ругается на все мои метки — и борьба с этим сделать свой inc файл !

  44. Скачиваю AVR Studio, не хочет устанавливаться. Возможно я скачал обновления. Но большой файл требует регистрации. Мужики, что не так делаю ?

  45. Можно ли выключить debugWIRE на RESETe в ATtiny2313 через этот же интерфейс ? Есть AVRdragon на работе, пробовал через него, Flash и EEPROM — они пишутся по debugWIRE, а до Fuse не возможно добраться. Есть на AVRdragonе параллельное программирование, но там нет преобразователя на +12в и в доке написано из вне подавать запрещено — и как программировать ??? ! Короче фигню изготавливают — не покупайте AVRdragon это дерьмо ! Вот не знаю как теперь восстановить ATtiny2313, по SPI теперь не шьётся ?

  46. Артемий, подскажи. Если у меня используется счетчик (TCNT), то чтобы не ждать пока он накрутит нужное мне значение — просто вручную вбить значения во время отладки ???

    1. Как вариант. Хотя я на время отладки сразу гружу удобные значения, а потом их заменяю на нужные.

      Либо, если ждать недолго — ставлю брейкпоинт в нужную точку и пускаю код на запуск. Также, если используются большие предделители, то на время отладки ставлю прескалер в 1

  47. У меня проект AVR Simulator 2, мк = ATmega128, на команду:
    fmul r26,r30
    Студия пишет: Illegal argument type or count
    Не подскажете почему ?

  48. Вопрос к Гуру!
    в начале статьи написано что студия подхватит предустановленный GCC как плагин.
    Где это увидеть чтобы удостовериться что всё ОченьКарашо! :)

  49. Можно ли (например в ATtiny45) стек опустить на адрес 15(DEC)-это адрес регистра R15, в студии не работает (пробовал)! А в реальном МК может работать? или SPL физически на кристале не имеет битов адреса младше нижней границы SRAM ?

  50. Необходимо чтобы SRAM была полностью свободная для других нужд. А регистры остались не задействованы ! Интересно Студия эмулирует 100% адресацию стека по сравнению с реальным МК ?

      1. Ещё вопрос: Программа на ATtiny45, настраиваю Таймер1 на прерывания COMP1A
        ldi r15,128
        out ocr1a,r15
        ldi r15,0b00001110 ;CK/8192
        out tccr1,r15
        ldi r15,0b11000000
        out timsk,r15
        В AVR-Studio версии 4.13 Таймер1 TCNT1 считает и работает. А вот в Версии 4.15 эта же программа без всяких изменений, Таймер1 TCNT1 ни как и ни в какую считать не хочет. Всё в студии менял и в регистрах МК, Simulator 1 и 2 пробовал, а он стоит и не считает. Что не так не могу понять ?

        1. У студии есть глюки эмуляции. Например в мега8 криво эмулируется режим точной фазы (не работает) и странно ведет себя прерывание АЦП, в железе то работает?

          1. до железа ещё не дошёл. думал что, раз в студии не работает, значит в МК не будет работать. Надо проверить !

  51. Почему-то при отладке на могу занести значения из ADCH, ADCL в SRAM. Делаю так:

    _ADC_Ok: IN R16,SREG ; Выковыриваем статусный регистр
    PUSH R16

    LDS R16,ADCL
    LDS R17,ADCH
    LDS R18,ADMUX
    ROR R18
    BRCC _save_Ui
    _save_Uu: STS low(Uu),R16
    STS High(Uu),R17
    CLRb ADMUX,MUX0
    RJMP _reti

    _save_Ui: STS low(Ui),R16
    STS High(Ui),R17
    SETb ADMUX,MUX0
    SETb ADCSRA,ADSC

    _reti: POP R16
    OUT SREG, R16
    RETI

    Значения Ui и Uu ранее были определены как:

    .DSEG
    Ui: .BYTE 2
    Uu: .BYTE 2

    Так вот. Когда попадаю в обработчик прерываний _ADC_Ok: тыкаю курсором на биты в ADCH и ADCL. Вижу, что они копируются в R16 и R17, но вот потом чтобы по STS low(Ui),R16 STS High(Ui),R17 (аналогично и с Uu) не вижу чтобы в окне Watch в память что нибудь занеслось. Если я не ошибся, то для добавления новой переменной для контроля в этом окне достаточно по правой кнопке мыши выбрать «Add item». Это первое. Второе — в железе вроде бы работает, но вот при восьмибитном результате преобразования (ADLAR=1 и при незначительном упрощении обработчика) получается результат чуть другой в отношении полученного значения по отношении к верхнему значению (255), чем при 10-ти битном. Или наоборот — при 10-ти битном чуть другой по сравнению с 8-битном, так как я начинал с последнего м значения получаемые были более приближенными к истине.

    1. 1. А кто будет в стеке сохранять R17 R18 и все остальное что там у тебя юзается?

      2. ADCL/ADCH/ADMUX Memory Mapped? Почему не через IN/OUT?

      3. Потому что вот это: STS High(Uu),R17 бред.

      У тебя Uu это 8 или 16ти битный адрес в виде константы. И беря от него Low и High значения ты закидываешь данные куда попало по памяти, а не туда куда надо.

      Считаем, что у нас младший байт по младшему адресу.
      Ui: .BYTE 2 резервирует два байта в ОЗУ начиная с адреса Ui
      Тогде Ui это младший байт, Ui+1 старший.

      STS Uu,R16
      STS Uu+1,R17

  52. О, точно.
    По первому пункту — в них долговременно ничего не храниться, не жалко если затётся.

    2 — забыл упомянуть — использую atmega48 — эти команды не подойдут.
    3 — по этому пункту спасибо! Откуда-то из другого места это «принес» :)

  53. Есть такая проблема, она уже обсуждалась на форуме, но решения так никто и не предложил.
    Написал на С небольшую программу работы с АЦП, нормально скомпилировалась, прошил. Когда решил запустить JTAG, студия выдала сообщение «Please browse to the present location for files originally found at C:\avrdev\gcc\build-avr\gcc\gcc-4.3.3\gcc\». Жму отмена, появляется следующие «C:\avrdev\gcc\build-avr\gcc\». Потом еще несколько подобных. Когда все сообщения заканчиваются, студия открывает дизассемблер
    и там полно строк File not found. Что это может быть такое.

    1. Ну так жтагу нужен файл по которому он будет отлаживать. Coff по моему. А так он тебе ничего не покажет. ЕСли конечно писал не в студии.

  54. Привет DI HALT.
    На прошлой работе были задачи по программированию микроконтроллеров, но пользовался только ICSP вариантом, писал на CVAVR на чистом С (любил за переносимость кода, и в дебри ассемблера не очень-то лезть хотелось(думал что слишком сложно(Хотя все «детство» программировал ZX-SPEСTRUM на чистом асме)) а пошивал понипрогом. Было это было пару лет назад, а сейчас работаю по СВЧ-схемотехнике (хотя я прирожденный программист!!!(Никак не могу работу найти, чтобы сто процентов устраивала(Правда теперь к своим знаниям цифровой схемотехнике, я еще добавил СВЧ и немного аналоговой… Везде есть плюсы :-) ))). За это время поизучал ассемблер x86 под ДОС и ВИНДОВС и понял что от спектрумовского он конечно отличается(немножко) но сугубо в положительную сторону (все ясно, логично, как на ладони)так вот с задачами программирования под МК и РС сталкиваюсь и по сей день (правда к сожалению недостаточно). А теперь суть проблемы: Решил я приобрести что-нибудь ЮСБишное (если бы у меня не было-бы опыта микроконтроллерного, то я бы не думая приобрел PinBoard за ее всевключенность и дешевизну, но у меня есть уже очень удачная отладочная плата с экранчиком фирмы олимекс (на прошлой работе за счет работодателя приобрел ну и конечно же тут же привХатизировал) !!! Сначала было хотел просто программатор (естественно не родной атмеловский), но почитал твои статьи понял что в моей работе не хватает отладки(!) и решил остановится на о AVR-JTAG-USB (1923 руб) фирмы олимекс (правда у нее целевое напряжение только 3,0-5,0 В, а ведь сейчас есть и работающие от 1.8 В! Да и с понипрогом наверное опять придется работать!?!?). Снова кинулся я семь раз отмерять (ее же не увидит АВР-студия!!!(Да я решил остановится на этом софте т.к. он бесплатный, обновляется, удобный, и отлаживать в нем НАДО!) надо брать че-то родное, тут к сожалению вариантов мало оказалось: ATJTAGICE2, но он стоит нереальных денег (13600 руб в Терреелектронике)но таких деньги на хобби (пусть и приятное) НЕТ (хочется купить за свой счет, а не за счет работодателя), неужели брать ATAVRISP2 (1849 руб) да, она все камни поддерживает и все питающие напряжения целевой платы (что очень важно!!!) но ведь я же хотел отладку :-(. У тут взгляд мой упал на ATAVRDRAGON. Раньше я думал что это просто какой-то старт-кит, но причитавшись, о счастье: стоит чуть дороже, чем ATAVRISP2 (лучше разориться чуть побольше, но получить гораздо больше благ) ICSP-программатор (я надеюсь он стандартный и поддерживает все камни (глупо, конечно он стандартный, но в описании к плате нету строк, что она все ПОДДЕРЖИВАЕТ!)!?!?) , JTAG-отладчик (мечта того кто пытался светодиодом понять в каком месте завис девайс и что мать его у него в переменной X), высоковольтный программатор (на случай если полу-серийное изготовление понадобиться), а еще какой-то внутрисхемный эмулятор, еще че-то слышал про debugWIRE какой-то, макетное поле, правда я че-то не понял с какими питающими напряжениями целевой платы дракончик умеет работать!?!?). Почитал про историю создания, так вот оказывается что плата обязана своей дешевизне (и названию) Китайцам, у них спросили: «что бы вы, многоуважаемые, хотели бы получить от атмела, и за какие деньги?» Ну они сказали, естественно, мол все сразу и за гроши. И действительно так и есть если набирать отдельно функции дракона то тысяч на 15 рублей тянет. Правда я нарвался на недоработку с источником питания на плате (сгорает постоянно), но вроде если правильно отключать ее то должна работать долго, к тому же есть какая-то схема модернизации выпущенная атмелом, но дешевизна покрывает сей минус. Так вот, хотел уточнить у знающего человека вот что:
    1. Правильны ли мои выводы?
    2. Не прогадаю ли я с покупкой?
    3. Хотелось бы полную универсальность (я конечно понимаю что скупой платит дважды, но…), например в будущем хотелось бы разрабатывать низковольтные девайсы, подойдет ли она для них, и если я правильно понимаю, то хотя-бы прошить с помощью дракона можно будет АБСОЛЮТНО(!) все АВРки (и не только, может-быть ФЛЕШки или там XMEGA)и отладить те из них, что поддерживают JTAG и debugWIRE.
    4. Что такое внутрисхемная эмуляция и зачем она нужна!?!
    5. ЧТо такое debugWIRE и с чем его едят?!??
    Такое чувство, что забыл какой-то вопрос!!!

    1. 1. Да все это так.
      2. Трудно сказать, драгон штука хорошая, но жутко ненадежная. Болезнь с тем самым питальником это не первый камень. У него часто еще IO летит. Где то в инете встречал схему его защиты с помощью буфферных микросхем.
      3. Он универсален полностью
      4. Вот то что жтаг делает это оно и есть.
      5. Тоже почти что и жтаг, но по одному проводу да и тот на reset :)

      1. Спасибо за ответ, но вот блин, там вот так написано:
        поддержка JTAG эмуляции всех микроконтроллеров с размером Flash памяти равной и меньше 32кБ. (http://www.terraelectronica.ru/catalog_info.php?ID=846&CODE=245103&Name=ATAVRDRAGON&Razdel=%DD%EC%F3%EB%FF%F2%EE%F0%FB%20%E8%20%EF%F0%EE%E3%F0%E0%EC%EC%E0%F2%EE%F0%FB&TableName=class_19_2_26_3)
        Что бы это могло значить?

  55. Уважаемые, никто не разжует пошагово как можно в АВР изменить текст программы, которая
    работает не совсем как хотелось-бы, но с сохранением первоначального варианта т.е. в новом проекте сделать текст программы, путем внесения изменений в старый текст, но не переписывая ее в редакторе всю полностью, а как бы загрузив в новый проект старый .асм и чтоб старый проект как вариант сохранился бы. Всего наилучшего.

    1. Т.е. сделать систему откатов на старые версии? Это чтоль имеется ввиду? Авр студия этого не умеет. Я просто беру и кидаю в архив всю папку с проектом.

      1. Что хотел получилось так: при создании нового проекта в АВР в окне текста проги
        написал тлк заголовок и сразу — Save. Потом открыл проект, текст проги которого
        хотел и сохранить и переработать, мышкой выделил все что надо из текста и — «Копировать выделенное для буфера»(как то так). Потом снова открыл проект с одним заголовком в .асм и — «Ввести сохраненное из буфера» и в окне появился текст, набирать вручную не надо, можно делать с ним что хочешь. Думаю и старый проект остался без изменений. Всего наилучшего.

  56. DI HALT, поправь, пожалуйста, Step-out, это не шаг назад, это выход из той процедуры, в которой сейчас идет отладка, например ты попал из главного отлаживаемого модуля внутрь десятка процедур, и тебе надо обратно выбраться, на оператор, который стоит после вызова первой процедуры, не проматывать же каждую процедуру до конца, вот и жмешь эту кнопку десять раз, чтоб вернуться в исходный модуль.

  57. Добрый день!
    Можно немного подробнее про «борьбу» с глюками Студии. Точнее про неверное отражение в Workspace на закладке I/O значений записаных в регистры.
    Пример. Хочу настроить порт на вход (DDRB=00000000), соответственно подтягиваю внутренние регистры (PORTB=11111111). Но на закладке I/O значения PORTB отличаются от желаемых. Т.е. появляются нули. Как правило это пин 0,1,2. При трассировке, когда курсор уходит со строки после присвоения, происходит это изменение згначения.
    То же заметил с отключением компаратора — записываю в регистр ACSR=0х80 (ACD), но НИЧЕГО НЕЗАПИСЫВАЕТСЯ. Как выкручиваться?

    Заранее благодарен.

    1. Не понял, т.е ты записал в PORTB значение, а оно не отобразилось? Вообще или в тот момент когда ты нажал пуск программы? А после прохода стрелки отобразилось?

      1. Попробую пояснить на примере. Отрывок текста ниже.

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        27
        28
        29
        30
        31
        
        .cseg
         
        .org 0	; установка текущего адреса программы на ноль
         
        ; ----- Инициализация стека -----
         
        	ldi temp, RAMEND ;выбор адреса вершины стека (из tn13def.inc)
        	out SPL, temp ;запись адреса в регист стека
         
        ;----- Инициализация порта PORTB -----
        ;в примере порт B настроен на выход, а D на вход.
        ;В МК Atiny 13 один порт, поэтому настраиваю 
        ;вывод №3 (PIN.4) на вход, а вывод №7 (PIN.2) на выход.
         
        	ldi temp, 0x04 ;000100 ;порт pin.2 - выход.
        	out DDRB, temp		;остальные  - входы.
         
        	;push temp  ;эксперимент - наблюдение за изменениями в памяти.
         
        	ldi temp, 0b00111101
        	out PORTB, temp ;включаем внутрений резистр на 
        					;на входы PORTB 0,1,3,4,5. Нет 2!!!
         
        ;----- Инициализация Компаратора -----
         
        	ldi temp, 0x80 ;(b10000000) выключение компаратора
        	out ACSR, temp
         
         
         
        ;----- Основной цикл -----

        Имею код программы. Нажимаю «Build and Run». Появляется желтая стрелка, указывающая место трассировки — выполняемую операцию. Все значения выполненных операций должны отразиться в окне Workspace на закладке I/O. По мере пошаговой трассировки вижу, как резистору R16 (переменная temp) присваивается значения. Следующий этап есть присвоение значения этого регистра, согласно алгоритма программы, соответсвующему регистру. Что при этом наблюдается?

        Курсор стоит на строке:
        out PORTB, temp — в этот момент вижу как появляется значение R16 (переменная temp).

        Когда курсор переходит с этой строки на следующую строку программы (нажимаю F11 Step Into) — появляется значение R16 (переменная temp) в регистре PORTB (столбец Bits в окне Workspace на закладке I/O). При этом правильное значение !!!!.

        Перехожу при трассировке на следующую строку программы (нажимаю F11 Step Into) — значение регистра PORTB в столбце Bits в окне Workspace на закладке I/O меняется !!!! Единички превращаются в нули. Заметил закономерность в одном проекте это биты 0,1,2. В другом — 1,2,3. А это на этапе инициализации портов. Что будет при работе логики программы?
        Так же не вижу единичку в регистре ACSR (ACD) когда отключил компаратор. Ну не отражается она.

        Вот, как мог, расписал.

        С уважением.

        1. Проверил сейчас твой код. И в аврсимулятор и в аврсимулятор2 все работает нормально. Т.е. биты выставляются как надо, а на строке ldi temp, 0x80 с портом ничего странного не происходит. Биты не обнуляются, все ок. Может ты попутал с инклюдниками чего? Где у тебя указание на тип проца? Строчка

          .include «tn13def.inc»

          1. Добрый день!
            Спасибо, что удедяете время на мои глупые вопросы.
            Сейчас я на работе, поэтому могу только сообщить на «словах», что МК указал правильно (как у Вас в ответе). Добавлю, что у меня версия Студии 4.10. Если не секрет, на какой версии Студио Вы работаете и, соответсвенно, проверяли мой код. Сегодня вечером попробую запрограммировать «железо» и не сомневаюсь в нормальности работы.

            С уважением.

              1. Поставил версию AVRStudio 4.18 684. Вышеперечисленные проблемы исчезли!!!! Жду новых. Шутка :).
                Но эргономика этой версии мне нравится меньше чем AVRStudio 4.10. Или даже вообще не нравиться.

                Спасибо Вам за уделённое внимание!

                С уважением!

    1. Ну так они туда IDE от визуал студии прикрутили, а она никогда легкостью не отличалась. Это при том, что оригинальная аврстудия весила около 150мб.

  58. Всем доброй ночи…Странно — обратил внимание что Студия не раскрывается полностью в окне Винды…Сверху остается зазор в который видно кусок рабочего стола…Как бе функционалу не мешает, но визуально напрягает. Мож кто-то сталкивался с этим??

  59. Пара часов поиска дистра на сайте, регистрации, скачивания AVR Studio (!602МБ!) и установки.
    Скажите мне кто-нить что это было не зря, ибо я не понял даже как симулятор запустить.
    Вообще мож будет обновление статьи с описанием интерфейса новой IDE? А то новичку бы в МК разобраться, а не с интерфейсом жопоплющиться.

    1. Пятую скачал? Поздравляю — это глючное, сырое и унылое говно. Которое не поддерживает (и возможно не будет) в симуляции львиную долю контроллеров. Зато обросло горой свистоперделок. Уж лучше какой нибудь кодблокс вкорячить, если уж сильно хочется гламурное ИДЕ иметь.

  60. Да нет уж, не сторонник гламура.
    Просто делал как в ликбезе, теперь буду грамотнее.
    Спасибо.
    ЗЫ: а 5-ку всё таки оставлю пока…

  61. Решил изучить микроконтроллеры. Подскажите, какую версию AVR Studio поставить? 5 или всетаки 4? С чего лучше начать? Для меня это ново.

  62. Прога неплохая (AVR Studio 4.18), только может я не нашел или такого нету: при запуске симуляции (режим пошаговой отладки) и использование таймера значения счетного регистра не меняются TCNTxL. Приходится их выставлять вручную.

  63. Поставил на работе последнюю пятую версию. Этот динозавр тащит с собой кучу мастдаевских примочек, включая СКУЛ сервер (нафига козе баян — не понятно). По умолчанию все нужные окна закрыты, приходилось искать по названиям из этой статьи в менюшках. Очевидный плюс — интегрированность с МС Вижуал Студио, что дает полную проверку синтаксиса кода. Но дома, честно говоря, жалко столько места под написание каких-то килобайт кода)) Буду ставить 4ку

  64. «Как выставить частоту процессора в AVR Studio:
    Загадка века, между прочим. Сходу фиг найдешь. Короче, запускай процесс симуляции. Только в этом случае появится нужный пункт меню. А потом лезь в меню Debug -> AVR Simulations Options. Ну не козлы, а? В такие гребеня прятать столь важный параметр. Я почти два месяца его в свое время искал. Там же можно выставить адрес бутлоадера (он зависит от Fuse Bits в реальном МК).»

    Для tiny13 вручную поставил частоту 9,6 МГц (в списке отсутствует), а она при симуляции в окошке подсвечена красным шрифтом и времена совсем не совпадают. То есть, я задал входные условия на портах, сбросил StopWatch, посчитал сколько времени занял определенный процесс, заливаю в Proteus, а там раз в 10 все гораздо дольше. В реальной железяке — как в Proteus. Похоже, не всегда эта фишка работает корректно.

  65. Не по теме: а что за часы на скриншотах?(круглые,полупрозрачные,классический циферблат).
    Это плагин или виндошне изобретение.
    Прошу прощения за флуд.

    1. Вместо explorer у меня на Win XP уже много много лет (лет 6 точно) стоит Aston Desktop версии 1.9 чтоль (Ныне есть астон 2 — УГ полное). Так вот там есть один чудо плагин — Aston Clock фоновые часы. От остальной подобной хрени отличается тем, что он реально работает фоном и их невозможно ни выделить, ни взять на них фокус никоим образом. Т.е. словно они на стекле нарисованы, а к винде отношения не имеют. Кроме софта которое перехватывает полностью отображение десктопа (плееры в полном экране, игры). И вот так висят они в полупрозрачном виде поверх всего, мышка спокойно кликает по кнопочкам и иконкам сквозь них, словно их и нет. Аналогов я не видел. Рулез неимоверный. Еще скины разные поддерживает и кучу настроек.

  66. Скачал AVR Studio 4.18, при запуске установки до выбора места установки все окей, при нажатии на «Next -> Install» после выбора папки установки (c:\avr) окно установки исчезает, но на панеи задач остается, но не открывается. Так два раза уже. Что не так?

  67. Уважаемый DI HALT!
    Подскажите , при компиляции выскакивает ‘¨á⥬¥ ­¥ 㤠¥âáï ­ ©â¨ 㪠§ ­­ë© ¯ãâì.
    и далее ни чего не происходитюю в поисковиках не нашел что это может быть !! пользуюсь версией 4.19

  68. Здравствуйте!
    Последняя avr studio у меня установился с привязкой к Visual studio(до этого была установлена)
    Это у меня одного так или у всех?
    Я-то разобрался, но может быть кому-то не понятно будет?

  69. Здравствуйте. Помогите пожалуйста разобратся. Пишу програму для самодельного обучающегося светосинхронизатора (для одновременного срабатывания нескольких вспышек). Програму написал, засунул в AVR Studio? Откомпилировал. Ошибок нет. Начал проверять пошагово, все вроде работает, но когда нужно считать данные с EEPROM – начинаются проблемы:
    Этот кусок взял с Вашей Dl HALT статьи о EEPROM.

    Использую Attiny13

    clr Temp1
    RJMP EERead

    EERead: SBIC EECR,EEPE ; ждем разрешения чтения
    RJMP EERead
    OUT EEARL,Temp1 ; прописываем адрес (в Attiny13 — EEARH нет)
    До сих пор все норм. А когда пытаюсь выставить бит чтения:

    sbi EECR,EERE ; этот (EERE) бит не ставится, и дополнительно в регистр EEDR (в не зависимости от того что там было) ставится 0b11111111.

    in Time,EEDR ;и эти же 0b11111111 естественно (а не то что там было) записывается в нужный мне регистр.

    Итак вопрос это какой то глюк AVR Studio, или я нахомутал?
    Если нужно могу выложить весь код.
    Заранее спасибо.

    1. команды sbi работают в ограниченном диапазоне адресов и тут надо проверить, а не лежит ли EEPE дальше чем она может достать?

      Ну и в студии бывают встречаются глючки с периферией. Особенно той, что долго работает.

  70. Регистр EECR в котором находится бит EERE в ATtiny13 находится по адресу 0х1С. Если я не ошибаюсь, sbi бьет до 0х1F. Эту ловушку я помню).
    Но даже когда я вместо
    sbi EECR,EERE
    ставлю:
    ldi Temp1,0b00000001
    out EECR,Temp1
    все работает так же как и с sbi – то есть EERE не устанавливается, и в EEDR записывается 0хFF.
    Правда у меня студия четвертая. Может если скачать новую, этого глюка не будет? Если конечно это не я сам напартачил.
    На всякий случай выложу весь код,
    http://easyelectronics.ru/repository.php?act=view&id=80
    заодно может если будет время – посмотрите – все ли правильно, а то я только начинающий, хочется знать чужое мнение.

  71. Вот только что прогнал этот код через AVR Simulator IDE и та же фигня. Значит — моя вина, но где я ошибся не пойму.

  72. Скажите пожалуйста, это косяк: студия не эмулирует 4-х разрядный счётчик интерфейса USI в ATtiny2313 (в других МК не пробовал), когда устанавливаешь бит usiclk (программное управление) — счётчик в регистре usisr стоит как вкопанный. Ни кто с такой проблемой не сталкивался ?
    Ещё я заметил что в этом же ATtiny2313 не сбрасывается счётчик TC1 по регистру ICR1 (верхний предел счёта), режимы 12(CTC) и 14(fast PWM) в TCCR1A (таблицa 46, стр 106 даташит). А сбрасывается упорно по OCR1A, получается режимы 8,10,12,14 не соответствуют даташиту. При чём прошив в МК и оказалось что TC1 сбрасывается по значению OCR1A. Получается косяк в даташите, а эмуляция в студии и в МК оказалось одинаково !!! Может кто сталкивался с этим ?

  73. В 6 версии так и не нашел где изменить частоту в симуляторе(((( может кто подскажет где она.

  74. Добрый день! Есть ли IDE под Mac? AVR studio (ATmel Studio) только под винду, как я посмотрю, можно и её поставить, но желания особого нет…

    1. Родного разумеется нет. Кому вы нафиг нужны :))) но можешь попробовать сколхозить из эклипса и гнутого си тулчейна, по рецепту линуксоидов. Там же вроде как через gdb можно и отладку прикрутить будет.

      1. Понятно, поставлю винду :).
        Спасибо большое за статьи, только хотел приобрести ардуину и наткнулся на ваш сайт, передумал :).

        1. Нездоровая тенденция, через пару месяцев захочешь pinboard II и цифровой осциллограф. Бросай это гиблое дело, шансы на выздоровление еще есть.

          1. Проблема в том, что заразился я ещё давно, и, к моему удивлению, нашел ваш сайт у себя в закладках. Так что, прошел инкубационный период и лечение не поможет. На выходных запланирован поход на наш радиорынок (Юнона, для тех, кто знает). Составлен список покупок… Да ладно, это моя давняя мечта заняться настоящим мужским делом (программированием МК).

  75. Ребята, кто знает можно ли в AVRStudio смоделировать подключение внутреннего подтягивающего резистора к пину порта и подачу внешнего сигнала на пин порта (например нажатие на кнопку)?
    Или только вручную квадратик на PINx выставлять можно?
    Программно резистор подключается нулем на DDR и 1 на PORT. Выставляются они в этих регистрах нормально, но как сымитировать подачу внешнего напряжения? Можно ли это делать прямо на ходу при выполнении симуляции, или останавливать симуляцию, ставить квадратик и опять запускать студию нужно?

  76. Доброго времени суток тебе премногоуважаемый DI HALT !
    Я тут давеча увидел у тебя прикольный извращенский способ делать индексные переходы:
    LDI R16,AddresL ; Кто сказал, что индексные переходы только по спец регистрам?
    LDI R17,AddresH
    PUSH R17
    PUSH R16 ; ICALL? Щаз! Откуда хотим оттуда и скачем.
    RET ; Наш извращенский метод!
    Признаюсь — очень он меня впечатлил.
    Но, когда пришло время использовать его, облом, как говорят, меня уже ждал.
    Он не наботает. Потому как прыгает не туда куда нужно (Для того чтобы работало нужно поменять местами PUSH R17 и PUSH R16).
    Начал было разбираться и вот че нарыл. На первый взгляд все логично и правильно: сначала бросаем в стек старший полуадрес (PUSH R17), потом — младший (PUSH R16), потом коммандой RET делаем переход. Но оказывается ента самая комманда RET берет байт из меньшего адреса стека и кладет его в СТАРШИЙ байт регистра PC, а соответственно — из старшего адреса стека — в младший байт PC.
    И вообще все комманды вызовов подпрограмм и прерываний закидывают адрес возврата в стек не так как должны бы (младший байт — по меньшему адресу, старший — по старшему адресу), а наоборот.

    Объясни, пожалуйста, жаждущему истины, может ты в курсе. Это косяк? Или так и должно быть а я чегото не понимаю?

    1. Почему косяк? Вполне может быть и так. Я тоже мог ошибиться с порядком загрузки в стек. На то и нужен эксперимент и симулятор, чтобы увидеть это самостоятельно.

  77. Ребята, подскажите! А как в AVR studio при симуляции шаг назад сделать? У меня кнопка «Step Out» почему-то ошибку выдает.

    1. Бывает. Просто программа прокручивается циклом и встает на предыдущей инструкции. Но если цикл так построен, что возврата нет, то шаг не получится.

  78. Я тут экспериментирую с воровством прошивок. DiHalt, а ты не пробовал прочитанный из флеша микроконтроллера hex-файл дизассемблировать в avr studio? Она же вроде нормально дизассемблирует прошивки, подстыкованные через cof-файл. Если пробовал, то как его в студию загрузить?

    Или автоматически дизассемблировать не получится? Только ручками: разбивать прочитанный hex-файл на группы по 4 символа, переворачивать старший байт на младший (так как они там перепутаны), подбирать по таблицам команд — какая цифра за какое действие отвечает? И пытаться восстановить исходный ассемблер…

    1. Можно, но куда лучше для этого использовать IDA PRO он тебе сразу все в графическом виде разложит по процедуркам.

  79. Сначала надо с сайта atmel.com скачать последнюю версию AVR Studio. Весит она что то около 30 метров.

    На данный момент AVR studio 6.0 742.7Mb
    + StableServisePack1 148.5Mb
    =
    Разница в объемах в разы, поправте, если не боитесь напугать страждущих ;-)

  80. Добрый день. Вопрос по AVRStudio 4.19
    Работаю там активно с вкладками, но в имени каждой вкладки указывается еще и путь к файлу, и из-за этого она растягивается и на экран их помещается только 2-3 максимум. Если нажать СОХРАНИТЬ то путь пропадает и она становится чудесной маленькой компактной. Как можно отключить пути в имени вкладок… я не нашел

  81. Уважаемый DI HALT. Осваиваю свой первый микроконтроллер ATtiny13. Написал программку работы с ЕЕПРОМ. Все компилится нормально, файл *.еер создается, контроллер программируется и работает с ЕЕПРОМ как и задумывалось. А вот при трассировке программы (Ctrl+F7) в студии 4.19 данные в ЕЕПРОМ не попадают. В окошке Toogle Memory Window видно FF. Хотя из программы при пошаговом выполнении и вручную данные можно изменять.
    Не подскажете, что я делаю не так?

    1. Вообще студия если видит в проекте еепром предлагает залить ее при старте эмуляции. Вы создавали в коде .eep сегмент? Или речь о том, что в эмуляции вроде как идет запись в еепром, но в самой еепром ничего не меняется? А вы не забыли, что запись немгновенная, и сразу там не появляется. Надо подождать какое то время. Попрощелкивать такты.

      1. Сегмент создал. Данные через .db. На реальном контроллере все работает.
        Что пишется не сразу в эмуляции — тоже вижу.
        А что значит фраза «Вообще студия если видит в проекте еепром предлагает залить ее при старте эмуляции»? У меня не просила. Может в этом все дело?

  82. Добрый день, Di Halt. Такой вопрос: как залить в AVR чужую прошивку. Имеется только .hex. В AVR Studio не нашел ответа.
    З.Ы. Сайт очень интересный и содержательный, многому научился у вас. Спасибо.

    1. Авр студия тебе тут и не нужна.

      Ищи программу поддерживающую твой программатор. Скорей всего это будет avrdude у меня найди на сайте статьи по SinaProg ну и заодно позырь вот это видео:
      http://www.youtube.com/watch?v=SOy415drzTU

      Кроме хекса неплохо бы еще знать правильные FUSE биты задающие режимы работы. Без них программа может работать не так.

  83. Доброго времени суток! После компиляции проекта Студия (4-ая) пишет, что занято 48,2% флеша (от
    1 кБ ATtiny13), а размер hex-файла составляет около 1,4 кБ. Чему верить, и смогу ли я прошить свой МК?)

    1. hex это текстовый формат файла. Он всегда в 2-5 раз больше того размера который реально занимает прошивка. Открой его блокнотом и позырь сам.

  84. Так стоит ставить 6-ю студию или четвёрка решает? Некоторое время назад начал изучать AVR и студию-4, делая примеры по книге Белова. В принципе, всё работало, включая прошивку прямо из студии. Но привыкнуть, ясно дело, не успел. Сейчас, в связи с окончанием летнего сезона, а также приобретением Pinboard, надо начинать продолжать :) качать скилл. Вопрос, собственно, влезать на 6-ю студию или продолжать изучать 4-ку?

    1. Я на 4й сижу. 6я какая то ущербно неполноценная. Редактор там хорош, но по факту это получается просто редактор, не более того. При наличии ICE 3 или ICE 2 фирменного пользоваться можно. А без сплошной геморрой. Не говоря уже о том, что все проекты у меня написаны под студию 4 и вам придется их конвертировать.

  85. ребята я нихера не понял((( подскажите пожалуйста как можно обучится а то я чяйник совсем в этом деле!!! купил программатор «Годзилу» и 8-ю мегу а незнаю даже как увидеть в компе это всё… помогите пожалуйста

        1. Ну по ссылке ничего толком нет. Так что ничем помочь не могу, даже советом. Ищи автора. Могу ошибаться, но это очень похоже на программатор от Protoss’a скорей всего это клон его разработки. Найди его и спрашивай что он там навертел.

  86. первый урок и сразу же первые грабли.
    на симуляции Вашего простейшего примера

    .include "m8def.inc"
    NOP

    вываливается сообщение:
    «AVR Simulator: Invalid opcode 0xffff at address 0x000001»

    что и вводит меня на первых шагах в небольшой хм… ступор…
    Как быть?

    1. А тут все нормально. Дело в том, что команда NOP стоит по адресу 000000. И на этом программа кончается :) А по адресу 0000001 чистая память забитая FFFF. FFFF не является опкодом, вот и наткнувшись на нее симулятор ругается. Хотя на самом деле контроллер ведет себя не так, он эти FFFF пропускает (все, всю флеш память) и и возвращается к началу. Попробуй чуть большее сложную программу:

      .include «m8def.inc» ; Èñïîëüçóåì ATMega8
      M1: NOP
      NOP
      NOP
      RJMP M1

  87. Здравствуйте, прерывания не работает, у меня AVR STUDIO 4.19. опишу кратко. МС Atmega8515
    вектор прерывания $007 RJMP ;на метку
    Initialization
    TCCR0, $05
    TIMSK, $02

    MAIN: RJMP MAIN

    На железо и на протеусе прерывания работает, а на Studio не работает. запускаю программу CTRL+F7, потом TCNT0 := $FF, после этого нажимаю на F11 но TOV0 НЕ поднимается и соответственно переход на вектор не происходит. Может надо настроит Studio для того чтобы с работала прерывания? подскажите пожалуйста в чем может быть проблема.

  88. Здравствуйте, спасибо за ответ, если вручную установлю разряд TOV0, то прерывание сработает. А сам Tcnt0 сам не считает и сам не поднимает TOV0.

  89. доброго времени суток.
    недавно, после длительного перерыва, возобновил попытки чего-то понять. За это время Studio из 4 докатилось аж до 7 версии, навороченной и непонятно в отличии от.
    И захотел я там на симуляторе сделать прерывание от таймера — когда-то давно получалось. А теперь не вышло, хотя счётчик считал и флаги переполнения и сравнения в соответствующие моменты выставлялись, и глобальное прерывание было разрешено.

    Я подумал, что где-то чего-то забываю поставить в регистрах, но, оказывается, симулятор вообще считает, что любой флаг равен нулю, не важно, чего в нём написано. Может быть, кто-то подскажет настройки, где можно симулятор сделать чувствительным к значениям флагов, или что-то не то в связке Студия — винда. Стоит ли вообще мучать 7 версию, или стоит найти 4, хотя давно забытую, но с которой получалось когда-то?

  90. Здравствуйте!
    Решил заняться программированием МК…
    На этом замечательном сайте нашел много полезной инфы, особенно новичку…
    Но здесь , как и везде , не все описано, и нет нюансов многих, как известно — в них черт сидит…
    Установил я Атмел студио 7, изучаю потихоньку, со скрипом — видимо прога новая и конкретики мало по 7 в инете
    Такой вопрос, мож кто поможет
    Не получается загрузить нех файл для дизассеблирования
    хочу разобрать работу контроллера, скажем на готовой программе паяльной станции
    т.е. есть рабочий нех файл, он открывается в атмел 7, но дизассемблирование невозможно произвести, вернее я не знаю как сделать…
    подскажите пож…, если вообще это возможно…
    в инете писали, что студия 6 вроде позволяет, на радиокоте даже описание нашел, но в 7 нет возможности…

    1. Бессмысленная и беспощадная затея пытаться ковырять хекс сделанный компилятором, скорей всего он был написан на Си, а значит в коде там такая каша, что только мозг себе сломаете. Это ни разу не материал для обучения. Я пользуюсь только 4й студией. 5-6-7 даже не стоит на компе.

  91. Кто знает ? У меня AVRStudio 4.19, почему когда у меня встречается команда WDR, то сторожевой таймер не сбрасывается, а продолжает считать дальше ?

  92. Здравствуйте! Помогите пожалуйста! При установке AVR studio 4.19
    нет значков программирования CON и AVR.
    У меня windows7.
    пробовал ставить поздние версии AVR studio, не помогло.
    что можно сделать?

  93. Здравствуйте! Помогите пожалуйста! нужно прошить мк atxmega128A1U пользуюсь астудио 6.2 и avris-mk2 clone. При считывании сигнатуры мк выдает ошибку (Unable to enter programming mode.

    Please verify device selection, interface settings, target power and connections to the target device. Look in the details section for more information.) Детально: Timestamp: 2017-06-09 12:10:05.125
    Severity: INFO
    ComponentId: 20000
    StatusCode: 0

    Failed to enter programming mode. Error status received from tool: Result received is 0x01.

    Unable to enter programming mode. Verify device selection, interface settings, target power and connections to the target device.
    С чем это связано ?? как решить??

  94. Два вопроса возникло по AS 4.19. Помогите, кто знает.
    1) 2-байтные переменные… Регистры РОН честно отрабатывают математику. Запись/чтение ЕЕПРОМ работают как часы. В окнах Memory переменные по своим ячейкам (где и ожидал). А окно Watch отображает лишь младший байт переменной (и в HEX-виде, и в DEC). Та же фигня и при наведении на переменную (в коде) — отображается лишь младший байт. Как ни копался, не нашел способа исправить это. В какую сторону копать?
    2) В Bascom имеется виртуальный дисплей (уже скучаю по нему)… В AS ничего такого нет. Нашел в сети утилиту «AVR LCD Visualizer»:
    «Создание и изменение ЖКИ при помощи редактора, отладка и визуализация при помощи дополнений к программе AVR Studio. Обновление в реальном времени при работе с ICE50 и симулятором….». Установил. AS ее увидел, в интерфейсе появились 5 кнопок…
    Видимо, как в Bascom, я ожидал по нажатию кнопки получить окно с узнаваемым виртуальным LCD. Фига с маслом! Выдает какое-то пустое окошко, в котором ничего не появилось, не изменилось при симуляции программки подключения LCD.
    В журнале «Радиолюбитель, за август 2010, читаю:
    «Фирма Atmel бесплатно предоставляет утилиту для «визуализации» работы с LCD дисплеями микроконтроллеров со встроенными драйверами ЖКИ. Это средство позволяет разработать собственный «виртуальный» индикатор, «подключить» его…»
    На сайте Атмела не нашел ничего похожего на LCD-утилиту, но на любой вкус железо на продажу :-(.

    1. Так у нас архитектура 8 разрядная. Я же вам вроде говорил, что все переменные есть только в вашем воображении. А контроллер оперирует только байтами. Надо двубайтную ставьте два ватча. Ещё там можно попробовать тип выставить если есть такая опция.

      С виртуальным дисплеем работала утилита hapsim она цеплялась к студии.

      1. Спасибо за напоминание! О 8-разрядности помню :-). Но ведь авторы AVR Studio тоже не полные идиоты, чтобы в окне Watch отображать 4 разряда. Потому и
        спросил.
        Продублировал переменную в окне Watch. Те же показания.
        Выставить тип переменной (byte, word,…) — ничего похожего не нашел. Контекстное меню окна бедно, как церковная крыса. И в настройках AS не нашел (или не понял) ничего.
        За HAPSim спасибо. Сейчас перейду на Вашу статью и… попробуем.

        1. Ну тогда смотреть просто в памяти. Нужный адрес найти не сложно и вывести эти байты по одному тупо по адресу. Они же статичные.

    2. А виртуальный дисплей от атмел это для спец серий контроллеров с драйвером LCD на борту. Там встроенная видеопамять и эмуляция Ее содержимого. Но это не ваш случай.

Добавить комментарий

Ваш e-mail не будет опубликован.

Перед отправкой формы:
Human test by Not Captcha