|
|
  |
Работа с медленной периферией |
|
|
|
Dec 29 2017, 08:53
|
Частый гость
 
Группа: Участник
Сообщений: 176
Регистрация: 20-02-14
Из: Томск
Пользователь №: 80 612

|
Цитата(kolobok0 @ Dec 29 2017, 10:36)  если поделка, типа померять температуру любимого проца - то да. если надо каждую секунду иметь картину по нескольким точкам сразу - то юарт мягко говоря убогость...
(круглый) Предлагаю не путать теплое с мягким. UART, таймеры с DMA, или GPIO - это реализация интерфейса на физическом уровне. А "иметь картину по нескольким точкам сразу" - это относится уже к логическому уровню протокола обмена. И одно другому никак не мешает.
|
|
|
|
|
Dec 29 2017, 09:19
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(amiller @ Dec 29 2017, 11:53)  Предлагаю не путать теплое с мягким. UART, таймеры с DMA, или GPIO - это реализация интерфейса на физическом уровне. А "иметь картину по нескольким точкам сразу" - это относится уже к логическому уровню протокола обмена. И одно другому никак не мешает. Внимательней надо читать. задача (т.е. дано) - в каждый момент(одномоментно) времени иметь сразу температуры ВСЕХ датчиков. Не последовательно, не через 10 секунд, а каждую секунду. со всех датчиков. uart, dma, gpio - это способ достижения поставленной задачи. именно в этом разрезе я и постарался изложить. Цитата(Сергей Борщ @ Dec 29 2017, 12:00)  На УАПП легко ...- чем же это так сильно хуже тупого ногодрыга... если вы можете мне рассказать способ сканирования энного(!) кол-ва датчиков за 1 секунду с помощью уарта - я внимательно послушаю.
|
|
|
|
|
Dec 29 2017, 09:52
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
QUOTE (kolobok0 @ Dec 29 2017, 11:19)  если вы можете мне рассказать способ сканирования энного(!) кол-ва датчиков за 1 секунду с помощью уарта - я внимательно послушаю. Мне непонятно - чем сканирование с помощью УАПП отличается от сканирования ногодрыгом. Точно так же ищем все подключенные датчики, точно так же запускаем на найденных измерение температуры, точно так же через 0.8 сек сканируем шину снова и считываем с найденных датчиков результат. Алгоритм сканирования описан и в документации (я проверял - работает) и в куче примеров по всему интернету. Все точно так же, как и с ногодрыгом в прерывании таймера, только вместо трех прерываний таймера на битовый слот имеем одно прерывание УАПП на слот и жесткую времянку слота. УАПП передает 0x00 или 0xFC. Для чтения передает 0xFC, одновременно читая эту же линию. Если считано 0xFC - ведомый ответил единицей или не ответил, если считано не 0xFC - подчиненный ответил нулем.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Dec 29 2017, 10:07
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(Сергей Борщ @ Dec 29 2017, 12:52)  Мне непонятно... если Вы про одну шину (типа на столе) - согласен прокатит. Да, сама вычитка из датчика всего несколько десятков мс. при этом получить все значения со всех датчиков будет кол-во датчиков * на время чтения из одного. и это порядок - несколько секунд получится. но для реал-тайм это полумера. для быстрых принятий решений, регулировок это уже критично. вопрос надёжности опускаем - он гораздо хуже при шинном построении. обслуга шины - так же хуже. я как бы даже и не рассматриваю шину. уже как бы пройденный этап для более-менее серьёзных вещей. окейно. понял Вашу мысль. спасибо! (круглый)
|
|
|
|
|
Dec 29 2017, 10:42
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Arlleex @ Dec 28 2017, 19:52)  То есть как обслуживать низкоскоростной интерфейс, временную диаграмму которого нельзя перебивать для корректной работы, в то же время не повышая приоритет задачи, в которой работает опрос датчиков, и тем более, не вводя критические секции? Работу 1-wire естественно эмулировать при помощи capture- и compare- режимов какого-либо таймера. Ногодрыг или UART - это колхоз. В прерываниях этого таймера сделать машину состояния, а взаимодействие с задачами ОС - через очереди сообщений либо как-то ещё. Цитата(Arlleex @ Dec 28 2017, 22:26)  Таким же образом хотел сделать конечный автомат обслуживания таймслотов 1-Wire на прерываниях аппаратного таймера: но тут есть но - можно прикинуть накладные расходы по времени входа в прерывание по отношению к полезному времени: - частота работы МК - 180МГц; значит на вход/выход в/из прерывания будет составлять 0,133(3)мкс (24 такта); - для DS18B20 характерны времена Занимаетесь ерундой. У Вас что - CPU уже на 99% загружен? Цитата(AlexandrY @ Dec 29 2017, 09:50)  После чего героически бороться за прерывания в контексте RTOS, где их цена выше чем на bare metal. Чем выше-то? Разъясните - чем вход/выход в ISR с ОС отличается от того же самого без оной?
|
|
|
|
|
Dec 29 2017, 10:45
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(jcxz @ Dec 29 2017, 13:42)  Работу 1-wire естественно эмулировать при помощи capture- и compare- режимов .. дэжавю? https://electronix.ru/forum/index.php?s=&am...t&p=1538265коротко если не трудно(не секрет) изложите своё виденье... ик... с наступающим годом усех! (круглый)
|
|
|
|
|
Dec 29 2017, 10:56
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Сергей Борщ @ Dec 29 2017, 11:00)  На УАПП легко реализуется жесткая времянка одного слота, без накладных расходов вообще. Больше нигде жестких времянок в 1-wire нет. Поделитесь сокровенным - чем же это так сильно хуже тупого ногодрыга в прерывании таймера? Насколько помню 1-wire - там вроде по длительности импульсов от источника надо определять пришёл '0' или '1'? Тогда самое правильное - таймер в режиме capture/compare, а никак не UART. Цитата(kolobok0 @ Dec 29 2017, 12:45)  коротко если не трудно(не секрет) изложите своё виденье... Что именно излагать? Ознакомьтесь с описанием работы 1-wire - там всё ясно: после установки МК уровня на вых '0', запускаем таймер на 1мкс, по окончании интервала - линию на ввод, и либо таймер в режим capture (с ограничем времени) либо просто след. интервал в compare-режиме по окончании которого - ввод данных с линии.
|
|
|
|
|
Dec 29 2017, 11:01
|
практикующий тех. волшебник
    
Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417

|
Цитата(jcxz @ Dec 29 2017, 13:49)  Насколько помню 1-wire ...надо определять пришёл '0' или '1'?...самое правильное - таймер в режиме capture/compare... супер. т.е. вы предлагаете (на примере одного слота) - выдать не на обработчике прерывания строб, подготовить ловушку. - на обработке захвата сохранить.. - не на обработчике поллить захваченное значение.. и т.д...? у вас поллинг тодысь если вы упрячете логику на обработчик - то вся ваша выгода в слоте чтения (минус одно прерывание, и весь пшик). Кстати по сравнению с юартом -всё равно вы проигрываете по прерываниям... так, или я что то глючу? Цитата(jcxz @ Dec 29 2017, 13:56)  ...Ознакомьтесь с описанием...по окончании которого - ввод данных с линии. ага...как я и описал - вы экономите на одном прерывании. и нафига козе баян спрашивается??? по поводу ознакомиться - кхм...не буду рассматривать как грубость, а отвечу вам следующим поссажем: - помимо ознакомиться , рекомендую вам хоть разок реализовать указанный протокол. любым способом... давайте вот такие фразы опустим. а то как то меряться длиной лет прожитых в обнимку с электроникой - глупо, даже если почти пол-века... обижаться - по детски... ближе к делу, если вы профи... заранее спасибо (круглый) ЗЫ Новый год жешь... Помягше к друг другу что ли...
Сообщение отредактировал kolobok0 - Dec 29 2017, 11:03
|
|
|
|
|
Dec 29 2017, 11:22
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Сергей Борщ @ Dec 29 2017, 11:52)  Если считано 0xFC - ведомый ответил единицей или не ответил, если считано не 0xFC - подчиненный ответил нулем. А если не 0xFC получилось из-за более длинного восстановления уровня на линии (ёмкость и т.п.)? Или из-за помех (вполне возможно в 3-м состоянии линии на линии)? Цитата(aaarrr @ Dec 29 2017, 12:43)  То есть нагромождение таймеров и побитный прием с соответствующей загрузкой процессора - это не колхоз, а железная периферия - колхоз? Оригинально. Почему таймеров? Автор вроде говорит про приём по единственной линии. Я понял что все датчики висят на одной линии. В чём загрузка процессора-то? В 1-wire значения времянок порядка десятков-сотен мкс, как 3 прерывания в течение этого времени могут значимо нагрузить ARM с частотой 180МГц? При том, что в каждом прерывании нужно всего несколько команд выполнить. Цитата(kolobok0 @ Dec 29 2017, 13:01)  по поводу ознакомиться - кхм...не буду рассматривать как грубость, а отвечу вам следующим поссажем: - помимо ознакомиться , рекомендую вам хоть разок реализовать указанный протокол. любым способом... По делу есть что сказать кроме пустого битья себя пяткой в грудь? "Реализуют" что-то не заглядывая в описание быдлокодеры. А если прочитать описание и хоть немного включить голову, то из диаграммы работы линии в режиме ввода видно, что есть интервалы времени, когда на линии может быть что угодно. И это никак не противоречит стандарту. Т.е. - если ведомое устройство в эти интервалы выдаст на линию любой мусор, то это никак не будет противоречить протоколу 1-wire, и это всё равно будет 1-wire. Только реализация приёма на основе UART перестанет работать. Реализация на таймере, учитывая все требования 1-wire, будет работать также корректно. И это уже не говоря про весьма возможные помехи в 3-м состоянии линии ввода. http://micpic.ru/articles/128-opisanie-int...jsa-1-wire.html
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|