Отговори на тема  [ 11 мнения ] 
АЦП на ATmega16 помощ (C code) 
Автор Съобщение
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Сря Окт 12, 2005 2:26 pm
Мнения: 86
Местоположение: София
Мнение АЦП на ATmega16 помощ (C code)
Значи идеята е следната ! АЦП, пак ATmega 16, канал 0, потенциометър на входа от 0 до Vcc..обаче явно не прочитам конвертираната стойност по правилния начин и немога да индицирам в изхода че има някакво конвертиране въобще... ако някой може да даде идея къде може да е грешката или каде съм изпуснал нещо ще съм благодарен...


Цитат:
#include<avr/io.h>
int main (void)
{
DDRD = 0xFF;

int x = 0;
ADCSRA = (1<<ADEN) | (1<<ADPS2);

while (1)
{

ADMUX = 0;
ADCSRA |= (1<<ADSC);
while (ADCSRA & _BV(ADSC) ) {}
x = ADC;

PORTD = x<<PD4;
}

}


Сря Апр 12, 2006 3:36 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Съб Сеп 03, 2005 11:31 am
Мнения: 766
Местоположение: Пловдив
Мнение 
#include <mega16.h>

#define ADC_VREF_TYPE 0x40

// Read the AD conversion result
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}

// Declare your global variables here

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;


// ADC initialization
// ADC Clock frequency: 1000.000 kHz
// ADC Voltage Reference: AVCC pin
// ADC Auto Trigger Source: Free Running
ADMUX=ADC_VREF_TYPE;
ADCSRA=0xA4;
SFIOR&=0x1F;

while (1)
{
// Place your code here

};
}


Така казва чичо Pavel Haiduc


Сря Апр 12, 2006 3:44 pm
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Сря Окт 12, 2005 2:26 pm
Мнения: 86
Местоположение: София
Мнение 
Ами проблема пак е в тоя регистър ADCW .... принципно такъв в ATMegata поне аз незнам да има ... другия вариант е да се дефинира някаде в Mega16.h файла обаче аз го нямам а и немога да го намеря..ако можеш да ми помогнеш да го намеря него може и да стане далаверата ..


Сря Апр 12, 2006 4:05 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
като начало - какъв резултат ти трябва - 10 или 8 битов?


Сря Апр 12, 2006 5:03 pm
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Сря Окт 12, 2005 2:26 pm
Мнения: 86
Местоположение: София
Мнение 
Ами резултатът на АЦП-то е 10 битов мен ми трябва да го искарам на 8 битовия PORTD...като за начало.. иначе идеята е всички битове да ги изкарам през един извод...Примерно подавам нещо на входа на АЦП-то и на един светодиод получавам конвертирания цифров сигнал като цифрова поредица...


Сря Апр 12, 2006 5:27 pm
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Сря Окт 12, 2005 2:26 pm
Мнения: 86
Местоположение: София
Мнение 
Готово оправих го


Сря Апр 12, 2006 10:20 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Браво. :) АЦП-то на АВР-а има ред специфики, с които ще се срещнеш по-нататък. Например, ако искаш 10 битовия резултат, двата регистъра се четат в строга поредица - пише си го в даташита. Не го пускай на твърде висока честота, почва да изкривява резултата, а в края, при много висока скорост на преобразуване, резултата няма абс. нищо общо с истината - просто някви случайни числа.


Чет Апр 13, 2006 9:38 am
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Сря Окт 12, 2005 2:26 pm
Мнения: 86
Местоположение: София
Мнение 
Има логика. Сега проблема е малко по различен и е от хардуерно естество. Значи подава се аналогов сигнал от микрофон той се усилва и се филтрира следтова от ниско честотен филтър за 3,4kHz ( за отделяне на говора ) след това сигнала се подава на входа на АЦП-то. Феноменът (поне за мен) е следния-> Когато микрофонът и след това фълтъра не са свързани към входа на АЦП-то тогава амплитудата на сигнала в изхода на филтъра е към 1V...проблемът възниква когато изхода на активния филтър го свържа директно към входа на АЦП-то...тогава сигналав изхода на филтъра изчезва 8O . Цялата далавера се оправи като сложих резисторен делител в изхода на филтъра и преди входа на АЦП-то, чрез който да регулирам нивото на сигнала постъпващ на ADC0...проблема ми е че стойностите на тези резистори са нетипични, а не искам да го правя чрез допълнителни тримери и т.н (въпрос на много фактори + място). Просто не разбирам как като не е свързан към контролера, филтъра с микрофона работи а като го вържа към ВХОДА на АЦП-о спира...какъф товар е този вход ?! и защо на него имам напрежение към 1,25V...АЦП-то работи супер но се замислям дали няма вариант чрез програмата да опиша какъв сигнал подавам на АЦП-то - постоянен или променлив ?! при постоянен сигнал от потенциометър между +5V и 0 подаден на АЦП-то сичко бачка супер но при променливия от микрофона с филтъра вече става кофти и сигнала следфилтъра изчезва някаде по входа на контролера 8O ИДЕИ ? :?


Пет Апр 14, 2006 3:23 pm
Профил
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Сря Окт 12, 2005 2:26 pm
Мнения: 86
Местоположение: София
Мнение 
Е никой ли не може да помогне ?! Браво


Нед Апр 16, 2006 3:41 pm
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Фев 17, 2006 9:17 am
Мнения: 765
Местоположение: Стара Загора
Мнение 
Ми дай да видим схемата де! А както работи с делител, защо не го оставиш така и да ме се занимаваш с глупости??

Че толкова ли е бързо АЦП-то на мегата, че да се справи със сигнал директно от мисрофон :roll: 8O


Пон Апр 17, 2006 9:15 am
Профил ICQ
Ранг: Минаващ
Ранг: Минаващ
Аватар

Регистриран на: Сря Окт 12, 2005 2:26 pm
Мнения: 86
Местоположение: София
Мнение 
При носеща на аналоговия сигнал 15kHz и тактова на ATMega-та 16Mhz с външен осцилатор дали е бавно ?!


Пон Апр 17, 2006 11:17 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 11 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни