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

 
 
> АЦП-ЦАП с AVR, Помогите найти ошибки (подозреваю прошивку)
FET
сообщение Mar 9 2007, 12:09
Сообщение #1





Группа: Новичок
Сообщений: 1
Регистрация: 9-03-07
Пользователь №: 25 996



Всем привет!
Помогите разобраться, пытаюсь научиться использовать МК (ATmega16) в качестве АЦП/ЦАП.
Собрал схемку по "Цифровое устройство записи речи, использующее технологию AVR и последовательную память DataFlash",
на входе подключил стандартный микрофон для ПК, выход - к колонкам ПК.
Микрофон питаю от +9V (DC). Один LM324 используется как для Микрофона, так и для динамика.
Частота МК от кварца 16МГц, 10-ти разрядный АЦП, Vref=3.5V, Timer0 - в режиме быстрой ШИМ,
частота выборок АЦП = 9615 Гц (пробовал и другие частоты), частота ШИМ =31250 Гц (другие тоже пробовал).
Напряжение смещения на LM324 = 2,5V, коэфициент усиления =100.
В работе: при отсутствии входного сигнала (тишина) значения напряжение АС:
на вх. 2 LM324 = 65mV,
на вых.1 = 1,804...1,836 V,
на вых.14 = 1,643 ...1,688V,
на вых.ШИМ (PB3) = 2,293...2,330V.
при наличии входного сигнала напряжение АС :
вх.2 = более 100 mV,
вых.1 = падает до уровня 1,690V.
вых.14 = на уровне 1,400V,
вых.ШИМ = на уровне 2,150V.
Макет вроде работает: в калонках слышу то что сказал в микрофон, правда, не совсем разборчиво и слишком много шума.
Шум какой-то многочастотный (и низкие слышны и высокие "пищат").
Смена частоты выборок и ШИМ почти не влияет на ситуацию (какие-то частоты не шумят конечно, но в целом шумно).
В орегигенале (у автора) выходной фильтр настроен под 15686 Гц (как выборки, так и ШИМ), может причина в этом.
Но я частоты менял, неужели настройка такая тонкая должна быть.

Очень буду признателен, если поможете справиться с этим, подскажете где ошибка кроется (может в настройке фильтров или же в прошивке что-то попутал).
Заранее спасибо.

Прошивка в МК следующая:
#include
#include
#define ADC_VREF_TYPE 0x00

// Declare your global variables here
unsigned int adc_data;

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
OCR0=adc_data;
}

// ADC interrupt service routine
interrupt [ADC_INT] void adc_isr(void)
{
adc_data=ADCW;
TCCR0=0x78;// Stop counter
OCR0=adc_data;
TCCR0=0x79;//Start counter
}

void main(void)
{
// 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=Out Func2=In Func1=In Func0=In
// State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x08;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 16000,000 kHz
// Mode: Fast PWM top=FFh
// OC0 output: Inverted PWM
TCCR0=0x78; // bx01101001
TCNT0=0x00;
OCR0=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;

// ADC initialization
// ADC Clock frequency: 250,000 kHz
// ADC Voltage Reference: AREF pin
// ADC Auto Trigger Source: Free Running
ADMUX=ADC_VREF_TYPE;
ADCSRA=0xAE; //bx10101110
SFIOR&=0x1F;

#asm("sei")// Global enable interrupts
ADCSRA|=0x40; //Start first conversion (bx01000000)

while (1)
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- FET   АЦП-ЦАП с AVR   Mar 9 2007, 12:09


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

 


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


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