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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Родился
Сообщения: 1
Зарегистрирован: Сб авг 26, 2006 20:21:13
Откуда: Брянск

Сообщение 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 нормально проверить мою программу и что за гадость такая с векторами прерываний. Всем спасибо.
Реклама
Anonimous

Сообщение Anonimous »

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

И, конечно же, нужно сделать все очевидные вещи, описанные в даташите - SREG не забывать сохранять и т.п. Да и вообще - странное прерывание, в котором десятки строк, и никакой работы со стеком ;)
Реклама
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1507
Зарегистрирован: Чт дек 15, 2005 17:34:48
Откуда: Петрозаводск

Сообщение Старый ржавый электронщик »

Anonimous писал(а):Априори хочется предположить, что reti после rcall - это моветон
товарисч, пишите по-русски, я семь человек в аське спросил, как это понять, и только один подсказал. исправляйтесь.
путь наименьшего сопротивления проходит по пути наитолстого провода (с) Сергей Соболь
Контактная информация:
avr123.nm.ru

Сообщение avr123.nm.ru »

зато VMLAB и PROTEUS очень хорошо дружат.
Реклама
Эиком - электронные компоненты и радиодетали
Anonimous

Сообщение 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, типа, нельзя вызывать обработчик прерывания руками." ;)
Реклама
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 39
Зарегистрирован: Сб май 30, 2009 00:51:42
Откуда: Россия, г. Курск

Сообщение simpleX »

Следует ознакомиться с документацией на AVR Studio. Скорее всего для выбранного контроллера эмуляция АЦП не поддерживается и отлаживать придётся на железе.
Контактная информация:
Реклама
Опытный кот
Аватара пользователя
Сообщения: 732
Зарегистрирован: Чт дек 29, 2005 07:29:25
Откуда: Омск

Сообщение Spider »

У меня AVRStudio тоже не эмулирует ADC. Точнее всё бы хорошо, но не ставит ADIF. Так что я его ставлю ручками (галочку в рагистрах) и отлаживаю код дальшеи так до следующего прерывания :)
Но уменя задача простая 3-4 отсчёта за раз. Увы. Заметил такую же особенность в Proteus. Но там она ещё более изощерёная была, поэтому вникать не стал :)
Контактная информация:
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

Сообщение ibiza11 »

И у меня флаг окончания преобразования АЦП не выставляется - выставляю ручками и продолжаю отладку. в железе все ОК.
Ставим плюсы: )
Опытный кот
Аватара пользователя
Сообщения: 732
Зарегистрирован: Чт дек 29, 2005 07:29:25
Откуда: Омск

Сообщение Spider »

Ну я тоже самое сказал. :) так что это всё Ок.
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»