roboforum.ru

Технический форум по робототехнике.

Ты-дын

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Ты-дын

Сообщение P_Ruslan » 31 июл 2012, 15:06

Хочу сделать звук на мото на МК. Суть такова: облюбовал звук открытой двери в Лада 11, ну этот "ты-дын", а вот как эго сделать на ATTiny13 не знаю, буду писать на Bascom, я в нем со звуком освоился. Буду делать, но вдруг кто-то уже подобное делал, бістрее будет.
Заранее спасибо.
Аватара пользователя
P_Ruslan
 
Сообщения: 94
Зарегистрирован: 12 июл 2011, 00:49
Откуда: Лебедин, Сумская обл. Украина
Skype: PoRuVl
прог. языки: Basic (VB, Blitz), Pascal, Delphi 7, C++
ФИО: Пономаренко Руслан Владимирович

Re: Ты-дын

Сообщение elmot » 31 июл 2012, 15:19

Лично я тупо записал в МК(STM32L чего-то там, короче stm32l-discovery) с большой памятью кусок PCM 8 бит моно и вывел через ЦАП на усилок. 20 строк кода, 1 таймер, 1 dma, 1 DAC + 1 усилок.
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья

Re: Ты-дын

Сообщение ALS » 31 июл 2012, 16:15

Собирал на PIC-е и I2C-памяти 24С512(1024), в кач-ве ЦАП-а - матрица R2R.
Продолжительность - 8...16 сек при воспроизведении 8-битного PCM.
Схема

А вообще, вот по-настоящему крутой ты-дын - http://elm-chan.org/works/sd8p/report.html
Аватара пользователя
ALS
 
Сообщения: 803
Зарегистрирован: 24 окт 2011, 23:32
Откуда: Севастополь
прог. языки: асм

Re: Ты-дын

Сообщение P_Ruslan » 31 июл 2012, 23:39

http://bascom.at.ua/_ld/0/1_SOUND_BASCOM.zip музыкальный учитель
Аватара пользователя
P_Ruslan
 
Сообщения: 94
Зарегистрирован: 12 июл 2011, 00:49
Откуда: Лебедин, Сумская обл. Украина
Skype: PoRuVl
прог. языки: Basic (VB, Blitz), Pascal, Delphi 7, C++
ФИО: Пономаренко Руслан Владимирович

Re: Ты-дын

Сообщение dccharacter » 31 июл 2012, 23:40

elmot писал(а):Лично я тупо записал в МК(STM32L чего-то там, короче stm32l-discovery) с большой памятью кусок PCM 8 бит моно и вывел через ЦАП на усилок. 20 строк кода, 1 таймер, 1 dma, 1 DAC + 1 усилок.

Дай код поглядеть ПЛЗ???
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Ты-дын

Сообщение P_Ruslan » 31 июл 2012, 23:40

Файлик который поможет понять как берется музыка в МК.
Аватара пользователя
P_Ruslan
 
Сообщения: 94
Зарегистрирован: 12 июл 2011, 00:49
Откуда: Лебедин, Сумская обл. Украина
Skype: PoRuVl
прог. языки: Basic (VB, Blitz), Pascal, Delphi 7, C++
ФИО: Пономаренко Руслан Владимирович

Re: Ты-дын

Сообщение elmot » 01 авг 2012, 21:28

Вообще оно тут:
https://sourceforge.net/projects/bluetoothcar/

Насчет 20 строчек я, конечно, загнул, там больше, но 80% - копипаста со стандартного примера.
За код не бейте, это мой опыт в сях после доооолгого перерыва.

Конкретно звук вот:
Код: Выделить всёРазвернуть
/* Includes ------------------------------------------------------------------*/
#include "stm32l1xx.h"
#include "sound.h"


/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
#define DAC_DHR8R1_Address       0x40007410

/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
TIM_TimeBaseInitTypeDef    TIM_TimeBaseStructure1;
DAC_InitTypeDef            DAC_InitStructure;
DMA_InitTypeDef            DMA_InitStructure;

//uint8_t Idx = 0;

/* Private function prototypes -----------------------------------------------*/
void DAC_PreConfig(void);

/* Private functions ---------------------------------------------------------*/

/**
* @brief   Main program
* @param  None
* @retval None
*/
void saySomething(uint8_t wave [],int loop)
{
  /*!< At this stage the microcontroller clock setting is already configured,
  this is done through SystemInit() function which is called from startup
  file (startup_stm32l1xx_md.s) before to branch to application main.
  To reconfigure the default setting of SystemInit() function, refer to
  system_stm32l1xx.c file
  */     
 
  /* Preconfiguration before using DAC----------------------------------------*/
  DAC_PreConfig();
 
  /* TIM2 Configuration ------------------------------------------------------*/
  /* TIM2 Periph clock enable */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  /* Time base configuration */
  TIM_TimeBaseStructInit(&TIM_TimeBaseStructure1);
  TIM_TimeBaseStructure1.TIM_Period = SystemCoreClock/11025;         
  TIM_TimeBaseStructure1.TIM_Prescaler = 0x0;       
  TIM_TimeBaseStructure1.TIM_ClockDivision = 0x0;   
  TIM_TimeBaseStructure1.TIM_CounterMode = TIM_CounterMode_Up; 
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure1);
 
  /* TIM2 TRGO selection */
  TIM_SelectOutputTrigger(TIM2, TIM_TRGOSource_Update);
 
  /* TIM2 enable counter */
  TIM_Cmd(TIM2, ENABLE);
 
  DAC_DeInit();
  /* DAC channel1 and channel2 Configuration */
  DAC_InitStructure.DAC_Trigger = DAC_Trigger_T2_TRGO;
  DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;
 
  /* DAC channel1 Configuration */
  DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable;
  DAC_Init(DAC_Channel_1, &DAC_InitStructure);
 
  /* DMA1 channel2 configuration */
  DMA_DeInit(DMA1_Channel2);
  DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
  DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
  DMA_InitStructure.DMA_Priority = DMA_Priority_High;
  DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;
 
  DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR8R1_Address;
  DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)(&(wave[54]));
  DMA_InitStructure.DMA_Mode = loop ? DMA_Mode_Circular : DMA_Mode_Normal;
  DMA_InitStructure.DMA_BufferSize = *(uint32_t*)(&(wave[46]));
  DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
  DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
  DMA_Init(DMA1_Channel2, &DMA_InitStructure);
 
  /* Enable DMA1 Channel2 */
  DMA_Cmd(DMA1_Channel2, ENABLE);
 
  /* Enable DAC Channel2: Once the DAC channel2 is enabled, PA.05 is
  automatically connected to the DAC converter. */
  DAC_Cmd(DAC_Channel_1, ENABLE);
 
  /* Enable DMA for DAC Channel2 */
  DAC_DMACmd(DAC_Channel_1, ENABLE);
}

/**
* @brief  PrecConfiguration: configure PA4 and PA5 in analog,
*                           enable DAC clock, enable DMA1 clock
* @param  None
* @retval None
*/
void DAC_PreConfig(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
 
  /* DMA1 clock enable (to be used with DAC) */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
 
  /* DAC Periph clock enable */
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
 
  /* GPIOA clock enable */
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
  /* Configure PA.04 (DAC_OUT1), PA.05 (DAC_OUT2) as analog */
  GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_4 ;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  GPIO_Init(GPIOA, &GPIO_InitStructure);
 
}
Аватара пользователя
elmot
 
Сообщения: 5691
Зарегистрирован: 10 ноя 2011, 12:02
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья


Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18