Easyelectronics.ru

Электроника для всех
Текущее время: 23 апр 2019, 23:17

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Проблема с АЦП в PROTEUS на AtMega16
СообщениеДобавлено: 02 фев 2010, 00:43 
Заглядывает иногда

Зарегистрирован: 02 фев 2010, 00:12
Сообщения: 54
Откуда: Иркутск
Здравствуйте. Такой вопрос: делал программу под AtMega8, всё работало и в PROTEUS’e и в железе. Возникла необходимость переделать под AtMega16. И появилась следующая проблема, вот кусок кода:

Код:
           ldi   r16,2
          loop_Convert:
             in    temp,ADMUX
             andi  temp,0b11100000
             or    temp,r16
             out   ADMUX,temp
             sbi   ADCSR,ADSC
             loop_ADC_busy:
                in    temp,ADCSR
                andi  temp,(1<<ADSC)
             brne  loop_ADC_busy
             dec   r16
             cpi   r16,255
           brne  loop_Convert

Это часть кода в котором измеряются напряжения на трёх каналах АЦП, со второго по нулевой. Измерения ведутся в одиночном режиме. Пробовал в PROTEUS’е на AtMega16, AtMega32 застревает в цикле:
Код:
             loop_ADC_busy:
                in    temp,ADCSR
                andi  temp,(1<<ADSC)
             brne  loop_ADC_busy

т.е. как я выставил бит ADCS, так он и не сбрасывается, причём,если верить протеусу, то преобразование проводится успешно. В железе ещё не пробовал. Версии протеуса на которых пробовал: 7.5 SP3 и 7.4. В чём же проблема, в протеусе, или нет? И как её исправить?


Вложения:
Комментарий к файлу: Это часть лога симуляции в протеусе. Видно, что преобразование завершилось.
_01.jpg
_01.jpg [ 48.45 Кб | Просмотров: 8228 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с АЦП в PROTEUS на AtMega16
СообщениеДобавлено: 02 фев 2010, 16:04 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 28 янв 2010, 16:12
Сообщения: 41
Откуда: Пенза
в 32 меге регистра ADCSR - нет. Зато есть ADCSRA. Попробуй поменять. Хотя странно почему Студия не ругаеться на это и компилит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с АЦП в PROTEUS на AtMega16
СообщениеДобавлено: 02 фев 2010, 16:12 
Супермодератор
Аватара пользователя

Зарегистрирован: 28 янв 2010, 05:47
Сообщения: 1031
Откуда: Винница
SpyCorp писал(а):
в 32 меге регистра ADCSR - нет. Зато есть ADCSRA. Попробуй поменять. Хотя странно почему Студия не ругаеться на это и компилит.


потому что
m32def.inc писал(а):
; ADCSRA - The ADC Control and Status register
.equ ADCSR = ADCSRA ; For compatibility


а не работает, ИМХО, из-за глюков протеуса. Попробуй в железе

_________________
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с АЦП в PROTEUS на AtMega16
СообщениеДобавлено: 02 фев 2010, 16:14 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 28 янв 2010, 16:12
Сообщения: 41
Откуда: Пенза
а ну да. тупанул немного


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с АЦП в PROTEUS на AtMega16
СообщениеДобавлено: 02 фев 2010, 16:25 
Супермодератор
Аватара пользователя

Зарегистрирован: 28 янв 2010, 05:47
Сообщения: 1031
Откуда: Винница
кстате, а строчки типа
Код:
ldi temp,1<<ADEN
out ADCSR,temp

есть где-то в тексте?

_________________
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с АЦП в PROTEUS на AtMega16
СообщениеДобавлено: 03 фев 2010, 00:37 
Заглядывает иногда

Зарегистрирован: 02 фев 2010, 00:12
Сообщения: 54
Откуда: Иркутск
Цитата:
в 32 меге регистра ADCSR - нет. Зато есть ADCSRA. Попробуй поменять. Хотя странно почему Студия не ругаеться на это и компилит.

Ну если бы не было, понятно ничего бы не компилировалось, а впрочем этот регистр можно назвать как угодно, открыть m32def.inc и поменять название.

Цитата:
не работает, ИМХО, из-за глюков протеуса. Попробуй в железе

Тоже думаю на протеус, но неужели две модели и mega16 и mega32 с ошибкой, да ещё и в двух версиях? Как будет возможность попробовать в железе, обязательно попробую, сейчас просто контроллера нет.

Цитата:
кстате, а строчки типа
Код:
ldi temp,1<<ADEN
out ADCSR,temp

есть где-то в тексте?

Да, конечно есть
Код:
ldi   temp,(1<<REFS0)             
out   ADMUX,temp     ;Опорное - AVCC с кондёром на AREF
ldi   temp,(1<<ADEN)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0)
out   ADCSR,temp      ;Включить АЦП, прерывание включено, предделитель - 128 (62,5кГц)

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

P.S. Как тут цитаты вставлять, чтобы было видно чья она?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с АЦП в PROTEUS на AtMega16
СообщениеДобавлено: 03 фев 2010, 01:41 
Старожил
Аватара пользователя

Зарегистрирован: 30 янв 2010, 01:03
Сообщения: 647
Откуда: Херсон
Попробуй отлавливать Bit 4 – ADIF: ADC Interrupt Flag

_________________
Если руки золотые, то не важно с какого места они растут.
Изображение
Изображение


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Проблема с АЦП в PROTEUS на AtMega16
СообщениеДобавлено: 31 мар 2010, 00:40 
Заглядывает иногда

Зарегистрирован: 02 фев 2010, 00:12
Сообщения: 54
Откуда: Иркутск
Всем спасибо за ответы, разобрался. Вот в чём было дело:
viewtopic.php?f=14&t=651&start=0


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: Katz


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB