AVR Studio ликбез
Автор DI HALT
Опубликовано 03 июля 2008
Рубрики: AVR. Учебный курс
Метки: AVR, AVR Studio
Установка.
Сначала надо с сайта скачать последнюю версию 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 | .include "m8def.inc" ; Используем ATMega8 NOP |
Куда уж проще :) То сможешь скомпилировать проект и запустить процесс отладки.
При запуске симулятора повылазит куча разных новых окошек, о которых я тебе сейчас расскажу. Гляди на скриншот:
![]() |
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 то проц, пойдет молотить код подряд, пока не дойдет до брейкпоинта. Где встанет как вкопаный, перейдя в пошаговый режим.
Бряки бывают разные. Добавляются Брейкпоинты из меню 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 обитающий на сайте Кстати, рекомендую к посещению, достойный ресурс.
Программка проста как мычание - выставляешь нужные биты по времени, не забыв указать частоту принимающего МК (чтобы такты выставило правильно). Опа и никаких забот :) Для работы программка правда требует .NET окружение, поэтому вначале придется скачать 30МБ .Net Frame Work если ты его себе еще не поставил.
![]() |
Выходящий лог можно наблюдать в Студии в окне Message (вкладка рядом с сообщениями об ошибках компиляции) и потом поглядеть в файле. Формат там такой же (номер такта:значение порта). Такты идут по порядку при старте процессора, с нуля. Его же можно также открыть stimuligenerator‘ом. Короче, программа Must Have.
Работа с прерываниями
Ну тут все просто, хочешь прерывание - ткни вручную бит ее флага, мол вот оно, и прерывание начнется. Особенно это актуально для всяких внешних источников. Вроде UART или INT. После ручного вызова, например, RX прерывания не грех будет взять и вбить ручками в нужный регистр якобы принятое значение. Опа и словно так и было :)))))
Ладно, на сегодня хватит. Потом еще парочку телег по отладке в AVR Studio толкну. Мне, например, уже давно никакие эмуляторы вроде Proteus не нужны. На все хватает родимой студии, да UART вывода. Ну еще парочка примочек, но о них в следующий раз.
Комментарии
176 комментариев на «AVR Studio ликбез»
Оставьте свой отзыв
Вы должны войти, чтобы оставлять комментарии.












хороша программка-то
посмотрим шозазверь… wine трепещи
упало при создании проекта(( а на картинках так всё красиво…
Вот и пользуйся после этого поделками финского программиста.
хаха) если учесть что XP(avrdude, ponyprog) в упор не видит STK200:)
Ну как бы видит, на работе под ХП через СТК200 понькой прошивал на раз. Да и что пони, что дудка это все тоже кустарные поделки :)
хз такое впечатление что там запар с драйверами парпорта…
Ну запросто. Оно же все с портом работает через жопу, аки в добром досе. А винда так просто к LPT не пускает. По хорошему надо делать по принципу USBASP/910 с промежуточным контроллером. Тогда никаких проблем.
всётаки STK200 только есть… а как ему разрешить пустить?(ставил некий драйвер из винавра, который батником ставится… файл скопировал, и ничего больше наглядного не делал(в реестр и тп не лез))
Ахез. Я СТК200 юзал только на уровне кнопки “Прошить” в понипроге. Сам себе я его никогда не собирал и не ставил. Предпочитал либо на COM либо на USB программаторы.
дак оно даже с этим уровнем не пашет, не видит мк
Я к тому, что Там просто все уже было настроено до меня. Чо там делали я не знаю.
Я пятью проводками с 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 МГц, тоже все шил без проблем.
виндовс денег стоит, а я жадный )
Можно подумать кто то его покупает :)
Скопировать GIVEIO.SYS в каталог (например, SYSTEM32 в системном каталоге Windows)
Запустить LOADDRV, указать полный путь к каталогу, в котором находится GIVEIO.SYS и нажать “Install”
Перегрузить компьютер
Загрузить менеджер устройств (из закладки “Оборудование” системной Панели управления)
Выбрать опцию меню для показа скрытых устройств
Найти GIVEIO среди драйверов non-plug&play, нажмите правую кнопку и выберите “Свойства”
Выберите закладку “Драйвер” в сойствах и выберите “Автомат”
Перегрузите компьютер
вон чяво нашёл, завтра помучаю
Так СТК оно же что 5 проводков. Одна херня, только с буффером. Через унипроф должно шиться.
он самый, 5 проводков
его тоже попробую)
А вообще, парни, вот такой совет: Купите ATAVRDGAGON, не пожалеете. У меня и дракон есть, и постарше - е-туллзовский AVRJTAG.Он, само собой, левый, и с ним немного геморроя. Под каждый релиз студии приходится в него ручками новую прошивку втакливать. Дракон, само собой, правый, и таких проблем нет. Зато есть внутрисхемная отладка.
Цена? Оба прибамбаса купил под проекты, включив их цену в стоимость. Заплатил, таким образом заказчик. А если проектов нет, а возня с контроллерами - просто хобби? На это могу сказать, что хобби тоже стоит денег.
Есть вариант сделать клон AVRJTAG - в интернете полно схем. Но, единожды попробовав внутрисхемную отладку, вы, парни, больше ничего в этой жизни не захотите. К хорошему привыкают не то, чтобы быстро, а вообще - мгновенно.
НУ дык. Jtag я себе еще спаяю. Просто пока работаю в основном с тиньками всякими да восьмерками, а там на жтаг больно дофига ног уходит либо его нет ваще. Вот буду чо нибудь на мега 128 делать, так сразу. А у тебя на драконе DW заработал? А то Иван тут жаловался, что у него дракон не хочет работать по DW
Да, дебагвайр тоже заработал. Пробовал на меге48, тини 2313, и тини 25. Единственно, что не пробовал у дракона - HVPP. Пока такой необходимости не возникало. А с дебагвайром всё просто. Надо, чтобы девайс был подключен ISP шлангом. Запускаешь сессию отладки, оно совсем чуть-чуть думает, и говорит, что нет такой буквы в этом алфавите, и может быть фуза DWEN не включена, так давай включим… Тут надо согласиться, оно включает фузу и всё случается.
Но !
Здесь возможна вот какая засада - при включенной фузе DWEN, не работает ISP, и некоторые из нас, у кого нервы послабже, подключив девайс в следующий раз, могут напугаться - Как так не работает??? Почему не читается???? Аааааа, камень упалили !!!!
Тут эмоций не надо, ситуация описана в хелпе от дракона, как эту фузу вырубить.
Люди , человеки не парьтесь со всяким Г… , а закажите по почте ТРИТОН+ V5.7T USB , я разорился как то раз и всё незнал проблем , обновляются для не во прошивки , вешь , профессиональная , увлекаюсь пиками , блин , офигенный.
ссылка http://triton-prog.ru/
там и панельки есть под всё , заказав программатора и панелек кучку закажите , а то они заказы исполняют только не меньше 2000 р .
А шо, этот Тритон внутрисхемно ОТЛАЖИВАТЬ умеет? Прямо из среды разработки?
Насколько я знаю нет.
+100. Я тут уже отмечался с аналогичным комментом… рад, что есть люди, которые мыслят аналогично. Юзаю JTAG ICE MkII, и жизни без него не мыслю в серьезной разработке. А еще видел вживую работу AVR ONE! - вот это тема! Скорость офигенная, особенно на отладке AVR32, там все в реалтайме летает.
Долгожданная для многих статья….. в частности для меня ! ))
Особенно мне очень нужна была такая фича как Frequensy ! До усёра пытался найти как сменит частоту проца, но …безрезультатно ((
Если бы DI сваял сие писание чуть-чуть пораньше, сколько бы тогда разбитых в кровь лбов(…об стол или стену) можно было бы избежать! )))))
А мне она как-то не понравилась… Пробовал когда-то, но в итоге пишу в CodeVisionAVR, а отлаживаю в Proteus если уж приспичит. Хотя в 99% случаев спасает отладка через UART и осциллограф…
На протеусе с его крайне ограниченым набором МК и глюками далеко не уедешь.
Протеус - это когда лень на макете чего-нить собрать проверить…
Мне нравятся вот эти симуляторы: http://www.oshonsoft.com/
Все просто, понятно, есть куча примеров, для отладки достаточно HEX кода програмы, (пиши хоть на С), но есть ассемблер, дизассемблер, и довольно мощный Бэйсик, который компилируется в ассемблерный листинг. При отладке для перекомпиляции кода после изменений листинга встроенным редактором можно использовать как встроенный, так и внешний компилятор.
Эмулируется, кроме контроллера, много разной периферии: CD и ЖК символьные и графические индикаторы, шаговые двигатели, осциллограф, генератор… Триальный срок 30 дней, но ключи легко находятся Гуглем или Яндексом на любую версию.
Протеус пробовал года 3 назад. Все, что запомнилось - неуклюжий, неудобный, убогий, глючный. Поставил на нем жирный крест. Также и на Алгоритм буилдере.
делаю прнцпльные схемы и разводку на протеусе, очень удобно. в простых случаях даже автотрасситровка устраевает. очень радует быстродействие на моем celeron900 та же eagle еле ползает, а протеус очень даже бодренько.
Я когда-то пользовался PCAD 4.50, ORCAD 2.50, и более поздние. Последние лет 10 хватает CircuitMaker/TraxMaker (CM2000),( занимаюсь теперь электроникой в основном для себя). Когда нужно, добавляю в библиотеку отсутствующие компоненты.
Трассировку предпочитаю делать вручную, при наличии опыта намного лучше, чем на автомате. Но NetList, контроль соединений и оптимизацию связей время от времени использую, чтобы проверить, нет ли ошибок. Печатаю разводку на лазернике прямо из TraxMaker, и утюжком…
Отличие между AVR Simulator и AVR Simulator2 - существенное, код второго переписали практически полностью и он позволяет реализовать некоторые вещи, которых нет в первом. Но на втором крайне мало МК.
IMHO у меня панельки расположены симметрично =), хотя, может от того, что GCC
[quote=DiHaltT]Есть в отладке AVR Studio одно небольшое западло, точнее особенность. Когда ты устанавливаешь порт на вход, делая подтяжку на резистор:
DDR= 0
PORT=1
То вывод виртуального МК остается равен нулю!!! Таким образом, все кнопки в отладчике AVR Studio по дефолту оказываются нажатыми! Нужно вручную выставить значение PIN, протыкав соответствующие галочки[/quote]
Может я чего не понимаю, по вроде как за порт отвечают три регистра.
вы используете два которые определяют состояние входа, а для того, чтобы считать состояние необходимо обратиться к PIN, т.к. напряжение на входе(ножке) определяется значением напряжения подключенного источника к этой самой ножке. При симуляции в Proteus’е ножки в таком состоянии будут серыми(неопределённое состояние). Так, что ваш ноль - похоже всего лишь предыдущее состояние ножки, до того как вы выставили ножку на подтягивание(вход).
Речь шла о том, что когда в студии делаешь подтяг, то она не выставляет PIN в 1, в то время как в реальном МК это происходит если, конечно, на ноге ничего не висит, что бы тянуло ногу к земле.
Я понимаю, но AVRstudio не может симулировать внешнее оборудование, так, что всё остаётся на уровне абстракции. Микроконтроллер(точнее его симулятор) не знает в каком состоянии находится вход и следовательно не может изменить состояние ноги(точнее регистра PIN) самостоятельно(по крайней мере это было бы не логично).
Не может, согласен. Но получается что в таком случае по дефолту считает что там ноль, а это категорически расходится с практическим опытом. Т.к. если нога ставится на подтяг, то дефолтом все же чаще считается подтянутое состояние, т.е. 1, а все остальное исключение (вспомни хотя бы i2c, там свободное сотояние именно подтяг до 1, а все что кроме это рабочий режим). Просто было бы удобней отлаживать, только и всего. Галочку бы чтоль тогда поставили, чтобы можно было укзать дефолтное состояние.
Считай, что это не Баг разработчиков программы, а Фича… Проблема отпадет.
Не может знать - он берёт предыдущее состояние порта в случае симуляции или напрямую считывает то что вы устанавливаете галочками. Тогда:
если вам необходимо, чтобы при установке входа на подтягивание на нём была единичка, тогда можно использовать следующую конструкцию
DDRA=0xFF; //ставим порт на выход
PORTA=0xFF; //единички на выходе
DDRA=0×00; //ставим порт на вход
тогда единички останутся при переходе порта на вход
данный приём поможет вам в отладке на симуляторе, а при компиляции на готовое устройство можно удалить строчку(в любом случае она не сильно увеличивает время выполнения и объём программы, но при этом не возникает вопросов)
О!!! Спасибо за идею!
SWG, попробывал я эту софтину с ну и долго она ка-то считает :). Мне, например, надо дождаться момента времени 500мс, даже при самом быстром просчете мне пришлось бы весь вечер ждать :) Протеус даже если и не в режиме реального то достаточно бысторо эмулирует. Хотя в той проге много чего, конечно, посмотреть.
DI HALT, не подскажешь, в “Хакере” в каком выпуске на диске студия была, июньском кажется? А диск как там выглядит - не жёлтый ли весь и с одной надписью Fedora?
Кстати, на сайте атмела онавесит вродк под 90метров, последняя версия
Да уже не помню. Все первые номера за 2008 год содержали вроде бы студию. Но я не уверен. Я же журнал не покупаю :)
На время эмуляции я в больших задержках временно уменьшаю значения циклов до минимальных, удобных для наблюдения. При отладке нет смысла отслеживать тысячи проходов цикла, хватит и десятка, если этот цикл кроме временнной задержки ничего не делает. Кроме того, там есть несколько режимов прогона с разной скоростью, я обычно использую 5 или 6.
Зато хорошо видно содержимое регистров, работа индикаторов, состояние выходов. В общем, удобно. В то же время намного проще Протеуса. Загрузил код, указал тип процессора, если надо, подключил индикаторы и приборы, и погнал.
Опять же, много примеров по использованию разных устройств - АЦП, UART, ШИМ, I2C, и прочего. Все просто и наглядно, осваивается за полчаса. Для простых применений - за глаза. А сложные вещи я предпочитаю отлаживать в готовом устройстве, делая контрольный вывод нужной информации в критических местах программы через порты или UART. Отлаживаю кусками, добавляя к уже отлаженным следующие. Все равно никакой симулятор не заменит реального устройства с его периферией (датчиками, двигателями, и прочими), реальными связями и инерционностью.
Признаюсь, у меня в CVAVR функция lcd_init(), вот на неё и уходит много времени. Может ее выкинуть, но врядли тогда что-то будет работать. Хотя все равно мне кажется медленовато она работает. А вот если задержка в действительности нужна - от нее может зависеть, например, результат оцифрованного значения
Народ,подскажите чайнику мож есть какой нить пример(очень простенький)типа-открой это,напиши это,нажми это,получи HEX,прошей и попробуй.Именно для AVR studio.Короче для особо тупых???
AVR учебный курс. Первый урок. Куда уж проще. Если это не понятно, то может продуктивней будет заняться чем нибудь другим? ;)
Можно и другим.Наверное не получается из-за AVR studio v4.0
А мож чё не так делаю,первый урок не совпадает с фейсом.
Тыб написал чтоль чо у тебя там не получается. Да и студия не самая древняя. Поставли то, надеюсь, ее по короткому пути без пробелов и русских символов?
Завтра качнут 4.16,поставлю как дохтур прописал,возникнут проблемы-обращусь.Ещё вопроц,GCC 4.0.3 скачал в зипе,разархивировал-как его устанавливать?
Ставишь вначале WinAVR, куда нибудь по простому пути. А потом рядом ставишь студию. Студия подцепляет винавр как плагин и можно будет выбирать язык Си при создании проекта.
Самое интересное,что в архиве ни одного слова про Win AVR?!!!!
Мож я не то скачал?Дайте ссылку Плизз,чтобы носом.
Спасибо за консультации.
Ну дык WinAVR это отдельный продукт и к Атмел отношения не имеет, хоть и является плагином для студии. Нагугливается в момент.
И ещё просветите,AVR не видит прогер протос910,и чем он его видит-STK500,или как то по другому?
Я с протосом не работал. Спроси у автора под что он его закашивал. Вроде бы студия должна его видеть как 500ку.
SWG, а oshonsoft прерывания обрабатывает? :) Что-то она крутиться у меня в цикле и все. Ну цикл то я сделал, а вот прерывания должны быть, но результата я их не вижу
Здравствуйте господа!
Кто может ответить ? Всё время писал проги в AVR_Studio и задавал значения в Flash так:
data: .db 0,1,2,3,4,5
Но скачал версию AVR_Studio4.16 теперь во всех этих строчках после компилирования (Buld) пишет ОШИБКА. Вставлял везде вначале команду .cseg - ни чего не помогло !
Кто может подсказать почему ?
Ошибка или варнинг? Потому что у меня тоже последняя версия студии и все нормально вставляется именно таким образом. А варнинги вот выдает, если значение строки не выравнивается по два байта.
Спасибо !
Да, в строке 3 байта. А почему я не могу сделать по 3 байта ? Раньше же так было и всё работало ?
Раньше работало и варнинги тоже слались. Не знаю почему ты их не замечал.
Записать ты можешь нечетное число байт, но вот адресовать метку можешь только по словам, т.к. это память программ и компилятор работает там исключительно с словами. Так что либо ты выравниваешь строку нулем, либо игнроируешь ошибки.
Благодарю за совет. Спасибо.
Обьясните пжлст, почему компилятор ругается, когда я хочу прописать это:
.ORG PCINTaddr ;Pin Change Interrupt
RETI
(тини 2313.)
Заранее благодарен.
А с чего ты вообще взял что у Тини2313 есть такое прерывание?
12 0×000B PCINT Pin Change Interrupt
из даташита
Хм, в самом деле. Видимо я его с АТ902313 перепутал. Ты видимо тоже. Какой инклюд файл подцепил к проекту?
.include “tn2313def.inc”
Все верно, а что говорит вообще? на другие вектора тогда тоже должен ругаться.
Говорит вот что:
“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=0×0 conflicts with 0×0:0×1″
Фигня какая то. Студия по какому пути стоит? Обычно такая лажа когда компилятор родной инклюдник найти не может. Студия должна стоять либо в программ файлс, либо в корне по короткому пути. Русские символы она не понимает. Можешь мне замылить весь проект, у себя запущу.
программка видно лучше, но почему-то у нас на кафедре на всех компах(по крайней мере на учебных компах точно) стоит IAR systems
ИАР это самый лучший Си компилятор для AVR но стоит он каких то больших денег и витьеват в настройке.
я думаю на меня разработчики не сильно обидятся если я им один семестр попользуюсь. хотя у нас какой-то иар валяется, просто распокавал и работаешь в нем. лицензию вроде не просит
DI HALT в статье писал:
Чем отличается AVR Simulator от AVR Simulator2 я так и не понял, работают одинаково.
Я так понимаю Simulator2 для AVR Assembler Version 2. Расширенная версия - понимает больше команд и соответственно ключевых ключевых слов там больше. При компиляции во второй например Atmega16 ругается на m16def.inc, там в UCSRA третий бит имеет два варианта названия, один из них OR (соответствует “или”), если этот вариант удалить то дальше всё нормально.
Попробовас наконецто разобраться с языкм С, установил WinAVR, возник вопрос: где брать m16def.h?
Да, и ещё нельзя ли примерчик как создать проект на Си
Скоро будет. Вообще черновик уже был где то выложен.
Примерчик - от создания проекта до “помигать светодиодами” с помощю дебагера?
simulavr2 поддерживает больше функций и заточен под новые модели процов.
Например обычный simulavr не поддерживает запуск и моделирование таймера1 в attiny25.
Для тактового сигнала таймера1 примененен хитрый pll генератор на 64 мгц (PLL - означает генератор с фазовой автоподстройкой частоты). Через некоторое время после включения он синхронизируется с основным тактовым генератором процессора (чтобы их частоты отличались в целое число раз) и при этом выставляет в младший бит регистра pllcsr единичку.
Только после появления этой единички можно настраивать коэффициент деления и выставлять задержку таймера 1.
На сях процедура примерно такая:
PLLCSR=0×02; // включить pll 64 МГц
while ((PLLCSR&1)==0); //крутится в цикле пока в младшем бите не пояаится единичка
pllcsr|=0×04; // подключить делитель таймера к PLL
TCCR1=0×21; // здесь rl=1 сброс ОС1A при совпадении счетчика и OCR1A
simulavr процедуру контроля синхронизма pllscr проосто пропускает, а счетчик таймера остается нулевым.
simulavr2 воспроизводит работу правильно, счетчик считает
Совет вычитал на каком-то буржуйском сайте
глюков у него тоже хватает. У меня отладка на Атмега168 вылетает с ошибкой :(
Помогите скачать эту программу, ну нигде найти толком не могу, да и только без лицензии…
на атмеле все по английски. а я в нем… вообщем не понимаю… ткните ссылку на прямое скачивание свежей версии…
Регистрация там бесплатная, хотья муторная да. Прямой файл постоянно меняется :/ так что регайся по честному и учи аглицкий :)
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.
ХЗ я пока не столкнулся с какими либо косяками второго или первого. Второй поддерживает больше процов.
Да, пока копался, нарыл еще один косяк, может кому будет полезно. AVR studio вдруг начал ругаться, на неправильно выбранный режим энергосбережения. я ставлю powerdown, a студия показывает standby. Смотрю в даташит, все верно выставлено. С начала начал грешить на студию, но пока искал описанные постом выше косяки на родном атмеловском сайте, решил скачать еще раз даташит на 2313, и о чудо, даташиты разные!!!! предыдущий откуда я брал сейчас уже не вспомню, но одно и тоже сочетание битов определяет разные режимы энергосбережения. Причем эта ошибка из даташита видимо перекочевала и в разные печатные издания. Например, в книге Белова “МК в радиолюбительской практике” режимы сна так же определены неверно.
А какой самый простой программатор можно использовать совместно с AVRStudio?
Я когда-то собрал PonyProg, и он отлично программирует, но похоже AVRStudio его не опознаёт…
Да, нашел как запустить понипрог через скрипт из аврстудио.
Кривовато, но работает :)
http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=37596
Хм, а зачем?
Вроде бы STK200/300 может. Но я не уверен. Простейший это бутлоадер :)
На один “косяк” в 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 проглатывает это и даже не ругается
пользутесь на здоровье
В PIN можно писать в новых версиях AVR (всякие 168, 328 итыд) и запись единички в пин инвертирует порт.
Во время дебага есть возможность посмотреть значение в переменных в окне Watch… как-то так, нет сейчас под рукой студии… Так вот не пойму, как в нем сделать просмотр занчений элементов массива. Просто переменную не проблема. А вот массив - не могу понять как. По-моему там задаётся имя переменной, а это даст тот же адрес, т.е. 1-й элемент массива. А адрес вроде нередактируемый
Если в Си, то он покажет массив, без вопросов.
В ассемблере нет понятия массив. Тут проще открыть RAM и смотреть изменения там.
Да, забыл указать - ассемблер. :) Да, в в нем нет массива как такового. Имелось ввиду последовательно расположенные данные в памяти. Можно, конечно, в RAM смотреть, но там не очень удобное представление. В окне Watch, конечно, по лучше будет.
Dihalt, твои статьи и заметки в жж попадались мне на глаза и раньше, когда я шатался по сети в поисках всякого разного. И очень здорово что “логи киберсатаниста” со временем переросли в этот замечательный проект. Начав читать твои статьи про AVR, я уже не могу оторваться - столько всего интересного! Огромный труд, да еще такое бурное разъяснение в комментах. Огромное спасибо тебе и твоей команде! Как говорится - респект и уважуха.
Именно начитавшись этих статей, я взял себя за шкирку, и забыв всё чему учили в институте, учусь заново. Сел за ассемблер, несмотря на яростоную агитацию моим другом в пользу Си и IAR’а. И пока не жалею.
Вчера долго мидитировал в своих кодах и заметил такое. Вот кусок из дизассемблера AVR Studio:
+00000000: E1E4 LDI R30,0×14 Load immediate
+00000001: E0F0 LDI R31,0×00 Load immediate
+00000002: E003 LDI R16,0×03 Load immediate
Но почему когда я открываю память программ, вижу тоже самое, слова идут в том же порядке но байты как-будто переставлены местами (например, E1E4 E4E1)?
000000 E4 E1 F0 E0
000002 03 E0 E0 0F
Это меня сбивает с толку, когда разбираю свой же код. Какое логическое объяснение этой чехарде? :)
Таков порядо расположения данных в памяти. Младший байт по младшему адресу.
Подскажите пожалуйста а вот этот девайс поддерживает внутрисхемную отладку?
http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=380215514237&ssPageName=STRK:MEWAX:IT
Да это JTAG ICE mk1
У меня то же самое в демоплату Pinboard встроено.
А кто шо скажет по поводу EasyAVR 5A от микроэлектроники? http://www.mikroe.com/en/tools/easyavr5a/ Купил, Еще не было времени потестить, но я не могу представить что может быть что-то более нафаршированое. И красивинькая! После покупки уже не возможно оторвать себя от изучения всего-всего, будучи движимым желанием непосредственно управлять этой красотой!
Хорошая плата. Но вот так ли она нафарширована? Что там есть на самой плате?
В голом виде там ничего толком и нету - кнопочки да лампочки, ну подтяжку можно на порты включить. Ну, а дополнительные модули стоят уж очень негуманно.
В голом виде есть все кроме двух ЖКИ и тачскрина. Т.е. USB, COM, SD-Card,JTAG, контроллеры тачскрина и экранов, 7-сегментых индикаторов 4 шт, клавиатурная матрица здоровая. Пул ап/пул даун - перемычками. Кнопки садишь на землю или питание перемычкой. легкосменный кварц(ура! разгон!), сменный температурный сенсор, ну и удобные выходы с перемычками на все ноги. маленький и большой ЖКИ с тачскрином обошлись в +20 баксов где-то. По сравнению с ценой платы- капля в море.
Мне плата вообще золотая вышла. Я в Европе живу, и тут только товары из стран ЕС налогами не облагаются. Мне даже в голову не пришло посмотреть откуда эта контора. Из Сербии оказалось. Но это я при получении узнал, как сказали еще 60 евро “растаможки” заплатить.
USB в виде конвертера FTDI? А развязка под программынй USB от obdev есть? Или его городить придется самому?
SD card это хорошо.
JTAG??? Там есть встроенный JTAG адаптер? Или только штырьки для его подключения?
Входы удобные, это да. Семисегментник тоже вещь полезная.
Есть возможность средствами платы получить RC цепочку? Или аналоговое напряжение, хотя бы простым переменником? Есть источник пониженного напряжения 3.3 вольта (часто нужен для запитки периферии).
Ох, какие вопросы-то сложные. УСБ- нативный, т.е. это НЕ переходник УСБ-КОМ. Даже Вин7 х64 его определяет(переходники-нет). Если на картинку посмотрите- там видно все, УСБ-программатор, 5 микросхем, кварц. По остальному затрудняюсь ответить. По ссылке- вниз соскрульте, там вроде все описано.
ЖТАГ- штырьки. А зачем адаптер? 3.3В- от УСБ. Т.е. если в УСБ вставлено- в сеть подключать ненужно.
У микроелектроники еще более новая модель есть-6. Но когда я заказывал не было в наличии. А еще там есть универсальная отладочная плата- типа такой как у меня- но она под ВСЕ основные МК(PIC, dsPIC, PSOC, AVR, 8051 and ARM ).
Эммм я немножно не это имел ввиду. Программатор это хорошо, но вот представь захотел ты подсоединиться к компьютеру из своего микроконтроллера. На выходе есть COM порт, но в компе ком порта может уже и не оказаться, а есть там усб-ком конвертер?
Жтаг штырьки это считай что ничего :) А вот адаптер это мега вещь. Позволяет пошагово выполнять программу прямо в железе, наблюдая за всеми регистрами, памятью и прочими ресурсами. Незаменимо при отладке.
3.3 вольта полезно при отладке низковольной периферии, например дисплея от сотовых телефонов.
О! А еще на задней стороне платы очень клево все компоненты нарисованы- как на принципиальной схеме, с подписями, комментариями, номиналами резисторов-конденсаторов. Очень удобно.
Да, а что еще бывает на отладочных платах? Что бы вы хотели еще видеть в Идеальной УберПлате?
Я при покупке, кстати, изходил из следующих соображений- увлечение микроконтроллерами это не на два дня, так? Так почему же видеокарту купить за 300 баксов- это недорого, проц от 300- тоже нормально- так и плату для мк за 150, над которой ты будешь проводить даже не часы- а недели а может и годы- разве дорого?
Я, к слову, безработный - с деньгами проблем нет. В смысле проблем куда их девать. Нет денег-нет проблем! Ура!
Я себе сделал такую:
Pinboard
Можешь сам посмотреть что там было реализовано и как.
А прикольно было бы взять эту плату, поставить над ней камеру, и поместить все это….в облако! Т.е. пользователь за небольшую сумму денех арендует время, например час и получает доступ к плате- и тестит свою программу на физической плате из плоти и крови, наблюдая процесс в прямом эфире. А?!
А можно вопрос ? :) Какого хрена она мне пишет ошибку при установке, что мол студия уже установлена. Никаких путей даже задать не успеваю.
Никогда с таким не сталкивался. У меня студия всегда вставала без сучка без задоринки.
Мде.. у меня так, к слову сказать, вся жизнь.. Установленный WinAVR студию никак искушать не мог ?:)
Я в каком только порядке их не ставил. Всегда ок.
Дико изиняюсь за грубый тон..
Добрый день. Не подскажите, может ли АVR Studio строки нумеровать. Нигде не могу найти как это сделать. Пишу из-за этого в “левом редакторе”.
Вроде бы не умеет. А зачем это? Ни разу мне эта функция не требовалась. Разве что для красоты.
А когда высвечивается ошибка, пишется номер строки(переходить легче), да и вообще интересно знать сколько строк налабал. Да кстати курс рульный, из того что я видел - самый внятный! А я много всего в инете перелопатил (для начинающих, было тяжеловато).
Вопрос возник из-за того, что по двойному щелчку не получалось перейти на строку с ошибкой, пришлось копировать код в другой редактор, а потом править. А вы пользуетесь родным редактором AVR Studio?
У меня дабл клик по ошибке всегда работал. Пользуюсь только авр студией, другие редакторы вообще не признаю :)
Понято, спасибо!
МАААленькое примечание:) Оно возможно не треба, но “около 30 мб” весит ток сервиспак под студию) Сама студия весит 116 мб, и то что весит 30 метров ставится сверху и успешно работает :)
С тех пор как это было написано студия несколько потолстела :)
Купил AVR Dragon, решил поиграцца) Но тут же расстроился - после выбора отладчика в студии нельзя выбрать атмегу8(она затенена постоянно), тиньки 2313 вообще в списке нет. В чём может быть проблема, подскажите пожалуйста ?
Не знаю, никогда им не пользовался.
Я присваиваю метке - некий адрес в 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)
В этом случае, если в середине вставить новую метку, то нужно в следующей строке изменять имя метки (не очень этого хочется постоянно делать).
.DSEG
srrxd: .byte 16 ; 16 количество байт в переменной.
srtxd: .byte 1
и так далее. Компилер сам распишет все адреса.
Ну а потом
.CSEG и пошел основной код.
Читайте чуть дальше в учебном курсе. Там описано как адресовывается память.
На этапе выбора устройства (3ий рисунок), там же выбираем симулятор, у меня доступен только один камушек atmega128, остальные не активны.
Мне нужно доустановить какие то библиотеки? если да, то где их взять?
Скорей всего у тебя что то криво установилось, т.к. ничего дополнительно качать не надо.
Просто это вроде не похоже на проблему в установке, но ладно, попробую другую версию.
http://i055.radikal.ru/1005/03/bccca8774161.jpg
Спасибо
И вдогонку вопрос:) Где можно найти описание ошибок компилятора в A.S?
Я только начинаю осваиваться в нём, не всегда понимаю в чём заключается ошибка, и что он от меня хочет
Хм, хз. Никогда не заморачивался на это. Обычно хватает краткого английского описания, что идет сразу же после кода ошибки.
Уважаемый подскажи ?
shablgsm: .dw 0100B030000240908015
Вот в этой строке пишет ошибку !
слово надо разбивать на адекватные слова. Иначе исходное число мало того, что не является 16ртичным (нет признаков 0х или $) так еще и не влазит в одно слово по размеру.
shablgsm: .dw $0100,$B030,$0002,$4090,$8015
дело в том что это не Шестнацетиричные слова, а просто текст.
тогда я напишу так:
shablgsm: .dw ASDFGHJKLZXCVBNM
всё равно пишет: Undefined variable referenced
Мне во флеш надо сделать текстовую строку ?
Тогда так:
shablgsm: .db “ASDFGHJKLZXCVBNM”
Спасибо ! хороший человек !
А почему в эмуляции сбацанной программки (хоть пошагово, хоть как) когда приходит прерывание оно не выполняется визуально (пошагово или ещё как нибудь) как основная программа ?
Как это не происходит? В ассемблере происходит переход вначале на вектор, потом оттуда на обработчик, как обычно.
В Си - курсор сразу же появляется в обработчике прерывания. В чем проблема то?
Как ты в симуляторе прерывание вызываешь?
Первая команда на Асме, обработка RESET, там как правило инициализация и пошла основная программа ! Например, по истечении времени таймер вызвал прерывание, вот его визуально не происходит ! я вижу лижь по результату обработки (по результатам в регистрах) что оно обработалось ! А пошагово нет ?
А где вектора прерываний???? Они должны быть после ресета.
Они есть, всё там есть. Переход на них есть, соответствующий ! они выполняются ! Но пошагово я не могу их увидеть как выполняются ?
А как ты пытаешься выполнить прерывание? Запускаешь программу (F5) и выставляешь галочки в окне преиферии?
Я нажимаю AutoStep и сижу смотрю пока глаза не лопнут. Как какой нибудь таймер или событие вызовет прерывание оно выполняется невидимо, так как значения после прерывания в регистрах становится таким какое надо ! Но шагами AutoStep - прерывания я не вижу ?
А тут может и не прокатить. Знаешь как надо входить в прерывания - ставь брейпоинт на начало обработчика нужного прерывания и запускай на выполнение как угодно. Хоть по Run и он воткнется туда, а дальше его пошагово.
Спасибо ! Наконец решилась проблема !
После выполнения копирования всей строки в 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”
Должно работать. У меня работает:
http://s003.radikal.ru/i202/1007/2f/490af27263d5.jpg
Непонятно, что у меня ! Но увидев открытое окно I/O View - круто ! Тоже так себе сделал ! Удобно, всё видно !
Я разобрался почему не видно строку: 0123456789QWERTYUIOPASDFGHJKLZXCVBNM в ОЗУ ! Я использую ATmega128 и компилятор присваивает первой метке .dseg адрес $0060 (режим mega103), а в нормальном режиме у ATmega128 ОЗУ начинается с $0100, вот по этому её небыло ! Не подскажете где изменить адрес ОЗУ на $0100 в AVRStudio (где выставляется частота процессора, там же на mega103 галочки нет) ?
первые 0×60 заняты всякими переменными sreg, timsk и всеми такими.
их .equ можно посмотреть в подключаемом m128def.inc
там же может быть указано что-нить вроде SRAM_START 0×0060
По идее срам старт прописан в инк файле, а чтобы в студии в окошке РАМ начиналось с нужного адреса там надо в этом же окошке смещение вручную прописать. Вверху тама.
А как написать, чтоб регистру присвоился код символа ?
типа так: ldi r16,”F”
AvrStudio на эту команду пишет ошибку !
‘F’
Будьте добры, подскажите как трактовать адреса отображаемые в AVR Studio
к примеру : TCCR0 0×33(0×53) Написал вставку на асме для WinAvr (файл.S), но используя стандартные заголовки получаю не работающую ерунду - адреса не те, хотя контроллер указан верно (mega16)
У авр двойная адресация портов. То что 0х33 это адресация в пространстве ввода вывода (канает только для команд IN OUT) а вот 0х53 это адресация в пространстве memory (подходит для работы с командами LD, ST) Думаю сишный указатель будет все же работать с ними как с памятью.
Здравствуй DI HALT!!! Спасибо за потрясающий проект!!! Я новичёк в этом, и прошу о помощи, не могу установить avr studio. Скачал с официального сайта, а он говорит нужна инсталяция. Не пойму ничего. :-(
Запускаешь AvrStudioSetup.exe и в дальнейшем жмёшь ДАЛЕЕ. Нет ничего проще !
Я зарузил файл, открываю его, пишет: “AVR Studio 4.18 must be installed” 1 Фаил 28 метров с логотипом (жуком) Что это? Может я не то качаю?
Это сервис пак для студии (дополнение) ты скача. А саму студию ты не скачал. Она чуть больше 100 мегабайт весит ! Качай !
Спасибо за проект, очень информативный.
Мне необходимо симулировать свой проект с секундными и больше временами. Когда делал простой на атмега48 все получилось в протеусе.
Согласен с определением найденым на Вашем сайте:ПРОТЕУС? Все, что запомнилось - неуклюжий, неудобный, убогий, глючный.
Сейчас у меня другой проект на 8515 в ПРОТЕУС не идет.
Мой вопрос а возможно ли вообще симулировать в AVR STUDIO проекты в реальном (нормальном)времени? Если да - то как это делать??
Зашить свою прогу в микроконтроллер - это самое реальное (нормальное) время ! А если нужно при этом что то отладить, то через JTAG или другие интерфейсы (зависит от МК). Я отлаживаю так: все необходимые значения выдаю на USART и через терминалку (COM port Toolkit 3.9) на компе всё вижу !
Студия не дает отладки в реальном времени, но может показывать время пройденное с момента отладки (графа stop watch) в этом случае все отлаживается по цифрам. Но нужен мощный комп, т.к. у меня, например, секунда реального времени эмулируется около минуты.
Кто подскажет как задать адрес метки в SRAM ?
Пример:
.dseg
metka1: .byte 1
metka2: .byte 15
metka3: .byte 1
metka4: .byte 256
metka5: .byte 1
.cseg
Необходимо чтоб metka4: начиналась с младшего адреса $00-$FF, для того чтоб все 256 байт находились в пределах адреса младшего регистра Z (R30), иначе необходимо делать проверку на переход в старший адрес ?
Так и задается. Но контроллировать значение чтобы было меньше 255 не нужно. Z это двухбайтный регистр!!! R30:R31 и поэтому охватывает весь диапазон оперативной памяти.
Я наверно не совсем понятно написал. У меня вертится по кругу только R30, так:
inc r15 ;r15 меняется 0-255
ldi r30,0
add r30,r15
st z,r16
в данном случае R31 не учавствует в сложении и когда metka4 начинается не с $00, то портятся ячейки до метки4 и не записываются выше $FF, потому что надо прибавлять 1 к R31, а я этого не хочу (нужна производительность) ! ?
Ну тогда тебе поможет директива .org с ее помощью ты сможешь поставить переменную на нужный адрес.
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, что делать?
У меня текст рассположен во 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″
А зачем тебе делать это формулой?
Ну напиши под каждый ТЕКСТ отдельную метку
LDI R30,low(TEKCT4*2)
LDI R31,High(TEKCT4*2)
Все равно команда LDI оперирует ТОЛЬКО константами и смысла их хитро вычислять директивами математики компилятора резона нет вообще.
Либо если уж очень нравится вычислять смещение, то делается это так*
LDI,R30 low(metka*2+[смещение в байтах до нужного элемента])
LDI,R31 high(metka*2+[смещение в байтах до нужного элемента])
Выражения в операндах LOW и HIGH должн быть ВСЕГДА одинаковые, т.к. по сути дела мы берем разные байты одного и того же числа. КОмпилятор, конечно, сожрет и твою запись, ему пофигу. Но вот правильно работать она не будет.
Ваша строка:
LDI,R31 high(metka*2+[смещение в байтах до нужного элемента])
не пройдёт, так как +[смещение в байтах до нужного элемента] не даст 1 ! а будет больше !
Вроде добился, получилось так:
ldi r30,low(metka*2+18)
ldi r31,(high(metka*2))+((low(metka)+18)*2/256)
Может кому пригодится !
А в Студии есть ограничения на количество меток в программе или ей пофиг сожрёт огромное количество ?
Не даст оно больше, оно даст ровно столько сколько нужно. Не тормози, это операнд выборки байта!
Например выражение
metka*2+[смещение в байтах до нужного элемента] дает результат вида 0xMMNN - это адрес нужного тебе байта.
low возьмет отсюда только NN
High возьмет отсюда только MM
и в результате в Z будет адрес MMNN и байт твой нормально выберется.
Напрямую указывать метку, то получится как вы пишите MMNN ! А со смещением +, вы пишете просто MM возьмёт - так не проходит, попробуйте ! И если интересно попробуйте мою формулу !
Необходима поправочка ! Нужно делить не на 256, а 512 вот так:
ldi r31,(high(metka*2))+((low(metka)+18)*2/512)
А куда оно денется то? Адрес есть адрес!
И он двубайтный. И маразм вычислять старший и младший байты адреса независимо.
Все оно работает:
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ТЕКСТ
Всё верно, так и надо записывать !
проблема такая… установил всё работало.. потом перестал компилировать… показывает на команды на С и ругается… чё делать та?
Чо делать че делать - чинить!
блин я уже тристо раз переустанавливал с GCC и без… незнаю чё делать.. как чинить та?
сноси всё с виндой !!! и снова ставь !
это шутка была да?…
Нет не шутка. Поскольку наши штатные телепаты в отпуске, а по вашим сведениям понять что именно сломалось и как оно сломалось непонятно, то это единственно адекватный и рабочий совет.