Страница 1 из 1

AVRStudio не дружит с АЦП ?

Добавлено: Сб авг 26, 2006 20:45:40
ABCD
Я пытался моделировать работу АЦП микроконтроллера АТМега16 в симуляторе AVRStudio 4. Конечно, работу самого АЦП эта программа не поддерживает, но она, вроде бы, должна по окончании преобразования менять состояние флагов ADSC (бит 6 ADSR-должен упасть) и ADIF (бит 4 ADSR-должен подняться) и генерировать прерывание. Алгоритм в пророграмме такой:

rcall ADC_ ;В первый раз из основной программы
;отправляю на подпрограмму инициали
;зации АЦП и обработки его прерыва
;ний "насильно"

sei ;разрешаю прерывания

;и кручусь в цикле, жду прерывания от АЦП
;.........

ADC_: ;Иниц. и обработка прерываний

cli ;глобальное запрещ. прерываний

ldi VAR5, 0b11100000

out ADMUX, VAR5 ;Регистром ADMUX выбрал канал 0 для
;АЦП,левое выравнивание результата,
;внутренний источник опорного напр.
ldi VAR5, 0b10001101

out ADCSR, VAR5 ;Pегистром ADCSR выбрал тактовую
;частоту, разрешил прерывания
;(бит 3),сбросил флаг завершения
;(бит 4),запретил автозапуск (бит
;5), разрешил использовать АЦП
;(бит 7)
;дальше идет несколько десятков строк, которые к
;делу не относятся

sbi ADCSR, 6 ;напоследок запускаю АЦП

reti ;и назад, в основную программу

Получается какая-то ерунда. АЦП запущен, программа
крутится в цикле, флаги не изменяются, прерывания нет. Добавишь (или убавишь) несколько строчек,совершенно левых (даже nop пробовал)- прерывание появилось, но от этого не легче. Программа идет почему-то не в начало, где прописаны вектора прерываний, а в середину, в основной цикл. Вопроса-три: кто- нибудь сталкивался с подобной проблемой, можно ли в AVRStudio нормально проверить мою программу и что за гадость такая с векторами прерываний. Всем спасибо.

Добавлено: Чт авг 31, 2006 05:56:27
Anonimous
Априори хочется предположить, что reti после rcall - это моветон, и нельзя вызывать обработчик прерывания руками. Впрямую, правда, в даташите запрещения не видно - так что, возможно, проблема и в другом (в конце концов, "несколько десятков строк, которые к делу не относятся", могут и относиться - стек убивать, например). Но из общих соображений - как-то это нехорошо ;)

И, конечно же, нужно сделать все очевидные вещи, описанные в даташите - SREG не забывать сохранять и т.п. Да и вообще - странное прерывание, в котором десятки строк, и никакой работы со стеком ;)

Добавлено: Чт авг 31, 2006 09:43:36
Старый ржавый электронщик
Anonimous писал(а):Априори хочется предположить, что reti после rcall - это моветон
товарисч, пишите по-русски, я семь человек в аське спросил, как это понять, и только один подсказал. исправляйтесь.

Добавлено: Чт авг 31, 2006 12:35:53
avr123.nm.ru
зато VMLAB и PROTEUS очень хорошо дружат.

Добавлено: Пт сен 01, 2006 03:04:31
Anonimous
Исправляюсь, хотя, безусловно, мой шок не поддается измерению: не ожидал я на таком с виду приличном сайте получить от официального лица "самый умный, каз-зел, да?" за употребление слов литературного русского языка, широко доступного для изучения не только в школе и библиотеке, не только у Гоголя (восьмое явление "Ревизора") и не только в яндексе и гугле, но и в крупных онлайновых словарях и энциклопедиях, например, http://mega.km.ru/ojigov/encyclop.asp?T ... B%E9#srch0 или http://ru.wikipedia.org/wiki/%D0%9C%D0% ... 0%BE%D0%BD

Но, раз приказано - исправляюсь, переформулирую ту же мысль на диалекте русского языка, понятном целевой аудитории: "В натуре, блин, кажись, не по-пацански захреначивать reti после rcall, типа, нельзя вызывать обработчик прерывания руками." ;)

Добавлено: Сб май 30, 2009 00:58:48
simpleX
Следует ознакомиться с документацией на AVR Studio. Скорее всего для выбранного контроллера эмуляция АЦП не поддерживается и отлаживать придётся на железе.

Добавлено: Сб май 30, 2009 06:41:15
Spider
У меня AVRStudio тоже не эмулирует ADC. Точнее всё бы хорошо, но не ставит ADIF. Так что я его ставлю ручками (галочку в рагистрах) и отлаживаю код дальшеи так до следующего прерывания :)
Но уменя задача простая 3-4 отсчёта за раз. Увы. Заметил такую же особенность в Proteus. Но там она ещё более изощерёная была, поэтому вникать не стал :)

Добавлено: Сб май 30, 2009 14:51:28
ibiza11
И у меня флаг окончания преобразования АЦП не выставляется - выставляю ручками и продолжаю отладку. в железе все ОК.

Добавлено: Сб май 30, 2009 15:14:11
Spider
Ну я тоже самое сказал. :) так что это всё Ок.