Например TDA7294

Форум РадиоКот • Просмотр темы - Работа с SD/MMC флеш картой Mega128+Code Vision AVR
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Сб ноя 01, 2014 00:12:33

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу Пред.  1, 2
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Работа с SD/MMC флеш картой Mega128+Code Vision AVR
СообщениеДобавлено: Чт окт 04, 2012 22:49:30 
Вымогатель припоя
Аватар пользователя

Зарегистрирован: Пн июн 18, 2012 13:01:04
Сообщений: 598
Откуда: Челябинская область, Копейск
Рейтинг сообщения: 0
спящий писал(а):
А воту меня непрограммируется контроллер с флехой микроСД,надо добавлять сопротивления последовательно с картой?
на счет воспроизведения звука сейчас осмыслю(почитаю и задам фопрос))),а качество звука и дискетизация не зависят друг от друга? чет мне кажется одно и тоже)

В общем то качество звука зависит от обоих параметров:
количество бит (8,16,24...) - это разрешение амплитуды, чем больше бит тем точнее,
частота дискретизации - это разрешение изменения амплитуды за одну секунду, чем больше частота тем меньше промежутки времени между изменением амплитуды.


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Работа с SD/MMC флеш картой Mega128+Code Vision AVR
СообщениеДобавлено: Пт окт 05, 2012 01:06:46 
Поставщик валерьянки для Кота
Аватар пользователя

Зарегистрирован: Пт авг 27, 2010 06:57:06
Сообщений: 2482
Откуда: Тюмень
Рейтинг сообщения: 0
Смысл правильный, только это не цикл, а прерывание таймера.Считывать с карты можно и в самом прерывании, несмотря на то, что старшие товарищи советуют там ставить только флаги.Если программа занимается в основном только воспроизведением звуков, какая разница где она будет считываться? Главное все рассчитать по времени именно поэтому в расчете максимальной частоты Д. zero648 Сказал про 22050 а не 31250 частота будет нормально, потому что кроме вывода нужно еще и считывать с карты.
А если оперативной памяти мало, то еще и придется несколько раз считывать частями.

Хотя...может кто пробовал получится ли без помещения в буфер передавать куда либо в другое место?Не будет ли при этом глючить карта?


Вернуться наверх
 Профиль WWW  
 
Не в сети
 Заголовок сообщения: Re: Работа с SD/MMC флеш картой Mega128+Code Vision AVR
СообщениеДобавлено: Чт окт 18, 2012 21:33:16 
Потрогал лапой паяльник

Зарегистрирован: Сб янв 08, 2011 14:48:41
Сообщений: 301
Рейтинг сообщения: 0
Посмотрите правильно расчитал 16 ТАЙМЕР? прерывание происходит по СТС.
Частота контроллера 8Мгц преддилитель таймера 8 8Мгц/8= 1МГц
Соответственно 1 такт =0,000 001С
Частота дискретизации 8кГц = 0.000125С, тоесть выводить число каждые 0.000125С.
Соответственно нужно записать
OCR1AH=0;
OCR1AL=125;




#include <stdio.h>
#include <mega48.h>
#ifndef __SLEEP_DEFINED__
#define __SLEEP_DEFINED__
.EQU __se_bit=0x01
.EQU __sm_mask=0x0E
.EQU __sm_adc_noise_red=0x02
.EQU __sm_powerdown=0x04
.EQU __sm_powersave=0x06
.EQU __sm_standby=0x0C
.SET power_ctrl_reg=smcr
#endif
#include <delay.h>
#include <string.h>
#include <io.h>

#define data(x) SPDR=x; while (!( SPSR&(1<<7)));

int i,temp;

void main(void) {

DDRB=0b11101111;

//настройка ШИМ


TCCR1A=0b10000001;
TCCR1B=0b00001001;
TIMSK1=0b01000000;

// 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
UCSR0A=0x00;
UCSR0B=0x18;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x33;




//настройка SPI
SPCR=0b01010011;
SPSR=1;


//подаем 74 импульса
PORTB.2=1;
delay_ms(10);

for(i=0;i<10;i++)
{

data(0xff)
}
PORTB.2=0;


printf(" --------------MMC------------- \r\n");

//CMD0


data(0x40);
data(0x00);
data(0x00);
data(0x00);
data(0x00);
data(0x95);


while (temp!=0x01)
{
data(0xff);
temp= SPDR;
if (i>10)
{data(0x40);
data(0x00);
data(0x00);
data(0x00);
data(0x00);
data(0x95);
i=0;
}
i++;

}
printf("CMD0 proshlo uspeshno temp=%d\n\r",temp,"\r\n");

//CMD1
data(0x41);
data(0x00);
data(0x00);
data(0x00);
data(0x00);
data(0x95);
while (temp!=0x00)
{data(0xff);
temp= SPDR;
if (i>20)
{data(0x41);
data(0x00);
data(0x00);
data(0x00);
data(0x00);
data(0x95);
i=0;
}
i++;
}

printf("CMD1 proshlo uspeshno temp=%d\n\r",temp,"\r\n");
delay_ms(20);



//CMD17 чтение байтов
data(0x52);
data(0x00);
data(0x05);
data(0x0A);
data(0x00);
data(0x95);
i=0;
while (temp!=0xfe)
{ data(0xff);
temp= SPDR;
}
printf("CMD17 proshlo uspeshno temp=%d\n\r",temp,"\r\n");

//настройка прерывание по СТС
TCCR1B=0b00001010;
TIMSK1=0b00000010;//прерывание CTC
TCNT1L=0x00;
TCNT1H=0x00;
OCR1AH=0;
OCR1AL=125;
while(1){ }

}

interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
data(0xff); //передача по SPI
OCR1AL=SPDR ;
TCNT1L=0x00;
TCNT1H=0x00;
}


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Работа с SD/MMC флеш картой Mega128+Code Vision AVR
СообщениеДобавлено: Пт окт 19, 2012 06:40:42 
Поставщик валерьянки для Кота
Аватар пользователя

Зарегистрирован: Пт авг 27, 2010 06:57:06
Сообщений: 2482
Откуда: Тюмень
Рейтинг сообщения: 0
Чет я не понял зачем вы сначала посчитали частоту и определили
Код:
 OCR1AH=0;
OCR1AL=125

а потом в прерывании меняете это значение?У вас же так частота поплывет.
Нужно для звука использовать второе прерывание сравнения OCR1B.

_________________
В поисках истины человек развивается.


Вернуться наверх
 Профиль WWW  
 
Не в сети
 Заголовок сообщения: Re: Работа с SD/MMC флеш картой Mega128+Code Vision AVR
СообщениеДобавлено: Пт окт 19, 2012 22:09:34 
Потрогал лапой паяльник

Зарегистрирован: Сб янв 08, 2011 14:48:41
Сообщений: 301
Рейтинг сообщения: 0
Вы имеете ввиду отдельно использовать таймер для шима и для таймера?


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Работа с SD/MMC флеш картой Mega128+Code Vision AVR
СообщениеДобавлено: Сб окт 20, 2012 22:02:42 
Поставщик валерьянки для Кота
Аватар пользователя

Зарегистрирован: Пт авг 27, 2010 06:57:06
Сообщений: 2482
Откуда: Тюмень
Рейтинг сообщения: 0
Прочитайте про таймер.Есть в таймере три прерывания, два по сравнению(A,B), одно по переполнению.
Если вы выбрали таймер в режиме CTC и верхом будет значение OCR1A, а в прерывании будет меняться ЭТО ЖЕ значение то частота поплывет.
В этом случае нужно использовать прерывание по сравнению B (OCR1B).Так как до прерывания по переполнению он не дойдет, а обнулится при OCR1A.
Это насколько я понял.Еще одно важное замечание.Если у вас между прерываниями 125 тиков таймера куда вы будете 255 тиков шим для 8битного звука будете девать?Нужно число 125 увеличивать.Можно использовать для шим еще один таймер.


Вернуться наверх
 Профиль WWW  
 
Не в сети
 Заголовок сообщения: Re: Работа с SD/MMC флеш картой Mega128+Code Vision AVR
СообщениеДобавлено: Вс окт 21, 2012 16:33:47 
Потрогал лапой паяльник

Зарегистрирован: Сб янв 08, 2011 14:48:41
Сообщений: 301
Рейтинг сообщения: 0
Получилось! :)) Правда,Шумы очень большие,но если прислушиться то слышны и слова(может потому что я динамик напрямую в ШИМ подключил),как можно уменьшить шумы и увеличить громкость слов?





#include <stdio.h>
#include <mega48.h>
#include <delay.h>
#include <string.h>
#include <io.h>

#define data(x) SPDR=x; while (!( SPSR&(1<<7)));

int i,temp;

void main(void) {

DDRB=0b11101111;

//настройка ШИМ


TCCR1A=0b10000001;
TCCR1B=0b00001001;
TIMSK1=0b01000000;

// 8 Data, 1 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
UCSR0A=0x00;
UCSR0B=0x18;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x33;




//настройка SPI
SPCR=0b01010011;
SPSR=1;


//подаем 74 импульса
PORTB.2=1;
delay_ms(10);

for(i=0;i<10;i++)
{

data(0xff)
}
PORTB.2=0;


printf(" --------------MMC------------- \r\n");

//CMD0


data(0x40);
data(0x00);
data(0x00);
data(0x00);
data(0x00);
data(0x95);


while (temp!=0x01)
{
data(0xff);
temp= SPDR;
if (i>10)
{data(0x40);
data(0x00);
data(0x00);
data(0x00);
data(0x00);
data(0x95);
i=0;
}
i++;

}
printf("CMD0 proshlo uspeshno temp=%d\n\r",temp,"\r\n");

//CMD1
data(0x41);
data(0x00);
data(0x00);
data(0x00);
data(0x00);
data(0x95);
while (temp!=0x00)
{data(0xff);
temp= SPDR;
if (i>20)
{data(0x41);
data(0x00);
data(0x00);
data(0x00);
data(0x00);
data(0x95);
i=0;
}
i++;
}

printf("CMD1 proshlo uspeshno temp=%d\n\r",temp,"\r\n");
delay_ms(20);



//CMD17 чтение байтов
data(0x52);
data(0x00);
data(0x0B);
data(0x86);
data(0x00);
data(0x95);
i=0;
while (temp!=0xfe)
{ data(0xff);
temp= SPDR;
}
printf("CMD17 proshlo uspeshno temp=%d\n\r",temp,"\r\n");
#asm("sei")
//настройка прерывание по СТС
TCCR0A=0b00000010;
TCCR0B=0b00000010;
TIMSK0=0b00000010;//прерывание CTC
TCNT0=0x00;
OCR0A=125;
while(1){ }

}

interrupt [TIM0_COMPA] void timer1_compa_isr(void)
{
data(0xff); //передача по SPI
OCR1AL=SPDR ;
TCNT0=0x00;

}


Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Работа с SD/MMC флеш картой Mega128+Code Vision AVR
СообщениеДобавлено: Вс окт 21, 2012 21:57:42 
Поставщик валерьянки для Кота
Аватар пользователя

Зарегистрирован: Пт авг 27, 2010 06:57:06
Сообщений: 2482
Откуда: Тюмень
Рейтинг сообщения: 0
Позвольте поинтересоваться что вы там воспроизводите? Какой формат звука (расширение файла)?
Просто если какой нибудь не подготовленный для вашего плеера звук воспроизводить напрямую с карты, как раз и может шум наблюдаться.А более плавным можно его сделать через RC фильтр- то есть на выход с ноги шим резистор, второй конец резистора на мелкий конденсатор.Второй конец резистора в данном случае и будет выход.И еще желательно динамик к Мк напрямую тоже не подключать, лучше через защитный транзистор.

_________________
В поисках истины человек развивается.


Вернуться наверх
 Профиль WWW  
 
Не в сети
 Заголовок сообщения: Re: Работа с SD/MMC флеш картой Mega128+Code Vision AVR
СообщениеДобавлено: Вс окт 21, 2012 22:41:47 
Потрогал лапой паяльник

Зарегистрирован: Сб янв 08, 2011 14:48:41
Сообщений: 301
Рейтинг сообщения: 0
Вот


Вложения:
dozor.zip [506.2 KiB]
Скачиваний: 89
Вернуться наверх
 Профиль  
 
Не в сети
 Заголовок сообщения: Re: Работа с SD/MMC флеш картой Mega128+Code Vision AVR
СообщениеДобавлено: Чт янв 24, 2013 22:18:48 
Потрогал лапой паяльник

Зарегистрирован: Сб янв 08, 2011 14:48:41
Сообщений: 301
Рейтинг сообщения: 0
Подскажите что такое,уже 2 недели немогу запустить MMC?
CMD0 принемает 01 с 4 раза,
а CMD1 неполучает 00,ответ 01. - В чем проблема? может быть неправильно настройки СПИ?

Делал также проект на AVR работает а вот на STM нет(


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y