реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Проблемма с АЦП, АЦП и высокая частота кварца 16Meg
_Diman_
сообщение Sep 20 2006, 19:58
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 92
Регистрация: 8-03-05
Пользователь №: 3 160



Подскажите пожалуйста!
В Jtag программа останавливается на этом коде

unsigned int adc_rezult(unsigned char kanal){
unsigned char i;
unsigned int rez=0;

ADMUX=(ADMUX&(~0x1F))|kanal;
for( i=0 ; i<8 ; i++){
ADCSRA|=BIT(ADSC);
while ( !(ADCSRA & BIT(ADIF)) );// <- здесь
rez+=ADC;
}
return rez/8;
}
Причем не всегда. Может работать несколько минут.
Мк - mega16 частота 16мег. АЦП настроен так:
ADMUX=BIT(REFS1)|BIT(REFS0);//Internal 2.56V Voltage Reference with external capacitor at AREF pin
ADCSRA=BIT(ADEN)|BIT(ADPS2)|BIT(ADPS1)|BIT(ADPS0);

Ставил внутренний RC ген. На 8 мег. Работает без проблем. Но хотелось частоту повыше в устройстве есть dc/dc преобразователь. Подскажите, это из за частоты, или где-то все таки ошибся?

Сильных помех вроде нет, если измерять постоянную велечину то результат всегда одинаков.
Еще вопрос, может быть отладка останавливается при возникновении прерывания ADC?

Сообщение отредактировал _Diman_ - Sep 20 2006, 20:25
Go to the top of the page
 
+Quote Post
defunct
сообщение Sep 20 2006, 22:01
Сообщение #2


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(_Diman_ @ Sep 20 2006, 22:58) *
В Jtag программа останавливается на этом коде

вероятно уместнее было сказать - подвисает, а не останавливается, а то первое впечатление - что у вас проблема с точками останова возникла..

макрос BIT()
надо полагать такой:
#define BIT(value) (1 << (value))
т.к. если в нем нет скобочек, то условие на котором происходит "подвисание" может быть неверным..

по коду лучше делать так:
#define MUX_SETTINGS (1 <<REFS1)|(1 << REFS0)
#define ADC_SETTINGS (1 <<ADEN)|(1 << ADPS2)|(1 << ADPS1)|(1 << ADPS0)

ADMUX = MUX_SETTINGS | channel; // <- подготовка
ADCSRA = ADC_SETTINGS | (1 << ADSC); // <-- старт (для уверенности в том, что ADEN установлен)

в начале программы не забудьте проинициализировать АЦП значением:
ADCSRA = ADC_SETTINGS;

Цитата
Еще вопрос, может быть отладка останавливается при возникновении прерывания ADC?

нет. Отсутсвие или наличие прерываний никак не влияет на точки останова.

PS: Если же вы самостоятельно не прерываете выполнение программы командой break (Ctrl-F5) и на указанной вами строчке нет точки останова - тогда ищите глюк в вашем JTAG адаптере.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 13:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01374 секунд с 7
ELECTRONIX ©2004-2016