Последние комментарии
-
09.03.2023 10:51
Спасибо!Драйвер установил,и все заработало.
-
25.01.2023 16:05
Спасибо. Хорошая статья. Хотелось бы увидеть как ...
-
21.01.2023 22:58
Доброго дня! Як можна замовити? І чи є схема або ...
-
05.05.2022 19:14
Спасибо автору, понял почему блинк не работал
-
21.04.2022 13:18
В моём случае он используется совместно с AGP ...
Самое читаемое
- Многофункциональный программатор на CH341A
- Переходник USB to TTL (RS232) YP-01 на чипе PL2303HX
- Знакомство с Arduino Pro mini на примере китайского аналога
- Подключаем мощную нагрузку к Arduino, через реле модуль
- Твердотельное реле из симистора для коммутации мощной нагрузки через Ардуино
- Знакомство с Arduino Micro (ATmega32U4) на примере китайского аналога Pro Micro
- Знакомство с Arduino Nano на примере китайского аналога
- Знакомство с Arduino UNO на примере китайского аналога
- Обход блокировки Одноклассников, Вконтакте, Яндекс и Маил.ру с помощью OpenVPN
- Управляем Arduino через Bluetooth HC-06, с компьютера или смартфона
Подключаем SD карту памяти к Arduino
При постройке на базе Arduino разнообразных проектов, часто возникает необходимость записывать какие то данные в память. Например имеется «умный дом» и нужно записывать показания различных датчиков или имеется летательный аппарат, который должен записывать координаты GPS в память. Использовать для этих целей внутреннюю память Arduino не получится, её очень мало, но можно подключить внешнюю память, в качестве которой может выступать SD карта.
Модуль для SD карты может быть в формате SD...
... либо micro SD.
Ничего сложно в модуле нет, несколько резисторов и стабилизатор напряжения AMS1117-3.3. SD карта питается от 3,3В, поэтому стабилизатор AMS1117-3.3 служит для понижения напряжения питания с 4,5 — 5В до 3,3,В.
Питание SD-модуля.
На некоторых SD модулях присутствуют контакты с двумя напряжениями (+5, +3,3). В таком случае, к контакту «+3,3» можно подключать стабилизированное напряжение 3,3В, которое будет напрямую поступать на карту памяти. Если нет такого напряжения, тогда к контакту «+5» можно подавать напряжение от 4,5 до 5В, которое будет через стабилизатор преобразовываться в 3,3В и поступать на карту. Не рекомендуется к контакту «+3,3» подавать большее напряжение, это может привести к выходу со строя SD карточки.
На тех модулях где присутствует только контакт «VCC», к нему нужно подключать напряжение только от 4,5 до 5В.
Если использовать для питания SD модуля соответствующие контакты на плате Arduino UNO или Mega 2560 нужно понимать, что с контакта «+5» можно получить ток до 800 мА, а с контакта «+3,3» всего до 50 мА. Сама же карта при записи данных может потреблять до 100 мА, поэтому если брать с ардуино питание 3,3 вольта, эти контакты могут не обеспечить нужный ток. В таком случае нужно использовать отдельный источник.
На плате Arduino DUE имеются так же контакты "3.3V" и "5V", от которых можно питать различные модули и датчики. Максимально выходной ток на этих выводах 800 мА.
Логические уровни.
Помимо питания в 3,3 вольта, картам памяти требуется и такое же напряжение на логических уровнях. Поскольку мы будем подключать карту к Ардуино, напрямую их логические уровни соединять нельзя. Почему? В Arduino используется микроконтроллер Atmega, который питается от 5 вольт, соответственно его логические уровни тоже 5 вольт (от какого напряжения питается контроллер, такое напряжение присутствует у него на логических уровнях). Это значит что логическая единица равна 5 вольт. Логические же уровни SD карты 3, 3 вольта, поскольку питание у карты такое же. Для подключение Arduino и SD модуля нужно согласовать их уровни. Для согласования уровней могут использоваться резисторы или специальные микросхемы, иногда могут использоваться транзисторы.
В моём случае, модуль под карту microSD содержит преобразователь уровней на микросхеме LVC125A.
Внимание! Платформа Arduino DUE работает с логическими уровнями 3,3В и для работы с SD картой не требуется согласование уровней. Подключать SD карту к данной платформе нужно напрямую к SPI интерфейсу, минуя резисторы, транзисторы и микросхемы, которые принимают участие в согласовании уровней.
Подключение к Arduino.
Подключать SD модуль к Arduino будем по SPI интерфейсу. Для этого нам понадобятся выводы SCK, MISO, MOSI и CS.
В начале подключу модуль в формате SD к своему китайскому алалогу Arduino UNO.
Каждый вывод на модуле представлен двумя параллельными пинами, можно подключать к любому.
Для SPI-интерфейса у ардуино имеются специально отведённые пины, у UNO, Pro mini и Nano они одинаковые, у MEGA другие:
Пины на UNO, Nano, Pro mini |
Пины на MEGA | SPI выводы |
10 | 53 | CS |
11 | 51 | MOSI |
12 | 50 | MISO |
13 | 52 | SCK |
Вывод CS можно закрепить за любым свободным пином, но тогда это изменение нужно внести в скетч. Традиционно используют пины, указанные в таблице.
На платах UNO, Nano и MEGA пины SPI-интерфейса продублированы в виде отдельного 6-контактного разъёма ISCP, можно подключаться и к нему.На плате Arduino DUE это единственные контакты SPI, к ним и нужно подключать модуль.
Подключим SD-модуль к Arduino UNO по следующей схеме. SD карту нужно отформатировать на компьютере в формате FAT16 или FAT32.
Пример 1
Библиотека "SD" и образцы скетчей, для работы с картой памяти, включены в состав Arduino IDE.
Откроем скетч "CardInfo": "Файл" - "Образцы" - "SD" - "CardInfo".
Данный скетч попробует опознать карту и если она исправна, правильно подключена и правильно отформатирована,то выдаст по ней информацию. По-умолчанию контакты SPI интерфейса сконфигурированы для Arduino UNO, для MEGA нужно будет менять номера пинов SCK, MISO и MOSI.
Обратим внимание на строку "const int chipSelect = 4;", по-умолчанию пин CS в скетче закреплён за 4 пином на плате ардуино. Поскольку вывод CS я подключил к 10 пину, четвёрку сменю на 10.
Загружаем скетч, открываем монитор последовательного порта.
В моём случае наблюдаем надпись "...initialization failed", это значит что возникла ошибка при инициализации карты. В подобном случае нужно проверить правильна ли вставлена карта, правильна ли SD модуль подключен к Arduino, соответствует ли номер CS пина в скетче, с номером пина на плате. В моём случае я забыл сменить в скетче номер пина CS на 10, меняем и пробуем вновь залить скетч.
Теперь всё в порядке, инициализация карты прошла успешна и нам выдалась информация по ней: Тип карты - SD, Файловая система на ней - FAT32, Объём - 967 Мбайт.
Пример 2
Давайте теперь попробуем создать на SD карте текстовый файл, записать в него какую то информацию, а затем прочитать эту информацию на компьютере. Откроем скетч "ReadWrite", из того же стандартного набора скетчей, откуда загружали скетч "CardInfo".
В строке "if (!SD.begin(10)) {" нужно что бы был правильно указан номер пина, на котором у вас подключен вывод CS. Загружаем скетч и проверяем его работу, открыв монитор последовательного порта. Здесь мы видим что карта удачно инициализировалась, записался на карту файл "test.txt", в который записались данные "testing 1, 2, 3". Каждый раз как мы будем вызывать монитор последовательного порта, в файл "test.txt" будут дописываться новые строки.
Что бы в этом убедится, откроем карту памяти на компьютере. На ней будет созданный файл с соответствующим содержанием.
Пример 3
С помощью скетча "ReadWrite" можно не только записывать данные в файл, но и считывать данные из файла.
Создадим через компьютер на карте памяти текстовый файл. В примере назвал его "radiolis.txt". Библиотека для работы с SD картами не чувствительна к регистру, поэтому имя файла "radiolis.txt" и "RADIOLIS.PP.UA" это одно и то же. В созданный файл поместим какую то текстовую информацию, в данном примере я вписал имя своего сайта.
В скетче нужно указать, какой файл следует открыть для чтения с него информации. По-умолчанию в скетче открывался файл "test.txt", вместо него вписываем имя файла (radiolis.txt), который нужно открыть. Вновь загружаем скетч.
Открываем монитор последовательного порта и видим что содержимое файла "radiolis.txt" содержит текстовую информацию "radiolis.pp.ua".
Пример 4
Давайте теперь поработаем с файлами на карте памяти через Arduino. Для этого загрузим скетч "listfiles", с того же стандартного набора, входящего в библиотеку для работы с SD картами.
Запускаем монитор последовательного порта и видим список всех файлов, которые находятся на SD карте, в данном примере это "test.txt" и "radiolis.txt". Цифры напротив файла это их объём.
Если на карте памяти имеются папки, то они так же будут отображаться со своим содержимым. В примере добавил с компьютера папку "primer", а в неё поместил текстовый файл "primer_1.txt", как видим всё отобразилось.
Комментарии
Проверил.
Все указанные в статье примеры, работают исправно без изменений.
Хм,проверю, отпишусь.
44myFile = SD.open("test.t xt", FILE_WRITE) ,а надо написать
44myFile.close( );
45myFile = SD.open("test.t xt", FILE_WRITE)
вот тогда будет работать на все сто .долго я голову ломала пока не догадалась и сразу все заработало
RSS лента комментариев этой записи