Обсуждаем контроллеры компании Atmel.
Ответить

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

Ср июн 01, 2022 18:56:50

Я об этом и писал...

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

Ср июн 01, 2022 19:25:19

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

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

5. мы вообще можем не использовать буфер ATmega8... а измерять ADC и сразу передавать по SPI...
ADC_SPI.jpg
(93.89 KiB) Скачиваний: 37

Итого:
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[b]; 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:

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

Ср июн 01, 2022 19:34:58

И разместить новую статью!!!
Ждемс...

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

Ср июн 01, 2022 19:39:17

а что если вместо INT объявить unsignet INT - это же беззнаковое целое , до 65 000. При этом можно ж до этой цифры файлы гнать?
ну, можно. Там наверняка есть и ulong, у меня в C# это 18 446 744 073 709 551 615, специально глянул, такое не запомнить :), и можно даже свой тип придумать. Лишь бы места в еепромке хватило.

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

Ср июн 01, 2022 21:11:22

первым делом ...

Ну, будет не "ее", а "е".
И чо?
Чел что-то делает, а ты долобоёб.

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

Ср июн 01, 2022 22:55:57

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

далее...
проверим вместе с командами записи...
ADC_SPI_1.jpg
(103.8 KiB) Скачиваний: 34

вышли за лимит)) всё дело в этом...

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 KiB) Скачиваний: 31

уже лучше... но мало)) можно поднять тактовую с 8 МГц до 16 МГц... и всё встанет в норму)) но пойдём другим путём - удвоим скорость SPI... ))
ATmega8-SPI.c
(3.76 KiB) Скачиваний: 33

SPI на двойной скорости... 3 микросекунды вместо 8 микросекунд...
SPI_2X.jpg
(92.2 KiB) Скачиваний: 30

теперь всё в норме))
ADC_SPI_поток.jpg
(108.16 KiB) Скачиваний: 33

замечательно))
:tea:
и так... мы получили непрерывный поток записи на флешку...
дальше надо проверить как будет работать флешка в таком режиме...
:roll:
понятно что это тестовая программа... в реальности надо всё сделать на таймере... тактируемого от кварцевого генератора... а запуск преобразования и передача байт по SPI должна происходить в прерываниях таймера... с кварцевой точностью...
тогда всё будет хорошо))
:tea:

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

Ср июн 01, 2022 23:09:29

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

Вот-жеж ты умный.
Прога работает, а ты доказываешь, что она работать не может! ))))
Ты просто долбоЁб.

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

Чт июн 02, 2022 00:18:01

весело тут у вас)))
:)
и на последок... забегая вперёд))
если вдруг... все что мы записали на самодельный диктофон... мы захотим послушать на ПК... в браузере... или на своём любимом плеере... то перед началом записи на флешку мы должны добавить на флешку заголовок... с описанием формата wav...
формат wav.txt
(2.26 KiB) Скачиваний: 49

браузеры... или любые плееры... сначала читают заголовки... а потом читают wav поток...
формат_wav.jpg
(81.6 KiB) Скачиваний: 40

но это так... забегая вперёд )) когда мы до этого дойдём...
точнее... если мы до этого дойдём))
:tea:

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

Чт июн 02, 2022 01:23:15

весело тут у вас)))

Мир вокруг тебя, намного больше, чем тебе кажется.
Как только ты это осознаешь, ты поднимешься над собой, как минимум.
Извини, если обидел.

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

Добавлено after 38 minutes 24 seconds:
проверим вместе с командами записи...
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:


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

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

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

Добавлено after 47 seconds:
Этого кадра вчера из психбольницы выписали.

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

Чт июн 02, 2022 02:10:06

вообще чтоб программа работала быстрей все переменные должны быть char
Мощно! :))) В принципе, для некоторых случаев и только на 8-битных шинах это может даже слегка справедливо :)

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

Чт июн 02, 2022 05:06:38

про скорости я не понял... это вам аппаратного SPI не хватает? я на тини 2313 нормально играл 32ксемпла в секунду х 8 бит, а немного задрав частоту встроенного генератора выжал и 44... и, мне кажется оно и в 2 раза шире поток переварит (стерео или 16 бит, вроде в сети даже проекты видел, но сам не проверял)
Оно, ведь без разницы, в какую сторону слать...

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

Чт июн 02, 2022 11:32:09

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

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

Ivanoff-iv
всё легко считается.))
аппаратного SPI не хватает для тестовой программы... см. выше.
после оптимизации... всё будет хватать))
:tea:

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

Чт июн 02, 2022 11:42:25

а, если для тестовой, да под ардуину... я то, дурак, асемблером делал...

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

Чт июн 02, 2022 11:56:41

"Скотчи скетчи - наше всё!" :)) :shock:
У меня такое смутное убеждение, что написать для 8-биток что-то сложнее помигать диодами - да на высокоуровневом - это как (не подберу приличного сравнения) .

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

Чт июн 02, 2022 12:03:01

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

это как (не подберу приличного сравнения) .

трахаться стоя в гамаке

У меня такое смутное убеждение, что написать для 8-биток что-то сложнее помигать диодами

не то чтобы, но если в задаче присутствует обработка звукового сигнала и на дворе 2022 год, то брать такой мк... см. выше :))

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

Чт июн 02, 2022 12:20:22

Такой вопрос! Как-то год назад я уже подбирался к теме, чтобы сделать на ардуине запись звука. Тогда неудачно все пошло и я получил SD карту в итоге на которой остались файлы, но ее невозможно ни стереть ни отформатировать ни записать, хотя запись в тотале симулируется. Где-то гуглил, что якобы произошел пережег какой-то перемычки. Вопрос, можно ее восстановить или нет

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

Чт июн 02, 2022 12:30:36

дичь какая то. возможно случайно ардуина её задрала циклами перезаписи и та окуклилась

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

Чт июн 02, 2022 12:35:25

да , так бы вторая карта не помешала бы, если на этот раз все так хорошо получается

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

Чт июн 02, 2022 12:36:51

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

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

Чт июн 02, 2022 12:37:29

Morroc писал(а):трахаться стоя в гамаке

нормально !)) главное что бы никто не мешал заниматься любимым делом))
:))
olegue писал(а):ее невозможно ни стереть ни отформатировать ни записать

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