G

Советы для грамотной архитектуры прошивки.

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

3 часа назад, oldmao сказал:

 Отдельно делаем опрос датчиков, например 1-Wire, где критичны временные интервалы, с запретом остальных прерываний на время работы с датчиком. Это миллисекунды, пропуск даже пары тактов динамической индикации глазом будет не заметен. 

не заметен, говорите? на форуме как минимум можно найти 5-6 тем , где все заметно и даже очень...

к слову прием/передача одной команды в  ds18b20  составляет  9,6мс этого вполне достаточно получить мигание индикатора, при неправильно составленном коде.

0

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


Ссылка на сообщение
Поделиться на других сайтах
17 часов назад, GDK сказал:

@IMXO , там 3 октавы, я не разбираюсь в этом, это до 2 кГц? Ну и МК там... напр.   14кбайт - память программ, 368 байт - опер. память, а у меня 4к и 168 байт соответственно. Там ОСРВ, в мой МК наверное не влезет.

суть не в этом, по ссылю очень хорошо расписано как получить синусоиду при помощи ШИМ , ЦАП это хорошо, но потребует танцы с бубном для согласования МК с нагрузкой, для ШИМ это будет всего один транзисторный ключ.

ОСРВ влазит даже в pic10f222

а вот нужна она вам или нет это решать вам, в конечном счете ваша хотелка все равно придет к использованию конечных автоматов или ОСРВ,

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

0

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


Ссылка на сообщение
Поделиться на других сайтах
53 минуты назад, IMXO сказал:

к слову прием/передача одной команды в  ds18b20  составляет  9,6мс этого вполне достаточно получить мигание индикатора, при неправильно составленном коде

Вот именно, при неправильно составленном.

А неправильно составляется он обычно при невнимательном чтении документации.

А при внимательном становится ясно, что критичным для протокола 1-wire интервалом является всего-навсего от 15 до 65 микросекунд. Запрет прерываний на такое время заметить невозможно.

0

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


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

У меня между циклами динамической индикации и опроса кнопок (каждые 20 мсек) программа успевает опросить DS18B20, преобразовать значение в готовые байты для засылки в 74HC595 (сегменты индикатора), проверить состояние кнопок. При тактовой 8 МГц не было ни одного пропуска циклов индикации, при тактовой 1 МГц один цикл пропускается. Но поскольку опрашиваю термодатчик 1 раз в 3 секунды, то это абсолютно незаметно.

0

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


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, IMXO сказал:

ОСРВ влазит даже в pic10f222

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

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

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


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

В ОС реального времени спящего режима не может быть по определению. Интересно, что будет удерживать реле управления насосом во время сна процессора? И сколько там по даташиту требуется тактов для гарантированного запуска кварцевого или встроенного RC-генератора при выходе из сна?
Экономить энергопотребление имеет смысл только при батарейном питании, а тут явно сетевое, смысла нет.

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

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


Ссылка на сообщение
Поделиться на других сайтах
13 часа назад, GDK сказал:

Мне показалось, что 16LF1823 справится

Легко. Сразу запускайте на 32 МГц и будет много свободного времени ;)

0

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


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

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

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

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

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


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

Войти

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


Войти сейчас

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

    • Автор: sdkdenis
      Возник вопрос теории интерпретатора кода микропроцессора микроконтроллером
      Возьмём к примеру, всеми любимый КР580ИК80, (опустим сейчас споры зачем, не хватит скорости и т.д.), интересна теория построения такой «Виртуальной машины».
      В моём понимании алгоритм такой:
      1-      В памяти микроконтроллера создаётся массив с адресами подпрограмм кодов процессора (в нашем случае КР580ИК80);
      2-      Ячейки массива имеют названия идентичные соответствующим командам процессора
      3-      Микроконтроллер выставляет на определённых портах (допустим порт А и В) адрес извлекаемой из внешней памяти команды программы;
      4-      Считывает данные с порта (допустим С);
      5-      Выбирает ячейку массива с именем идентичным считанному значению из порта С;
      6-      Переходит к подпрограмме по адресу записанному в соответствующей ячейке массива;
      7-      В процессе выполнения подпрограммы происходят соответствующие действия и увеличение (или иное изменение) счетчика команд;
      8-      Процесс повторяется с шага 3.
      Так вот если и вправду алгоритм построения данного решения соответствует описанному выше, то у меня возникает вопрос, неужели микроконтроллеру на каждую команду процессора приходится перечёсывать массив ища соответствие, или есть иной путь прямого перехода к соответствующей подпрограмме?
      Возможно я неправильно понимаю реализацию интерпретатора кода микропроцессора микроконтроллером?
    • Автор: KushlaVR
      Здраствуйте. Возникла необходимовсть управления несколькими устройствами разных производителей с помощю одного елемента управления.
      В качестве управлялки нужно использовать Sony RM-X6. и сенсорний монитор с виходом формата NEC (на дисплее есть кнопки и когда в их нажымать - транслирується команда)
      Управление осуществляєтся с помощю устройства (которое мне нежно разработать). С протоколом NEC - разобратся получилось (есть куча примеров).
      А вот протокол Sony rm-X6 темный ящик. Такое ощущение что ето обичний UART...
      Значит вопрос собственно такой:
      1) Помогите распознать что за протокол?
      2) Помогите составить алгоритм по распознанию (контроллер Atmega8 тактовая частота внутреннего генератора 8МГц)
      3)Возможнор ктото уже работал с ним, и готов поделится примерами...
      П.С.
      Усилографа нет... Снял сигнал с помощю звуковой карточки (в формате waw). Результат можна посмотреть вот тут:
      drive.google.com/folderview?id=0B-SmX6iwS8HeT3NYSXlYQzJMY2M&usp=sharing
      (извините, waw не могу прикрепить к теме, потому разшарил папку. Если у модераторов есть возможность, то прикрепите, буду благодарен)
      Спасибо всем за внимание и помощь....
    • Автор: Grandfiesto
      Поступило задание разработать цифровой тахометр с такими параметрами:
      1. Диапазон измерений - 0-12000 об.мин.
      2. Тип датчика - Герконовый.
      3. Разрядность АЦП - 12 разрядов.
      4. Напряжение АЦП и микроконтроллера - 5 В.
      5. Скорость серийного порта 9600 бит/с.
      6. Кол-во импульсов датчика за один оборот - 3.
      Разработка программы в среде IDE, желательно на C.
      Разработать алгоритм.
      Задание завело в тупик. Очень нужна помощь!
    • Автор: Arthur
      Короче посетила меня идея (с таблеткой эспумезана), имеется дисплей MT-12864A-2FLA по сути он ничем наверное не отличается от LGM12641BS1R у них такие же контроллеры стоят. Рисовать растр, согласитесь это занимает очень много места в памяти микроконтроллера. И задумался я написать драйвер для него (аля векторная графика), задаю точку 1 и точку 2 а он чертит сам мне линию. Алгоритмы уже есть, написаны за долго до меня, за основу взял алгоритм Брезенхема. Написать программу это пол беды, столкнулся я с такой проблемой, ведь дисплей по сути разбит на два сектора (кристалла) по 64 столбца. и если допусти мне надо поставить одну точку в одном кристалле а другую в другом, программа то расчитает мне точки линии, но как мне сделать перенос с одного кристалла на другой?
      Дальше еще думаю, как быстро он будет делать расчёты. всех точек. и на сколько быстро он прочертит одну линию.
      Конечно я лезу в дебри если честно и наверника уже есть такие дисплеи со встроенным контроллером, которому эту программу не надо писать, и дисплею нужно лишь подать координаты двух точек (графический контроллер) но я пока такие дисплеи не нашёл, может не там искал.
    • Автор: Pragmatik91
      Здравствуйте! Ситуация такая: нужно разработать микропроцессорную систему измерения температуры с цифрового датчика tmp03 и передать результаты через UART. Подключил датчик, написал программу считывания:

      0016 14 RDTMP: ;Подпрограмма чтения датчика
      00B0 15 TMPIN bit P3.0;Порт связи с датчиком TMP03
      0040 16 T1H data 40H;Определение места хранения старшего байта T1
      0041 17 T1L data 41H;Определение места хранения младшего байта T1
      0042 18 T2H data 42H;Определение места хранения старшего байта T2
      0043 19 T2L data 43H;Определение места хранения младшего байта T2
      0016 758911 20 mov TMOD,#11H;Задание 16-разрядного режима работы таймеров
      0019 758C00 21 mov TH0,#0;Обнуление таймера 0
      001C 758A00 22 mov TL0,#0;Обнуление таймера 0
      001F 758D00 23 mov TH1,#0;Обнуление таймера 1
      0022 758B00 24 mov TL1,#0;Обнуление таймера 1
      0025 30B0FD 25 WT1: jnb TMPIN,WT1;Ожидание перехода входной величины
      в высокое состояние (начала T1)
      0028 D28C 26 setb tr0 ;Запуск таймера (для замера T1)
      002A 20B0FD 27 WT2: jb TMPIN,WT2;Ожидание перехода входной величины в
      низкое состояние (конец T1, начало T2)
      002D C28C 28 clr tr0 ;Остановка таймера
      002F D28E 29 setb tr1 ;Запуск таймера (для замера T2)
      0031 30B0FD 30 WT2E:jnb TMPIN,WT2E;Ожидание перехода входной величины
      в высокое состояние (конец T2)
      0034 C28E 31 clr tr1 ;Остановка таймера
      0036 22 32 ret ;Возврат из подпрограммы Теперь мне нужно преобразовать считанные данные с датчика. Преподаватель сказал взять температуру 23 градуса для примера. Формула для рассчета температуры исходя из количества считываемых импульсов такая: T©=235-((400*T1)/T2). Нужно написать алгоритм и подпрограмму.
  • Сообщения

    • Юный пионер правильно написал оперировать с ними неудобно,нужно 2 гаечных ключа и цанги из крышки сложно извлекать,но биение на валу меньше чем на 3х кулачковом патроне. Еще косяк обычных патронов что у них центр тяжести смещен из-за этого на больших оборотах излишняя вибрация.
    • Подскажите, на сколько этот радиатор Ватт? 
      Хватит ли для одного транзистора при Uпит.=35в. Iпок.=2А? 
      Я насчитал, что данный радиатор может рассеить 27 ватт тепла, но не уверен в своих расчетах. Конвекция работать будет.   
    • Продолжение темы про инверторы KRAFT Так вот-принесли буквально сегодня посмотреть инвертор KRAFT tool KT-300xp 300A. C диагнозом пользователя-перестал варить . На регуляторе тока деления от 30 до 300. Вскрытие показало-схема мост, в этом аппарате имеется мягкий старт с реле. Стоят ДВА электролита 560мкфх400В на 85С. Четыре транзистора FGH60N60. И самое вкусное напоследок  -На выходе стоят четыре диода STTH30W60 (пробитые)
      Вот вам и 300Амперов!  Чуть попозже будут фото   ЗЫ   А клиент был очень доволен аппаратом-сказал, что он им даже пару раз электродом тройкой болты срезал
    • Добрый вечер. Вопрос такой, аж спать не могу, пробовал сам найти ответ, но чего то где то упускаю. Для чего электромобили используют переменный ток для своей работы? (тесла)  ...ведь постоянный ток проще регулировать, + ко всему аккумуляторы стоящие на авто просто по умолчанию дают его.  К тому же двигатели бесколлекторного типа развивают достаточную мощность.... Берем двигатель переменного тока: тут ряд проблем - которые решаются достаточно проблемным путём (в сравнении). Нужно преобразовать постоянное в переменное, так ещё и частотный регулятор нужен... В чём смысл?
    • Мне кажется, "рвать" синусоиду на токе 32 А - крайне неудачная затея, помехи в сеть будут просто чудовищные (тем более при отсутствии каких либо фильтров). В вашем случае (для ТЭН-а) желательно использовать схемотехнику посложнее- пропуск целого числа полупериодов по определенному закону, подобную схему ввстречал на "Коте", но там надо дружить с МК.
    • У Вас коэффициент для расчёта мощности неправильный, с точностью до наоборот. Его гигантская величина при любых значениях acur*avcc даёт в результате  pwr2hex() гигантскую мощность в Ваттах, поэтому система затыкается сразу. По-моему, коэффициент должен быть таким, что-то типа 6*10-5 P_koeff = U_ref_mV * U_ref_mV * (R_DH_Ohm + R_DL_Ohm) / R_DL_Ohm / R_sh_mOhm / 1024 / 1024 / 1000   А, не , всё нормально, у Вас ватты в код преобразуются, тогда обратная величина для P_koeff.   И, потом, провода до аккумулятора длинные и имеют какую-никакую индуктивность. Ток LED в несколько ампер коммутируется полевиками, получаем выбросы на индуктивности проводов, эти импульсы успешно выпрямляются диодом и накапливаются на конденсаторе питания. Я бы заменил диод на резистор в пару десятков Ом.
    • Всё, пробую цитировать. не прогоните. 
      боюююююююсь
      m593ak.  да переживал . но немного успокоился.     Что ? получилось? что ли? Один вроде регулятор рабочий, мне ещё три проверить надо...........
      Так,что серво на 555 ещё в теме.
      а вдруг на контроллере не получится.
      А моторчик я могу улучшить,пускай жрёт, 
      у меня магниты есть, для улучшения.,давно купленные