Свежие обсуждения
Микроконтроллеры

Ликбез по программированию PIC

1 58 99

Я предлагаю посмотреть на вот этот рисунок. Так может выглядеть граф для одного канала в самом общем виде:
http://www.pic16.nm.ru/likbez1/graf4_01.gif

---------------------------------------------------------------------------------------------------------------------------------------
Поясняющий рисунок: http://www.pic16.nm.ru/likbez1/drawing5.gif

---------------------------------------------------------------------------------------------------------------------------------------

Примечание: в состоянии "вне диапазона" правильная работа устройства не гарантируется.
Посмотрите внимательно. Разве это сложно? Что-нибудь непонятно? Задавайте вопросы.

Ну что, кто-нибудь ещё сомневается в пользе графов?

 

Нарисовано красиво! picmaniac, вы постарались! Но, если вы не обидетесь, я позволю себе прикинуться валенком и малость покритиковать.
По-моему этот красивый рисунок не очень похож на те, которые из "умных" книжек. Это очень сильно смахивает на пояснительный рисунок к техническому заданию. Ну, т. е. если ТЗ плохо укладывается в голове, то такая картинка лишь иллюстрирует его. А если хорошо? Какую дополнительную информацию мы получаем, нарисовав такой граф. Я долго рассматривал его, силясь постичь его глубинную сущность, но ничего, кроме иллюстрации не углядел. Связь между этим графом и программой, которую надо написать, такая же, как и между ТЗ и будущей программой, т. е. практически никакая. В книжках с этими графами делают какие-то сложнейшие преобразования, выворачивая их чуть ли не наизнанку, и в результате получают готовое оптимальное решение задачи. Перенеси его на язык команд и "дело в шляпе". А тут как с этим обстоит?

 

Zandy: Какую дополнительную информацию мы получаем, нарисовав такой граф
Например, считаем число линий выходящих из круга...значит именно столько переходов мы должны учесть.

 

Глядя на этот граф, можно сразу понять, в каких состояниях может находиться устройство, из каких состояний в какие возможны переходы, при каких условиях эти переходы должны происходить, и какие действия при этом должны выполняться. Разумеется, всё изображено очень укрупнённо, в общем, сам принцип работы. Всё это можно охватить одним взглядом.

Я решил начать с такого простого графа опять же для наглядности. Всё понятно? Отлично, этого я и добивался. Откуда тогда недовольство? Слишком просто? А попробуйте посмотреть на этот граф "глазами новичка". Принцип работы девайса становится ясен?
Постепенно будем усложнять, переходя к деталям. Не всё сразу. Я мог бы, конечно, разбираться в одиночку, а потом выкатить готовый граф - догадайтесь, мол, сами. Но считаю, что лучше будет разбираться сообща. Нет в науку царского пути, знаете же прекрасно.
Определение периода через прерывания вон сколько разбирали, я уже и картинки рисовал, и словесно расписывал... Ффууххх - разобрались вроде. Идём постепенно дальше.

По чему легче проследить работу устройства, по распечатанному ТЗ или по этому графу, а?
Примерчик из книги Р. Свореня "Шаг за шагом. Транзисторы". Цитата.
Описывать изменения тока словами не только неудобно, но просто невозможно. Представьте себе такое описание. "Достигнув двух миллиампер, ток в течение половины микросекунды оставался неизменным, затем начал равномерно нарастать и уже через пять тысячных микросекунды достиг трёх с четвертью миллиампер. После этого ток плавно, но со всё возрастающей скоростью в течение четырёх микросекунд уменьшался, приближаясь, но так и не приблизившись к величине, от которой он начал возрастать, после чего..." и т.п. Много томов понадобилось бы, чтобы подобным способом рассказать, что происходит с каким-нибудь одним электрическим сигналом в течение нескольких секунд. Нет, описывать электрический сигнал словами, конечно, не стоит: для этого есть более простые и наглядные способы описания. И среди них прежде всего графики.
Конец цитаты.

Так вот, граф - это отличный способ описать работу программы. Причём так описать, что освоившим язык графов людям работа этой программы понятна будет буквально с первого взгляда. Теперь, начав читать книгу А.А.Шалыто, я окончательно убедился в этом. И неважно - для PIC эта программа, для AVR, или ещё для чего; на асме она, на бейсике, на Си или на чём ещё. Граф - универсальный инструмент.

Splav56, мне тоже не вполне понятно пока, по какому принципу определяются конъюнкции для дуг 1-->2 и 3-->0 в примере из книги (рис.6). Надеюсь, что chav1961, AHTOXA или Vlad_Petr не откажутся нам помочь и разъяснить это.

 

picmaniac: Откуда тогда недовольство?
Ни в коей мере! picmaniac не поймите меня превратно, я согласен со всем, что вы говорите. Меня не надо агитировать за пользу графов, приводя примеры из других областей. Все это очевидно! Я про то, что не понимая принципов, невозможно нарисовать настоящий граф. А чтобы понять принципы, надо капитально "подсесть" на это дело. Ну а от простого графа, нарисованного в произвольной форме, как я уже сказал, пользы не больше, чем от иллюстрации. Наглядно - да, компактно - да, поучительно - да! Но не более того.
Если уж совсем начистоту, я еще до сих пор не прочувствовал пользы от изучения программирования микроконтроллеров! А вы говорите - графы. У меня и так в голове полный винигрет. Те задачки, которые мы решаем, настолько примитивны, настолько далеки от тех целей, которые я себе поставил, что просто волосы дыбом встают, сколько же всего надо еще изучить хотя бы "галопом по Европам". Да хотя бы простое представление поиметь. Тут, чтобы только какой-нибудь даташит страниц на 100 изучить, столько времени убухаешь. А потом оказывается, что тебе эта микросхема и не подходит вовсе.

 

По ГРАФу: смотрел я на него вчера цельный вечер и взяло меня сумленье (хотел еще вчера отписАть, но сумленье оно и есть сумленье ). Все дело в том. что входное воздействие у нас периодическое, непрерывное, а не дискретные величины. Поэтому мне кажется граф должен быть с последовательными вершинами:

По той же причине switch - технология здесь не прокатит.

 

Splav56: Поэтому мне кажется граф должен быть с последовательными вершинами

Разве устройство не может из состояния "норма" сразу перейти в состояние "тревога"?

Splav56: По той же причине switch - технология здесь не прокатит.

Switch - технология катит везде Просто в каждом состоянии проверяются только возможные для данного состояния условия.

 

AHTOXA: Разве устройство не может из состояния "норма" сразу перейти в состояние "тревога"?

А разве может входной периодический сигнал скачкообразно изменяться от Fнорм до Fсигн. макс, например, минуя стадию Fнорм.макс? Думаю нет. На то он и периодический.

AHTOXA: Switch - технология катит везде

Возражать не буду, т.к. я в ней пока полный 0. Порсто мне представлялось, что это больше подходит для дискретных входных функций.

 

Splav56: А разве может входной периодический сигнал скачкообразно изменяться от Fнорм до Fсигн. макс, например, минуя стадию Fнорм.макс? Думаю нет. На то он и периодический.

Запросто Предыдущий период был нормальный, а следующий - уже за пределами (например, пропал сигнал).
Хоть сигнал и непрерывный, но замеряем-то мы его - дискретно. Минимальный период дискретизации - один период контролируемого сигнала.

 

Splav56: разве может входной периодический сигнал скачкообразно изменяться от Fнорм до Fсигн. макс
В данной конкретной задаче инерционность электродвигателя и механизма сгладит быстрые изменения частоты. Но в общем случае они возможны, как уже сказал AHTOXA. Поэтому лучше их учесть.

AHTOXA, не поможете ли нам разобраться с дугами 1-->2 и 3-->0 из примера в книге (Приложение 12, рис.6). Откуда берутся указанные там конъюнкции?