Arduino+24C256
- Войдите на сайт для отправки комментариев
Вс, 12/07/2020 - 18:56
Народ, please, help me!
Есть такая штука. Вроде бы 256К памяти. Как в неё записать файл, например, с картинкой в формате BMP или ролик MP4? А потом прочесть. Чтобы через Arduino. Буду весьма благодарен за пример.
Пример с чтением с SD Card не нужен - не использую.
у нее емкость 256 Кбит, а не Килобайт , то есть килобайт там всего 32
Чтобы записать туда файл. нужно сначала организовать на этом носителе файловую систему. Это, прямо скажем, не самый эффективный способ использования для такого маленькго обьема. Лучше положить туда картинку в виде байтового массива. без всяких файлов, аналогично тому как загружаются BMP в ПРОГМЕМ
Если по минимуму, то мне нужно положить туда три картинки BMP и звуковой файлик MP3.
30 килобайт должно хватить. Но даже по-байтно не получается разместить. Все примеры, которые нашел - один-два байта, и с адресацией полная неясность
Какая может быть "неясность" с адресами, ведь есть же даташит, где все расписано? А мало даташита - почему бы для начала не поискать в гугле что-нибудь типа "arduino at24с32" ?
примеров просто валом, например вот библиотека
https://github.com/mikaelpatel/Arduino-Storage
Если по минимуму, то мне нужно положить туда три картинки BMP и звуковой файлик MP3.
30 килобайт должно хватить. Но даже по-байтно не получается разместить. Все примеры, которые нашел - один-два байта, и с адресацией полная неясность
Единственная тонкость: память имеет страничную организацию и на запись страницы уходит довольно много времени, в течение которого микросхему не следует беспокоить.
Т.е. если Вы при записи переходите с одной страницы на другую, либо если Вы сразу после записи осуществляете чтение, необходимо выдержать паузу 5 мс. Размер страницы, если мне не изменяет память, 64 байта.
Кстати, если объема одной микросхемы не хватит, их без проблем можно установить до 8 штук. Т.е. всего получите 256 кбайт.
Валом то валом, но я искал даташит на 24С256. Нашел, но в нем сугубо физические характеристики, по программированию ничего нет.
Попытка скачать zip из github-а по вашей ссылке дает ошибку
А можно программку, которая заполняет всю эту память байтиками типа 0хFF
и другую программку, которая все это читает?
Кстати, если объема одной микросхемы не хватит, их без проблем можно установить до 8 штук. Т.е. всего получите 256 кбайт.
Я знаю, спасибо! Но тут хотя бы одну "победить".
Валом то валом, но я искал даташит на 24С256.
ищите даташит на 24с32 или 64 - во всех чипах этой серии обьемом 32 кбит и более принцпип адресации одинаков
Удивляюсь на вас. Вроде 4 года на форуме и, судя по истории поиска - даже одно время брали коммерческие заказы на программирование... Примеров на 24с32 в инете много. Предлагаете искать из за вас? - переходите в "Ищу исполнителя", назначайте цену - договоримся :)
Удивляюсь на вас. Вроде 4 года на форуме и, судя по истории поиска - даже одно время брали коммерческие заказы на программирование... Примеров на 24с32 в инете много. Предлагаете искать из за вас? -
Любезный!
Водительские права у меня с 1975 года.
А вот на "Запорожце" ездить ни разу не приходилось.
Вы хотите меня обсудить или помочь мне?
Я не хочу вас утруждать, чес слово...
переходите в "Ищу исполнителя", назначайте цену - договоримся :)
И еще...
Что касается моего водительского удостоверения и коммерческих заказов...
Когда я куда-нибудь еду и попадаются попутчики, я НИКОГДА не требую с них денег...
Знаете, бывает иногда такое - стоят рядом с дорогой, голосуют...
Ситуация может быть такой, что у человека нет денег даже на автобусный билет...
Но когда ко мне подходят и просят отвезти в другой город, поселок, на дачу и т п...
То это совсем другое дело...
Я спросил у тех, кто сталкивался с этим устройством, пример программы...
У тех, кто с этой приблудой не сталкивался,
но готов разобраться за деньги в течении NN-ого количества дней,
я помощи не прошу.
Только и всего...
Кстати, сегодня zip по вашей ссылке скачался!
Спасибо!
У тех, кто с этой приблудой не сталкивался,
но готов разобраться за деньги в течении NN-ого количества дней,
я помощи не прошу.
принято, удачи в поисках :)
А можно программку, которая заполняет всю эту память байтиками типа 0хFF
и другую программку, которая все это читает?
Все-таки удивляюсь когда люди даже в гугле ничего найти не могут :)
запись:
#include <Wire.h> #include <AT24CX.h> // EEPROM object AT24CX mem; // array to write byte yy[] = { 0X01, 0X80, 0X01, 0X80, 0X01, 0X80, 0X01, 0X80, 0X01, 0X80, 0X01, 0X80, 0X01, 0X82, }; // setup void setup() { // serial init Serial.begin(115200); Serial.println("AT24CX read/write demo"); Serial.println("----------------------"); // write array start from mem index 20 mem.write(20, (byte*)yy, sizeof(yy)); } void loop() { }чтение:
#include <Wire.h> #include <AT24CX.h> // EEPROM object AT24CX mem; // setup void setup() { // serial init Serial.begin(115200); Serial.println("AT24CX read/write demo"); Serial.println("----------------------"); Serial.println("Read 14 single bytes starting at address 20"); for (int i = 0; i < 14; i++) { byte sc = mem.read(20 + i); Serial.print("["); Serial.print(20+i); Serial.print("] = "); Serial.println(sc, HEX); } } // main loop void loop() { }источник кода: https://forum.arduino.cc/index.php?topic=555794.0
библиотека: https://github.com/cyberp/AT24Cx
ЗЫ если чо - код не проверял, могут быть опечатки. Хотя грубых ошибок вроде нет
Что касается моего водительского удостоверения и коммерческих заказов...
Когда я куда-нибудь еду и попадаются попутчики, я НИКОГДА не требую с них денег...
Знаете, бывает иногда такое - стоят рядом с дорогой, голосуют...
Ситуация может быть такой, что у человека нет денег даже на автобусный билет...
Но когда ко мне подходят и просят отвезти в другой город, поселок, на дачу и т п...
То это совсем другое дело...
Старая гвардия. Сейчас всё по другому. Всё упирается в деньги. Редкие исключения не в счёт.
Старая гвардия. Сейчас всё по другому. Всё упирается в деньги. Редкие исключения не в счёт.
старая гвардия хотя бы гуглем пользоваться умеет
Старая гвардия. Сейчас всё по другому. Всё упирается в деньги. Редкие исключения не в счёт.
То, что в деньги, это понятно.
Подобный пример у меня есть. Вот он. Работает. Но теперь непонятки со страничкой. Ладно. Попытаюсь заменить содержимое yy[] на картинку BMP, если прокатит, то ура!
#include <Wire.h> #include "AT24C256.h" //Include AT24C256 Code Libraries AT24C256 g_eeprom(0x50); //Start code 0x50 Address void printContents() { int eeaddress = 0; byte value; while (true) { value = g_eeprom.read(eeaddress++); if ((value == 0xFF) || (eeaddress == 32768)) { Serial.println(); break; } Serial.print((char)value); } } void setup() { Serial.begin(9600); Serial.println ( "14CORE | 24C256 EEPROM TEST CODE"); // send a message to the serial monitor Serial.println ( "--------------------------------"); Serial.println ( "START... "); Wire.begin(); printContents(); } void loop() { //Serial.print ( "Serial.available = "); //Serial.println( Serial.available()); while (Serial.available()) { int i, m; String data = Serial.readStringUntil('\n'); Serial.print ( "data.length = "); Serial.println( data.length()); for (i = 0, m = data.length(); i < m; ++i) { g_eeprom.write(i, data[i]); Serial.println("14CORE | AT24C256 WRITE CODE TEST"); Serial.println("---------------------------------"); Serial.println("Writing : "); Serial.print(data[i]); Serial.println(" IN : "); Serial.println(i); } g_eeprom.write(i, 0xFF); //Start write printContents(); } delay(1); }Подобный пример у меня есть. Вот он. Работает.
ну-ну...
Во-первых, в вашем чипе нет ячейки с адресом 32768. Во-вторых. писать в чип значения FF не стоит, некоторые чипы памяти с завода именно FF и заполнены, выберите что-то другое.
писать в чип значения FF не стоит, некоторые чипы памяти с завода именно FF и заполнены
Не некоторые, а все, которые прикидываюся ПЗУ. Традиция-с.
ТС, анажды я написал биб-ку для всех AT24Схх (хх=32...512), с кэшированием страницы как на запись, так и на чтение. Если еще актуально, завтра могу поделиться, потестироваешь.
ТС, анажды я написал биб-ку для всех AT24Схх (хх=32...512)
это не твоя? :)
https://github.com/cyberp/AT24Cx
Во всей этой истории меня озадачивает MP3 в EEPROM-ке. С BMP, может, TC и справится, но вот MP3...
ТС, анажды я написал биб-ку для всех AT24Схх (хх=32...512)
это не твоя? :)
https://github.com/cyberp/AT24Cx
Не, я на Git не выкладывал. Моя отличается тем, что единообразно работает и с внутренним EEPROM и с любым внешним. Разница только в конструкторе.
Во всей этой истории меня озадачивает MP3 в EEPROM-ке. С BMP, может, TC и справится, но вот MP3...
даже не МР3, а МР4 - см в первом сообщении
ну-ну...
Во-первых, в вашем чипе нет ячейки с адресом 32768. Во-вторых. писать в чип значения FF не стоит, некоторые чипы памяти с завода именно FF и заполнены, выберите что-то другое.
Это из даташита
I2C-Compatible (2-Wire) Serial EEPROM
256-Kbit (32,768 x 8)
Могу выслать
писать в чип значения FF не стоит, некоторые чипы памяти с завода именно FF и заполнены, выберите что-то другое.
Да ради бога! Подскажите. Можно 10101010?
Это из даташита
256-Kbit (32,768 x 8)
Могу выслать
Ага, ячеек 32,768, с номерами с 0 по 32767 :)
вы меня все больше и больше веселите :)
ТС, анажды я написал биб-ку для всех AT24Схх (хх=32...512), с кэшированием страницы как на запись, так и на чтение. Если еще актуально, завтра могу поделиться, потестироваешь.
С удовольствием! И доложу результаты!
Да ради бога! Подскажите. Можно 10101010?
любой за пределами стандартной таблицы ASCII, да хотя бы FE вместо FF
*********************
Во всей этой истории меня озадачивает MP3 в EEPROM-ке. С BMP, может, TC и справится, но вот MP3...
Как то надо обозначать нажатие кнопок на пульте. Где-то и когда-то мне попадался скетч с проигрышем звуков.
Задумка - при "оживлении" пульта на экранчике происходит "взрыв" логотипа, сопровождающийся звуком. Затем появляются пронумерованные кнопки. При нажатии кнопок - короткий звук.
Как то надо обозначать нажатие кнопок на пульте. Где-то и когда-то мне попадался скетч с проигрышем звуков.
Задумка - при "оживлении" пульта на экранчике происходит "взрыв" логотипа, сопровождающийся звуком. Затем появляются пронумерованные кнопки. При нажатии кнопок - короткий звук.
МП3 для этого явно излишен. Если хотите с МП3 - вставьте в конструкцию внешний МП3 плеер, у китайцев есть готовые маленькие модули в два раза меньше Ардуино-Нано
Как то надо обозначать нажатие кнопок на пульте. Где-то и когда-то мне попадался скетч с проигрышем звуков.
Прямо с MP3-декодированием 328-м МК и проигрышем на спикер? Я бы посмотрел на это.
Прямо с MP3-декодированием 328-м МК и проигрышем на спикер? Я бы посмотрел на это.
Такие нюансы мне неизвестны
МП3 для этого явно излишен. Если хотите с МП3 - вставьте в конструкцию внешний МП3 плеер, у китайцев есть готовые маленькие модули в два раза меньше Ардуино-Нано
Спасибо! Поищу!
Прямо с MP3-декодированием 328-м МК и проигрышем на спикер? Я бы посмотрел на это.
Такие нюансы мне неизвестны
В исходном сообщении Вы говорили про записать/прочитать - это без проблем.
А потом уже пишете про "озвучку", а для стандартной Ардуины воспроизведение mp3 - явно за гранью реальности.
Вы уж определитесь, чего именно Вы хотите.
в вашем чипе нет ячейки с адресом 32768.
Это из даташита
I2C-Compatible (2-Wire) Serial EEPROM
256-Kbit (32,768 x 8)
Могу выслать
После этого, желание что-то выкладывать существенно поубавилось. Не в коня авёс.
А потом уже пишете про "озвучку", а для стандартной Ардуины воспроизведение mp3 - явно за гранью реальности.
Вы уж определитесь, чего именно Вы хотите.
Я так понимаю, ТС хочет просто какой то звук, а не оперные концерты в HiFi слушать.
Никогда так не делал, но нельзя ли просто прицепить бипер на аналоговый выход и подавать на него сигнал 00-FF с периодом (к примеру) 100 мс? Вот массив этих сигналов и записать в память...
Поинтересуйтесь стандартным способом тестирования памяти на ошибки. Можно просто запустить memtest и посмотреть какие тесты он прогоняет.
Самый простой вариант - запись/чтение 10101010, затем 01010101. Ну и напоследок 0. Это покажет есть ли битые биты памяти.
Ну и если страница равна 64 байта, то отдать первую страницу под результат диагностики - если бит равен 0, то страница неисправна, если 1, то исправна. Причем первый бит будет показывать исправность контрольной страницы.
Никогда так не делал, но нельзя ли просто прицепить бипер на аналоговый выход и подавать на него сигнал 00-FF с периодом (к примеру) 100 мс? Вот массив этих сигналов и записать в память...
Можно, только звука слышимого эта конструкция издавать не будет.
Никогда так не делал, но нельзя ли просто прицепить бипер на аналоговый выход и подавать на него сигнал 00-FF с периодом (к примеру) 100 мс? Вот массив этих сигналов и записать в память...
Можно, только звука слышимого эта конструкция издавать не будет.
Все верно. Надо частоту повыше. Ну и я думаю частота еще и плавающая должна быть. Можно конечно и буззер сделать - 50Гц, 20мс на цикл 00-FF. Но хоть какую-нибудь музыку можно от 8кГц сделать вроде (12.5мкс на период). Надо смотреть как во всяких старых ПК делалось (например у Спектрума).
Не моё. Автор указан.)
/* Project : Музончик Version : 0.1.2 Date : 14.06.2006 Author : Pavel Sirotkin Chip type : AT90S2313 Clock frequency : 4,000000 MHz Compiler : WinAVR 2006.04.21 Note : По большому счету глубоко пофигу для какого чипа эта программа. Для какой частоты и прочее. Главное, чтоб было два внешних прерывания и таймер щелкал на частоте 31,250 КГц. */ // Нет определений входов/выхода, подтяжек для кнопок! 2015-feb-8 OKF #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> #include <avr/pgmspace.h> #define M_PORT PORTB //modify OKF #define M_DDR DDRB #define M_BIT 0 // Bit Operations macroses #define BIT(x) (1 << (x)) #define CLEARBITS(x,y) ((x) &= ~(y)) #define CLEARBIT(x,y) CLEARBITS((x), (BIT(y))) // Global vars #include "music.h" unsigned char T1Reload; unsigned char Play = 1; unsigned char Song = 0; unsigned char melody_index; // Timer0 interrupt ISR(TIMER0_OVF0_vect) { TCNT0 = T1Reload; if (T1Reload != Silence && Play) M_PORT ^= (BIT(M_BIT)); //change polarity else CLEARBIT(M_PORT, M_BIT); } // External interrupt 0 ISR(INT0_vect) { T1Reload = Silence; melody_index = 0; Play = 1; GIMSK = 0; //ext int disable - no key pressed MCUCR = 0; GIFR = 0; } // External interrupt 1 ISR(INT1_vect) { Song++; T1Reload = Silence; melody_index = 0; Play = 1; GIMSK = 0; //ext int disable MCUCR = 0; GIFR = 0; } /* External interrupt init: INT0: On INT0 Mode: Falling Edge INT1: On INT1 Mode: Falling Edge INT2: Off Interrupt on any change on pins PCINT0-7: Off */ void ExtIntEnable(void) { GIMSK = 0xC0; MCUCR = 0x2A; GIFR = 0xC0; } //============================================================================== int main(void) { unsigned int lang = 0; // Port init M_PORT &= ~M_BIT; M_DDR |= M_BIT; // Timer0 init // Clock source: System Clock // Clock value: 31,250 kHz TCCR0 = 0x03; TCNT0 = 0x00; TIMSK = 0x02; //timer0 overflow interrupt enabled ExtIntEnable(); asm("sei"); while (1) { if (!Play) { melody_index = 0; asm ("Sleep"); //sleep, if no playing } switch (Song) { case 0: //"Бумер" if (melody_index >= BUMER_LAENGE) { Play = 0; ExtIntEnable(); break; } T1Reload = pgm_read_byte(&Bumer[melody_index][0]); lang = pgm_read_byte(&Bumer[melody_index][1]); break; case 1: //"Листья" if (melody_index >= LIST_LAENGE) { Play = 0; ExtIntEnable(); break; } T1Reload = pgm_read_byte(&List[melody_index][0]); lang = pgm_read_byte(&List[melody_index][1]); break; case 2: //"Служебный роман" if (melody_index >= ROMAN_LAENGE) { Play = 0; ExtIntEnable(); break; } T1Reload = pgm_read_byte(&Roman[melody_index][0]); lang = pgm_read_byte(&Roman[melody_index][1]); break; case 3: //"Ва Банк" if (melody_index >= BANK_LAENGE) { Play = 0; ExtIntEnable(); break; } T1Reload = pgm_read_byte(&Bank[melody_index][0]); lang = pgm_read_byte(&Bank[melody_index][1]); break; case 4: //"Джентельмены у Дачи" if (melody_index >= DJEN_LAENGE) { Play = 0; ExtIntEnable(); break; } T1Reload = pgm_read_byte(&Djen[melody_index][0]); lang = pgm_read_byte(&Djen[melody_index][1]); break; default: Song = 0; break; } while (lang) //current note { _delay_ms(50); lang--; } melody_index++; //next note T1Reload = Silence; //пауза, чтоб не было щелчков _delay_ms(40); } }music.h
// music.h - melody #define CEL 32 // 1/1 #define SEM 16 // 1/2 #define QV 8 // 1/4 #define D_Cr 6 // 3/16 #define Cr 4 // 1/8 #define Qu 2 // 1/16 #define SQ 1 // 1/32 #define C1 17 // 262 -> До #define Cis1 31 // 278 -> До Диез #define D1 43 // 294 -> Ре #define Dis1 56 // 312 -> Ре Диез #define E1 67 // 330 -> Ми #define F1 77 // 350 -> Фа #define Fis1 87 // 370 -> Фа Диез #define G1 97 // 392 -> Соль #define Gis1 106 // 416 -> Соль Диез #define A1 114 // 440 -> Ля #define Ais1 122 // 467 -> Ля Диез #define H1 130 // 495 -> Си #define C2 137 // 523 -> До #define Cis2 143 // 554 -> До Диез #define D2 150 // 588 -> Ре #define Dis2 156 // 623 -> Ре Диез #define E2 161 // 660 -> Ми #define F2 167 // 699 -> Фа #define Fis2 171 // 741 -> Фа Диез #define G2 176 // 785 -> Соль #define Gis2 180 // 830 -> Соль Диез #define A2 184 // 880 -> Ля #define H2 192 // 988 -> Си #define C3 196 // 1048 -> До #define Cis3 199 // 1112 -> До Диез #define D3 202 // 1176 -> Ре #define Dis3 204 // 1248 -> Ре Диез #define E3 207 // 1320 -> Ми #define F3 210 // 1400 -> Фа #define Fis3 213 // 1480 -> Фа Диез #define Silence 0 // "Бумер" #define BUMER_LAENGE 35 PROGMEM const char Bumer [BUMER_LAENGE][2] = { { Silence, SQ }, { E2, Cr }, { G2, QV }, { Silence, SEM }, { G2, Cr }, { E2, QV }, { Silence, SEM }, { A2, Cr }, { G2, Cr }, { A2, Cr }, { G2, Cr }, { A2, Cr }, { G2, Cr }, { A2, Cr }, { G2, Cr }, { A2, Cr }, { H2, QV }, { Silence, SEM }, { E2, Cr }, { G2, QV }, { Silence, SEM }, { G2, Cr }, { E2, QV }, { Silence, SEM }, { A2, Cr }, { G2, Cr }, { A2, Cr }, { G2, Cr }, { A2, Cr }, { G2, Cr }, { A2, Cr }, { G2, Cr }, { A2, Cr }, { H2, QV }, { Silence, SQ } }; // "Листья" #define LIST_LAENGE 50 PROGMEM const char List [LIST_LAENGE][2] = { { Silence, SQ }, { A2, QV }, { H2, QV }, { C3, QV }, { H2, D_Cr }, { A2, SEM }, { E2, 3 }, { C3, QV }, { H2, D_Cr }, { A2, QV }, { E2, QV }, { G2, SEM }, { F2, CEL }, { H1, QV }, { C2, QV }, { E2, QV }, { D2, D_Cr }, { H1, SEM }, { E1, 3 }, { E2, QV }, { D2, D_Cr }, { C2, QV }, { Gis1, 12 }, { H1, SEM }, { A1, CEL }, { A2, QV }, { H2, QV }, { C3, QV }, { H2, D_Cr }, { A2, SEM }, { E2, 3 }, { C3, D_Cr }, { H2, QV }, { A2, QV }, { E2, 12 }, { G2, SEM }, { F2, CEL }, { H1, QV }, { C2, QV }, { E2, QV }, { D2, D_Cr }, { H1, SEM }, { E1, 3 }, { E2, QV }, { D2, QV }, { C2, QV }, { Gis1, QV }, { H1, SEM }, { A1, CEL }, { Silence, Qu } }; // "Служебный роман" #define ROMAN_LAENGE 44 PROGMEM const char Roman [ROMAN_LAENGE][2] = { { Silence, SQ }, { C2, Cr }, { F2, Cr }, { G2, Cr }, { Gis2, Cr }, { G2, Cr }, { G2, Cr }, { F2, Cr }, { F2, Cr }, { E2, Cr }, { D2, Cr }, { E2, Cr }, { F2, QV }, { Silence, 12 }, { C2, Cr }, { Cis2, Cr }, { C2, Cr }, { Ais1, QV }, { Silence, 12 }, { F2, Cr }, { G2, Cr }, { F2, Cr }, { E2, QV }, { Silence, 12 }, { C2, Cr }, { F2, Cr }, { G2, Cr }, { Gis2, Cr }, { G2, Cr }, { G2, Cr }, { F2, Cr }, { F2, Cr }, { E2, Cr }, { D2, Cr }, { E2, Cr }, { F2, QV }, { Silence, 12 }, { F2, Cr }, { G2, Cr }, { Gis2, Cr }, { G2, SEM }, { F2, QV }, { G2, QV }, { Silence, SQ } }; // "Ва Банк" #define BANK_LAENGE 43 PROGMEM const char Bank [BANK_LAENGE][2] = { { Silence, SQ }, { F2, Cr }, { D2, Qu }, { Silence, Cr }, { A1, Cr }, { Silence, Qu }, { F2, Qu }, { D2, Cr }, { A1, Qu }, { F2, Cr }, { D2, Qu }, { Silence, Cr }, { A1, Cr }, { Silence, Qu }, { F2, Qu }, { E2, Cr }, { D2, Qu }, { F2, Cr }, { E2, Qu }, { Silence, Cr }, { Gis1, SEM }, { Silence, QV }, { F2, Cr }, { E2, Qu }, { Silence, Cr }, { G1, Cr }, { Silence, Qu }, { F2, Qu }, { E2, Cr }, { G1, Qu }, { F2, Cr }, { E2, Qu }, { Silence, Cr }, { G1, Cr }, { Silence, Qu }, { F2, Qu }, { E2, Cr }, { G1, Qu }, { E2, Cr }, { D2, Qu }, { Silence, Cr }, { A2, SEM }, { Silence, SQ } }; // "Джентельмены удачи" #define DJEN_LAENGE 43 PROGMEM const char Djen [DJEN_LAENGE][2] = { { Silence, SQ }, { E2, Cr }, { F2, Cr }, { Silence, Qu }, { E2, Qu }, { Dis2, Qu }, { E2, Qu }, { Silence, Qu }, { C2, QV }, { Silence, QV }, { E2, Cr }, { F2, Cr }, { Silence, Qu }, { E2, Qu }, { Dis2, Qu }, { E2, Qu }, { Silence, Qu }, { H1, QV }, { Silence, QV }, { E2, Cr }, { C3, Cr }, { H2, Cr }, { A2, Cr }, { E2, Cr }, { G2, Cr }, { Silence, Qu }, { F2, Qu }, { E2, Cr }, { F2, Cr }, { E2, Qu }, { F2, Qu }, { E2, Qu }, { D2, SEM }, { Silence, SQ } };После этого, желание что-то выкладывать существенно поубавилось. Не в коня авёс.
Что вас обидело? Не нашли свою библиотеку?
Поинтересуйтесь стандартным способом тестирования памяти на ошибки. Можно просто запустить memtest и посмотреть какие тесты он прогоняет.
Самый простой вариант - запись/чтение 10101010, затем 01010101. Ну и напоследок 0. Это покажет есть ли битые биты памяти.
Ну и если страница равна 64 байта, то отдать первую страницу под результат диагностики - если бит равен 0, то страница неисправна, если 1, то исправна. Причем первый бит будет показывать исправность контрольной страницы.
В добрые старые времена был целый комплекс тестов МОЗУ для ЭВМ "М-222"
и указанный вами, и такой FF00FF00FF00... 00FF00FF00... и FFFFFFF.... 0000000....
Дисплеев не было - были табло, при проверках МОЗУ сияли как новогодние елки.
Хотя при работе машины тоже сияли. Светодиодов тогда не было,
в табло использовались советские микролампочки, но, удивительно,
они были довольно надежными и перегорали очень редко.
Ну у нас не такое массовое производство, плохие микросхемы будем сразу отбраковывать.
Будем прогонять через барокамеру ( давление ) и термокамеру (температура ),
в работу пускать "выжившие".
Вы уж определитесь, чего именно Вы хотите.
В том то и дело, что еще не определились.
И определять будет директор ( он же владелец ) завода.
Мне только подготовить рекомендации.
Но вначале надо, чтобы механика заработала...
Но это уже чисто мои проблемы, тем более, что они постепенно преодолеваются,
там особых проблем нет.
Я так понимаю, ТС хочет просто какой то звук, а не оперные концерты в HiFi слушать.
Никогда так не делал, но нельзя ли просто прицепить бипер на аналоговый выход и подавать на него сигнал 00-FF с периодом (к примеру) 100 мс? Вот массив этих сигналов и записать в память...
Совершенно верно.
Нажали кнопочку на пульте - "бип!"
Включился или отработал какой-то процесс - "би-бип!"
Можно, только звука слышимого эта конструкция издавать не будет.
Через усилок пустить?
Никогда так не делал, но нельзя ли просто прицепить бипер на аналоговый выход и подавать на него сигнал 00-FF с периодом (к примеру) 100 мс? Вот массив этих сигналов и записать в память...
Да, Arduino Due вполне способна воспроизводить звук, и даже довольно высокого качества (выше, чем советская аудиоаппаратура высшего класса), но вот справится ли она с декодированием mp3 в реальном времени - не знаю. При этом объем flash у нее таков, что может хранить короткие несжатые аудиофрагменты (порядка трех секунд СТЕРЕО).
Нажали кнопочку на пульте - "бип!"
Включился или отработал какой-то процесс - "би-бип!"
Можно, только звука слышимого эта конструкция издавать не будет.
Через усилок пустить?
Т.е. рекомендации производителю к железу готовит человек, который не знает, чего от этого железа ожидать нельзя и на чем можно сыканомить. Это что, советская школа?