Easyelectronics.ru

Электроника для всех
Текущее время: 22 авг 2019, 20:57

Часовой пояс: 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 Кб | Просмотров: 8299 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: 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 часов


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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

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