Уважаемый Alexeyslav Я с вами согласени по поводу "Рано тебе программы писать "с наскока". Начни с блок-схем. На них хорошо видны все возможные ситуации и узкие места." Вот есть у меня умная книжка http://www.labirint.ru/books/300259/ как вы считаете? она подойдёт я изучения программирования? там как раз и блок-схемы описывают, только она правда для PIC, ну это не важно!
А если нет, подскажите Какую книжку выбрать? и какую чучше скачать прогу (софт) для создания блок-схем (для си или ассемблера)
... и какую чучше скачать прогу (софт) для создания блок-схем (для си или ассемблера)
Карандаш обыкновенный и лист бумаги. Если алгоритм не влезет на лист бумаги, то он как бы и не нужен ))) Впрочем, он и так не особо полезен, мыслить программными модулями куда удобнее.
_________________ Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Описание блок-схем нужно только для того как какой участок отображать на схеме, ну вроде стандарта.
Программ для рисования блок-схем не видел ни одной достойной, даже платные... чтобы нарисовать что-то и подключить в нужные места нужно слишком много телодвижений. Карандашом же - в среднем 4 линии на фигуру - от 2 до 5 секунд. И, однако, мысль все-равно порой быстрее... Программы нужны разве что для того чтобы задокументировать готовые схемы - для этих целей годится даже DRAW из состава OpenOffice, но там все очень сложно с привязкой к определенной сетке - пока выровняешь все фигуры пройдет столько же времени как на их рисование и соединение, изменение может порушить красиво разведенные связи и т.д.
Если кто найдет более удобную программу для рисования блок-схем, сообщите.
Карма: 90
Рейтинг сообщений: 1432
Зарегистрирован: Чт мар 18, 2010 23:09:57 Сообщений: 4587 Откуда: Планета Земля
Рейтинг сообщения:0 Медали: 1
Ну чтож, коли пошла такая пьянка, подкину и я своих дровишек в костёрчик ) Раз тут собрались одни АВРщики , пришлось поставить CV и черкнуть на нём примерчик обработки кнопок. CV взял из-за генератора кода, т.к. не хочется лезть в даташит на совершенно незнакомые мне МК. В общем, за им генерируемый код меня не пинать . Остальное, что касается моей писанины - обсуждаем, критикуем, закидываем помидорами, .... В архиве проект + файл всеми любимого протеуса:
//--------Чтение состояния городской линии void city_line_read(flag_tmp* fl_tmp) { static uchar8 key_acc; //переменная для хранения послед. состояний кнопки
key_acc <<=1; // Сдвигаем аккумулятор влево на 1 бит key_acc |= !(CITY_LINE_PIN); // читаем состояние ножки и добавляем новое значение к аккумулятору
switch(key_acc) { case 0: fl_tmp->city_line_state=ZERO; break;
case 0xFF: fl_tmp->city_line_state=ONE; break;
default: fl_tmp->city_line_state=RANDOM; break;
} }
_________________ Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Если кто найдет более удобную программу для рисования блок-схем, сообщите.
есть такая бесплатная программа - yEd, компании yWorks. скачивается из интернета. 40 МБ. По примеру уважаемого Jack_A картинку закинул под спойлерСпойлер
Вложения:
Комментарий к файлу: пример primer.png [39.13 KiB]
Скачиваний: 1877
_________________ Ставим плюсы: )
Последний раз редактировалось ibiza11 Вс ноя 11, 2012 22:56:39, всего редактировалось 1 раз.
На мой взгляд, не лучшее решение. Имея электронный вариант схемы, ее легче копировать и модифицировать. Пользуюсь банальным Paint. Открываем 2 экземпляра программы, в одном будет рабочее поле, в другом -- библиотека элементов ( или схема-прототип, из которой будем выдергивать нужные элементы ) . Простым копипастом набрасываем каркас схемы, затем в текстовом режиме добавляем обозначения и названия. В итоге получаем что-то вроде :
Диаграммы умеет рисовать множество программ, тот же DRAW имеет для этого все инструменты... но, пользоваться ими со скоростью мысли невозможно. Только как в качестве чистовика. Рисование в программах отнимает уйму времени и собственно отвлекает от самого алгоритма.
Сколько я не пробовал таких программ, ни в одной не получалось делать сразу ровные вертикальные и горизонтальные стрелки - места стыковки параллелограмма и прямоугольника одинаковых размеров находятся на разных осях. не говоря уже если тебе надо нарисовать один элемент чуть шире остальных и не совсем по центру.
А рисовать схемы в паинте это вообще мазохизм... гораздо удобней для этого одна из программ 98-го года, она работает по принципу паинта с библиотекой "заготовок" но она слава богу ушла в небытие, и её вполне способен заменить Sprint Layout работающий по тому же принципу но с векторными объектами. Но в нём столь же неудобно рисовать блок-схемы... не для того он заточен.
Да что говорить, пачка бумаги с десятком карандашей стоит сейчас дешевле чем эти программы-рисовальщики(Visio Pro например). Выигрывает в скорости, но проигрывает в красивости. Вот во втором случае программы и выручают, когда рисуется окончательный вариант... но обычно он уже не нужен - программа написана а бумажки сожжены выполнив свою роль. Кстати черкать и переделывать блок-схему в электронном виде не так-то и просто - слишком много времени теряется.
Зачем еще одна программа которая работает абсолютно так же как и DRAW? Оно конечно хорошо, но все элементы имеют разный размер потом их приходится постоянно ровнять. А сразу клепать одинаковые как-то не получается... только копи-паст.
Подскажите пожалуйста, если у меня кнопка без фиксации, как мне обработать нажатие кнопки? if (!PIND.2) //если нажата кнопка { for (i=0; i<8; i++) {}; //антидребезг if (!PIND.2) //если все-таки нажата кнопка {тут что-то происходит}; }// тут получается, что выполняется программа, пока нажата кнопка, если ее отжать, то ничего не будет происходить, а как мне сделать, чтобы код выполнялся, после нажатия-отжатия?
по идее, я нажимаю кнопку, программа генерирует последовательность, зажигаются светодиоды, потом должно происходить считывание с двух других кнопок (одна - 0, другая - 1, кнопки тоже без фиксации), чтобы ввести двоичный код, затем эти последовательности сравниваются и уже в зависимости от результата разные сигналы выходные. т.к. кнопка без фиксации,
Собственно в чем суть проблемы? Чтение всего 3-х страниц не помогло(последняя не в счет)?
Цитата:
for (i=0; i<8; i++) {}; //антидребезг
Это не антидребезг а пародия на антидребезг... за какое время выполнится эта часть кода? 20-30 тактов процессора от силы, если компилятор не упростит всю конструкцию до одной команды...
Кнопки надо считывать раз в 10-20мс не чаще, тогда на дребезг не нарвёшься...
key_acc <<=1; // Сдвигаем аккумулятор влево на 1 бит key_acc |= !(CITY_LINE_PIN); // читаем состояние ножки и добавляем новое значение к аккумулятору
Странное дело вроде как дефайном CITY_LINE_PIN можно установить любую ножку для пользы дела, но ведь сдвиг осуществляется путем ввода нулей с другой стороны, то есть чтобы получилось состояние 0xFF просто необходимо, чтобы CITY_LINE_PIN было 0x01 в чем тут цинус?
стоп стоп стоп, расшифруйте тогда что у вас спрятано за этим CITY_LINE_PIN. про восемь раз я все прекрасно понял. И я еще немножко неправильно выразился, нужно чтобы !(CITY_LINE_PIN) всегда получался 0x01.
Предположим, что там (PORTB&PINB4) если кнопка нажата получится 0b0001 0000 как тогда получится 0xFF, если когда сдвинули и сложили получили 0b00110000 Или я чего то недопонимаю?
Видимо, если проделать эту операцию 8 раз и за все эти 8 раз значение бита не менялось то весь байт примет однородное значение - либо $00 либо $FF. Но правда, зачем такой изощренный метод использовать для подавления дребезга - загадка. Вероятно, экономится парочка регистров?
#define CITY_LINE_PIN PINB.4 /*пин опроса состояния городской линии*/
Это для CVAVR. Можно выкрутится и с более стандартной записью
Код:
#define CITY_LINE_PIN (PINB&(1<<PB4)) /*пин опроса состояния городской линии*/ ... key_acc |= (CITY_LINE_PIN)? (0):(1); // читаем состояние ножки и добавляем новое значение к аккумулятору
Может и проще можно, лень думать )))
_________________ Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Вопрос к Alex: а почему мою тему viewtopic.php?f=20&t=80979 закрыли и при этом направили меня сюда??? Тут и так "полным-полна коробушка", меня только со своими нубскими вопросами не хватало.... Я эту ветку прочитал, но еще больше запутался. Не получается у меня опрашивать эти чертовы кнопки - хоть ты мать божью пой. Компиляется все красиво, а вот протеус говорит "не видать тебе удачи". И хотя я неоднократно слышал, что симуляторы не всегда правду говорят, в данном случае мне кажется, что не врет он... Я конечно могу в железе собрать свою схему, плату вытравить - дело 30 минут, но только ничего я и на плате наверное не увижу. Модер, открой тему мою, я лучше там буду потихоньку вопросы задавать - глядишь кто чего и подскажет. А то в этой теме мне стыдно позориться со своим "мегапроектом".
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения