Ардуино - запись звука

Обсуждаем контроллеры компании Atmel.
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

Re: Ардуино - запись звука

Сообщение Novice user »

Я об этом и писал...
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Ардуино - запись звука

Сообщение roman.com »

первым делом выкидываем контрольные суммы... CRC-16 ))

4. мы можем передавать буфер частями... по 1... 2... 3... 4... 5... 6... 7... 8... байт
тогда нам нужно 512 / 8 = 64 транзакции))

5. мы вообще можем не использовать буфер ATmega8... а измерять ADC и сразу передавать по SPI...
ADC_SPI.jpg
(93.89 КБ) 73 скачивания
Итого:
55 микросекунд - время преобразования ADC.
8 микросекунд - время передачи по SPI.
62 микросекунд - свободное процессорное время))
так совсем хорошо))
:tea:
//////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////// TX_microSD:
void TX_microSD(unsigned long x)
{
/////////////////////// crc bufer_microSD[512]:
crc=0xFFFF;
for (b=0;b<510;b=b+2) {
bcrc=bufer_microSD; bcrc=(bcrc<<8)|bufer_microSD[b+1]; fcrc();
};
bufer_microSD[510]=(crc>>8); // crc
bufer_microSD[511]=crc; // crc
///////////////////////////////////////////////

ещё внутри флешки есть подсчёт контрольной суммы CRC-7 ))
по умолчанию CRC-7 внутри самой флешки включена. И после заполнения буфера флешки, флешка проверяет контрольную сумму CRC-7..
Это просто тупизм како-то )) кто вообще придумал считать контрольные суммы CRC-7 ))
все контрольные суммы внутри флешки мы отключили ещё на стадии инициализации...
все эти контрольные суммы... у нас это нет процессорного времени...))
:tea:
мы сможем писать и читать флешку... но проверить целостность данных мы больше не сможем...

//////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////// TX_microSD:
void TX_microSD(unsigned long x)
{
///////////////////////////////////////////////
PORTB.0=0; // SS microSD
/////////////////////// запись Data:
tx3=0x58; SPI3(); // 01xx xxxx + Номер команды - CMD24
tx3=(x>>24); SPI3(); // адрес
tx3=(x>>16); SPI3(); // адрес
tx3=(x>>8); SPI3(); // адрес
tx3=x; SPI3(); // адрес
tx3=0x00; SPI3(); // 0000 0000. CRC - 0
// ответ R1: 0000 0000 - команда microSD принята
tx3=0xFF; SPI3(); // задержка 1 байт 0xFF
tx3=0xFF; SPI3(); // STATUS R1 0000 0000
//////////////////////////////////////////////////////////////////////////////// метка:
tx3=0xFE; SPI3(); // 0xFE метка для команды - CMD24
//////////////////////
for (a=0; a<512; a++) {
tx3=ADC; SPI3(); // ADC > microSD
};
////////////////////
tx3=0x00; SPI3(); // CRC - 0
tx3=0x00; SPI3(); // CRC - 0
/////////////////////////////////////////////////////////// ответ - данные приняты 0xE5:
tx3=0xFF; SPI3(); // SPI пустой
/////////////////////////////////////////////////// ждём окончания записи... OUT = 0xFF:
while ( (x1 != 0xFF) && (tm_microSD != 255) ) {
tx3=0xFF; SPI3(); x1=rx3; // MOSI 0x00 > MOSI 0xFF // -цикл 34...53
tm_microSD++;
};
//////////////
if (tm_microSD == 255) { // таймаут microSD:
error_microSD_EEPROM |= 0b00010000; // 0001 0000 - error microSD_TX
};
tm_microSD = 0; // сброс таймаут tm_microSD.
////////////////////////////////////////////////////////////////
PORTB.0=1; // SS microSD
////////////////////////////////////////////////////////////////////////////////////////

Добавлено after 2 minutes 33 seconds:
и ждать окончания записи... у нас на это тоже нет времени))

код будет примерно такой...
//////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////// TX_microSD:
void TX_microSD(unsigned long x)
{
///////////////////////////////////////////////
PORTB.0=0; // SS microSD
/////////////////////// запись Data:
tx3=0x58; SPI3(); // 01xx xxxx + Номер команды - CMD24
tx3=(x>>24); SPI3(); // адрес
tx3=(x>>16); SPI3(); // адрес
tx3=(x>>8); SPI3(); // адрес
tx3=x; SPI3(); // адрес
tx3=0x00; SPI3(); // 0000 0000. CRC - 0
// ответ R1: 0000 0000 - команда microSD принята
tx3=0xFF; SPI3(); // задержка 1 байт 0xFF
tx3=0xFF; SPI3(); // STATUS R1 0000 0000
//////////////////////////////////////////////////////////////////////////////// метка:
tx3=0xFE; SPI3(); // 0xFE метка для команды - CMD24
//////////////////////
for (a=0; a<512; a++) {
tx3=ADC; SPI3(); // ADC > microSD
};
////////////////////
tx3=0x00; SPI3(); // CRC - 0
tx3=0x00; SPI3(); // CRC - 0
/////////////////////////////////////////////////////////// ответ - данные приняты 0xE5:
tx3=0xFF; SPI3(); // SPI пустой
////////////////////////////////////////////////////////////////
PORTB.0=1; // SS microSD
////////////////////////////////////////////////////////////////////////////////////////
:roll:

Добавлено after 1 minute 40 seconds:
и тактовую надо поднять в два раза...
и возможно ещё переключить SPI на удвоенную скорость... а может и не надо))
тогда должно работать нормально))
:tea:

Добавлено after 4 minutes 23 seconds:
ну и остался последний вопрос...

Как происходит запись на флешку ?

1.
при записи на флешку все данные сначала записываются в буфер SRAM на 512 байт.
2.
после команды "запись" флешка перезаписывает все данные из буфера SRAM на 512 байт в память ROM на 4 Гбайт.

можем ли мы не дожидаясь окончания записи предыдущего сектора сразу писать следующий сектор ?
если да, то проблем нет))
фактически у нас уже готовый диктофон )) ещё добавить кнопочки... но это уже молочи))
:tea:
осталось всё собрать и протестировать в железе...
:tea:
Novice user
Мудрый кот
Сообщения: 1704
Зарегистрирован: Вт янв 05, 2016 10:14:25
Откуда: поселок Мелеуз

Re: Ардуино - запись звука

Сообщение Novice user »

И разместить новую статью!!!
Ждемс...
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: Ардуино - запись звука

Сообщение Martian »

[uquote="olegue",url="/forum/viewtopic.php?p=4239875#p4239875"]а что если вместо INT объявить unsignet INT - это же беззнаковое целое , до 65 000. При этом можно ж до этой цифры файлы гнать?[/uquote]ну, можно. Там наверняка есть и ulong, у меня в C# это 18 446 744 073 709 551 615, специально глянул, такое не запомнить :), и можно даже свой тип придумать. Лишь бы места в еепромке хватило.
Аватара пользователя
Карбофос
Опытный кот
Сообщения: 760
Зарегистрирован: Сб окт 22, 2016 17:33:32
Откуда: кг

Re: Ардуино - запись звука

Сообщение Карбофос »

[uquote="roman.com",url="/forum/viewtopic.php?p=4239933#p4239933"]первым делом ...[/uquote]
Ну, будет не "ее", а "е".
И чо?
Чел что-то делает, а ты долобоёб.
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Ардуино - запись звука

Сообщение roman.com »

мда... не перевелись ещё дебилы)) ну да ладно.
:tea:

далее...
проверим вместе с командами записи...
ADC_SPI_1.jpg
(103.8 КБ) 69 скачиваний
вышли за лимит)) всё дело в этом...

tx3=(x>>24); SPI3(); // адрес
tx3=(x>>16); SPI3(); // адрес
tx3=(x>>8); SPI3(); // адрес
tx3=x; SPI3(); // адрес

переменные long слишком долго обрабатываются)) вообще чтоб программа работала быстрей все переменные должны быть char
сделаем адрес через массив...
TX_int[]={0,0,0,0};
tx=TX_int[0]; SPI(); //адрес
tx=TX_int[1]; SPI(); //адрес
tx=TX_int[2]; SPI(); //адрес
tx=TX_int[3]; SPI(); //адрес
ADC_SPI_2.jpg
(108.51 КБ) 79 скачиваний
уже лучше... но мало)) можно поднять тактовую с 8 МГц до 16 МГц... и всё встанет в норму)) но пойдём другим путём - удвоим скорость SPI... ))
ATmega8-SPI.c
(3.76 КБ) 66 скачиваний
SPI на двойной скорости... 3 микросекунды вместо 8 микросекунд...
SPI_2X.jpg
(92.2 КБ) 78 скачиваний
теперь всё в норме))
ADC_SPI_поток.jpg
(108.16 КБ) 77 скачиваний
замечательно))
:tea:
и так... мы получили непрерывный поток записи на флешку...
дальше надо проверить как будет работать флешка в таком режиме...
:roll:
понятно что это тестовая программа... в реальности надо всё сделать на таймере... тактируемого от кварцевого генератора... а запуск преобразования и передача байт по SPI должна происходить в прерываниях таймера... с кварцевой точностью...
тогда всё будет хорошо))
:tea:
Аватара пользователя
Карбофос
Опытный кот
Сообщения: 760
Зарегистрирован: Сб окт 22, 2016 17:33:32
Откуда: кг

Re: Ардуино - запись звука

Сообщение Карбофос »

[uquote="roman.com",url="/forum/viewtopic.php?p=4240009#p4240009"]мда... не перевелись ещё дебилы)) ну да ладно[/uquote]
Вот-жеж ты умный.
Прога работает, а ты доказываешь, что она работать не может! ))))
Ты просто долбоЁб.
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Ардуино - запись звука

Сообщение roman.com »

весело тут у вас)))
:)
и на последок... забегая вперёд))
если вдруг... все что мы записали на самодельный диктофон... мы захотим послушать на ПК... в браузере... или на своём любимом плеере... то перед началом записи на флешку мы должны добавить на флешку заголовок... с описанием формата wav...
формат wav.txt
(2.26 КБ) 151 скачивание
браузеры... или любые плееры... сначала читают заголовки... а потом читают wav поток...
формат_wav.jpg
(81.6 КБ) 85 скачиваний
но это так... забегая вперёд )) когда мы до этого дойдём...
точнее... если мы до этого дойдём))
:tea:
Аватара пользователя
Карбофос
Опытный кот
Сообщения: 760
Зарегистрирован: Сб окт 22, 2016 17:33:32
Откуда: кг

Re: Ардуино - запись звука

Сообщение Карбофос »

[uquote="roman.com",url="/forum/viewtopic.php?p=4240037#p4240037"]весело тут у вас)))[/uquote]
Мир вокруг тебя, намного больше, чем тебе кажется.
Как только ты это осознаешь, ты поднимешься над собой, как минимум.
Извини, если обидел.

Ну, и, иди нах, придурок.

Добавлено after 38 minutes 24 seconds:
[uquote="roman.com",url="/forum/viewtopic.php?p=4240009#p4240009"]проверим вместе с командами записи...
ADC_SPI_1.jpg
вышли за лимит)) всё дело в этом...

tx3=(x>>24); SPI3(); // адрес
tx3=(x>>16); SPI3(); // адрес
tx3=(x>>8); SPI3(); // адрес
tx3=x; SPI3(); // адрес

переменные long слишком долго обрабатываются)) вообще чтоб программа работала быстрей все переменные должны быть char
сделаем адрес через массив...
TX_int[]={0,0,0,0};
tx=TX_int[0]; SPI(); //адрес
tx=TX_int[1]; SPI(); //адрес
tx=TX_int[2]; SPI(); //адрес
tx=TX_int[3]; SPI(); //адрес
ADC_SPI_2.jpg
уже лучше... но мало)) можно поднять тактовую с 8 МГц до 16 МГц... и всё встанет в норму)) но пойдём другим путём - удвоим скорость SPI... ))
ATmega8-SPI.c
SPI на двойной скорости... 3 микросекунды вместо 8 микросекунд...
SPI_2X.jpg
теперь всё в норме))
ADC_SPI_поток.jpg
замечательно))
:tea:
и так... мы получили непрерывный поток записи на флешку...
дальше надо проверить как будет работать флешка в таком режиме...
:roll:
понятно что это тестовая программа... в реальности надо всё сделать на таймере... тактируемого от кварцевого генератора... а запуск преобразования и передача байт по SPI должна происходить в прерываниях таймера... с кварцевой точностью...
тогда всё будет хорошо))
:tea:[/uquote]

Ну, сами посудите, это-же просто бред.
Тут либо галоперидол, либо лечебница.

Добавлено after 1 minute 1 second:
переменные long слишком долго обрабатываются ))
Просто пздц.

Добавлено after 1 minute 9 seconds:
вообще чтоб программа работала быстрей все переменные должны быть char
Чо, супер!

Добавлено after 47 seconds:
Этого кадра вчера из психбольницы выписали.
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: Ардуино - запись звука

Сообщение Martian »

вообще чтоб программа работала быстрей все переменные должны быть char
Мощно! :))) В принципе, для некоторых случаев и только на 8-битных шинах это может даже слегка справедливо :)
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: Ардуино - запись звука

Сообщение Ivanoff-iv »

про скорости я не понял... это вам аппаратного SPI не хватает? я на тини 2313 нормально играл 32ксемпла в секунду х 8 бит, а немного задрав частоту встроенного генератора выжал и 44... и, мне кажется оно и в 2 раза шире поток переварит (стерео или 16 бит, вроде в сети даже проекты видел, но сам не проверял)
Оно, ведь без разницы, в какую сторону слать...
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Ардуино - запись звука

Сообщение roman.com »

Martian
мы тут обсуждаем исключительно 8-ми битные AVR.
а так же Ардуино на 8-ми битных AVR.

мы тут не обсуждаем современные 32-х битные и 64-х битные процессоры.
там всё по другому.))

Ivanoff-iv
всё легко считается.))
аппаратного SPI не хватает для тестовой программы... см. выше.
после оптимизации... всё будет хватать))
:tea:
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: Ардуино - запись звука

Сообщение Ivanoff-iv »

а, если для тестовой, да под ардуину... я то, дурак, асемблером делал...
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Ардуино - запись звука

Сообщение Jack_A »

"Скотчи скетчи - наше всё!" :)) :shock:
У меня такое смутное убеждение, что написать для 8-биток что-то сложнее помигать диодами - да на высокоуровневом - это как (не подберу приличного сравнения) .
Изображение
Morroc
Друг Кота
Сообщения: 19494
Зарегистрирован: Чт фев 20, 2014 18:57:55

Re: Ардуино - запись звука

Сообщение Morroc »

во маньяки в тему слетелись. нет бы дурдуину на stm взять за те же копейки и вообще отключив мозг все сделать )

[uquote="Jack_A",url="/forum/viewtopic.php?p=4240177#p4240177"]это как (не подберу приличного сравнения) .[/uquote]
трахаться стоя в гамаке

[uquote="Jack_A",url="/forum/viewtopic.php?p=4240177#p4240177"]У меня такое смутное убеждение, что написать для 8-биток что-то сложнее помигать диодами [/uquote]
не то чтобы, но если в задаче присутствует обработка звукового сигнала и на дворе 2022 год, то брать такой мк... см. выше :))
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Аватара пользователя
olegue
Собутыльник Кота
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Re: Ардуино - запись звука

Сообщение olegue »

Такой вопрос! Как-то год назад я уже подбирался к теме, чтобы сделать на ардуине запись звука. Тогда неудачно все пошло и я получил SD карту в итоге на которой остались файлы, но ее невозможно ни стереть ни отформатировать ни записать, хотя запись в тотале симулируется. Где-то гуглил, что якобы произошел пережег какой-то перемычки. Вопрос, можно ее восстановить или нет
Morroc
Друг Кота
Сообщения: 19494
Зарегистрирован: Чт фев 20, 2014 18:57:55

Re: Ардуино - запись звука

Сообщение Morroc »

дичь какая то. возможно случайно ардуина её задрала циклами перезаписи и та окуклилась
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Аватара пользователя
olegue
Собутыльник Кота
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Re: Ардуино - запись звука

Сообщение olegue »

да , так бы вторая карта не помешала бы, если на этот раз все так хорошо получается
Martian
Друг Кота
Сообщения: 12867
Зарегистрирован: Сб дек 18, 2021 19:25:32
Контактная информация:

Re: Ардуино - запись звука

Сообщение Martian »

карточки любят сходить с ума. У меня есть "вечная-бесконечная": она прекрасно читается и не ругается, пока на неё пишешь. Из-за кэширования, теневых всяких механизмов и наверняка ещё какой-то фигни файловых систем-механизмов, которую я благополучно забыл и/или не знаю, виндоуз показывает, что на неё даже записалось, и это записанное даже читается. И удаляется. И форматируется. Но стоит вытащить карту и вставить снова... и на ней та самая информация, которая была ранее :))
roman.com
Друг Кота
Сообщения: 9147
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

Re: Ардуино - запись звука

Сообщение roman.com »

Morroc писал(а):трахаться стоя в гамаке
нормально !)) главное что бы никто не мешал заниматься любимым делом))
:))
olegue писал(а):ее невозможно ни стереть ни отформатировать ни записать
так а в чём проблема ? у тебя же есть Ардуино )) прочитай все сектора... проверь целостность секторов - запиши/прочитай все сектора и найди неисправный сектор... в чём проблема ? я так много раз делал )) только без Ардуино)) на простой AVR...
:tea:
Ответить

Вернуться в «AVR»