Добавлено спустя 5 минут 14 секунд:
Известно лишь разница по времени прихода звука
пока и это не известно. по теорий работать должно, но это даже не выходит на практике.
вот только что попытался находить с АЦП, то есть включить АЦП и выводить на ЖК данные, но АЦП даже не может найти с лева или справа звук.
вот код:
- Код: Выделить всё • Развернуть
/*****************************************************
Chip type : ATmega32
Program type : Application
AVR Core Clock frequency: 16,000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 512
*****************************************************/
#include <mega32.h>
#include <stdio.h>
#include <delay.h>
#include <alcd.h>
#define ADC_VREF_TYPE 0x60
unsigned int adc1 = 0;
unsigned int adc2 = 0;
unsigned char read_adc(unsigned char adc_input){
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
// Delay needed for the stabilization of the ADC input voltage
delay_us(10);
// Start the AD conversion
ADCSRA|=0x40;
// Wait for the AD conversion to complete
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCH;
}
void main(void){
unsigned char ch1[20];
unsigned char ch2[20];
int i;
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
// ADC initialization
// ADC Clock frequency: 125,000 kHz
// ADC Voltage Reference: AVCC pin
// Only the 8 most significant bits of
// the AD conversion result are used
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x87;
// Alphanumeric LCD initialization
// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTB Bit 0
// RD - PORTB Bit 1
// EN - PORTB Bit 2
// D4 - PORTB Bit 4
// D5 - PORTB Bit 5
// D6 - PORTB Bit 6
// D7 - PORTB Bit 7
// Characters/line: 16
lcd_init(16);
lcd_gotoxy(2,0);
lcd_puts("loading...");
delay_ms(1000);
for(i = 0; i<16; i++){
lcd_gotoxy(i,1);
lcd_putchar(0xff);
delay_ms(500);
}
lcd_clear();
lcd_gotoxy(3,0);
lcd_puts("start test");
delay_ms(1000);
lcd_clear();
while (1){
adc1 = read_adc(0);
adc2 = read_adc(1);
sprintf( ch1,"adc1=%u", adc1 );
lcd_gotoxy(9,0);
lcd_puts(ch1);
sprintf( ch2,"adc2=%u", adc2 );
lcd_gotoxy(0,0);
lcd_puts(ch2);
if(adc1 > adc2 && adc1 > 5){
lcd_gotoxy(9,1);
lcd_puts("------>");
delay_ms(2000);
}
if( adc2 > adc1 && adc2 > 5){
lcd_gotoxy(0,1);
lcd_puts("<------");
delay_ms(2000);
}
delay_ms(100);
lcd_clear();
}
}
вопрос такой возник, вот в этом строчке
- Код: Выделить всё • Развернуть
adc1 = read_adc(0);
adc2 = read_adc(1);