Перейти к содержанию

windas

Рекомендуемые сообщения

Здравствуйте!

Начал осваивать программирование AVR. Делаю таймер для засветки фоторезиста на уф. светодиодах. Вроде программа почти готова, но уперся в звук. Думал, что самое легкое, ан нет.

Суть в следующем. По окончании работы таймера, хочу сделать сигнал об окончании(какой не важно, лишь бы пискнул). Но не выходит. Идет простое щелкание, тикание, тарахтение. Слишком малая частота и не могу добиться нужной. Использую Atmega8. 4 мегагерца. Пищалка hy-05 hycom через транзистор. Таймер Т0 обслуживает динамическую индикацию. Таймер Т1_А - считает секунды, Таймер Т2 - опрос энкодера и кнопки. Все работает вроде нормально. Под звук использую Т1_В без делителя. Все равно трещит, а не пищит. Убирал Т1, думал как то влияет - не влияет. Менял ОСR1B - частота меняется, но не сильно. Дрыгал ножкой в основном блоке программы, все равно не пищит а тарахтит, зараза. Вообщем не могу заставить генерировать 2400гц для пищалки. Запарился уже. Можно сделать генератор отдельно, но хочу добить программно. Все равно потом нужно будет в других проектах. Подскажите, где копать? Может какой другой таймер влияет из-за ошибки?(но ведь все работает). Может фьюзы? Но опять же другие таймеры работают. Такое ощущение, что вся схема работает на пониженой частоте, но работает. Подскажите где копать, на что еще внимание обратить? Что почитать? Блин, из-за какого то писка все встало. Заранее спасибо.

Ссылка на комментарий
Поделиться на другие сайты

Используйте таймер в режиме СТС (сброс по совпадению), регистр сравнения будет задавать частоту звука.

Так и делаю. Таймер Т1_B сброс по совпадении. Хотя перепробовал уже все режимы. Все равно только тарахтит.

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Не забывайте менять предделитель таймера между счетом секунд и формированием звука.

Не забыл. Убираю предделитель - тарахтит быстрее, но все равно тарахтит, а не пищит.

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

В некоторых местах форматирование кода есть, в других нет. Странно.

Вы в курсе, что в режиме СТС частота задается либо регистром OCR1A, либо ICR, но не OCR1B?

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Если в плане научиться программировать - то все это обсуждение, наверное, полезно.

А ежели в плане практичности

Мужик, тебе нужны "шашечки" или тебе нужно ехать?
то тупо поставьте баззер (зуммер) со встроенным генератором. СтОит всего раза в три больше, чем без генератора, но все равно копейки.

Просят - не откажи. Не просят - не навязывайся!

Простота хуже воровства.

Ссылка на комментарий
Поделиться на другие сайты

зачем его покупать если можно с материнки выдрать. В этом случае и таймер дергать туды=сюды не придется.

Изменено пользователем Viktor26

Не знаеш как? Спроси у Google'а !!!

Ссылка на комментарий
Поделиться на другие сайты

Хоть чушь-то не пишите! На материнках как раз стоят зуммеры БЕЗ встроенного генератора.

Просят - не откажи. Не просят - не навязывайся!

Простота хуже воровства.

Ссылка на комментарий
Поделиться на другие сайты

лично, мне, два раза попадались выдранные с материнки, и один с бортового компа для авто, заводились от трех пальчиковых батареек

Не знаеш как? Спроси у Google'а !!!

Ссылка на комментарий
Поделиться на другие сайты

На материнках как раз стоят зуммеры БЕЗ встроенного генератора.

50/50 ИМХО

А формирование звука, примеров программ на разных языках полно, только поискать.

Изменено пользователем o_l_e_g

Errare humanum est. Коли людЯм позволено, что же о нас то говорить!
 

Ссылка на комментарий
Поделиться на другие сайты

Вы в курсе, что в режиме СТС частота задается либо регистром OCR1A, либо ICR, но не OCR1B?

Поменять функции прерываний местами. Тогда для получения частоты на линии порта PB2 (при тактовой 4МГц) потребуется такая настройка таймера:

TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (1<<COM1B0) | (0<<WGM11) | (0<<WGM10);

TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (0<<CS12) | (1<<CS11) | (0<<CS10);

OCR1AH=0x00;

OCR1AL=0x66;

Навскидку.

Ссылка на комментарий
Поделиться на другие сайты

Viktor26, значит, Вам повезло больше. Мне такие НИ РАЗУ не попадались. А распаял я более 3-х десятков материнок.

Просят - не откажи. Не просят - не навязывайся!

Простота хуже воровства.

Ссылка на комментарий
Поделиться на другие сайты

)) три десятка не мало, а когда в воинской части идет модернизация счет идет на 50-60 машин(ЭВМ) в год. у меня в ноябре этого года будет ровно 9 лет выслуги. за это время столько всякого, и хорошего и плохого, угробили, мама дорогая)))

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

Не знаеш как? Спроси у Google'а !!!

Ссылка на комментарий
Поделиться на другие сайты

В некоторых местах форматирование кода есть, в других нет. Странно.

Вы в курсе, что в режиме СТС частота задается либо регистром OCR1A, либо ICR, но не OCR1B?

Хм. Я делал 2 прерывания по совпадению OCR1A - считает секунды и OCR1B - генерирует звук. Разве не может быть одно прерывания по совпадению А и другое прерывание по совпадению В? Вроде изучая чужие коды такие варианты были. Объясните, плз, если чего то не до понимаю.

Если в плане научиться программировать - то все это обсуждение, наверное, полезно.

А ежели в плане практичности

Мужик, тебе нужны "шашечки" или тебе нужно ехать?
то тупо поставьте баззер (зуммер) со встроенным генератором. СтОит всего раза в три больше, чем без генератора, но все равно копейки.

Я хочу изучить программирование и использовать практически. Я вобщем то радиолюбитель со стажем. Немного программировал на Fox Pro и 1с. Что бы облегчить себе жизнь, мог бы использовать готовый таймер из китая. Он у меня работает с УФ лампами. Но задача изучить и сделать самому. И это пока первый проект, на котором учусь. И его можно было бы упростить, но специально выбираю сложный путь, что бы учится.

Не забывайте менять предделитель таймера между счетом секунд и формированием звука.

зачем его покупать если можно с материнки выдрать. В этом случае и таймер дергать туды=сюды не придется.

У меня есть несколько материнок, но там простые пищалки. Но я, как и писал выше, не ищу легких путей)). Чем сложнее задача, тем больше узнаю.

Вы в курсе, что в режиме СТС частота задается либо регистром OCR1A, либо ICR, но не OCR1B?

Поменять функции прерываний местами. Тогда для получения частоты на линии порта PB2 (при тактовой 4МГц) потребуется такая настройка таймера:

TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (1<<COM1B0) | (0<<WGM11) | (0<<WGM10);

TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (1<<WGM12) | (0<<CS12) | (1<<CS11) | (0<<CS10);

OCR1AH=0x00;

OCR1AL=0x66;

Навскидку.

Приду домой попробую повесить секунды на OCR1B, a звук на OCR1A. хотя я вообще убирал второе прерывание, что бы оно ни как не влияло. Все равно эффект тот же. Или вообще все убрать(индикаторы, секунды, энкодер), оставить только код звука и проверить, будет ли работать. Если нет, значит фьюзы. (хотя секунды ведь тикают, динамическая инд.работает, энкодер работает.) У меня схема уже спаяна, использую как отладочную плату. Написал код - сразу загрузил - сразу проверил.

К стате, если дрыгать ножкой в основном теле программы, ведь должно быть 4мГц или около того? Пробовал так делать, результат тот же, тарахтит. Такое ощущение что работает на частоте опроса энкодера или динамической индикации.

Ссылка на комментарий
Поделиться на другие сайты

Вы наверное немножечко неправильно поняли, OCR1A используется потому что вывод ШИМ на МК именно под этот регистр сравнения заточен.

и то что Вы убирали\отключали другие прерывания, не имеет значения. Просто чучуть неправильно настроили. Сегодня проверите и скорее всего, %90, что у Вас все получится.

Не знаеш как? Спроси у Google'а !!!

Ссылка на комментарий
Поделиться на другие сайты

Вы наверное немножечко неправильно поняли, OCR1A используется потому что вывод ШИМ на МК именно под этот регистр сравнения заточен.

и то что Вы убирали\отключали другие прерывания, не имеет значения. Просто чучуть неправильно настроили. Сегодня проверите и скорее всего, %90, что у Вас все получится.

Т.е. предлагаете звук повесить на OCR1A, а секунды считать по OCR1B? Попробую. Хотя изначально секунды делал по переполнению счетчика, а звук по совпадению А.

Ссылка на комментарий
Поделиться на другие сайты

void ENC_InitEncoder(void) {
 DDRB |= (0<<DDB2) | (0<<DDB1) | (0<<DDB0);

Что это за бред? Тоже самое в Init_Timer_B() и много где еще.
void ENC_InitEncoder(){
DDRB |= (0<<DDB2) | (0<<DDB1) | (0<<DDB0);
PORTB |= (1<<PORTB2) | (1<<PORTB1) | (1<<PORTB0);
TCCR2=(1<<COM21) | (1<<CS21) | (1<<CS20); // (0<<PWM2) | (1<<COM21) | (0<<COM20) | (0<<CTC2)
TCNT2=0x81;
OCR2=0x34;
TIMSK |= (1<<TOIE2);
encod0=PINB & 0x03;
}

Какой смысл менять TCNT2 от 0x81 до 0xFF, а сравнивать значение с 0x34?

Кроме того, привел код в читабельный вид (перенеся его заодно для простоты в AVRStudio) и обнаружил, что все таймеры работают в режиме Normal, а не CTC. Почему-то вместо битов WGM настраивались COM. Соответственно, генерация "писка" должна была происходить на частоте 30 Гц, ( 4000000 / 2 / 65535 ). Рекомендую ознакомиться как с оригиналом кода, так и с отформатированным вариантом и убедиться, что второй гораздо лучше подходит для чтения человеком. В частности на функцию IND_UP().

Можете рискнуть проверить мой вариант (не зная схемы и логики, мне его тестировать неначем) или пересобрать под себя.

uf.rar

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Ребят! Спасибо. Разобрался. Все правильно. Таймер выставлял в режиме Normal. А надо в ШИМ в СТС. СТС я считал, что это функция выхода совпадения (Outp.A). Писк появился. Правда модулируется чем то (как свисток). Буду копать. Слава богу сдвинулось с мертвой точки.

COKPOWEHEU

Спасибо. Код посмотрю и обязательно проанализирую. Конечно, еще далеко до совершенства. Некоторые моменты может и лишние, иногда ставлю по аналогии с другими примерами. Работает - хорошо. Боюсь запутаться.

Еще раз спасибо. Если не возражаете, может еще что спрошу потом. Обещаю не надоедать)). А то спросить не у кого. Книжек на покупал, но там всех ответов не найдешь.

Какой смысл менять TCNT2 от 0x81 до 0xFF, а сравнивать значение с 0x34?

Это я пытался еще на второй таймер звук вешать. Забыл убрать))

Ссылка на комментарий
Поделиться на другие сайты

В режиме CTC генерацию звука можно сделать целиком аппаратной (WGM13:WGM10 = 0100, COM1x1:COM1x0=01 ) даже без использования прерываний. В Timer2 такое режим тоже есть, можно сравнивать с OCR2 (там всего 1 канал, но для CTC больше не надо). Ну и счетные регистры (TCNTx) лучше без особой надобности не дергать.

В том же IND_UP() нашел странную конструкцию segment[]=0; зачем гасить сегмент?

Если надо, в понедельник могу поискать свою версию таймера обратного отсчета, правда у меня установка времени кнопками, на ATtiny2313 и без звука (вот не люблю подобные свистелки).

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Изучаю Ваш код. Конечно чувствуется рука профессионала. Многие моменты упростились. Но я планировал сначала сделать как есть, что бы работало. А потом эксперементировать-оптимизировать. А то оптимизируешь, а потом фиг найдешь из-за чего не работает)). Насчет segment[]=0, хз.. на всякий случай, почему то подумал, что нужно. Потом проверю. На счет IND_UP() Задумка хороша, но там пропала функция мигания минут или секунд в зависимости от того что устанавливаешь(как на эл.часах когда время устанавливаешь) при установке таймера. Сейчас весь вечер просидел, думал как это сделать с учетом вашего варианта кода. Пока не вышло. Много if. И они странные, не как на Fox Pro)). Хочу перейти на AVR Studio. Там и отладчик есть и код читабельней получается чем в CVAVR. Но в начале CVAVR полегче показался, легче освоился. Не подскажете, где почитать про аппаратный звук без прерываний. Я еще не сталкивался. В книжке Белова А.В. то же нет. Согласен, можно и без звука, но делаю все по максимуму. Т.к. Схема спаяна, легко на ней отлаживать и учится. Хочу еще, что бы последнее использованое время запоминало и при включении сразу устанавалось. Но это следующий шаг, еще не вникал. Ем слона частями)). А вообще, задумка, самогонный аппарат компьютерезировать, спирт делать.)) Но пока не освою все элементы не возмусь (температура, термопара, LCD, расход воды, регулировка тенов и прочее). От вариантов ваших программ не откажусь. Благодаря анализу кода, узнаешь алгоритмы и способы решения некоторых задач. Делаю ламповый усилитель, но увлекся прогаммированием, и забросил, блин. Но есть свой плюс, освою AVR, сделаю индикаторы и громкость к нему. Еще раз спасибо за помощь.

Ссылка на комментарий
Поделиться на другие сайты

Точно пропала функция мигания? Вроде алгоритм я не трогал, только переписал без switch'а, вроде этот кусок должен отвечать за мигание.

if(mig1 < 10 && mig == 1)RAZR_PORT = (1<<D1 | 1<<D2 | 1<<D3 | 1<<D4);
   else RAZR_PORT = RAZR_PORTS[razz];
if(mig1 == 25)mig1=0;

На счет переферии - Евстифеева не читали? Это сборка и перевод кучи даташитов. Еще можно почитать Ревича или уроки на этом или других сайтах.

Читабельность кода зависит не от среды разработки а от программиста (за исключением бейсика с его тупым автоформатированием).

Для запоминания последнего выставленного значения можно воспользоваться EEPROM.

Удачи!

Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Ссылка на комментарий
Поделиться на другие сайты

Там при mig==1 -мигают минуты (первые 2 разряда), при mig==2 -мигают секунды (вторые 2 разряда). При mig==0 ни чего не мигает. mig1 задает частоту мигания. Уже голову сломал. При в ставке старого кода в AtmelStudio, ругается на строчки в case с переменными mig1,2,3,4. Студия не принимает static внутри case ?

case 1:

static unsigned int mig2;

Не могу понять (запомнить, разобраться) что делают комбинации ^,~,|,=, &. Что они значат знаю, как работают-не очень. Поэтому сую их везде пока не заработает)).

За литературу спасибо, возьму на вооружение. У меня книжки (бумажные) Белова А.В. , CVAVR и несколько по С++ ну и интернет.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...