Страница 1 из 2

Гитарный тюнер на AVR : ищу схему

Добавлено: Сб июн 16, 2007 22:25:15
Ra
Собственно сабж. Где то видел схемку гитарного тюнера на 2х тини12L - я вот думаю, можно ли собрать его на одной меге?
Поделитесь соображениями, честно говоря я очень слабо представляю себе прошивку....

На компе, было дело, писал преобразование Фурье, чтоб выделить основную частоту - но что то мне сомнительно, что тот кто делал такой тюнер на тини запихал в него монструозный код преобразования - может быть есть более простой путь?

Заранее благодарен.
P.S. Очень жду ответов, т.к. это именно тот прибор которых хотелось бы собрать - именно потому что нужен, а не просто ради эксперимента..

Добавлено: Сб июн 16, 2007 23:02:38
Negor
Увидел твою темку - самому стало интересно... вот нашёл схемку на at90s2323 http://www.myplace.nu/avr/gtuner/ код на Си

Добавлено: Сб июн 16, 2007 23:11:10
Ra
Огромное спасибо, попробую разобраться.....

Добавлено: Сб июн 16, 2007 23:24:21
Negor
вот сдесь твой единомышленник создал темку и ему отвечают+опсуждение приведённой схемы http://www.guitar.ru/board/11/theme-33028-1.html

Добавлено: Сб июн 16, 2007 23:43:16
Ra
Тема там давно умерла, последний пост в 2004 году... Так что врядли стоит там задавать вопросы =)

Честно говоря, я не очень понимаю как такой тюнер вообще работает - я в том смысле, что тут не используется ацп, я считал что сигнал с микрофона должен идти на ацп....

Добавлено: Вс июн 17, 2007 00:01:42
Nanobyte
Вот ещё похожий проект:
http://instruct1.cit.cornell.edu/course ... /index.htm

Кстати, на этом сайте много интересного, в том числе и для гитар:
http://instruct1.cit.cornell.edu/course ... lProjects/

Добавлено: Пн июн 18, 2007 15:57:41
Ra
Народ, еще такой вопрос - купил микрофон вот такой: http://www.chip-dip.ru/product0/94347354.aspx

А схемы подключения на сайте нет - не подскажете куда там подавать питание? Там два абсолютно идентичных вывода, никаких маркировок. А я так понимаю, что он должен быть подключен к земле, питанию, и входу схемы... (я про вот эту схему: http://www.myplace.nu/avr/gtuner/gtuner_sch.gif )

Добавлено: Ср июн 20, 2007 03:40:10
Mamonth
При двух выводах, питание подключать просто некуда. Забудь про питание на микрофоне

Добавлено: Вт сен 11, 2007 18:47:48
Ra
Прошу прощения что вновь тему поднимаю, только сейчас руки дошли.... и то, не совсем :)

2 Mamonth - можно тогда подробнее, как его подключать?
Там например один вывод маркированый, другой - нет - если к питанию не надо, то как тогда?
http://www.myplace.nu/avr/gtuner/gtuner_sch.gif - здесь то разъем на три вывода......

Добавлено: Ср сен 26, 2007 15:46:47
Mamonth
Ну тут три вывода для удобства просто сделаны рядом. Микрофон цепляешь одним концом к ground вторым к input (как правило каким-куда не важно, если микрофон с двумя выводами). Питание подаешь на Vcc (плюс напряжения) и ground или GND что одно и тоже(минус напряжения). +5V Supply сделан для удобства подключения например дополнительного усилителя, если он имеется, как например в трехвыводных микрофонах. Только смотри, бываю микрофоны которые с транзистором внутри (были такие в старых советских магнитофонах) и им хватит 5 вольт за глаза, а бывают с напряжением питания 48 Вольт. Вторые как правило профессиональные, и даже самые дешевые (даже китайская подделка) редко стоят меньше 1000 рублей.

Добавлено: Ср сен 26, 2007 15:53:39
Mamonth
Вообще тюнер этот расчитан на подключение электрогитары напрямую, или у тебя акустика?

Добавлено: Ср сен 26, 2007 16:31:43
Ra
Аккустика. С подключением я уже сам разобрался, спасибо.


Вопрос в другом - как ЭТО работает?

Помогите плз понять - какого вида идет сигнал на ногу контроллера-то?
Я что то не пойму, в каких пределах (вольт) он скачет?

И как вообще этот тюнер работает - для контроллера же все что меньше 2.5 (или сколько там) - это лог 0, а все что больше - лог 1!

Добавлено: Чт сен 27, 2007 02:54:31
Mamonth
На резисторах R1-R2 собран делитель напряжения задающий рабочую точку транзистора VT1. Не уверен, но получается усилитель класса B, т.е. каждая полуволна усиливается своим транзистором. Резистор R3 - создает подтяжку и ограничивает ток через транзистор, в таком случае на вход контроллера приходят импульсы похожие на половинки синуса, дальше стоит таймер (и по переполнению обрабатывается).

Вот здесь:

Код: Выделить всё

while (bit_is_set(PINB,1))	// ignore hi->lo edge transitions
    if (count_hi > 80)		// skip if no edge is seen within
	break;			// a reasonable time
while (bit_is_clear(PINB,1))	// wait for lo->hi edge
    if (count_hi > 80)		// skip if no edge is seen within
	break;			
Стоит цикл который смотрит, когда идет положительный и когда отрицательный перепад. Соответственно в эти моменты времени обрабатывается процедура по переполнению таймера. Затем обрабатывается значение count_hi и засвечиваются необходимые светодиоды... Собственно примерно все.

Добавлено: Чт сен 27, 2007 06:20:49
tych
Я просто прогу для ПК скачал. С микрофона нормально настривать гитарку.

Добавлено: Чт сен 27, 2007 11:28:34
Ra
Ну я собрал его, только вместо диодов сделал экранчик, чтоб выдавать туда частоту и октаву... Но что то он слабо работает - он только в том случае определяет, если я, допустим, на компе сгенерю ровно 440 герц и очень громко их подам....

А гитарные струны - почти не определяет - выдает с разбросом от 80 до 400 герц почти :?

Может, дело в усилителе? Если будет на 2х - то будет лучше? или я где то в проге накосячил... Я же ее писал на кодевижен, базируясь на том коде...


А по поводу проги на комп - так и у меня есть, просто охота собрать в железе.......
...но получается усилитель класса B, т.е. каждая полуволна усиливается своим транзистором.
Хм... я тут вижу только один транзистор =)

Mamonth, спасибо за пояснения - в общем, я примерно так и представлял - но тогда я не понимаю почему он так глючит.

Добавлено: Пт сен 28, 2007 03:33:32
Mamonth
Ra писал(а):
...но получается усилитель класса B, т.е. каждая полуволна усиливается своим транзистором.
Хм... я тут вижу только один транзистор =)

Mamonth, спасибо за пояснения - в общем, я примерно так и представлял - но тогда я не понимаю почему он так глючит.
Один транзистор - потому что его вполне достаточно одного. Зачем усложнять схему если подсчет идет по положит. а затем по отрицательному перепаду? Потому и остался всего один транзистор.

А глючить он может по совершенно различным причинам, начиная от неверной частоты кварца, до косяка в программе или настройке фузов. Если бы я начал делать что-то подобное, я бы сперва сделал частотомер, а потом переиначил его в тюнер. Частоты у гитар небольшие (даже на первых струнах в районе 12-24 ладов), так что, проблем особых я не вижу. ;) Дерзай!

Добавлено: Пт сен 28, 2007 12:37:20
Ra
В общем, тактируется от внутреннего генератора меги, на 1 мегагерц.
Фузы все по стандарту, не менял ничего.


Код: Выделить всё

#define MAX_SMPL     60           
#define SAMPLES      64
#define BASE_FREQUENCY 125000

unsigned long int Cnt_Hi=0;
float Freq=0;                   

interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
    Cnt_Hi++;
}


void main(void)
{

//......тут разные инициализации

TCCR0A=0x00;
TCCR0B=0x02;  //таймер0 на 125 000 герц
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

//......тут разные инициализации

lcd_init(20);
#asm("sei")
while (1)
      {         
        lcd_clear();
          
        if(szFreq[0]!=0)
        {
                strcpyf(Str,"Frequency:");
                strcat(Str,szFreq);
                strcatf(Str," Hz - ");
                strcat(Str,szNote);
                strcat(Str,szOct);  
                strcatf(Str,"+");
                strcat(Str,szErr);
        }
                lcd_puts(Str);
     
        while(PINC.3!=1);
        TCNT0=0;
        Cnt_Hi=0; 
        Cnt=0;
        for(i=0;i<SAMPLES>MAX_SMPL)
               while(PINC.3!=0)
                        if(Cnt_Hi>MAX_SMPL)
                                break;
                while(PINC.3!=1) 
                        if(Cnt_Hi>MAX_SMPL)
                                break;     
                Cnt+=(Cnt_Hi<<8>MAX_SMPL)
                                break;  
                TCNT0=0;
                Cnt_Hi=0;            
        }  
        if(Cnt_Hi<=MAX_SMPL)
        {   
                 Freq=BASE_FREQUENCY*SAMPLES/(float)Cnt;   

         //....Дальше идет определение октавые, хрен бы с ним - сначала с частотой надо разобраться
         }
P.S. опечатался, когда копировал.....

Добавлено: Пт сен 28, 2007 12:39:25
Ra
2 Mamonth Посмотри плз - у меня уже "глаз замылился" - может где и есть косяк, я не вижу.....

Добавлено: Пт сен 28, 2007 13:53:51
Mamonth
Что-то я не вижу кода по определению положительного и отрицательного перепада... это раз. Второе, ты бы уж выкладывал программу полностью, а то много непонятного. Какой кварц стоит, какие фузы установлены и прочее ))

Добавлено: Пт сен 28, 2007 13:58:34
Ra
Ra писал(а):В общем, тактируется от внутреннего генератора меги, на 1 мегагерц.
Фузы все по стандарту, не менял ничего.
Вот, я же написал.



А перепады -

Код: Выделить всё

while(PINC.3!=1); //ждем 1 на ноге
        TCNT0=0;
        Cnt_Hi=0; //обнуляем каунтеры
        Cnt=0;

        for(i=0;i<SAMPLES>MAX_SMPL)
                                break;
                 while(PINC.3!=0)  //Ждем перепада с 1 на 0
                        if(Cnt_Hi>MAX_SMPL)
                                break;
                while(PINC.3!=1)   //ждем с 0 на 1
                        if(Cnt_Hi>MAX_SMPL)
                                break;     
                Cnt+=(Cnt_Hi<<8>MAX_SMPL)
                                break;        
        }

Ну я по образу и подобию того тюнера, на который мне ссылку кинули, сделал. Там примерно так же - в Cnt будет сумма тиков за SAMPLES измерений, потом мы ее делим на SAMPLES - получаем среднее количество тиков в периоде.