Jump to content
parovoZZ

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

Recommended Posts

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

SPI - нет, I2C - да

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

Share this post


Link to post
Share on other sites
2 минуты назад, ARV сказал:

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

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

Share this post


Link to post
Share on other sites
Только что, parovoZZ сказал:

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

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

Share this post


Link to post
Share on other sites

Литиевые батарейки Fanso для систем телеметрии и дистанционного контроля

Системы телеметрии находят все более широкое применение во многих отраслях на промышленных и коммунальных объектах. Требования, предъявляемые к условиям эксплуатации приборов телеметрии и, как следствие, источников питания для них, могут быть довольно жесткими. Fanso предоставляет широкую линейку продукции, рассчитанной на различные условия эксплуатации, что позволяет подобрать батарейку для каждого конкретного применения, в том числе и для устройств телеметрии.

Подробнее

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

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

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

Share this post


Link to post
Share on other sites
6 минут назад, ruhi сказал:

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

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

 

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

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

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

Share this post


Link to post
Share on other sites
                     

Приглашаем на вебинар Решения для построения ультразвуковых счетчиков жидкостей и газов на базе MSP430

Компэл совместно с Texas Instruments 23 октября 2019 приглашают на вебинар, посвященный системам-на-кристалле для построения ультразвуковых расходомеров жидкостей и газов на базе ядра MSP430. Вебинар проводит Йоханн Ципперер – эксперт по ультразвуковым технологиям, непосредственно участвовавший в создании данного решения. На вебинаре компания Texas Instruments представит однокристальное решение, позволяющее создавать точные недорогие счетчики жидкостей и газов.

Подробнее...

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

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

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

Share this post


Link to post
Share on other sites
8 минут назад, parovoZZ сказал:

Но там тупо частоту МК понижал.

Зачем? О_о

Share this post


Link to post
Share on other sites
9 минут назад, BARS_ сказал:

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

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

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

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

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

Edited by ruhi

Share this post


Link to post
Share on other sites
3 минуты назад, BARS_ сказал:

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

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

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

Share this post


Link to post
Share on other sites
6 минут назад, ruhi сказал:

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

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

Share this post


Link to post
Share on other sites
9 часов назад, DrobyshevAlex сказал:

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

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

Edited by Alexeyslav

Share this post


Link to post
Share on other sites
50 минут назад, Alexeyslav сказал:

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

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

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

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

Share this post


Link to post
Share on other sites
12 часа назад, BARS_ сказал:

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

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites
17 часов назад, ARV сказал:

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

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

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

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

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

Share this post


Link to post
Share on other sites
11 час назад, DrobyshevAlex сказал:

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

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

Edited by parovoZZ

Share this post


Link to post
Share on other sites
4 минуты назад, parovoZZ сказал:

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

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

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

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

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

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

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

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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
19 часов назад, ARV сказал:

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

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

Share this post


Link to post
Share on other sites
29 минут назад, parovoZZ сказал:

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

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

Например

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

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

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

Edited by DrobyshevAlex

Share this post


Link to post
Share on other sites
58 минут назад, parovoZZ сказал:

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

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

 

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

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

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

Share this post


Link to post
Share on other sites
9 часов назад, Alexeyslav сказал:

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

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

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

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

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

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

то я не юзал бы

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

ОБА ВАРИАНТА

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

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

 

Share this post


Link to post
Share on other sites
21 минуту назад, DrobyshevAlex сказал:

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

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

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

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

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

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

то в том же UART

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

 

Share this post


Link to post
Share on other sites
1 час назад, parovoZZ сказал:

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

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

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

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

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

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

 

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

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

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

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

 

Share this post


Link to post
Share on other sites
4 минуты назад, DrobyshevAlex сказал:

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

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

Share this post


Link to post
Share on other sites
7 минут назад, parovoZZ сказал:

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

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

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

 

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By parovoZZ
      AREF  - внутренний ИОН 1.1в
      Вот такой код снятия результатов:
      temp = ADC; if (ADCH & (1<<ADCH1)) // Если значение отрицательное { temp |= 0xFC00; temp = (~temp) + 1; } Value_current_lsb = (uint8_t)(temp >> 2); Никак не пойму - на выбранные дифф. входы надо подать 85 мВ, чтобы АЦП выдал 0. Но это могу списать на внутренний ОУ в виде УГ. Если подаю  -1,1 в - то получаю 127.  Здесь все верно. Но при подаче положительного смещения те же 127 получаю уже при 0,72в. Что за ерунда? Неужели ОУ на столько УГ? Либо же где-то теряется разряд?
    • By parovoZZ
      Ну, собственно, сабж. Питание - от 2.4 и до 3.6. На сигнальном выводе необходима половина напряжения питания (по постоянке, разумеется).
    • By parovoZZ
      Не секрет, что адресация глобальных переменных прямая, а переменных в стеке - косвенная. Стек в AVR программный, то бишь откусывается от ОЗУ. Так вот вопрос - при передаче в функцию (и обратно) больших объемов данных (которые невозможно передать через РОН) все же что будет производительнее - через глобальные переменные или через параметры? Понятно, что в функцию вида
      uint8_t My_super_function (uint8_t data); переменные уйдут через РОН,  а вот в такую
      void My_super_function (uint8_t *data, uint8_t *ret); через стек? Так может ну его нафик, стек этот?
    • By parovoZZ
      Поставил LUFA, следом абсолютно не нужный мне ASF. Но в упор не понимаю - как создать проект на базе этой библиотеки из студии? Приходится вручную копировать папку с заголовочниками LUFA, прописывать пути в makefile, лишние телодвижения по добавлению папки в свойства проекта. Если я это делаю всё вручную, то тогда для чего это расширение? Примеры я могу и так покрутить. ЗЫ - не слишком высокий скилл в юзании Atmel Studio/
  • Сообщения

    • Проверить цепь, по которой проходит сигнал на динамик. Если, конечно , под словами "разговорный динамик" не скрывается микрофон.
    • исправленная печатка и схема - здесь  
    • Отказал разговорный динамик. Заменил, оказалось зря, всё так-же осталось. Специалистов по близости нет. Одни предлагают выкинуть, другие перепрошить. Подскажите, что можно сделать?
    • скину свой касяк - исправленная печатка и схема - кто собирал -обратите внимание на шоттки в печатке и резистор в базе транзистора - его нужно добавить - извиняюсь) спешу вечно. все проверенно. автошим 494.lay6
    • Линейка, бесспорно, тоже нужна! Для плоскостных измерений, приносит удобство. А сверло, мечик или плашку линейкой уже не измерить. Тогда на помощь приходит штангенциркуль и таблица в помощь. Для хорошего мастера не помешает иметь и то и другое. Перелистывать страницы справочника - это тоже потеря времени. А так, глянул в таблицу и сразу получил ответ соответствия. И не надо считать деления на линейке. Это преимущество особенно ярко выражено, если величина перевода не кратная. Полезные таблицы, вообще желательно распечатать на принтере, наклеить на жёсткую картонку и магнитиком прихватить возле рабочего стола. Например: нужно реставрировать предохранитель, глянул в эту таблицу, и за считанные минуты запаял требуемый волосок калиброванного провода для данного тока. Помимо этой таблицы, желательно повесить и таблицу с ESR параметрами. Для ремонтника и не только она не будет лишней.
    • Для чего? Руки чесались? От трансформатора наводки, пробовали трансформатор вынести из коробки подальше от плат? Опередили
  • Покупай!

×
×
  • Create New...