Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс. e-mail:jobsmp@pochta.ru |
Макет вроде работает: в калонках слышу то что сказал в микрофон, правда, не совсем разборчиво и слишком много шума.
Шум какой-то многочастотный (и низкие слышны и высокие "пищат").
Смена частоты выборок и ШИМ почти не влияет на ситуацию (какие-то частоты не шумят конечно, но в целом шумно).
В орегигенале (у автора) выходной фильтр настроен под 15686 Гц (как выборки, так и ШИМ), может причина в этом.
Но я частоты менял, неужели настройка такая тонкая должна быть.
Очень буду признателен, если поможете справиться с этим, подскажете где ошибка кроется (может в настройке фильтров или же в прошивке что-то попутал).
Заранее спасибо.
Прошивка в МК следующая: // Declare your global variables here // Timer 0 overflow interrupt service routine // ADC interrupt service routine void main(void) // Port B initialization // Timer/Counter 0 initialization // Timer(s)/Counter(s) Interrupt(s) initialization // ADC initialization #asm("sei")// Global enable interrupts while (1)
#include
#include
#define ADC_VREF_TYPE 0x00
unsigned int adc_data;
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
OCR0=adc_data;
}
interrupt [ADC_INT] void adc_isr(void)
{
adc_data=ADCW;
TCCR0=0x78;// Stop counter
OCR0=adc_data;
TCCR0=0x79;//Start counter
}
{
// 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;
// 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;
// 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;
TIMSK=0x01;
// 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;
ADCSRA|=0x40; //Start first conversion (bx01000000)
}
Ответы