Например TDA7294

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

Текущее время: Пн июл 28, 2025 04:18:01

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



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

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

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


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

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

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


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

Карма: -1
Рейтинг сообщений: -5
Зарегистрирован: Сб янв 08, 2011 13:48:41
Сообщений: 303
Рейтинг сообщения: 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(" ---------- \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 05:40:42 
Поставщик валерьянки для Кота
Аватар пользователя

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

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

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


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

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


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

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


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

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

Карма: -1
Рейтинг сообщений: -5
Зарегистрирован: Сб янв 08, 2011 13:48:41
Сообщений: 303
Рейтинг сообщения: 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(" ---------- \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 20:57:42 
Поставщик валерьянки для Кота
Аватар пользователя

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

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


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

Карма: -1
Рейтинг сообщений: -5
Зарегистрирован: Сб янв 08, 2011 13:48:41
Сообщений: 303
Рейтинг сообщения: 0
Вот


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

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

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


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

Часовой пояс: UTC + 3 часа


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

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


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

Найти:
Перейти:  


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