roboforum.ru

Технический форум по робототехнике.

 

помогите с АЦП :(

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

помогите с АЦП :(

Сообщение lamobot.cpp » 21 сен 2005, 16:57

привет всем!
пытаюсь настроить АЦП на меге16-ничего не выходит :( мне это нужно для снятия показаний с переменного резистора-для пропорционального управления. короче я все делаю по даташиту, а результат преобразования вывожу на 8 светодиодов-короче у меня независимо от каких либо факторов они мигают но на ивенение входного напряжения не реагируют :(
Аватара пользователя
lamobot.cpp
 
Сообщения: 54
Зарегистрирован: 19 авг 2005, 16:58
Откуда: г.Москва

Сообщение lamobot.cpp » 21 сен 2005, 17:11

вот это глюк так глюк-если оцифровывать сигнал на ноге, к которой подведен подтягивающий  резистор и переменным резистором сводить напряжение на землю, то все работает :( а по правильному-один НЕРЕАЛЬНЕЙШИЙ шум, хотя кое какая стабилизация питания имеется. я так понял такая проблема не только с АЦП, но и с любым портом ввода
Аватара пользователя
lamobot.cpp
 
Сообщения: 54
Зарегистрирован: 19 авг 2005, 16:58
Откуда: г.Москва

Сообщение -= Александр =- » 21 сен 2005, 18:00

Ну, тогда давай рассказывай:
1) В чем пишешь?
2) Как включено питание? На все ли ноги? Есть там такое AVCC и AREF...
3) Какой кварц?
4) Кусок кода в студию!

А глюков быть не должно, у меня на M8535 все четко работало...
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3664
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C++, VB, asm
ФИО: Курмис Александр Андреевич

Сообщение lamobot.cpp » 21 сен 2005, 23:45

AVR GCC компилер
шью понипрогом

питание на VCC и AVCC. AREF висит в воздухе (не подключен никуда)

юзаю встроенный тактовый генератор на 1МГц

//--------------------------------------------------------------------------------
// programmed by me :)
//--------------------------------------------------------------------------------

#include <avr/io.h>

// bit operations

#define SET(x) |=(1<<x)
#define CLR(x) &=~(1<<x)
#define INV(x) ^=(1<<x)

//--------------------------------------------------------------------------------
// timer delays (non interrupt-friendly!)
//--------------------------------------------------------------------------------

void d1ms()
{
for(char w=0;w<4;w++)
{
if(w==4) TCNT0=0x80;

while(bit_is_clear(TIFR,0));

TIFR SET(0);
}
}

void d1s()
{
for(int q=0;q<1000;q++) d1ms();
}

int main()
{
DDRC=0xff;
DDRD=0xff;
DDRB=0xff;

DDRA=0x00;
PORTA SET(0);

TCCR0 SET(0); // timer-prescaler

ADCSRA SET(7); // ADC ON
ADCSRA SET(5); // forever
ADCSRA SET(6); // RUN
ADMUX=0x00;
ADMUX CLR(7);
ADMUX SET(6);
ADMUX SET(5);

while(1)
{
PORTB=ADCH;
}

return 0;
}

//--------------------------------------------------------------------------------
// end
//--------------------------------------------------------------------------------
Аватара пользователя
lamobot.cpp
 
Сообщения: 54
Зарегистрирован: 19 авг 2005, 16:58
Откуда: г.Москва

Сообщение -= Александр =- » 22 сен 2005, 00:51

Ну так в AVCC и AREF все и дело! Один из них - опорное напряжение АЦП, а второй не помню что, но тоже для АЦП, так что цепляй их на Vcc и не будет никаких шумов!  :wink:
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3664
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C++, VB, asm
ФИО: Курмис Александр Андреевич

Сообщение ASin » 22 сен 2005, 03:36

А AREF -- это базовое напряжение для сравнения. Например, если на ноге ADCn будет напряжение >= AREF, то в регистре будет 0x3FF; если ADCn == AREF/2, то в регистре -- 0x1FF и т.д.
Его, вроде, можно программно отключить и сделать базовым Vcc или 2.56 В от внутреннего источника.
ASin
 
Сообщения: 155
Зарегистрирован: 18 дек 2004, 03:14
Откуда: Москва

Сообщение -= Александр =- » 22 сен 2005, 04:24

Но проще подключить к Vcc. Или к опорному фильтру. MAXIM какие-то суперточные фильтры делает специально для этого. Если интересно - могу поискать, у меня про это было что-то...
Аватара пользователя
-= Александр =-
Мастер Самоделкин
 
Сообщения: 3664
Зарегистрирован: 11 окт 2004, 19:20
Откуда: Россия, СПб
прог. языки: C++, VB, asm
ФИО: Курмис Александр Андреевич

Сообщение lamobot.cpp » 22 сен 2005, 13:38

Спасибо, попробую AREF подцепить
хотя я вроде программно опорным сделал AVCC
Аватара пользователя
lamobot.cpp
 
Сообщения: 54
Зарегистрирован: 19 авг 2005, 16:58
Откуда: г.Москва

Сообщение Змей-Горыныч » 27 сен 2005, 06:35

A нога AVCC это питание порта А в целом. Этот порт запитывается отдельно от остальной части микроконтроллера. Вот такая вот хитрость!  :D
В электронике чудес не бывает! Бывают плохие контакты!
Аватара пользователя
Змей-Горыныч
 
Сообщения: 66
Зарегистрирован: 01 мар 2005, 14:54
Откуда: г. Томск


Вернуться в Микроконтроллеры

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

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

Mail.ru counter