Расширение оперативной памяти Arduino
- Войдите на сайт для отправки комментариев
Чт, 27/10/2011 - 23:17
Здравствуйте,
Подскажите пожалуйста, как можно расширить оперативную память Arduinовского микроконтроллера
В конечном итоге должно получится что-то типо навигатора без GPS приемника, который будет обрабатывать движимую картинку. На сколько я понимаю ОЗУ стандартного микроконтроллера недостаточно для обработки движимой карты. Какую плату лучше взять и что с ней нужно делать?
Заранее спасибо.
Можно использовать карту sd для расширения памяти.
Но "обрабатывать движимую картинку" не вижу как это реализовать на Arduino в чистом виде.
>Можно использовать карту sd для расширения памяти.
Я думаю тут имелось ввиду расширение именно оперативной памяти. Что-бы можно было объявить буффер размером в 20kb,уйти очень глубоко в рекурсию и т.п.. С sd данные нужно будет подгружить и обрабатывать "по кусочкам". Это как в компе - есть "оперативка", а есть "винчестер". SD-карта это "винчестер", а хочется побольше "оперативки".
Поддержка "внешней памяти" похоже есть в камнях "ATmega640/1280/2560". Там, вроде, можно подключить до 64-рех килобайт "как родные". Копать нужно откуда-то из docs.google.com/viewer , страница 27, раздел "Using the external memory interface".
Если сможете разобратся и подключить - отпишитесь тут. Думаю многим будет "интерестно/полезно".
А вот тут hackaday.com/2011/09/05/upgrading-ram-in-an-arduino-mega/ похоже вообще до 512kb внешней подключили. Правда как я понял "одновременно" можно только к 64k достучатся, нужно "переключить банки". И похоже что все это именно для работы с видео. Как и у вас.
безумная затея но если вы хотите изобретать велосипед возмите старую память от компа организуйти виртуальную 32 битную щину использую 32 ножки мк и флаг вам в руки ну или уйье совсем в нереал взяв флеш микросхему памяти с SPI интерфейсом от оперативки написать код инторпретатор адреса
А МОЖНО СДЕЛАТЬ ПО УМУ либо дождаться выхода новой платы ардуино http://arduino.cc/forum/index.php?topic=72664.0 если питаете слабость к этому названию или взять более подходящий контроллер благо их миллионы и цены на порядок дешевли ардуино
[...]
ну или уйье совсем в нереал взяв флеш микросхему памяти с SPI интерфейсом от оперативки написать код инторпретатор адреса
[...]
Не получится - оперативная память подразумевает частые операции записи. Даже при ресурсе 10^6 циклов записи флеш-память достаточно быстро протрется до дыр. Для оперативки подходят только чистые RAM-чипы.
тут и нет частых рециклов записал и читай себе или вы карту раждый день будите перепровлять ?
Карта - да. Карта будет записываться однократно и читаться много-много раз. Но читать ее придется в оперативную память, в этой же оперативной памяти производить все необходимые преобразования, подготовку графических данных, скорее всего - формирование в RAM-буфере изображения, потом - пересылку этого изображения на дисплей. Исходя из минимального разрешения 320х240 и 24-бит цветности плюс запас на всяко-разные необходимые при вычислениях переменные, получим минимальную потребность в RAM где то в районе 300К.
Именно в RAM - то есть в памяти, некоторые участки которой будут перезаписываться с частотой 1-100 раз в секунду (а то и чаще). Что на всяких Flash, eeprom, NAND приведет к "протиранию" этих некоторых участков через 10-100 тыс секунд работы программы. То есть то ли через сутки, то ли через год.
а чего писать то вы собрались тут просто читай и читай кадровый буфер рормирунтся в мк и все
[...] кадровый буфер рормирунтся в мк и все
Где конкретно в мк формируется кадровый буфер?
Каков его размер кадрового буфера?
С помощью каких операций формируется кадровый буфер?
конкретно в памяти мк вы резервируете под переменную
считываете данные из флешки пишите их в переменную
выталкиваете их в жки
стираете переменную и повторяете все заново
сколько надо на вывод одной строки ?
сколько строк в секуду вы можите с меги выдовать ?
мне кажется люди уже мыслят гегогерцами и гегобайтами
http://www.serasidis.gr/circuits/AVR_VGA/avr_vga.htm можно наверно даж на монитор попробывать сбросить
сколько надо на вывод одной строки ?
Организация флэш-памяти такова, что быстрый доступ возможен только при постраничном чтении-записи. Минимальный размер страницы - 512 байт (может оказаться и больше - нужно смотреть спецификацию на конкретную микросхему памяти). Поэтому "переменная" будет у вас длиной как минимум 512 байт (буфер называется). В ATMega у вас на все про все - 2048 байт (это на ATMega328, 168 и 8 вообще рассматривать для этой задачи нельзя). В которых надо разместить все переменные (не дай бог строковые), часть которой отъедает - и нехило отъедает - стек, которая, кроме того, используется под буфер UART (128 байт). В общем, просто перекачать часть флеш-памяти в память дисплея, может быть, и хватит. А вот для элементарного зума или наложения на карту каких-нибудь спрайтов - сомневаюсь.
сколько строк в секуду вы можите с меги выдовать ?
Чисто теоретически - на полноцветный дисплей 320х240 - где-то 2800 строк по 320 пикселов при кристалле 16 МГц.
- если не потребуется дополнительных вычислений для определения места очередной строки в файле в котором хранится карта и будут отсутствовать накладные расходы на перемещение указателей в точку, где начинается очередная считываемая строка
- если принимаемые из флеш-памяти не потребуют никакой дополнительной обработки
- если удастся каждый пиксел графический информации пропихивать за три такта (поскольку R, G и B)
- если очередная передаваемая строка не окажется расположенной на двух соседних страницах флеш-памяти. В этом случае придется "сделать остановку" на чтение очередной страницы флеш-памяти.
В общем, если все срастется максимально удачно и ваш алгоритм выжмет из конкретного железа максимум возможного (то есть будет неспособен показать те же результаты на несколько измененной конфигурации), то этот показатель, может быть, уменьшится еще в пару раз. А если не повезет - то и в 5-6-10 раз. То есть получим 1-2-3 кадра в секунду. Или другими словами - заметное невооруженным глазом перестроение изображения. Несмертельно.
Как вы правильно заметили, есть люди, которые мыслят ГЕГОбайтами и ГЕГОгерцами. Но делают они это не на железе, в котором жалкие КИЛОбайты и МЕГАгерцы.
И топикстартер, кстати, спрашивал о том, как можно расширить RAM. И ему было указано на то обстоятельство, что любая флеш-память имеет очень ограниченный ресурс на запись, что не позволяет использовать ее в качестве RAM в течение сколь-нибудь продолжительного времени.
ээээ батенька а мож Вам HDMI в голову взбредет ну всему должна быть мера .Монохром http://www.sparkfun.com/products/710 128x64
думаю вполне потянет можно еще скромнее от мобильника и в цвете
что реализованно в GPS навигаторах Garmin и ничего работают
и прощу заметить я этот вариант охарактеризовал как БЕЗУМНЫЙ
да и вариант так на вскидку а если уж петух клюнет можно все хорошенько продумать и бортовую эвм замутить на межпланетную станцию потянет сто пудов но наверно понадобится пару мег и ОЧЕНЬ большая флеш память -))))
Возьмите дисплей поскромнее. Получите прирост скорости записи из памяти микроконтроллера на дисплей раз в 10. Скорость чтения из флеш-памяти в оперативную (и размер необходимого для этого буфера) останется той же. А именно она является здесь "бутылочным горлышком".
Кстати, в своих прикидках я сделал ошибку - исходил из того, что чтение их флеш-памяти в RAM будет производиться побайтово (параллельная передача). А там ведь I2C, SPI и прочие последовательные варианты. Значит, на чтение одного байта потребуется не три такта (плюс подготовительные), а 24 (плюс подготовительные). Почему 24? Один такт для установки HIGH на линии CLK, один такт на чтение линии DATA, один такт для установки LOW на линии CLK. И так для каждого получаемого бита. Т.е. 3х8.
Так что даже при выводе на монохром (у меня кстати есть 84х48 - Nokia5110. Давайте им пользоваться будем - вот где скорость вывода получится!!!) вы получите примерно те же цифры, что я привел.
И еще раз приведу просьбу топикстартера:
"Подскажите пожалуйста, как можно расширить оперативную память Arduinовского микроконтроллера"
и прощу заметить я этот вариант охарактеризовал как БЕЗУМНЫЙ
Кстати, какой вариант вы охаректиризовали как безумный - подключение RAM к Arduin'е или реализацию устройства "типа навигатора без GPS"?
По первому варианту - есть реализованные решения. И вопрос "зачем" у людей, реализовавших эти решения не стоит, поскольку решения - промышленные.
По второму варианту - у меня тоже сомнения в том, что получится "что-то типа навигатора". Но "что-то типа карты" - вполне себе реализуемо. Правда, оперативной памяти для этого поболе нужно.
А нормальный трехдюймовый цветной тачскрин 240х320 для Arduin'ы вполне можно поиметь долларов за 30-40.
увожаемый step962 ваши расчеты наверно верны но можно всегда идти многими путями микросхем флеш памяти много и принципы организации( чтения записи различны ) различны как и возможности контроллера по их считыванию имея мегу можно эмулировать шину ISA c дуру на пониженной частоте и хоть с винчестера читать графику можно выдавать из флеш памяти мк в виде приметивов что тож упростит задачу и так до бесконечности изголяться еще раз хочу заметить что я СРАЗУ ПОСОВЕТЫВАЛ ИСКАТЬ БОЛЕЕ ПОДХОДЯЩИЙ МК и способ реализации сей задачи
Задача:
[...] расширить оперативную память Arduinовского микроконтроллера [...]
Одно из возможных решений:
[...] ИСКАТЬ БОЛЕЕ ПОДХОДЯЩИЙ МК [...]
Ненаказуемо.
Кстати, подсоединить к Arduino микросхему SRAM, работающую по шине I2C/ISP - это примерно как цифровой термометр DS1820 использовать. Отличия лишь в деталях обвязки/протокола. Пример камней на 64...512 Kbit: http://www.ipsilog.com/content/index.php?id=5