AVR Studio ликбезPrint This Post

Автор DI HALT
Опубликовано 03 июля 2008 
Рубрики: AVR. Учебный курс
Метки: ,

Установка.
Сначала надо с сайта 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.

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

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

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

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

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


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

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

1
2
		.include "m8def.inc"	; Используем ATMega8
		NOP

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

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

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

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

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


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 вывода. Ну еще парочка примочек, но о них в следующий раз.

Комментарии

176 комментариев на «AVR Studio ликбез»


  1. adben 02 Фев 2009 2:08

    хороша программка-то


  2. isrkar 02 Фев 2009 2:37

    посмотрим шозазверь… wine трепещи

    isrkar

    упало при создании проекта(( а на картинках так всё красиво…

    DI HALT

    Вот и пользуйся после этого поделками финского программиста.

    isrkar

    хаха) если учесть что XP(avrdude, ponyprog) в упор не видит STK200:)

    DI HALT

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

    isrkar

    хз такое впечатление что там запар с драйверами парпорта…

    DI HALT

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

    isrkar

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

    DI HALT

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

    isrkar

    дак оно даже с этим уровнем не пашет, не видит мк

    DI HALT

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

    SWG

    Я пятью проводками с 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 МГц, тоже все шил без проблем.

    nwanomaly__

    виндовс денег стоит, а я жадный )

    DI HALT

    Можно подумать кто то его покупает :)


  3. isrkar 02 Фев 2009 3:47

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

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

    DI HALT

    Так СТК оно же что 5 проводков. Одна херня, только с буффером. Через унипроф должно шиться.

    isrkar

    он самый, 5 проводков
    его тоже попробую)


  4. ArgusB 02 Фев 2009 11:09

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

    DI HALT

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

    ArgusB

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

    Elementus

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

    ArgusB

    А шо, этот Тритон внутрисхемно ОТЛАЖИВАТЬ умеет? Прямо из среды разработки?

    DI HALT

    Насколько я знаю нет.

    arkamax

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


  5. _riko_ 02 Фев 2009 16:38

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


  6. Fox_Alex 02 Фев 2009 19:53

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

    DI HALT

    На протеусе с его крайне ограниченым набором МК и глюками далеко не уедешь.

    Fox_Alex

    Протеус - это когда лень на макете чего-нить собрать проверить…

    SWG

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

    dqosN

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

    SWG

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


  7. devila 08 Фев 2009 15:03

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

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

    DI HALT

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

    devila

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

    DI HALT

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

    SWG

    Считай, что это не Баг разработчиков программы, а Фича… Проблема отпадет.

    devila

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

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

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

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

    DI HALT

    О!!! Спасибо за идею!


  8. Flint 15 Фев 2009 14:41

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

    DI HALT

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

    SWG

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


  9. Flint 22 Фев 2009 16:22

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


  10. CAHEK 25 Фев 2009 13:36

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

    DI HALT

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


  11. CAHEK 25 Фев 2009 23:30

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

    DI HALT

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


  12. CAHEK 26 Фев 2009 11:58

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

    DI HALT

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

    CAHEK

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

    DI HALT

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


  13. CAHEK 26 Фев 2009 12:03

    И ещё просветите,AVR не видит прогер протос910,и чем он его видит-STK500,или как то по другому?

    DI HALT

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


  14. Flint 14 марта 2009 4:32

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


  15. sea 01 Апр 2009 23:59

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

    DI HALT

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

    sea

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

    DI HALT

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

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

    sea

    Благодарю за совет. Спасибо.


  16. tomba 30 мая 2009 20:52

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


    .ORG PCINTaddr ;Pin Change Interrupt
    RETI

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

    DI HALT

    А с чего ты вообще взял что у Тини2313 есть такое прерывание?


  17. tomba 30 мая 2009 22:56

    12 0×000B PCINT Pin Change Interrupt

    из даташита

    DI HALT

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

    tomba

    .include “tn2313def.inc”

    DI HALT

    Все верно, а что говорит вообще? на другие вектора тогда тоже должен ругаться.

    tomba

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

    “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″

    DI HALT

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


  18. alvad89 30 Сен 2009 23:54

    программка видно лучше, но почему-то у нас на кафедре на всех компах(по крайней мере на учебных компах точно) стоит IAR systems

    DI HALT

    ИАР это самый лучший Си компилятор для AVR но стоит он каких то больших денег и витьеват в настройке.

    alvad89

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


  19. svv 05 Окт 2009 2:25

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

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

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


  20. svv 05 Окт 2009 2:29

    Да, и ещё нельзя ли примерчик как создать проект на Си

    DI HALT

    Скоро будет. Вообще черновик уже был где то выложен.


  21. svv 05 Окт 2009 2:36

    Примерчик - от создания проекта до “помигать светодиодами” с помощю дебагера?


  22. and 30 Окт 2009 0:19

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

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

    DI HALT

    глюков у него тоже хватает. У меня отладка на Атмега168 вылетает с ошибкой :(


  23. Stalker46 03 Ноя 2009 1:17

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

    DI HALT

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


  24. DiaDiaDi 17 Ноя 2009 22:25

    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.

    DI HALT

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


  25. DiaDiaDi 18 Ноя 2009 1:30

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


  26. Tarkus 26 Ноя 2009 21:13

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

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

    Tarkus

    Да, нашел как запустить понипрог через скрипт из аврстудио.
    Кривовато, но работает :)
    http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=37596

    DI HALT

    Хм, а зачем?

    DI HALT

    Вроде бы STK200/300 может. Но я не уверен. Простейший это бутлоадер :)


  27. vavacas 02 Янв 2010 20:33

    На один “косяк” в 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 проглатывает это и даже не ругается
    пользутесь на здоровье

    DI HALT

    В PIN можно писать в новых версиях AVR (всякие 168, 328 итыд) и запись единички в пин инвертирует порт.


  28. Flint 28 Фев 2010 2:11

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

    DI HALT

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

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


  29. Flint 28 Фев 2010 16:41

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


  30. obstinatus.myopenid.com 03 марта 2010 16:25

    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
    Это меня сбивает с толку, когда разбираю свой же код. Какое логическое объяснение этой чехарде? :)

    DI HALT

    Таков порядо расположения данных в памяти. Младший байт по младшему адресу.


  31. maksar 27 марта 2010 10:37

    Подскажите пожалуйста а вот этот девайс поддерживает внутрисхемную отладку?
    http://cgi.ebay.com/ws/eBayISAPI.dll?ViewItem&item=380215514237&ssPageName=STRK:MEWAX:IT

    DI HALT

    Да это JTAG ICE mk1

    У меня то же самое в демоплату Pinboard встроено.


  32. krestic 03 Апр 2010 21:00

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

    DI HALT

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

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

    krestic

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

    DI HALT

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

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

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

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

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

    krestic

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

    DI HALT

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

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

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

    krestic

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

    krestic

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

    DI HALT

    Я себе сделал такую:
    Pinboard

    Можешь сам посмотреть что там было реализовано и как.

    krestic

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


  33. Frod 04 Апр 2010 19:05

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

    DI HALT

    Никогда с таким не сталкивался. У меня студия всегда вставала без сучка без задоринки.

    Frod

    Мде.. у меня так, к слову сказать, вся жизнь.. Установленный WinAVR студию никак искушать не мог ?:)

    DI HALT

    Я в каком только порядке их не ставил. Всегда ок.


  34. Frod 04 Апр 2010 20:46

    Дико изиняюсь за грубый тон..


  35. Strem 05 Апр 2010 15:29

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

    DI HALT

    Вроде бы не умеет. А зачем это? Ни разу мне эта функция не требовалась. Разве что для красоты.

    Strem

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

    Strem

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

    DI HALT

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

    Strem

    Понято, спасибо!


  36. Frod 05 Апр 2010 22:22

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

    DI HALT

    С тех пор как это было написано студия несколько потолстела :)


  37. Frod 18 Апр 2010 1:05

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

    DI HALT

    Не знаю, никогда им не пользовался.


  38. sea 18 Апр 2010 19:30

    Я присваиваю метке - некий адрес в 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)
    В этом случае, если в середине вставить новую метку, то нужно в следующей строке изменять имя метки (не очень этого хочется постоянно делать).

    DI HALT

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

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

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

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


  39. SpectruM 03 мая 2010 19:48

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

    DI HALT

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

    SpectruM

    Просто это вроде не похоже на проблему в установке, но ладно, попробую другую версию.
    http://i055.radikal.ru/1005/03/bccca8774161.jpg

    Спасибо


  40. SpectruM 04 мая 2010 0:37

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

    DI HALT

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


  41. sea 22 июня 2010 10:10

    Уважаемый подскажи ?
    shablgsm: .dw 0100B030000240908015
    Вот в этой строке пишет ошибку !

    DI HALT

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

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

    sea

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

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

    DI HALT

    Тогда так:

    shablgsm: .db “ASDFGHJKLZXCVBNM”

    sea

    Спасибо ! хороший человек !


  42. sea 26 июня 2010 1:08

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

    DI HALT

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

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

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

    sea

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

    DI HALT

    А где вектора прерываний???? Они должны быть после ресета.

    sea

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

    DI HALT

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

    sea

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

    DI HALT

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

    sea

    Спасибо ! Наконец решилась проблема !


  43. sea 06 июля 2010 20:09

    После выполнения копирования всей строки в 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”

    DI HALT

    Должно работать. У меня работает:
    http://s003.radikal.ru/i202/1007/2f/490af27263d5.jpg

    sea

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

    sea

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

    nwanomaly

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

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

    DI HALT

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


  44. sea 12 июля 2010 17:02

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

    DI HALT

    ‘F’


  45. Balan 15 июля 2010 0:29

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

    DI HALT

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


  46. maga 16 июля 2010 15:54

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

    sea

    Запускаешь AvrStudioSetup.exe и в дальнейшем жмёшь ДАЛЕЕ. Нет ничего проще !

    maga

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

    sea

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


  47. grigoriy 18 июля 2010 15:55

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

    sea

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

    DI HALT

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


  48. sea 18 июля 2010 16:32

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

    DI HALT

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

    sea

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

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

    DI HALT

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


  49. maga 19 июля 2010 5:58

    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, что делать?


  50. sea 21 июля 2010 11:23

    У меня текст рассположен во 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″

    DI HALT

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

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

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

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

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

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

    sea

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

    DI HALT

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

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

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

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

    sea

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

    sea

    Необходима поправочка ! Нужно делить не на 256, а 512 вот так:
    ldi r31,(high(metka*2))+((low(metka)+18)*2/512)

    DI HALT

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

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

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

    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ТЕКСТ

    sea

    Всё верно, так и надо записывать !


  51. fizick 23 июля 2010 0:16

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

    DI HALT

    Чо делать че делать - чинить!

    fizick

    блин я уже тристо раз переустанавливал с GCC и без… незнаю чё делать.. как чинить та?

    sea

    сноси всё с виндой !!! и снова ставь !

    fizick

    это шутка была да?…

    DI HALT

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

Оставьте свой отзыв

Вы должны войти, чтобы оставлять комментарии.


Материалы сайта являются авторскими. Копирование и публикация материалов без активной ссылки на первоисточник запрещено.

Реклама: