DVyacheslavN

Работа С Картой Памяти В Режиме Spi (Использование Petit Fatfs)

60 сообщений в этой теме

я знаю что есть уже скачал . тупо копировать все могут . а обяснить нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
Alex    484

Что объяснить, а главное - зачем ?

Человек любезно предоставил отличную библиотеку - бери и пользуйся. Зачем изобретать велосипед ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ну так вот скачал ты библиотеку от чана (не пример а именно библиотеку) и тебе надо дописывать diskio.c ты береш и копируешь уже готовый вставляешь тутда свои регистры. и погнали. ну тогда можно еще проще береш готовую программу заливаеь и погнали. а можно еще еще проще идешь в магазин и покупаешь что надо или заказываешь в инете.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
fuckir    2

Не все так просто. Под 24HJ ее допиливал сам, но она ничем не лучше библиотеки Джасио, но читабельнее микрочиповской. Раз не нужно, кувыркайтесь сами

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ну у чана же есть пример под 24f а раличее от 24h только в производительности (16 против 40 MIPS).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот нашол ссылку на интересный источник http://fotogrf.ucoz.ru/publ/programma_dlja_pic_mikrokontrollera_i_karty_pamjati_mmc_s_fat16/1-1-0-45 конечно fatfs тут и не пахнет но даны понятия как работать с файлами без библиотеки . все достаточно хорошо расписано .

только вот у меня асемблеровская вставка не запускается.

AL = rl(AL); // Умножение на 2 с переносом
AH = rl(AH);
#asm // 17 шаг
MOVF Dat+1,W
ADDWF AL+1,1
MOVF Dat,W
ADDWF AL,1
BTFSS 0x03,Carry
GOTO keinCarry
BCF 0x03,Carry
INCF AL+1,1
BTFSC 0x03,Carry
INCF AH,1
keinCarry:
#endasm

и первые две строчки не компилируются не муогу разобратся как сделать умножение с переносом

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    484

Что за умножение с переносом ? Что-то новенькое... :huh:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    484

Наверно ? :blink:

Мне кажется, это Вы задали вопрос. Или сами не понимаете о чём спросили ?

Как же тогда мы должны на него ответить ? :crazy:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

да вопрос я задал но это не мой код и в этой части кода я не смог разобраться . и поэтому и спрашиваю .

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    484

Вы спросили - "Как сделать умножение с переносом". Отсюда и возник вопрос - что это такое и зачем Вам это нужно. Если Вы пытаетесь разобраться с умножением, и у Вас это не получается сделать, однозначно - Вам это для чего то нужно.

Или Вы просто вставляете чужие куски кода себе в программу, не понимая для чего эти куски нужны ? :) Тогда логика Ваших мыслей совершенно непонятна...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ведь сдивиг влево или вправо есть умножение и деление на 2. только вот я и сам не понял что за перенос такой , может ктонить знает что за команад rl();

ну на счет чужих кусков вы погарячились . разве не вы мне писали что нет надобности разбираться в библиотеки FATFS а просто пользоватся хотя сам автор библиотеки задумал что всеже приходится понимать что и как работает а не просто копировать файл diskio.c и менять там регистры.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    484
может ктонить знает что за команад rl();
Такой команды в языке Си нет. Это какая то таинственная функция.
разве не вы мне писали что нет надобности разбираться в библиотеки FATFS а просто пользоватся
Я. Но я имел в виду использовать всю библиотеку, а не выдирать чужие непонятные куски кода.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ну автор статьи утаил от читателей эту функцию . только вот оставил подсказку "// Умножение на 2 с переносом" в которой я не смог разглядеть смысл из за малого опыта в программировании.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    484
AL = rl(AL); // Умножение на 2 с переносом
AH = rl(AH);

Возможно, тут имелось в виду сдвиг влево через перенос. Тогда почему бы не заменить эти строки АСМ-вставкой ?
#asm
RLF   AL, 1
RLF   AH, 1
#endasm

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
может ктонить знает что за команад rl();
Такой команды в языке Си нет. Это какая то таинственная функция.
разве не вы мне писали что нет надобности разбираться в библиотеки FATFS а просто пользоватся
Я. Но я имел в виду использовать всю библиотеку, а не выдирать чужие непонятные куски кода.

куски из файла примера diskio.c а я по вашему с чем пытался разобраться с файлом diskio.c который необходимо самопу дописывать. я выложил свой кусок и оттуда и хотел услышыть ответы на пару вопросов а вы написали что незачем туда лезть.

AL = rl(AL); // Умножение на 2 с переносом
AH = rl(AH);

Возможно, тут имелось в виду сдвиг влево через перенос. Тогда почему бы не заменить эти строки АСМ-вставкой ?
#asm
RLF AL, 1
RLF AH, 1
#endasm

спасибо попробую

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    484
Тогда почему бы не заменить эти строки АСМ-вставкой ?
#asm
RLF AL, 1
RLF AH, 1
#endasm

Ну или чистый Си :

*((unsigned int *)&AL) *=2;

пытался разобраться с файлом diskio.c
На сколько я помню, когда прикручивал библиотеку Чена, я правил только драйвер работы с SPI. Т.е. инициализация модуля, отправка и приём байта. А вся работа с картой была уже там готовая.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а вот нашол чтото это не тоже самое ??? Побитовый левый сдвиг[note 2] a << b Да Да R T::operator <<(S B); R operator <<(T a, S B);

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    484
a << b Да Да R T::operator <<(S B); R operator <<(T a, S B);

Это что такое ? :D

Если Вы имеете в виду оператор сдвига "<<", то это тоже самое, только не учитывается бит переноса. Умножить побайтово двухбайтовую переменную так не получится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Oxford    7

Пиши в личку ко мне по работе Micro SD в режиме SPI и работе с FAT. растолкую че надо.

Изменено пользователем Oxford

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
mummy117    15

Доброго времени суток. Как Ваши дела с освоением FatFs?

На чем закончилась Ваши изыскания? Сам уже 2 недели бъюсь над этой задачей.

"может ктонить знает что за команад rl();" это компилятор CC5x.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

да fatFs не освоил. пока мучаю дисплеи ЖКИ.

думаю после дисплеев заняться .

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
mummy117    15

Я тоже мучаю Fatfs. Так что тема актуальна.

А что у Вас с дислплеями ЖКИ?

Изменено пользователем mummy117

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Похожие публикации

    • Автор: carlogulliani
      Добрый день!
      Столкнулся с такой проблемой, пытаюсь взаимодействовать с чипом AFE4300 по SPI. В дотащите указано, что уровень сигнала 2 - 3 вольта. Подключаю к nrf51 (использует уровень 3.3 вольта), ресетю и пытаюсь прочитать дефолтное значение регистра (0x01C3), в итоге получаю 0xFFFF.
      Перепроверил на Arduino Mega 2560, где уровень сигнала 5 вольт (подключил напрямую без level shifter) и считал свои дефолтные значения. Попробовал также считать другие 4 регистра, все также отлично считалось.
      Вот теперь не пойму, в дотащите указано не верно или у меня что-то не то.
      Еще вопрос про согласовать уровней TXB0108. Пытался через нее прокинуть сигнал от nrf51 (3.3v) на afe4300. Питание А - 3.3в, каналы А к nrf51, питание Б 5в, каналы Б к afe4300, OE к 3.3в. Не завелось, даже анализатор говорит, что MOSI шлет 0xFF, вместо реальных данных. Земля везде общая.
      Правда есть оговорка, как данный уровень ко мне приехал я мог по ошибке запитать Б 3 вольтами, а А 5 вольтами. Но даташит на него говорит, что когда А > Б, это не повреждает чип, хотя А должно быть до 3.6 вольт. Еще мог OE подключить к 5 вольтам. В общем, могли ли мои неразумные операции вывести его из строя???
       
      Еще в даташите указано, что неиспользуемые каналы надо подключить либо к питанию, либо к земле. Это может влиять на то, что я сейчас получаю?
    • Автор: karomag
      Добрый день.
      Экспериментирую с подключение 7-сегментного индикатора к мк stm32. Индикатор с общим катодом. Соответственно для вывода цифры необходимо на анод каждого сегмента подать 1, а на общий катод 0. И тут я не могу понять какие токи будут через порты. Теоретически, пины МК подключенные через резистор 300 Ом к аноду (напряжение МК 3.3 В) то ток будет 4 мА, тогда на общем катоде должно быть 7 * 4 = 28 мА (цифра 8, т.е. горят все сегменты). Т.е. это небольшое, но превышение макс тока на ногу 20 мА. И надо общий вывод подключать через транзисторный ключ.
      Взял мультиметр. Результаты замера: ток каждого сегмента ~2.5 мА, ток общего катода 5 мА. Вот тут я подумал о школе Хогвардс))) Как все таки рассчитывается все таки ток на общем выводе? 
    • Автор: art_budka
      Ищу подрядчика для разработки проекта робота-рисовальщика. Есть бюджет, ТЗ. 
      Устройство представляет собой манипулятор передвигающий головку в плоскости XY в пределах жесткой рамы на которой установлены двигатели и направляющие перемещения. Головка представляет собой блок, отвечающий за передвижение закрепленного в фиксаторе объекта-пера по оси Z на расстояние до 20 мм. Фиксатор на элементе подъёма головки должен обеспечить жесткое закрепление предметов массой 10 - 80 грамм - кистей, шариковых ручек, карандашей и маркеров диаметром от 5 до 20 мм.
      Решение необходимо для обеспечения точных, многократно повторяющихся перемещений “пера” над плоской поверхностью. Для формирования движений в устройстве должна быть реализована электромеханическая схема, подключенная посредством USB-интерфейса к персональному компьютеру для отправки команд на манипулятор и получения обратной связи от контроллера манипулятора. 
      ТЗ, смета и бюджет через art_budka@rambler.ru 
    • Автор: green_whale
      Доброго времени суток.
      Собственно, сразу к делу. Необходимо измерить вч напряжение (частота порядка 20кГц, максимальная амплитуда 75мВ) с помощью микроконтроллера (скорее всего будет использоваться Arduino).
      Форма входного сигнала - пила (возрастает от минимального значения до максимального). Сигнал однополярный.
      Измерить нужно именно максимальное значение входящего сигнала. Измерение должно быть весьма точным (желательно, чтобы погрешность не превышала 1-2%).
      Есть пару идей :
      1. Сгладить сигнал, используя пиковый детектор (сможет ли сигнал такой частоты и формы зарядить конденсатор?).
      2. Использовать цап для генерации постепенно снижающегося напряжения и аналоговый компаратор.

      Надеюсь, кто-нибудь уже решал подобную проблему и сможет помочь советом или схемой.
    • Гость мистер_чувак
      Автор: Гость мистер_чувак
      Здравствуйте. Нашёл свои старые китайские портативные колонки, которые давно уже разобрал и потерял некоторые провода. Помогите разобраться, что к чему соединять, чтобы работало.
      фотка1
      фотка2
      фотка3
      фотка4
      фотка5
      фотка6
      фотка7
  • Сообщения

    • Старые 6п3с с фигурным баллоном , осталось : Лампы №1 и №2 по 500р. Лампы № 3, 17, 19  по 800р. ................................................................... Добавлю  , лампы 6ф3п IV-1964г. 8 шт. из ЗИПа  по 120р.  
    • С наводками я разобрался. Но звук двухтактного двигателя все равно возникает,  если работает вся лампа предусилителя. До какого то момента звук прибавляется нормально,  гитара  играет  , если вращать дальше начинается  тарахтение, звук практически пропадает и надо обратно крутить регулятор. Если крутить дальше частота тарахтения чуть  возрастает. Даже если предусилитель на минимуме,   при вращении основного регулятора  громкости начинает тарахтеть. Если работает один триод такого нет при любой громкости. Играя на гитаре заметил, что низкие вообще не регулируются, средние слабо на частоте примерно 700-1000, высокие и брайт хорошо работают. Проверил еще раз по схеме ошибок вроде нет. Конденсаторы пересчитывать ?
    • От любой экономки 15-20 Ватт... - подойдётт"в лоб" и не надо ничего ремонтировать...  В крайнем случае  - в кругляше - балласте от экономки поменять конденсатор между нитями накала. На ... побольше ёмкости. 
    • ...от сука не пошла/о, пульсирует все, трансформатор выходной жужит  как старая шарманка завывая и похрюкивая пулсьсируя, ну очень ему не нравится что то. Выходные лампы бегают до 10-12мА мотая стрелку миллиамперметров, так же ФИ стрелки дёргаются в такт. ООС убрал, был перекос что одна выходная 20-25мА мотала стрелку, вторая пару мА было всего  и так же на ФИ с одним анодом чуть ли не мертвый был. При отключении  ООС как бы почти одинаково работатют плечи ФИ и выходных, но  дёрнается все жуть с частотой раза 2 в секунду стрелки пляшут.  Может ошибочно запаялся где, завра уже буду искать ошибки. НО правильно ли я припаял выходник? На А1 и А2 подал аноды ламп выходных, на В+ подал питание, эти контакты закорочены между собой на трансе. Оут-  припаял на массу. Пока Оут+ висит в воздухе, ООС убрал с нее. ОутГ не подключал и не знаю что это. А1-А2 = 233 Ом, между А1 (А2) и В+ половина,  т.е 116 и 117 Ом. Оут+ и Оут-  0.5 Ом. А между ОутГ и каждой Оут+ и Оут- по 0.6 Ом. Динамик не подключал.  Общее потребление канала пулсьсирует так же,  почти от 0 до 25мА приблизительно.     
    • не получается подправить код ( найти эти инклуды   #include <mega8.h>
      #include <delay.h>
               #include <>
      unsigned char blink = 0; void main(void)
      {
      PORTB=0x02;
      DDRB=0x01;
      while (1)
      if (PINB.1==1)
      { blink=1; }
      if (PINB.3==1)
      { blink=0; }
      if (blink) {PORTB.0=1;  }
      else { PORTB.0=0;  }
      }      
    • Вот расшифровка. Защита не включена.