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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Ra
Прорезались зубы
Сообщения: 231
Зарегистрирован: Сб май 19, 2007 18:39:33
Откуда: Москва

Сообщение Ra »

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

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

Заранее благодарен.
P.S. Очень жду ответов, т.к. это именно тот прибор которых хотелось бы собрать - именно потому что нужен, а не просто ради эксперимента..
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина

Сообщение Negor »

Увидел твою темку - самому стало интересно... вот нашёл схемку на at90s2323 http://www.myplace.nu/avr/gtuner/ код на Си
There is only 10 kind of people: those who understands binary code and those who dont!!!
Контактная информация:
Реклама
Ra
Прорезались зубы
Сообщения: 231
Зарегистрирован: Сб май 19, 2007 18:39:33
Откуда: Москва

Сообщение Ra »

Огромное спасибо, попробую разобраться.....
Вымогатель припоя
Аватара пользователя
Сообщения: 586
Зарегистрирован: Ср мар 07, 2007 22:58:02
Откуда: Черкассы, Украина

Сообщение Negor »

вот сдесь твой единомышленник создал темку и ему отвечают+опсуждение приведённой схемы http://www.guitar.ru/board/11/theme-33028-1.html
There is only 10 kind of people: those who understands binary code and those who dont!!!
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Ra
Прорезались зубы
Сообщения: 231
Зарегистрирован: Сб май 19, 2007 18:39:33
Откуда: Москва

Сообщение Ra »

Тема там давно умерла, последний пост в 2004 году... Так что врядли стоит там задавать вопросы =)

Честно говоря, я не очень понимаю как такой тюнер вообще работает - я в том смысле, что тут не используется ацп, я считал что сигнал с микрофона должен идти на ацп....
Реклама
Встал на лапы
Аватара пользователя
Сообщения: 92
Зарегистрирован: Пн окт 30, 2006 01:09:37
Откуда: Таганрог

Сообщение Nanobyte »

Вот ещё похожий проект:
http://instruct1.cit.cornell.edu/course ... /index.htm

Кстати, на этом сайте много интересного, в том числе и для гитар:
http://instruct1.cit.cornell.edu/course ... lProjects/
Реклама
Ra
Прорезались зубы
Сообщения: 231
Зарегистрирован: Сб май 19, 2007 18:39:33
Откуда: Москва

Сообщение Ra »

Народ, еще такой вопрос - купил микрофон вот такой: http://www.chip-dip.ru/product0/94347354.aspx

А схемы подключения на сайте нет - не подскажете куда там подавать питание? Там два абсолютно идентичных вывода, никаких маркировок. А я так понимаю, что он должен быть подключен к земле, питанию, и входу схемы... (я про вот эту схему: http://www.myplace.nu/avr/gtuner/gtuner_sch.gif )
Вымогатель припоя
Аватара пользователя
Сообщения: 534
Зарегистрирован: Пн янв 16, 2006 08:00:17
Откуда: Иркутск

Сообщение Mamonth »

При двух выводах, питание подключать просто некуда. Забудь про питание на микрофоне
Today fine night...
Ra
Прорезались зубы
Сообщения: 231
Зарегистрирован: Сб май 19, 2007 18:39:33
Откуда: Москва

Сообщение Ra »

Прошу прощения что вновь тему поднимаю, только сейчас руки дошли.... и то, не совсем :)

2 Mamonth - можно тогда подробнее, как его подключать?
Там например один вывод маркированый, другой - нет - если к питанию не надо, то как тогда?
http://www.myplace.nu/avr/gtuner/gtuner_sch.gif - здесь то разъем на три вывода......
Вымогатель припоя
Аватара пользователя
Сообщения: 534
Зарегистрирован: Пн янв 16, 2006 08:00:17
Откуда: Иркутск

Сообщение Mamonth »

Ну тут три вывода для удобства просто сделаны рядом. Микрофон цепляешь одним концом к ground вторым к input (как правило каким-куда не важно, если микрофон с двумя выводами). Питание подаешь на Vcc (плюс напряжения) и ground или GND что одно и тоже(минус напряжения). +5V Supply сделан для удобства подключения например дополнительного усилителя, если он имеется, как например в трехвыводных микрофонах. Только смотри, бываю микрофоны которые с транзистором внутри (были такие в старых советских магнитофонах) и им хватит 5 вольт за глаза, а бывают с напряжением питания 48 Вольт. Вторые как правило профессиональные, и даже самые дешевые (даже китайская подделка) редко стоят меньше 1000 рублей.
Today fine night...
Вымогатель припоя
Аватара пользователя
Сообщения: 534
Зарегистрирован: Пн янв 16, 2006 08:00:17
Откуда: Иркутск

Сообщение Mamonth »

Вообще тюнер этот расчитан на подключение электрогитары напрямую, или у тебя акустика?
Today fine night...
Ra
Прорезались зубы
Сообщения: 231
Зарегистрирован: Сб май 19, 2007 18:39:33
Откуда: Москва

Сообщение Ra »

Аккустика. С подключением я уже сам разобрался, спасибо.


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

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

И как вообще этот тюнер работает - для контроллера же все что меньше 2.5 (или сколько там) - это лог 0, а все что больше - лог 1!
Вымогатель припоя
Аватара пользователя
Сообщения: 534
Зарегистрирован: Пн янв 16, 2006 08:00:17
Откуда: Иркутск

Сообщение 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 и засвечиваются необходимые светодиоды... Собственно примерно все.
Today fine night...
Э...
Аватара пользователя
Сообщения: 2792
Зарегистрирован: Ср апр 04, 2007 08:39:14
Откуда: Москва

Сообщение tych »

Я просто прогу для ПК скачал. С микрофона нормально настривать гитарку.
Думайте сами, решайте сами ... а вот он-лайн перевод на корявый русский http://translate.ru
Контактная информация:
Ra
Прорезались зубы
Сообщения: 231
Зарегистрирован: Сб май 19, 2007 18:39:33
Откуда: Москва

Сообщение Ra »

Ну я собрал его, только вместо диодов сделал экранчик, чтоб выдавать туда частоту и октаву... Но что то он слабо работает - он только в том случае определяет, если я, допустим, на компе сгенерю ровно 440 герц и очень громко их подам....

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

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


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

Mamonth, спасибо за пояснения - в общем, я примерно так и представлял - но тогда я не понимаю почему он так глючит.
Вымогатель припоя
Аватара пользователя
Сообщения: 534
Зарегистрирован: Пн янв 16, 2006 08:00:17
Откуда: Иркутск

Сообщение Mamonth »

Ra писал(а):
...но получается усилитель класса B, т.е. каждая полуволна усиливается своим транзистором.
Хм... я тут вижу только один транзистор =)

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

А глючить он может по совершенно различным причинам, начиная от неверной частоты кварца, до косяка в программе или настройке фузов. Если бы я начал делать что-то подобное, я бы сперва сделал частотомер, а потом переиначил его в тюнер. Частоты у гитар небольшие (даже на первых струнах в районе 12-24 ладов), так что, проблем особых я не вижу. ;) Дерзай!
Today fine night...
Ra
Прорезались зубы
Сообщения: 231
Зарегистрирован: Сб май 19, 2007 18:39:33
Откуда: Москва

Сообщение 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. опечатался, когда копировал.....
Последний раз редактировалось Ra Пт сен 28, 2007 13:59:40, всего редактировалось 1 раз.
Ra
Прорезались зубы
Сообщения: 231
Зарегистрирован: Сб май 19, 2007 18:39:33
Откуда: Москва

Сообщение Ra »

2 Mamonth Посмотри плз - у меня уже "глаз замылился" - может где и есть косяк, я не вижу.....
Вымогатель припоя
Аватара пользователя
Сообщения: 534
Зарегистрирован: Пн янв 16, 2006 08:00:17
Откуда: Иркутск

Сообщение Mamonth »

Что-то я не вижу кода по определению положительного и отрицательного перепада... это раз. Второе, ты бы уж выкладывал программу полностью, а то много непонятного. Какой кварц стоит, какие фузы установлены и прочее ))
Today fine night...
Ra
Прорезались зубы
Сообщения: 231
Зарегистрирован: Сб май 19, 2007 18:39:33
Откуда: Москва

Сообщение 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 - получаем среднее количество тиков в периоде.
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»