Перейти к содержанию

Философия аппаратного SPI - чем занять МК?


Рекомендуемые сообщения

Только что, parovoZZ сказал:

SPI - нет, I2C - да

А зачем, извините? Если не секрет, конечно... в каких случаях НУЖНА МЕДЛЕННАЯ скорость обмена?

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

2 минуты назад, ARV сказал:

Микрочип сдлал систему событий - местами она почти как DMA.

тоже, да не тоже( У меня лежит их плата Xplained и отдельно 817 аттинька - никак не могу добраться.

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

Только что, parovoZZ сказал:

тоже, да не тоже

Ну, я даже глубоко документацию не изучал, не то, что на практике пощупать... так что сразу сказал - это не точно :) не соврал, а ошибся

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

3 минуты назад, ARV сказал:

в каких случаях НУЖНА МЕДЛЕННАЯ скорость обмена?

Датчик какой ( у меня был UHT1x) при низком напряжении питания. Тактовая опускалась у меня до 500 кГц, что давало на интерфейсе 62.5 кГц.

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

6 минут назад, ruhi сказал:

буферизация одного байта на отправку там вроде всегда была предусмотрена.

Нет, в 8-битниках никакой буферизации нет. А у STM есть буфер и есть флаг его опустошения. Там прогружается байт в буфер, из буфера он уходит в сдвиговый регистр и начинается отправка. Вот как только байт ушел в регистр, можно прогружать в буфер следующий байт.

 

8 минут назад, ruhi сказал:

вообще то AVR это тоже Атмел.

Имелось в виду AVR - 8-битники, а Atmel 32-битники.

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

3 минуты назад, ARV сказал:

Ну, я даже глубоко документацию не изучал, не то, что на практике пощупать... так что сразу сказал - это не точно :) не соврал, а ошибся

На самом деле эти новые тиньки - форки от Atxmega.

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

9 минут назад, BARS_ сказал:

Нет, в 8-битниках никакой буферизации нет.

Действительно нет!:

The system is single buffered in the transmit direction and double buffered in the receive direction

я бы только не связывал реализованную регистровую модель отдельного периферийного юнита (SPI) с архитектурой 8-ми битного ядра и соответствующей системой команд - AVR.

Юнит можно поменять - система команд не изменится. То есть без SPI они же тоже AVR.

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

Можно сделать все! Но чем больше можно, тем больше нельзя!

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

3 минуты назад, BARS_ сказал:

Нет, в 8-битниках никакой буферизации нет.

Но, право, это было бы ШИКАРНО!

В USI есть буфер - но работает он только в одну сторону.

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

6 минут назад, ruhi сказал:

я бы только не связывал реализованную регистровую модель отдельного периферийного юнита (SPI)

Так я и не связывал. Просто привел данный МК в качестве примера.

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

9 часов назад, DrobyshevAlex сказал:

Как показали выше, ждать нужно до отправки, а потом смысла нет.

Это зависит от многих условий, и что именно делается. Используются ОБА ВАРИАНТА. Часто нужно после отправки байта по SPI убрать разрешающий сигнал или выдать команду "огонь", естественно после полной и безоговорочной отправки последнего байта.

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

Учение - изучение правил. Опыт - изучение исключений.

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

50 минут назад, Alexeyslav сказал:

убрать разрешающий сигнал

какой сигнал? если речь про флаг, что мешает его убрать после отправки в спи?

не буду спорить) но не могу представить зачем это может понадобится. я не говорю что никому не может) в данном сабже речь была о том, что человек не хочет прсото так тратить время на ожидание после отправки байта, ответы касаются его случая) а то можно написать что смени МК на ПК и тд :D

я люблю прерывания, и все что можно сделать с ними делаю с ними) то есть если мне надо по получению по i2c в инкубаторе поставить флаг что пришла температура, то я ставлю этот флаг в прерывании)

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

12 часа назад, BARS_ сказал:

нафига ждать флаг. прерывания же есть. Настроить его на окончание передачи и все.

На большой скорости вызов прерывания довольно затратная процедура. Во первых, прерывание только начнет вызываться когда данные уже отправлены. Пройдёт 4 такта(или до 4-х?) прежде чем контроллер зафиксирует факт прерывания, где-то 12 тактов уйдёт на переход по вектору и вызов обработчика, а потом ещё сохранение контекста, восстановление, возврат из прерывания... и всё это время SPI готов и ждёт новую порцию данных для отправки. В случае простого ожидания мы теряем всего несколько тактов и сразу же пичкаем модуль следующей порцией данных. Короче на прерываниях на высокой скорости SPI это только замедлит передачу.

2 часа назад, DrobyshevAlex сказал:

какой сигнал?

Внешний аппаратный. Может даже питание модуля выключает, если это SPI-радиопередатчик, например.

10 часов назад, ruhi сказал:

дело не в типе процессора, а в тактовой частоте, если появится AVR 300МегаГерцный

Было дело, на ютубе ролик. обычную ардуиновскую мегу328 разгоняли до 70Мгц охлаждая жидким азотом. Охлаждение не столко из-за тепла а из-за свойств самого кристалла, низкие температуры принципиально позволяли контроллеру работать на высокой скорости.

Учение - изучение правил. Опыт - изучение исключений.

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

17 часов назад, ARV сказал:

Вроде как у самых последних реинкарнаций уже нет, но это не точно.

Честно, не скажу. Давненько не интересовался ими, т.к. перешел на stm.

7 часов назад, Alexeyslav сказал:

На большой скорости вызов прерывания довольно затратная процедура.

Большая скорость получится в случае передачи больших объемов данных, а для этого DMA есть, который генерирует прерывание после окончания передачи всего массива. В общем работа с интерфейсами зависит от конкретной прошивки и единого решения не существует.

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

11 час назад, DrobyshevAlex сказал:

я люблю прерывания, и все что можно сделать с ними делаю с ними) то есть если мне надо по получению по i2c в инкубаторе поставить флаг что пришла температура, то я ставлю этот флаг в прерывании)

никогда не понимал этот момент. Ведь аппаратный флаг так и так поднимается. Зачем заводить ещё один и совмещать это с заходом в прерывание? Правда, и сам так делаю))

Изменено пользователем parovoZZ
Ссылка на комментарий
Поделиться на другие сайты

4 минуты назад, parovoZZ сказал:

Зачем заводить ещё один и совмещать это с заходом в прерывание?

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

второй момент, я сделал сенсорный выключатель с нрф приемником. я усыпил мк самым глубоким сном, и ногу нрф24 а так же ноги выключателя завел на intx, теперь если сработал сенсор или пришел байт в нрф24 я бужу мк.

так же может быть какой то обмен с датчиками,  например при падении температуры, влажности, дожде и тд, я могу напрмиер ждать сигнала спящим мк, или просто с геркона открытие двери на батарейке)

вот я столкнулся с модулем rfid читалки, а там есть нога прерываний, но как же я был разочарован что не такая как на нрф например) если нашел карту то сработало. нет, там какие то бесполезные прерывания. То есть что бы заставить его искать карту надо сигнал от мк послать, и вот тут мой мир прерываний и мк рухнул)

15 минут назад, parovoZZ сказал:

по i2c в инкубаторе

я тут ошибся кстати) и2ц у меня без прерывания сделан) это вариант  таймер + дма с прерываниями у меня

 

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

19 часов назад, ARV сказал:

Вроде там Микрочип сдлал систему событий - местами она почти как DMA...

Это сделала ATMEL в серии AtxMegaXXX, задолго до Микрочипа. Они внедрили в 8/16-битники и DMA, и Event System (которая могла обслуживать и события DMA в том числе). Просто эту серию как-то "не заметили", потому как появились STM32. Да и стоимость "камней" была не детская.

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

29 минут назад, parovoZZ сказал:

Я не про сами прерывания, а про дублирование аппаратных флагов своими.

Разве в прерывании аппаратный не сбросится? ну точнее после прерывания? Суть то в том, что бы выполнить код в основном цикле какой то.

Например

int0() { state |= 1 << STATE_NRF24_DATA }
int1() { state |= 1 << (STATE_SENSOR_DATA + ((SENSOR_PIN & SENSOR_1) ? 1 : 0)) }

тогда в основном цикле мы знаем что кнопка 1 нажата или кнопка 2 или пришли данные)

так как у атмеги 8 ток два прерывания и одно занято, то на второе я завел два пина от двух кнопок и с двух других определяю какой именно сработал, а прерывания надо для пробуждения мк. 

Изменено пользователем DrobyshevAlex
Ссылка на комментарий
Поделиться на другие сайты

58 минут назад, parovoZZ сказал:

Ведь аппаратный флаг так и так поднимается

Аппаратный флаг чего?

 

58 минут назад, parovoZZ сказал:

Зачем заводить ещё один и совмещать это с заходом в прерывание?

Наличие прерывания позволяет гарантированно не "прощелкать" событие. Если в SPI без прерываний можно вполне обойтись, то в том же UART уже никак. Ну и SPI может быть слейвом, там тоже без прерываний особо не поработаешь.

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

9 часов назад, Alexeyslav сказал:

где-то 12 тактов уйдёт на переход по вектору и вызов обработчика

выходит выгодней ка кто так, если надо слать данные
  -проверяем свободен ли спи?
  -шлем

тогда выход мы имеем на несколько тактов раньше чем чем при подходе шлем + потом проверяем)
если мы заботимся о тактах, то юзаем макрос или инлайн функцию что бы лишние не тратить)

если же надо сразу по отправке сделать что то типа

13 часа назад, Alexeyslav сказал:

Часто нужно после отправки байта по SPI убрать разрешающий сигнал или выдать команду "огонь", естественно после полной и безоговорочной отправки последнего байта.

то я не юзал бы

13 часа назад, Alexeyslav сказал:

ОБА ВАРИАНТА

а просто добавил после отправки всех байт 1 раз проверку свободен ли спи)

вообщем нужно задачи сомтреть, а изобретать универсальное, это фигня которая потратить лишнее время там где не надо)

 

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

21 минуту назад, DrobyshevAlex сказал:

Разве в прерывании аппаратный не сбросится?

Сбрасывается при входе в обработчик прерывания.

16 минут назад, BARS_ сказал:

Аппаратный флаг чего?

Любого доступного события. Например, мы запускаем аппаратный счетчик и в его обработчике прерывания взводим некий флаг. Это имеет смысл только в одном случае - если МК в каком либо режиме сна и где-то в коде нам необходимо проверить из-за чего мы проснулись. В любом другом случае эффективнее самим опрашивать аппаратный флаг счетчика и самим же его сбрасывать.

20 минут назад, BARS_ сказал:

то в том же UART

Если UART настолько быстр, что мы не успеваем обработать данные, то надо использовать кольцевой буфер и надеяться на паузы в общении, либо же менять МК. Опять-таки не вижу смысла в использовании флагов, дублирующих аппаратные.

 

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

1 час назад, parovoZZ сказал:

Ведь аппаратный флаг так и так поднимается. Зачем заводить ещё один и совмещать это с заходом в прерывание?

1 минуту назад, parovoZZ сказал:
30 минут назад, DrobyshevAlex сказал:

Разве в прерывании аппаратный не сбросится?

Сбрасывается при входе в обработчик прерывания.

Ну то есть Вы сами ответили на свой вопрос? :) Если не заводить свой в прерывании, то как потом в основном цикле узнать что нам надо, например,  полученные данные от датчика распарсить и раскидать в структуру или переменные) а потом отрисовать новые данные на экран.

Не выполнять же кучу кода внутри прерывания.

 

5 минут назад, parovoZZ сказал:

Опять-таки не вижу смысла в использовании флагов, дублирующих аппаратные.

Блин. сложно все) ДУблирующие флаги ставят в случае когда используют прерывания, и нужно знать в основном цикле программы что прерывание отработало.

Если же вы прерывания не юзаете, то о каком дубле в  прерывании идет речь, если нет прерывания? :blink:

 

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

4 минуты назад, DrobyshevAlex сказал:

Если не заводить свой в прерывании, то как потом в основном цикле узнать что нам надо, например,  полученные данные от датчика распарсить и раскидать в структуру или переменные) а потом отрисовать новые данные на экран.

А как узнать, что свой взвелся? Правильно - опросить его. Что мешает точно также опросить аппаратный флаг?

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

7 минут назад, parovoZZ сказал:

Это имеет смысл только в одном случае - если МК в каком либо режиме сна и где-то в коде нам необходимо проверить из-за чего мы проснулись.

Не думаю что прям один.

Возможно вам нужно отреагировать быстро. Допустим вы рисуете в цикле что то на экран, а по внешнему прерыванию вам  нужно изменить состояние вывода для перключания каокго то внешнего устройства. Зачем вам ждать кучу времени на опрос датчиков каких то долгих типа DHT22 и вывод инфы на экран. Если можно сразу в прерывании сменить статус пина соседнего.

 

1 минуту назад, parovoZZ сказал:

А как узнать, что свой взвелся? Правильно - опросить его. Что мешает точно также опросить аппаратный флаг?

если прерывание чисто устанавливает 1 флаг и мк не спит и не используется для пробуждения то согласен что смысла может и нет. но я то пишу то об вообще разных ситуациях)

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

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...