Например TDA7294

Форум РадиоКот :: Просмотр темы - Работа с SD/MMC флеш картой Mega128+Code Vision AVR
Форум РадиоКот
https://radiokot.ru/forum/

Работа с SD/MMC флеш картой Mega128+Code Vision AVR
https://radiokot.ru/forum/viewtopic.php?f=61&t=58118
Страница 2 из 2

Автор:  zero648 [ Чт окт 04, 2012 21:49:30 ]
Заголовок сообщения:  Re: Работа с SD/MMC флеш картой Mega128+Code Vision AVR

спящий писал(а):
А воту меня непрограммируется контроллер с флехой микроСД,надо добавлять сопротивления последовательно с картой?
на счет воспроизведения звука сейчас осмыслю(почитаю и задам фопрос))),а качество звука и дискетизация не зависят друг от друга? чет мне кажется одно и тоже)

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

Автор:  vitalik_1984 [ Пт окт 05, 2012 00:06:46 ]
Заголовок сообщения:  Re: Работа с SD/MMC флеш картой Mega128+Code Vision AVR

Смысл правильный, только это не цикл, а прерывание таймера.Считывать с карты можно и в самом прерывании, несмотря на то, что старшие товарищи советуют там ставить только флаги.Если программа занимается в основном только воспроизведением звуков, какая разница где она будет считываться? Главное все рассчитать по времени именно поэтому в расчете максимальной частоты Д. zero648 Сказал про 22050 а не 31250 частота будет нормально, потому что кроме вывода нужно еще и считывать с карты.
А если оперативной памяти мало, то еще и придется несколько раз считывать частями.

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

Автор:  спящий [ Чт окт 18, 2012 20:33:16 ]
Заголовок сообщения:  Re: Работа с SD/MMC флеш картой Mega128+Code Vision AVR

Посмотрите правильно расчитал 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;
}

Автор:  vitalik_1984 [ Пт окт 19, 2012 05:40:42 ]
Заголовок сообщения:  Re: Работа с SD/MMC флеш картой Mega128+Code Vision AVR

Чет я не понял зачем вы сначала посчитали частоту и определили
Код:
 OCR1AH=0;
OCR1AL=125

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

Автор:  спящий [ Пт окт 19, 2012 21:09:34 ]
Заголовок сообщения:  Re: Работа с SD/MMC флеш картой Mega128+Code Vision AVR

Вы имеете ввиду отдельно использовать таймер для шима и для таймера?

Автор:  vitalik_1984 [ Сб окт 20, 2012 21:02:42 ]
Заголовок сообщения:  Re: Работа с SD/MMC флеш картой Mega128+Code Vision AVR

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

Автор:  спящий [ Вс окт 21, 2012 15:33:47 ]
Заголовок сообщения:  Re: Работа с SD/MMC флеш картой Mega128+Code Vision AVR

Получилось! :)) Правда,Шумы очень большие,но если прислушиться то слышны и слова(может потому что я динамик напрямую в ШИМ подключил),как можно уменьшить шумы и увеличить громкость слов?





Спойлер#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;

}

Автор:  vitalik_1984 [ Вс окт 21, 2012 20:57:42 ]
Заголовок сообщения:  Re: Работа с SD/MMC флеш картой Mega128+Code Vision AVR

Позвольте поинтересоваться что вы там воспроизводите? Какой формат звука (расширение файла)?
Просто если какой нибудь не подготовленный для вашего плеера звук воспроизводить напрямую с карты, как раз и может шум наблюдаться.А более плавным можно его сделать через RC фильтр- то есть на выход с ноги шим резистор, второй конец резистора на мелкий конденсатор.Второй конец резистора в данном случае и будет выход.И еще желательно динамик к Мк напрямую тоже не подключать, лучше через защитный транзистор.

Автор:  спящий [ Вс окт 21, 2012 21:41:47 ]
Заголовок сообщения:  Re: Работа с SD/MMC флеш картой Mega128+Code Vision AVR

Вот

Вложения:
dozor.zip [506.2 KiB]
Скачиваний: 217

Автор:  спящий [ Чт янв 24, 2013 21:18:48 ]
Заголовок сообщения:  Re: Работа с SD/MMC флеш картой Mega128+Code Vision AVR

Подскажите что такое,уже 2 недели немогу запустить MMC?
CMD0 принемает 01 с 4 раза,
а CMD1 неполучает 00,ответ 01. - В чем проблема? может быть неправильно настройки СПИ?

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

Страница 2 из 2 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/