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

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Работа со звуком силами МК » Разные звуки кодом.


Разные звуки кодом.

Сообщений 1 страница 11 из 11

1

Доброго времени, коллеги.
Обращаюсь к вам за помощью.
Суть дела такова.
Этим летом в детском лагере проводил кружок радиоэлектроники.
Очень переживал, как всё пройдёт.
Особенно за пайку. Пришла мысль делать действующие проекты на макетках - бредбордах.
Закупил у китайцев оные, плюс перемычки, плюс контейнеры для батареек.
Мелочевку брал по домашнему. Тут же брал и батарейки. У продавца были раздвоенные чувства - радость и изумление от количества одновременно.
Все схемы были на известном таймере 555. Всё до лагеря сам проверил, нарисовал удобные схемы и монтажные решения, распечатал. Сформировал комплекты.
Не очень дешево, зато безопасно, и как оказалось весьма неплохо.
И понеслось! Отбоя от пацанов не было! Делали полицейскую мигалку, сирену,  и т.д.
Считаю, что первый блин удался. Если интересно, могу фоток сюда положить.

Ну а теперь собственно в чём помощи прошу.
Дело это на общественных началах, но я всё это тяну и сам.
Хочется сделать кружок интересным, чтобы ребят зажечь.
По световым эффектам у меня информации море.
Нужна информация по звуковым эффектам. На Баскоме.
Например, та же сирена, трель соловья и т.д.
Наверняка у многих есть подобные наработки.
Поделитесь во благо доброго дела. Это и нас всех обогатит.
У меня есть целая куча рингтонов на баскоме, больше 10 лет назад делал.
Но это немножко не то, хотя тоже пригодится.

Я буду неделю отсутствовать. Так что если не смогу сразу ответить, извиняйте.
Надеюсь пока вернусь, здесь будет море примеров :)

Кстати, может будут какие то другие идеи, буду весьма благодарен.

0

2

Не знаю, насколько это поможет, но... ;)
Сигнал кухонного таймера.
Mega8, RC 8MHz

Код:
Config PortB.1 = Output
Speaker Alias PortB.1
...
Sound Speaker , 100 , 825
Waitms 125
Sound Speaker , 100 , 825
Waitms 125
Sound Speaker , 100 , 825
Waitms 125
Sound Speaker , 500 , 825
Waitms 125
Sound Speaker , 100 , 825
Waitms 125
Sound Speaker , 100 , 825
Waitms 125
Sound Speaker , 100 , 825

Отредактировано Nord (2018-11-16 23:31:26)

0

3

radan написал(а):

У продавца были раздвоенные чувства - радость и изумление от количества одновременно.

Если не секрет, сколько кг весила посылка? :)

radan написал(а):

Например, та же сирена, трель соловья и т.д.

Не проще подготовить на компе нужный звук, записать на флешку и воспроизводить его? Например флешки 25Q16 (2 МБ) стоят 1.68$ за 10 штук. https://ru.aliexpress.com/item/10-W25Q1 … 42763.html
25Q32 (4 МБ) стоимостью 2$ за 10 штук. https://ru.aliexpress.com/item/10PCS-W2 … 51041.html

Это SPI флешка. http://www.gaw.ru/html.cgi/txt/ic/Winbo … _16_32.htm
Напряжение питания 3.3 вольта.

Преимущество будет в том, что можно на компьютере подготовить нужный звуковой эффект. :)  И можно будет сделать звуковую открытку с поздравлением с Новым Годом или днем рождения. :)  Думаю многие захотят сделать подобное чтобы поздравить (и удивить) своих родителей. Ведь подарок сделанный своими руками, наверное самый лучший. :)

0

4

Человеку надо простые решения для детей, зачем ему сразу флешки, запись звуков - это только нам искушенным такое нужно. :)
Я лично таким не занимаюсь на МК, ибо давно такое пережил ещё в времена спектрума (однобитовая запись через "модемный" вход и воспроизведение).
Как вариант можно сделать нечто подобное, например эффект "эхо", но нужно памяти поболее чем в среднем МК и непонятно как лучше делать, я естественно громоздил АЦП/ЦАП. Там ещё "прикол" был, чем меньше качество/дискретизация - тем больше время "эхо" получалось.

0

5

доброе дело делаете.
Сам с детьми работал с2000 года. В этом году закрыл, так как нет больше сил тянуть всё одному.
Пишите, что надо из литературы, методичек. Есть свои наработки.
Но у меня больше уклон в цифровую был, хотя начинали с мигалок, мультивибраторов с эффектами, потом немного промконтроллеры, в итоге -МК.

0

6

Звук робота R2D2 шимом на Atmega328P(часть звука)
Робоб R2D2

0

7

Спасибо всем откликнувшимся.
Тема актуальна, так что буду ждать.
И действительно, как написал выше RDW, нужны простые решения, которые дети смогут сами использовать в качестве готовых фрагментов кода.

0

8

Оживим немного. Вот что можно в этом деле попробовать.
В поиске забиваем что-то вида "задать вопрос нейросети". И первую же попавшуюся AI просим: "напиши процедуру птичьих трелей на BASCOM"

Код
Код:
$regfile = "m8def.dat"  ' Задаем тип микроконтроллера
$crystal = 8000000      ' Устанавливаем тактовую частоту в 8 МГц
$baud = 9600            ' Устанавливаем скорость передачи данных для последовательного порта

' Подключаем динамик к порту, например, к пину PD2
Dim SoundPin As Bit
SoundPin = Portd.2

' Функция для генерации звука
Sub PlaySound(Frequency As Long, Duration As Long)
    Dim i As Long
    For i = 1 To Duration
        SoundPin = 1           ' Включаем звук
        Waitus (1000000 / Frequency / 2) ' Задержка для формирования частоты
        SoundPin = 0           ' Отключаем звук
        Waitus (1000000 / Frequency / 2) ' Задержка для формирования частоты
    Next i
End Sub

' Процедура для воспроизведения трелей
Sub BirdChirps()
    ' Пример трелей с разными частотами
    PlaySound(1000, 10) ' Высокая нота
    PlaySound(1200, 5)  ' Чуть выше
    PlaySound(1300, 10) ' Еще выше
    PlaySound(1100, 5)  ' Понижение частоты
    PlaySound(1000, 10) ' Вернуться к первоначальной

    ' Повторяем трели несколько раз
    For i = 1 To 3
        PlaySound(1500, 10)
        PlaySound(1400, 5)
    Next i
End Sub

' Основная программа
Do
    BirdChirps()   ' Воспроизводим трели
    Wait 2         ' Ждем перед повторением
Loop
Описание кода:

Настройка микроконтроллера: regfile и crystal определяют тип чипа и его тактовую частоту.
Инициализация порта: Настраиваем пин, к которому подключен динамик (в нашем случае это PD2).
Функция PlaySound: Эта процедура принимает частоту и продолжительность звука, которые будут использоваться для создания звука.
Процедура BirdChirps: Генерирует последовательность звуков, имитирующих птичьи трели, с помощью вызова функции PlaySound с различными частотами.
Основной цикл: Запускает воспроизведение трелей в бесконечном цикле.
Этот пример должен работать на микроконтроллерах, поддерживающих BASCOM, однако в зависимости от конкретного устройства или версии среды могут потребоваться некоторые доработки. Обязательно протестируйте и адаптируйте код для вашего оборудования!

Или так: "напиши процедуру вывода звука бластера на assembler 8051"

код
Код:
; Определяем обработчик звука бластера
; Предполагается, что динамик подключен к P1.0

ORG 0H          ; Начало программного кода
START:
    MOV P1, #00H ; Инициализация порта P1
    ; Настройка таймера
    MOV TMOD, #01H ; Таймер 0 в режиме 1 (16-битный таймер)
    
    ; Основной цикл
MAIN_LOOP:
    ACALL BLASTER_SOUND ; Вызов процедуры генерации звука
    SJMP MAIN_LOOP       ; Возврат в основной цикл

; Процедура генерации звука бластера
BLASTER_SOUND:
    ; Конфигурация частоты звука
    ; Установка периодичности выхода из звукового сигнала
    MOV TH0, #0FDH ; Загружаем начальное значение для таймера (пример для 2 кГц)
    MOV TL0, #0FDH ; Загружаем начальное значение таймера
    SETB TR0         ; Запуск таймера

    ; Генерация звука
    ; Включаем динамик
    SETB P1.0       ; Включить динамик
    ; Ожидание, пока таймер не переполнится
    MOV R0, #200
WAIT_1:
    JNB TF0, WAIT_1 ; Ожидание переполнения таймера
    CLR TF0         ; Сброс флага

    ; Отключаем динамик
    CLR P1.0        ; Отключить динамик

    ; Ожидание между изменениями состояния
    MOV R0, #200
WAIT_2:
    JNB TF0, WAIT_2 ; Ожидание переполнения таймера
    CLR TF0         ; Сброс флага
    
    RET              ; Возврат из процедуры

END START           ; Завершение программы
Объяснение кода:

Инициализация порта: На начальном этапе мы очищаем порт P1, чтобы избежать ненужных звуков.
Настройка таймера: Таймер 0 настраивается в режиме 1 (16-битный), и мы загружаем значения в регистры TH0 и TL0, которые определяют частоту генерации звукового сигнала.
Процедура генерации звука: В данном блоке происходит:
Включение динамика (P1.0).
Ожидание переполнения таймера, чтобы контролировать длительность звука.
Отключение динамика после ожидания.
Циклирование: Главный цикл вызывает процедуру генерации звука, обеспечивая непрерывное воспроизведение звка.
Этот код является базовой иллюстрацией. Модификации могут быть сделаны для изменения частоты звука, длительности и других параметров, в зависимости от желаемых эффектов.

+1

9

прикольно. Но как-то не по себе, если честно )

Отредактировано Александр Д. (2024-12-19 11:54:01)

0

10

ps
может сразу замахнуться: Напиши нам компилятор? )))))

pps
дык, разве будет работать код выше? ))) нет настройки порта на выход.
И Waitus (1000000 / Frequency / 2) разве проглотит?? да и зачем делить на лету 1000000 /2 ??

Отредактировано Александр Д. (2024-12-19 11:54:26)

0

11

Можно вынести деление из цикла и заменить приближённым сдвигом.
Здесь хорошая реализация. Кто бы перевёл на посконный бейсик. Пробовал нейросетью транслировать - дичь.

Отредактировано Кот Обормот (2024-12-20 11:36:54)

0


Вы здесь » Программирование ATMEL в BASCOM. » Работа со звуком силами МК » Разные звуки кодом.