Самописец для ракеты

А что мы делаем?
Аватара пользователя
Nikomo
Сообщения: 261

Сообщение Nikomo » 08 май 2016, 00:57

В связи с увлечением запусками ракет, решил запилить для ракеты небольшую систему управления полётом и записи данных о траектории. Контроль осуществляется в виде поджёга топлива на старте и выпуска парашюта, когда ракета пойдёт на снижение.Так же есть система световой и звуковой подачи сигнала в случае чего или просто во время полёта, чтобы было легче найти ракету. Данные о полёт берутся с двух датчиков: BMP180 и MPU6050. После считывания МК записывает их на микроСД карту по SPI интерфейсу каждые там 10-100 милисекунд.
Начал я это всё дело воплощать, запилил схему, запаял плату, написал тестовую прошу (просто берётся значение с одного датчика и пишется на карту), но в лучших традициях ничего не заработало. Упростил прошивку - просто записать на карту в текстовый файл константу, указанную в коде. Опять нифига. Думаю - эх, не работает мой код, плохой программист я. Взял готовый проект, тупо залил хекс файл из него, врубил - нифига (предварительно создал нужный файл, в нужной директории на карте и немного "заполнил" файл пробелами). Проверял 1000 раз пайку, все контакты, отмывал литрами спирта, форматировал микросд карту в фат со стандартым размером клатера, в фат32, пробовал 3 разные карты, пересоздавал файлы - нифига. Вся схема питается от 3.3В стабилизатора (KB33), имеет 3.25В на выходе, никаких просадок напряжения не замечено.Кодил это всё на основе библиотеки Petit FAT, микроконтроллер - Atmega328P, карты - микросд, пробовал 3 штуки (втавляются в разьём), все по 2Гб, ни одна так и не записала данные.
Подключал карту к МК по схеме(только выводы подсоединял соответсвующие микроСД карте):
01.png
01.png (4.61 КБ) 13577 просмотров

Потом повесил резисторы на шину по 50кОм к + питания, думал поможет
1.png
1.png (5.73 КБ) 13577 просмотров

В итоге ничего не вышло.У меня пару версий - эти карты не поддерживают СПИ интерфейс, либо я не правильно подключаю карту к МК, может, 50К резисторы большие, но в статьях сказано 10-100кОм. Ну, ещё может быть контакты разъёма для карточки в остатках флюса либо окислены, но я их промывал под струёй мед. спирта и засовавал в слот для карты бумажку и елозил там внутри, разве что ещё наждачку попробовать :? Внутрь заглядвал - все контакты целые....
Кто что может подсказать?

Аватара пользователя
Nikomo
Сообщения: 261

Сообщение Nikomo » 08 май 2016, 12:47

Мда, после небольшого допиливания библиотеки SPI интерфейса всё заработало, но тему пока закрывать не буду, вдруг ещё вопросы возникнут....

Аватара пользователя
Nikomo
Сообщения: 261

Сообщение Nikomo » 09 май 2016, 02:01

Удалось получить данные с одного датчика, но проблема в том, что запись должна вестись циклично во время полёта ракеты, а библиотека работы с картой позволяет производить запись только в начале сектора, и не важно сколько байт ты записал, все 512 считаются занятыми, что и сказивается на файле с данными: после записи значения датчика нужно сместить указатель записи на те же 512 байт, иначе новое значение просто перезапишется поверх старого, в результате мы видим в .тхт файле одно значение, 500 с чем-то пробелов и следующее значение, кароче говороя - безобразие. Я пробовал записывать значения одно под одним, начиная с новой строчки, но у меня ничего не вышло. Я читал что надо отправить в конце передачи данных значения 0xD 0xA, что в таблицах ASCII значит перенос на начало новой строки, тогда последующая запись данных будет, собственно, с новой строчки. Но моя попытка не увенчалась успехом. Насколько я понял надо передать значения типа int, тогда тхт файл поймёт что ему делать, но тип передаваемых данных библиотекой - BYTE, другие типы, насколько я понял, она передавать не хочет и моя попытка отправить int переменые первращает значения в какую-то тарабарщину.
Можете подсказать как, собственно, реализовать запись в столбец?

Аватара пользователя
BSVi
Адепт
Сообщения: 3576
Откуда: Киев

Сообщение BSVi » 09 май 2016, 03:10

Дак нужно писать сразу по 512 байт. Если нужно поменять в них что-то, то нужно прочесть 512 байт, отредактировать в памяти и записать обратно.

Аватара пользователя
iEugene0x7CA
Адепт
Сообщения: 1570
Откуда: Киев

Сообщение iEugene0x7CA » 16 май 2016, 18:38

Nikomo писал(а):решил запилить для ракеты небольшую систему управления полётом и записи данных о траектории.

Какие люди, и какие звездолёты собирают. С минувших дней лишь помню, как пытались с тобой триггер 74HC109 купить. :)

Касательно проектика — низкоуровнево с SD картой беспонтово работать, только в связке с FAT и через готовые либы.
Если в подобном нет необходимости и/или желания разбираться — можно заюзать в сотни раз более простой, быстрый и надёжный вид памяти: SPI Flash.
Вот типичный представитель, 16 МБ, брал здесь в Имраде: https://www.winbond.com/resource-files/ ... 242015.pdf
Недавно с такой штуки ниггерские песни играл. :)
https://www.youtube.com/watch?v=pwo9-BxnC_Y

Но, если SD флеха уже читается — BSVI правильно говорит.
Инфа на SD-картах хранится в виде 512-байтных секторов, читается и пишется тоже 512-ю байтами, такая особенность.

mutabor
Сообщения: 91

Сообщение mutabor » 17 май 2016, 21:56

Неужели библиотеку сам писал? :o И не знаешь что есть страничная запись? :shock: тогда вдвойне круто!
Но всё же надо почитать про флешь память и почему в ней принято писать страницами. Здесь та же ситуация, по сути СД карта это массив флешь памяти с контроллером SDIO.
Когда то делал работу с флешкой на STM32, использовал FatFs от Чана, очень понравился его код, и файловая система работала как часы, но там без буферов не обойтись, т.е на AVR может и получится, но надо будет ужиматься изо всех сил.

ЗЫ. А перенос строк ничего не даст, нужно организовывать у себя (в AVR) буфер на 512 байт и заполнять его, по заполнению -писать его на карту -т.е страницами, как и положено.

Аватара пользователя
iEugene0x7CA
Адепт
Сообщения: 1570
Откуда: Киев

Сообщение iEugene0x7CA » 19 май 2016, 13:22

mutabor писал(а):Когда то делал работу с флешкой на STM32, использовал FatFs от Чана, очень понравился его код, и файловая система работала как часы, но там без буферов не обойтись, т.е на AVR может и получится, но надо будет ужиматься изо всех сил.

Для AVR есть кастрированная версия — Petit FatFs. ;)
Рабочий пример можно тут взять: http://avr-start.ru/?p=1874

Аватара пользователя
Nikomo
Сообщения: 261

Сообщение Nikomo » 19 май 2016, 13:25

Библиотеку конечно же не сам - PetitFat юзаю. Для датчиков тоже библиотеки есть, хотя для 6050-го датчика надо нехило так с ней поработать, но не суть.
Спасибо, народ, делаю как вы говорите - заполняю 512 байт буфер, пишу на карту, потом перезаписываю буфер и опять пишу. Всё работает, и всё бы нечего, но запись 4 блоков (2кб) занимает долгие 10 секунд, при рабочей частоте мк в 8МГц, при том, я засекал по току, что очень долго идёт заполнение буфера (я запитывал устройство через милиамперметр и когда происходит обращение к карте, присходит скачёк тока, что сигнализирует о записи одного блока данных, собственно за один цикл работы - 4 таких броска), т.е. пару секунд ток себе стабилен (буфер заполняется), потом пишет за долю сенкунды и снова ждёт.
Я думаю - может это данные с датчика долго обрабатываются библиотекой или может быть такое, что оператива МК забивается значениями буфера (хотя у него по даташиту 2кб оперативы и буфер - всего 1/4 её обьёма) и МК начинает тупить.

mutabor
Сообщения: 91

Сообщение mutabor » 20 май 2016, 16:12

Nikomo. Скорей всего дело не в процессоре и не в том, что он начинает тупить (если в нем не стоит операционка конечно :lol: ). Просто данные с датчика идут с небольшой частотой, вот и долго буфер копится. Как сделан опрос датчика?
Запись в файл легко проверить -просто сделай переменную-счетчик (16битную к примеру) и инкрементируй ее в цикле, значения пиши в буфер. В файле должен увидеть эти значения от 0 до 2047 (смотреть можно Winhex'ом к примеру). Скорость записи в этом случае будет примерно = максимальной :)

Евгений, спасибо, не знал. Наверно потому что особо ими не интересовался. Сейчас вообще отошел от 8битников -надоело уже код оптимизировать на уровне ассемблера :x хотя в плане простоты с ними работать одно удовольствие

Вернуться в «Наши проекты»



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 22 гостя