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

Генератор звуковых импульсов на Мега8


Igor-13

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

Захотел сделать генератор звуковых импульсов на Мега8. Написал программу на кодевижн.

Вроде все правильно. А он работает, звук есть на всех ножках, но не так как хотел, короткими вспышками. А я хотел, чтобы частоты на выходах шли беспрерывно, одновременно на всех выходах.

В чем ошибка, подскажите пожалуйста.   Код моей программы 

#include <mega8.h>       // внутренний генератор 8мгц.
#include <delay.h>
#define BEEP0             PORTB.0                // назначаем ножки для выхода звука
#define BEEP1             PORTB.1 
#define BEEP2             PORTB.2 
#define BEEP3             PORTB.3 
#define BEEP4             PORTB.4 
void Beep0() { register int i = 0;    // подпрограмма звука
for(i = 0; i<400; i++){ BEEP0 =!BEEP0; delay_us(1900); } }    // частота равна 1/1,9 ms =526 Гц. около
void Beep1() { register int i = 0;  
for(i = 0; i<400; i++){ BEEP1 =!BEEP1; delay_us(1500); } }    // частота равна 1/1,5 ms =700 Гц. около
void Beep2() { register int i = 0;   
for(i = 0; i<400; i++){ BEEP2 =!BEEP2; delay_us(1200); } }    // частота равна 1/1,2 ms =800 Гц. около
void Beep3() { register int i = 0;   
for(i = 0; i<400; i++){ BEEP3 =!BEEP3; delay_us(1000); } }    // частота равна 1/1,0 ms =1000 Гц. около
void Beep4() { register int i = 0;   
for(i = 0; i<400; i++){ BEEP4 =!BEEP4; delay_us(700); } }      // частота равна 1/0,7 ms =1200 Гц. около
void main(void) { PORTB=0x00; DDRB=0xFF; delay_ms(400); // инициализируем ножек порта B.
while(1){ Beep0(); Beep1(); Beep2(); Beep3(); Beep4(); }
}
 

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Вы же сами указываете микроконтроллеру: сначала сделай Beep0, потом сделай Beep1 и т.д.

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

Я не раздаю удочки. Я продаю рыбу.

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

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Особенности хранения литиевых аккумуляторов и батареек

Потеря емкости аккумулятора напрямую зависит от условий хранения и эксплуатации. При неправильном хранении даже самый лучший литиевый источник тока с превосходными характеристиками может не оправдать ожиданий. Технология, основанная на рекомендациях таких известных производителей литиевых источников тока, как компании FANSO и EVE Energy, поможет организовать правильный процесс хранения батареек и аккумуляторов. Подробнее>>

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

Тогда вспомнить курс математики и найти наименьший общий делитель для 0,7мс, 1мс, 1,2мс, 1,5мс и 1,9мс. Во задачка, а? :)

Я не раздаю удочки. Я продаю рыбу.

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

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

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

С языка сняли :)
Уже начал писать тоже самое, только более развёрнуто :) 
 

ЗЫ: Только выдержку придётся таймером реализовывать, иначе "битьбеде" :) 


 

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

Млин, я оказался неоригинален. Надо придумать другую мульку.

О! Организовать пять отдельных генераторов. Тупо как на логике.

Я не раздаю удочки. Я продаю рыбу.

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

9 минут назад, Viktor26 сказал:

Запилите на ОС

Избыточно.
Во первых, системный такт, в любом случае, придётся делать кратным делителю каждой выходной частоты.
Во вторых, будут тратится лишние такты на переключение между задачами.

Задача ТС'а реализуется элементарно без всяких ОСей, на одном таймере. Собственно, направление ему уже дали, пусть думает...
 

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

Взять 2 корпуса лог. НЕ и собрать отдельные генераторы.

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

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

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

1 час назад, Aleх сказал:

придётся делать кратным делителю каждой выходной частоты.

кратность допускаю. пусть будет типа 4кГц - 2,5кГц - 1.5кГц - 0,5кГц. 

я уже думал использовать внутренний генератор Т0 и делить его по разному, но пока не хватает знаний.

56 минут назад, COKPOWEHEU сказал:

Взять 2 корпуса лог. НЕ

так не интересно. учусь делать схемы на микроконтроллерах. узнаю их возможности.

1 час назад, Aleх сказал:

на одном таймере

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

или надо искать мк с множеством таймеров?

Изменено пользователем Igor-13
Ссылка на комментарий
Поделиться на другие сайты

Возможно, конечно, и далеко не единственным способом. Тут уже 4 варианта предложили (в частности, мой и Солара вариант вообще без МК). Добавлю еще 5-й: завести таблицу синусов, чтобы сигнал был синусоидальным а не прямоугольным, но ходить по ней с шагом, пропорциональным частоте. Впрочем, рановато пока такое.

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

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

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

12 минуты назад, COKPOWEHEU сказал:

рановато пока такое.

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

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

Для попищать хватит :wacko: Int RC 2Mhz. На PB0 ~3906Hz, на каждом последующем делится на 2.

//Atmega8 Int RC 2MHz
#include <avr/io.h>
#include <avr/interrupt.h>

uint8_t n;

ISR (TIMER0_OVF_vect){
	PORTB = n;
	if(++n > 31) n=0;
}

int main(void)
{
  DDRB |= (1<<PB4)|(1<<PB3)|(1<<PB2)|(1<<PB1)|(1<<PB0);
  TCCR0 |= (1<<CS00);
  TIMSK |= (1<<TOIE0);
  sei();
  while (1);
}

 

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

@Berg спасибо. запустил на все ножки порта (В0 - В7).

работает отлично. то что надо.

 

Изменено пользователем Igor-13
Ссылка на комментарий
Поделиться на другие сайты

жаль, что на выходе не гамма 7 нот, а одна нота разных октав. продолжил мучить мк.

запустил два таймера Т0 и Т1. хотел получить разные частоты. но на обоих портах одна частота.  пробовал смешивать их сигналы, типа  if (PINB.0==1) PORTD.0=PINB.3  получается трель непонятная, но не сумма. 

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

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

У меги8 три таймера имеют режим аппаратной генерации сигнала на пине, причем в нескольких режимах. Таким образом, вы можете очень легко получить одновременно 3 независимых сигнала. Менять тональность в каждом канале элементарно, так что без всяких ОС и т.п. общих делителей вы можете реализовать трёхголосую полифонию :)

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

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

Только что, ARV сказал:

реализовать трёхголосую полифонию :)

спасибо.  буду пробовать,  мне трудно сообразить как это сделать, слаб в программировании,  поэтому ёрзаю.  вот  мой пример

генератор 2 кГц.rtf

Изменено пользователем Igor-13
Ссылка на комментарий
Поделиться на другие сайты

Только что, Igor-13 сказал:

мне трудно сообразить как это сделать

Читайте про таймеры и про режимы аппаратного ШИМ и иже с ним. Все просто.

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

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

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

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

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

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

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

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

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

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

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

    • При подключении гул. На одной из обмоток 385в. Остальные обмотки: 18в, 1.3в, 6.1в, 17.95в. Присутствует нагрев. Подключение кратковременное через лампу накаливания. Скорее похоже на замыкание обмоток. 220в обмотка в норме. 
    • Нет, не важно. Но поскольку усилитель от носа и до задницы симметричный, важно чтобы R1 был приблизительно таким же, как R27 в ОООС-и, а от соотношения R27 к R13 зависит не только Кус всего усилителя, но его устойчивость и величина того, на сколько и куда сползёт "нуль" на выходе. Можешь поиграть с величиной R1, ставя вместо 27 кОм рез-р и 24,  и 30 кОм. Потом расскажешь, что из-за этого произошло.   Можешь просто составить R1 из двух рез-в - 24+3 кОм, если уж так важно следовать точности при повторении схемы. Испортить ланзар... это ещё надо умудриться сделать. 
    • Вы хотели разобраться, почему ток разный. Для этого нужно определить что в устройствах собранных по сути по одной схеме разного. Для этого нужно замерить сопротивление и индуктивность первичной и вторичной обмоток, ёмкость и ESR керамических (плёночных) конденсаторов. Самое главное посмотреть форму сигнала обмотки связи трансформатора базовых обмоток и частоту преобразователя, как она меняется под нагрузкой. Не нравится лампа постоянно подключённая в 21w, подключите её через реле поворота.
    • В симметричной схеме через него ток не течет (или почти не течет) т.к. нет входного тока.  Так что можно ставить любой от 1 до 100 кОм. Вот в несимметричной схеме с входными токами эти два резистора должны быть одинаковыми, чтобы не было перекоса дифа. Нужно будет отпраздновать. Да. Если уж говорить о помехах, то выходное сопротивление преда с этим  справится лучше. А этот резистор к помехам никаким боком. Возможно имелся ввиду резистор входной RC цепочки.
    • Вообще не вижу смысла городить сначала импульсный блок питания, а после него ставить аналоговый.  Лишнее усложнение и лишние потери напряжения, какие бы они ни были.  Проще собрать аналоговый без помех на необходимый ток и напряжение. А для больших токов сделать импульсный. Два блока питания всегда лучше чем один непонятно какой гибрид... Импульсные БП от компьютеров на 494 микросхеме хорошо переделываются в регулируемый. Это проще чем делать с нуля. Если конечно устраивают выходное напряжение и ток.
    • Читайте внимательнее вопрос темы - мне не нужна рабочая программа, мне нужны доказательства её присутствия в памяти или отсутствия. Запрос пароля означает присутствие рабочей программы в памяти Logo, что дает основания заниматься этом Logo и далее. 
    • Так с паролями на Лого вроде не было проблем, есть программы для взлома.
×
×
  • Создать...