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

Обсуждаем контроллеры компании Atmel.
Ответить
Друг Кота
Сообщения: 9596
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

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

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

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

[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:
Этого кадра вчера из психбольницы выписали.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 7083
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

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

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

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

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

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

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

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

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

Сообщение Jack_A »

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

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

Сообщение olegue »

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

Сообщение Morroc »

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

Сообщение olegue »

да , так бы вторая карта не помешала бы, если на этот раз все так хорошо получается
Друг Кота
Сообщения: 9596
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

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

Morroc писал(а):трахаться стоя в гамаке
нормально !)) главное что бы никто не мешал заниматься любимым делом))
:))
olegue писал(а):ее невозможно ни стереть ни отформатировать ни записать
так а в чём проблема ? у тебя же есть Ардуино )) прочитай все сектора... проверь целостность секторов - запиши/прочитай все сектора и найди неисправный сектор... в чём проблема ? я так много раз делал )) только без Ардуино)) на простой AVR...
:tea:
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

roman.com, насчет проверок не знаю
а вот запустить что-то стандартное ардуиновсокое и посмотерть что оно выдасть
типа вот этого


Спойлер

Код: Выделить всё

/*
  SD card test

  This example shows how use the utility libraries on which the'
  SD library is based in order to get info about your SD card.
  Very useful for testing a card when you're not sure whether its working or not.

  The circuit:
    SD card attached to SPI bus as follows:
 ** MOSI - pin 11 on Arduino Uno/Duemilanove/Diecimila
 ** MISO - pin 12 on Arduino Uno/Duemilanove/Diecimila
 ** CLK - pin 13 on Arduino Uno/Duemilanove/Diecimila
 ** CS - depends on your SD card shield or module.
 		Pin 4 used here for consistency with other Arduino examples


  created  28 Mar 2011
  by Limor Fried
  modified 9 Apr 2012
  by Tom Igoe
*/
// include the SD library:
#include <SPI.h>
#include <SD.h>

// set up variables using the SD utility library functions:
Sd2Card card;
SdVolume volume;
SdFile root;

// change this to match your SD shield or module;
// Arduino Ethernet shield: pin 4
// Adafruit SD shields and modules: pin 10
// Sparkfun SD shield: pin 8
// MKRZero SD: SDCARD_SS_PIN
const int chipSelect = 4;

void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }


  Serial.print("\nInitializing SD card...");

  // we'll use the initialization code from the utility libraries
  // since we're just testing if the card is working!
  if (!card.init(SPI_HALF_SPEED, chipSelect)) {
    Serial.println("initialization failed. Things to check:");
    Serial.println("* is a card inserted?");
    Serial.println("* is your wiring correct?");
    Serial.println("* did you change the chipSelect pin to match your shield or module?");
    while (1);
  } else {
    Serial.println("Wiring is correct and a card is present.");
  }

  // print the type of card
  Serial.println();
  Serial.print("Card type:         ");
  switch (card.type()) {
    case SD_CARD_TYPE_SD1:
      Serial.println("SD1");
      break;
    case SD_CARD_TYPE_SD2:
      Serial.println("SD2");
      break;
    case SD_CARD_TYPE_SDHC:
      Serial.println("SDHC");
      break;
    default:
      Serial.println("Unknown");
  }

  // Now we will try to open the 'volume'/'partition' - it should be FAT16 or FAT32
  if (!volume.init(card)) {
    Serial.println("Could not find FAT16/FAT32 partition.\nMake sure you've formatted the card");
    while (1);
  }

  Serial.print("Clusters:          ");
  Serial.println(volume.clusterCount());
  Serial.print("Blocks x Cluster:  ");
  Serial.println(volume.blocksPerCluster());

  Serial.print("Total Blocks:      ");
  Serial.println(volume.blocksPerCluster() * volume.clusterCount());
  Serial.println();

  // print the type and size of the first FAT-type volume
  uint32_t volumesize;
  Serial.print("Volume type is:    FAT");
  Serial.println(volume.fatType(), DEC);

  volumesize = volume.blocksPerCluster();    // clusters are collections of blocks
  volumesize *= volume.clusterCount();       // we'll have a lot of clusters
  volumesize /= 2;                           // SD card blocks are always 512 bytes (2 blocks are 1KB)
  Serial.print("Volume size (Kb):  ");
  Serial.println(volumesize);
  Serial.print("Volume size (Mb):  ");
  volumesize /= 1024;
  Serial.println(volumesize);
  Serial.print("Volume size (Gb):  ");
  Serial.println((float)volumesize / 1024.0);

  Serial.println("\nFiles found on the card (name, date and size in bytes): ");
  root.openRoot(volume);

  // list all files in the card with date and size
  root.ls(LS_R | LS_DATE | LS_SIZE);
}

void loop(void) {
}
Друг Кота
Сообщения: 9596
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

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

флешки капризные... бывает зависают)) поэтому я от них отказался...

да можно как угодно посмотреть... хоть через Ардуину... хоть напрямую подключить к AVR... и вывести данные на экран...

я подключил к AVR и прочитал все сектора...
сектора.jpg
(18.84 КБ) 68 скачиваний
затем стёр все сектора... записал туда все нули... 000000000000000...
после вставил в ПК...
ПК ответил "диск не отформатирован. Отформатировать ? Нажмите да"
нажал Да))
через две минуты... у меня опять рабочая флешка))
:tea:
есть ещё бесплатные программы по восстановлению данных с флешек... но то такое... на любителя)) на AVR получается круче))
Друг Кота
Аватара пользователя
Сообщения: 39197
Зарегистрирован: Сб сен 13, 2014 16:27:32
Откуда: СпиртоГонск созвездия Омега

Сообщение musor »

страны вы люди имея комп с тонами софта в интернете зачем гоношить приблуду на мк...
любую флеху можно проверить и переформатировать с проверкой сектороф по заводу софтом под ее продной к4онтролер
при этом не удивляйтесь если 16/32гБТ вдрук потом станет 8или даже 2гбт
прпосто обнарпужиф в секции неск битых ячек чисто короых болше резервной зоны контролер отсекает часть нанда с битыми ячейками уменшая обьем -зато оставшие будуть работать и держать даные надежно...

Добавлено after 2 minutes 27 seconds:
а ваши потуги с принудителной записью о или 1 в каждую ячейку самобман... каки попытка указать обьем болше физической адресации НАНД
допустим винда проведет форматирование без проверки сектороф =но такая флеха будет портить и тьерять даные -оно вам надо???
ZМудрость(Опыт и выдержка) приходит с годами.
Все Ваши беды и проблемы, от недостатка знаний.
Умный и у дурака научится, а дураку и ..
Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Друг Кота
Сообщения: 9596
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

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

[uquote="Morroc",url="/forum/viewtopic.php?p=4240180#p4240180"]во маньяки в тему слетелись...[/uquote]
ты ещё маньяков не видел))
а как насчёт много ядерных AVR ? )) с синхронизацией до машинного такта... от одного кварцевого генератора... с распределёнными вычислениями... написано на ассемблере))
многоядерный_AVR.jpg
(94.47 КБ) 71 скачивание
:))
Martian писал(а):какое-то странное увлечение чашкой.
это чай)) просто крепкий чай))
:))
musor писал(а):страны вы люди имея комп с тонами софта в интернете зачем гоношить приблуду на мк...
нормальные мы люди)) прост она ПК это делать не интересно))
а номер контроллера может читать и AVR...
на самом деле весь тот софт на компе и AVR... используют одни и те же команды... согласно одному и тому же даташиту))
olegue писал(а):насчет проверок не знаю
а как насчёт... шифрования ?
у тебя в ардуино есть функция шифрования флешки ?
8)
в наше трудное время... все секретные переговоры... записанные на наш самодельный диктофон... не должны попасть в руки к нашим врагам ! ))
:kill:
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

Вот между работой с eeProm и sd card есть разница как я понял. Она заключается в том ,что в еепром можно записать в любой байт по адресу и также считать, а в sd карта все делается блоками по 512байт, еще и буфер каой то есть.

Объясните простыми словами как пишутся и читаются данные на карту. То что постил roman.com для меня пока слишком сложно.
Друг Кота
Сообщения: 9596
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

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

ты хорошо себе представляешь как записать EEPROM ?

// запись EEPROM:

EEAR = a; // пишем адрес ячейки куда хотим записать
EEDR = b; // пишем данные которые хотим записать (1 байт)
EECR |= 0b00000100; // пишем команду "разрешить запись EEPROM"
EECR |= 0b00000010; // пишем команду "запись EEPROM"
while(EECR & 0b00000010); // ждём окончание записи EEPROM

*Примечание:
буква "A" - это адрес.
буква "D" - это данные.
буква "C" - это команда.

Тоже самое для флешки))


// запись флешки:

tx3=0x58; SPI3(); // пишем команду "запись флешки"

tx3=(x>>24); SPI3(); // пишем адрес сектора куда хотим записать
tx3=(x>>16); SPI3(); // пишем адрес сектора куда хотим записать
tx3=(x>>8); SPI3(); // пишем адрес сектора куда хотим записать
tx3=x; SPI3(); // пишем адрес сектора куда хотим записать

for (a=0; a<512; a++) {
tx3=ADC; SPI3(); // пишем данные которые хотим записать (512 байт)
};

while ( x1 != 0xFF ) {
tx3=0xFF; SPI3(); x1=rx3; // ждём окончание записи флешки
};

всё))

и в чём разница между EEPROM и флешкой ? Только в том что в EEPROM пишем по 1 байту, а на флешку пишем блоками по 512 байт. Вот и вся разница))
:)
Собутыльник Кота
Аватара пользователя
Сообщения: 2977
Зарегистрирован: Сб май 21, 2016 11:04:52
Откуда: Беларусь

Сообщение olegue »

и еще кругом пишут что есть какой -то буфер?

Добавлено after 15 minutes 7 seconds:
roman.com писал(а):у, а на флешку пишем блоками по 512 байт.
и этот блок нужно где-то накопить?
Друг Кота
Аватара пользователя
Сообщения: 7083
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

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

не обязательно, он может и во флешке копиться
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Друг Кота
Сообщения: 9596
Зарегистрирован: Вт мар 13, 2012 12:16:13
Откуда: .ru

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

нет никакого буфера)) мы сами его себе придумали...))

флешке не нужны никакие буферы... берешь флешку и пишешь сразу 512 байт без всяких буферов))

Добавлено after 20 minutes:
olegue писал(а):и этот блок нужно где-то накопить?
не нужно ничего нигде накапливать.

берёшь флешку и пишешь...

// запись флешки:

tx3=0x58; SPI3(); // пишем команду "запись флешки"

tx3=0; SPI3(); // пишем адрес сектора куда хотим записать
tx3=0; SPI3(); // пишем адрес сектора куда хотим записать
tx3=0; SPI3(); // пишем адрес сектора куда хотим записать
tx3=0; SPI3(); // пишем адрес сектора куда хотим записать

for (a=0; a<512; a++) {
tx3=0; SPI3(); // пишем данные которые хотим записать - 512 байт и все нули
};

while ( x1 != 0xFF ) {
tx3=0xFF; SPI3(); x1=rx3; // ждём окончание записи флешки
};

в сектор 0000 будут записаны все нули...

00000000000000000000000000000000000...
00000000000000000000000000000000000...
00000000000000000000000000000000000...
00000000000000000000000000000000000...
.....
и т.д.

всего 512 байт и все нули
Ответить

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