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

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

Сообщение Mamonth »

Ra писал(а):
Вот, я же написал.
Эээээ, сорри, пропустил... :oops:

Давай разбираться... Таймер срабатывает по переполнению. Т.е. ты используешь прерывание TIM_OVF0. Вот настройки:

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

....
TCCR0A=0x00; 
TCCR0B=0x02;  //таймер0 на 125 000 герц - это верно при генераторе на 1 МГц
TCNT0=0x00; 
OCR0A=0x00; 
OCR0B=0x00;
....
А где запись в регистры TIMSK и TIFR? Надо ведь прерывания по переполнению разрешить... А я таких разршений в твоей программе не вижу.
Одним словом, выкладывай прогу полностью. Только не голым текстом, а сложи в отдельный файлик и привяжи к посту. А то модераторы будут ругаться...
Today fine night...
Реклама
Ra
Прорезались зубы
Сообщения: 231
Зарегистрирован: Сб май 19, 2007 18:39:33
Откуда: Москва

Сообщение Ra »

Ок, вот мой код.
Просто прерывания кодевижен автоматом разрешает когда таймер настраиваешь (генерит строчку #asm("sei")) - поэтому я это дело опустил, чтоб не писать лишнего...
Вложения
main.c
(6.55 КБ) 464 скачивания
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 534
Зарегистрирован: Пн янв 16, 2006 08:00:17
Откуда: Иркутск

Сообщение Mamonth »

У тебя в коде написаноЯ:

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


                Cnt+=(Cnt_Hi<<8);
                Cnt+=TCNT0;      //тут считаем   Cnt+=(Cnt_Hi<<8)+TCNT0 - значение таймера с учетом счетчика переполнений   
А у Jesper'a

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

count += (count_hi << 8) + inp(TCNT0); // get counter value
Я может что путаю, но у тебя в Cnt сперва заносится (Cnt_Hi<<8) с прединкрементом, а потом значение из счетчика.... Я плоховато Си знаю (один хороший человек привел меня к Ассемблеру, который я тоже плоховато пока знаю), растолкуй мне что значат две этих строчки в твоей программе и в программе Jespera....
Today fine night...
Вымогатель припоя
Аватара пользователя
Сообщения: 534
Зарегистрирован: Пн янв 16, 2006 08:00:17
Откуда: Иркутск

Сообщение Mamonth »

Настройки таймеров посмотрел - вроде все верно.
Кстати, ты не пробовал посмотреть в AVR Studio что происходит? Там ведь отладчик можно через coff файл прогнать.
Today fine night...
Реклама
Эиком - электронные компоненты и радиодетали
Ra
Прорезались зубы
Сообщения: 231
Зарегистрирован: Сб май 19, 2007 18:39:33
Откуда: Москва

Сообщение Ra »

Ну в проге юзается восьмибитный таймер - Cnt_High это счетчик переполнений, т.е. сколько раз он до 256 досчитал.
А всего количество тиков равно Cnt_High*256+TCNT0
Поэтому Cnt_High<<8 = Cnt_High*256, сначала прибавляем это, потом TCNT0.
Эти две строки вроде как эквивалентны.

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

Сообщение Mamonth »

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

Сообщение Ra »

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

Сообщение Mamonth »

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

Сообщение Ra »

Это все равно что я бы написал Cnt_High*256...

Может в электронике дело?

Вот например, когда я провод от выхода усилка отпаиваю, и он болтается в воздухе тюнер выдает 30-50 герц......

Потом - допустим, если в микрофон коротко и резко кринуть, то он может показать и 500 гц и даже выше иногда - несмотря на то что там явно меньше.....

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

Сообщение Mamonth »

Ra писал(а):Это все равно что я бы написал Cnt_High*256...

Может в электронике дело?

Вот например, когда я провод от выхода усилка отпаиваю, и он болтается в воздухе тюнер выдает 30-50 герц......

Потом - допустим, если в микрофон коротко и резко кринуть, то он может показать и 500 гц и даже выше иногда - несмотря на то что там явно меньше.....

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

Сообщение Ra »

Ну вообще - эффект такой же как от короткого крика в микрофон - совершенно фантастические разные значения. Это во-первых.
Во вторых - он в лучшем случае бассовую слышал, при очень сильном "дерганье" - почти не ловит....

Смоделил это дело в Электроникс Воркбенч (только сегодня скачал, еще не разобрался...) - там виртуальным осцилографом глянул - получается занятная вещь..... Ну, микрофонов там нет поставил вместо него источник переменного напряжения. Так вот при амплитуде 0.4 вольта (микрофон обычно не больше дает) - ворбенч показывает что на выходе вообще прямая, типо транзистор всегда закрыт...

Когда ставлю 1 вольт амплитуду - уже есть усиленный сигнал (правда сильно искажен...)

UPD: Не, это похоже я ошибся.. хотя...
Микрофон выдает какой сигнал? от 0 до какой то там амплитуды? или от - до +?
Вымогатель припоя
Аватара пользователя
Сообщения: 534
Зарегистрирован: Пн янв 16, 2006 08:00:17
Откуда: Иркутск

Сообщение Mamonth »

Микрофон обычно выдает милливольты.

И лучше используй Proteus - как-то он удачнее собран и МК моделировать умеет. Хотя косяки тоже есть ;)
Today fine night...
Закрыто

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