Технический Портал Левши Четверг, 25.04.2024, 15:22
| RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: terpelivi, VasylYE  
ТЕХНИЧЕСКИЙ ФОРУМ » ЭЛЕКТРОНИКА » МИКРОКОНТРОЛЛЕРЫ » АЗЫ ПРОГРАММИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ - FlowCode_V3 (курс обучения для начинающих и по настоящему с нуля!)
АЗЫ ПРОГРАММИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ - FlowCode_V3
Melvin77Дата: Воскресенье, 26.04.2009, 20:23 | Сообщение # 106
Рядовой
Группа: Пользователи
Сообщений: 10
Награды: 0
Статус: Offline
Доброго времени всем.
Вопрос к сожалению старый.
Где взять FLOWCODE_AVR+crack и русик?
Програма для AVR выложеная на этом сайте судя по всему демонстрационная версия или просто кривая, вобшем не работает как надо не говоря о том что злобный AVAST не любит предложеные таблетки.
 
ЛЕВШАДата: Воскресенье, 26.04.2009, 21:53 | Сообщение # 107
Admin
Группа: Администраторы
Сообщений: 1923
Награды: 2
Статус: Offline
Quote (Melvin77)
злобный AVAST не любит предложеные таблетки.

а других любимых авастом нет вообще в природе насколько я знаю. smile
Quote
Програма для AVR выложеная на этом сайте судя по всему демонстрационная версия или просто кривая, вобшем не работает как надо

у меня все работает и компилятор тоже.


упростить - улучшить!
если ВЫ хотите помочь сайту в развитии,
наши счета:
Z789673670495 ($)
R806233314616 ®
41001205775274(yand)
 
NOPROBLEMДата: Понедельник, 27.04.2009, 00:25 | Сообщение # 108
Лейтенант
Группа: Проверенные
Сообщений: 66
Награды: 0
Статус: Offline
Quote (Melvin77)

Програма для AVR выложеная на этом сайте судя по всему демонстрационная версия или просто кривая,

Тут еще такое дело может быть. ФК паталогически не переносит кириллицы. Если русскими буквами название блока напишете, или имя директория, где файл лежит, то может закозлиить (а может и нет). Причем крек тут совсем не при чем. Некоторые креканые гораздо лояльнее к кириллице, чем даже лицензионные angry
 
ВитаминДата: Понедельник, 27.04.2009, 18:41 | Сообщение # 109
Рядовой
Группа: Пользователи
Сообщений: 5
Награды: 0
Статус: Offline
чтобы при кратковременном нажатии кнопки программа выполняла одну работу, а при удерживании, например 2 сек.,другую.

Это надо таймер задействовать. Устанавливаешь прерывания от переполнения таймера, настраиваешь его делитель так, чтобы он переполнялся, например через 0,1с. Потом в макросе обработки прерываний организуешь счетчик, который каждое прерывание на 1 увеличивается. В основной программе при нажатии кнопки обнуляешь значение переменной счетчика, а при отпускании проверяешь ее значение. если меньше 20 - одна работа, а больше - другая

Спасибо NOPROBLEM ! up
Задачку выполнил с антидребезгом, перед компиляцией конечно же перепешу в англоязычной версии. Вопрос: почему макрос обработки прерываний включается после любой Delai в программе. Проверьте пожалуйста всё ли корректно smile

Прикрепления: ooooooooo88.fcf (8.5 Kb) · ooooooooo88.fcf.001 (13.0 Kb)
 
NOPROBLEMДата: Вторник, 28.04.2009, 19:57 | Сообщение # 110
Лейтенант
Группа: Проверенные
Сообщений: 66
Награды: 0
Статус: Offline
Quote (Витамин)
Задачку выполнил с антидребезгом, перед компиляцией конечно же перепешу в англоязычной версии. Вопрос: почему макрос обработки прерываний включается после любой Delai в программе. Проверьте пожалуйста всё ли корректно smile

Запустил в ФК - все работает! Значит в этом плане все корректно biggrin Однако есть несколько "НО":
1. Обычно в прикладных системах задача опроса кнопок не является единственной, и часто не самая важная (в смысле вычислительных ресурсов). Поэтому Ваша реализация, хотя и работоспособна, но не может быть использована, как модуль в серьезной программе. В основном за счет активного использования блока Delai angry На ой взгляд это совершенно никуда не годный блок! Да, он понятен, он корректно эмулируется в ФК, в отличии от всех прочих способов программирования временных интервалов, но, на этом его достоинства заканчиваются. Его основной недостаток состоит в том, что при своем исполнении он полностью использует вычислительные ресурсы процессора, не оставляя никакой возможности делать одновременно что либо еще cry
2. Вы несколько неудачно использовали прерывание от таймера Т0. Во первых ее инициализация. Обычно она выполняется в самом начале программы, даже еще до начала бесконечного цикла . И более в программе не встречается (если, только в процессе работы программы не следует поменять ее параметры, да и то это лучше делать другими методами). Во вторых, Вы в макросе его обработки зря вставили цикл и условие выхода из него. Вполне хватит только квадратика с инкрементом переменной kol_vo, все остальное там делается само (Хвала МатриксМультимедиа biggrin ). Ну и в третьих, при Ваших параметрах прерывания будут происходить с частотой почти 10 кГц! Что Вы собираетесь делать с интервалами в 100 мкс? Вот, если бы Вы поставили кратность предделителя 1:255, то получили бы частоту прерываний 75 Гц (период 13 мс). 150 таких периодов как раз и составит требуемые 2 с! Одна засада, после этого почти через секунду счетчик формата БАЙТ снова обнулится, и время удержания кнопки в 3,4 с дадут результат, такой, как был сразу после нажатии. Самый простой выход - использовать для счетчика переменную kol_vo формата интеджер, тогда переполнение произойдет только через 7 минут.(Сейчас глянул, у Вас она уже в таком формате, но из за малого коэффициента и он переполнится через 3,4 с sad )
3. Ну и контроль нажатия кнопки. У Вас он происходит только тогда, когда в программе встретится оператор INPUT, во все прочие моменты Вы можете жать на кнопки сколько угодно, в программе об этом не будет известно (особенно если при этом выполняется Delai). Поэтому принято такие вещи делать также с помощью прерываний, на на этот раз других, по смене стояния порта. Это делается инициализацией еще одного прерывания в самом начале программы. Я настоятельно рекомендую если возможно использовать RB0/INT, и только если он уже занят более важной задачей, или надо контролировать нажатие сразу нескольких кнопок, то RB Port Shange. Порядок следования объявления прерываний в программе отражает последовательность их обработки. То есть, когда происходит любое прерывание, сначала проверяется первое объявленное, если это оно то исполняется его макрос, если нет, то проверяется следующее объявленное и тд. При этом, если во время обработки прерывания прерывание возникло вновь, то спокойно заканчивается обработка текущего макроса, затем всех последующих, потом происходит выход из прерываний и сразу новый вход для выполнения того, что произошло. Поэтому, разумно вначале объявлять наиболее частые прерывания и делать их макросы максимально короткими. Для этого вместо исполнения некоторых программных действий в макросе прерываний принято просто устанавливать флаг-специальную переменную и выходить из макроса. В тексте основной программы в подходящем месте флаг проверяется, если он выставлен - выполняется нужная последовательность, затем флаг сбрасывается и продолжается выполнение цикла основной программы.
4. Таким образом, вся Ваша задача будет состоять из двух модулей прерываний. Первый - таймер с максимальным коэффициентом деления. Второй - прерывание по нажатии кнопки (настраивается срабатывание по нужному изменению значения на порту. В его макросе будет только обнуление переменной kol_vo и установка флага, говорящего о факте нажатия и все! В макросе таймера будет инкремент счетчика и проверка флага нажатия кнопки. Если этого флага нет, то выход, если есть, то проверка состояния счетчика. Если его значение достигло времени удержания больше, чем для запуска 1 задачи, то проверка кнопки. Если она еще нажата, то надо запускать вторую задачу, если нет, то первую. Ну и в любом случае сбросить флаг нажатия кнопки, чтобы в следующий раз он взвелся только при повторном ее нажатии. Здесь же легко сделать и выключение задач по истечении их времени. Для этого после проверки флага кнопки надо не выходить из прерываний, а проверить время. Если прошло время выполнения задачи, то выполнить выключение задач, и только потом выйти из прерывания. Конечно, зажечь или потушить ту или иную лампочку можно и прямо в макросе, но если это более сложная задача (что-то включить, подождать, потом проверить, а потом выключит и тд.) то лучше выставить флаг и обрабатывать его в основной программе (см выше)
Таким образом, контроль кнопок для для запуска разных задач будет проводиться почти без загрузки ресурсов процессора, оставляя их на выполнение других, более важных и срочных задач, включая выполнение Delai любой длительности (прерывания будут работать и все будет запускаться как надо biggrin ) Единственное, что плохо, все это очень трудно посмотреть в эмуляции в ФК, он эмулирует примерно в 800 раз медленнее, чем работает процессор, но калькулятор частоты прерываний работает исправно, ему можно верить, проверено многократно!
Надеюсь, меня простят за многословие, но думаю, эти пояснения могут быть полезны многим. Конечно, я мог бы за это время запрограммировать и отладить Ваш модуль как я полагаю, но, думаю для Вас это будет полезнее сделать самому. С удовольствием ознакомлюсь с результатами, а также проясню, что непонятно biggrin Удачи!
 
ВитаминДата: Вторник, 28.04.2009, 21:01 | Сообщение # 111
Рядовой
Группа: Пользователи
Сообщений: 5
Награды: 0
Статус: Offline
Спасибо за развёрнутый ответ! eek
Ваши обьяснения будут полезны многим, для углубления понятия происходящего в отдельных моментах, и извлечения максимально целесообраного пути в составлении программ и использовании ресурсов процессора. biggrin
Сяду переписывать wacko
 
NOPROBLEMДата: Вторник, 28.04.2009, 21:12 | Сообщение # 112
Лейтенант
Группа: Проверенные
Сообщений: 66
Награды: 0
Статус: Offline
Quote (Витамин)
Сяду переписывать wacko

Я несколько сгустил краски, относительно трудностей отладки модулей прерываний с таймером. Действительно, реальные задержки в секунду - другую надо ждать при эмулировании непростительно долго. Но вот если на момент отладки сократить временные интервалы (делителем в таймере) раз в 100, да еще и задать скорость эмуляции не максимальную (при ней не показывается окно с переменными), то очень интересно запускать программу и смотреть в ходе ее выполнения изменение всех переменных и работу всех модулей программы последовательно. Есть время не спеша все обдумать smile . В особо критичных местах можно поставить точки - брекпойнты. Или запускать пошагово. Очень интересно и полезно. Так бы и не отрывался на всякую ерунду, вроде основной работы biggrin
 
Melvin77Дата: Среда, 29.04.2009, 22:11 | Сообщение # 113
Рядовой
Группа: Пользователи
Сообщений: 10
Награды: 0
Статус: Offline
ЛЕВША, NOPROBLEM спасибо за ответы.
Но либо я к сожалению чегото не допонял, либо беззбожно туплю, либо с програмой чтото не так.
Програму взял в разделе "Технические програмы" http://elektron.ucoz.ru/load/12-1-0-90, и соответственно установил.
Первое что бросилось в глаза, в меню настроек вообще отсутствовал какой либо намек на меню выбора языка. По большому счету мне это по барабану я руссификатор ставить не собирался потому как на его ругаются, просто до этого ошибочно поставил версию для ПИКов там такое было.
Но самое интересное началось когда я не нашел вкладку свойства контролера и не смог изменить свойства портов. До этого я я изучал С и писал в CodeVisionAVR со справочником.
Если не тяжело пожалуйста слейте опробованую версию с таблеткой на какойнибудь файлообменник.


Сообщение отредактировал Melvin77 - Среда, 29.04.2009, 22:24
 
ВитаминДата: Четверг, 07.05.2009, 19:00 | Сообщение # 114
Рядовой
Группа: Пользователи
Сообщений: 5
Награды: 0
Статус: Offline
Quote (Витамин)
Приветствую всех отзывчивых! Уменя проблема с созданием алгоритма опроса одной кнопки во FlowCode, чтобы при кратковременном нажатии кнопки программа выполняла одну работу, а при удерживании, например 2 сек.,другую.

Доброго дня NOPROBLEM bye !
Громадная благодорность за хорошие ответы!!!
Прикрепляю внизу два варианта моего решения задач:
В 1-м осознал неудачность опроса кнопки и др., единственное, что сдесь радует- очень понятно выглядит эмуляция.
Во 2-м кратность предделителя поменяю на 1:255, и kol_vo в решении поменяю с 15 на 150 перед компеляцией. Как Вы понимаете они уменьшены для пошагового просмотра в эмуляции.
Однако очень хочется увидеть Ваше решение, наглядно сравнив, мне легче будет понять мои ошибки, в ходе составления программы.
Вопросы:
1. Чем запускается прерывание по таймеру, у меня прерывание инициализируется только лишь после добавления в главной программе значка "Delay".
При пошаговом входе в макрос ТО появляются дополнительные переменные, для чего они и как используются.
2. Ваше решение опроса состояния кнопки в макросе с реализацией антидребезга, или во Flowcod она решена програмно?
3. Вы были правы, насчёт одноразового использования, в начале основной программы, этого модуля "опроса кнопки и запуска одной из задач" написав:(2. Вы несколько неудачно использовали прерывание от таймера Т0. Во первых ее инициализация. Обычно она выполняется в самом начале программы, даже еще до начала бесконечного цикла . И более в программе не встречается...) Как инициализировать до цикла?
4.Не могу до конца понять настройку прерывания по таймеру. В эмуляции всё работает, как бы не не менял настройки sad Transition on TOCK pin) на " internal clock (CLCO)" и high-to-low TOCKI на low-to-high TOCK.
Заранее благодарен за ответ.
Прикрепления: spiral_pusk4.fcf (8.0 Kb) · pusk_new3a.fcf (8.0 Kb)


Сообщение отредактировал Витамин - Суббота, 09.05.2009, 15:56
 
NOPROBLEMДата: Воскресенье, 10.05.2009, 16:53 | Сообщение # 115
Лейтенант
Группа: Проверенные
Сообщений: 66
Награды: 0
Статус: Offline
Quote (Витамин)
Однако очень хочется увидеть Ваше решение, наглядно сравнив, мне легче будет понять мои ошибки, в ходе составления программы.

Ну, вот как-тот так!
Запускается все при нажатии кнопки. Фронт на В0 запускает прерывание (в железе, обычно кнопкой землится подтянутый к 1 вход, поэтому надо будет переключить запуск прерывания по срезу), при этом обнуляются оба байта счетчика и ставится флаг pusk. В ФК нет антидребезга, да он и не нужен. Если было нажатие, то по любому работа, осталось лишь выяснить-какая? Для этого проверим кнопку при времени, kol_l > 3 (время не подбирал, можно настроить любое если занести истинное значение тактовой частоты в Сhip/Clok Speed и поиграться значением условия для переменной kol_l или лучше kol_h и делителем, я для таких целей использую время 0,3с, очень хорошо отделяет короткое от продолжительного нажатия)
Я специально сделал две байтовые переменные вместо интеджер, так исполняемая программа короче и быстрее выполняется, да и всегда можно добавить байтов сколько надо.
Далее, в определенное время выключаем каждую работу.
Ну, а в основной программе только включение лампочек по флагам.
Теперь по вопросам:
1. Инициализация в начале программы. Инициализация-это включение необходимых функций микропроцессора путем занесения в соответствующие командные регистры необходимых данных. При применении "Delay" это выполняется при его инициализации. Дополнительные переменные - внутренние из макроса "Delay"
2.См. текст выше.
3. См. мою программу.
4. Это одна из пенок ФК, в железе все работает правильно.
Ну и напоследок, советую не использовать кирилицы ни в названиях модулей, ни в именах директорий, где лежит файл. Может закозлить при компиляции.
Удачи!
Прикрепления: JOB2.fcf (9.0 Kb)


Сообщение отредактировал NOPROBLEM - Воскресенье, 10.05.2009, 17:37
 
ВитаминДата: Пятница, 22.05.2009, 16:20 | Сообщение # 116
Рядовой
Группа: Пользователи
Сообщений: 5
Награды: 0
Статус: Offline
Quote (Витамин)
Приветствую всех отзывчивых! Уменя проблема с созданием алгоритма опроса одной кнопки во FlowCode, чтобы при кратковременном нажатии кнопки программа выполняла одну работу, а при удерживании, например 2 сек.,другую.

NOPROBLEM Благодарю за ответы! up RESPEСT

 
NOPROBLEMДата: Пятница, 22.05.2009, 17:34 | Сообщение # 117
Лейтенант
Группа: Проверенные
Сообщений: 66
Награды: 0
Статус: Offline
Quote (Витамин)
NOPROBLEM Благодарю за ответы!

Мелочи, не стоит biggrin Если какие вопросы или идеи возникнут - пиши. Ведь форум не только мы с тобой читаем, многим полезно.
 
Melvin77Дата: Воскресенье, 14.06.2009, 23:51 | Сообщение # 118
Рядовой
Группа: Пользователи
Сообщений: 10
Награды: 0
Статус: Offline
Доброго времени всем.
Черт дернул опять взялся за эту приблуду. Очень уж привлекает простотой.
Подскажите как проект начинается?
По моему мнению с конфигурации контролера.
Где она настраивается? Где устанавливается исходное состояние портов?
 
NOPROBLEMДата: Понедельник, 15.06.2009, 00:16 | Сообщение # 119
Лейтенант
Группа: Проверенные
Сообщений: 66
Награды: 0
Статус: Offline
Quote (Melvin77)
Подскажите как проект начинается?
По моему мнению с конфигурации контролера.
Где она настраивается? Где устанавливается исходное состояние портов?

Ну, она сама за этим следит! Когда подключается периферия и устанавливается ее подключение, то программа это делает динамически. Я это в том смысле, что один и тот же вывод можно одновременно и на вход и на выход задействовать. Там даже в хелпе нарисована типичная схема с номиналами для этого biggrin
Так что проект чрезвычайно просто начинается. Включаешь периферию в алгоритм, смотришь эмуляцию, если все нормально - генеришь ХЕКС и шьешь кристалл biggrin Вуаля, как говорят французы biggrin
Кстати, Матрикс Мультимедиа уже выпустила четвертую версию, а умельцы с казуса Казус ее неслабо окучили biggrin


Сообщение отредактировал NOPROBLEM - Понедельник, 15.06.2009, 00:19
 
Melvin77Дата: Понедельник, 15.06.2009, 23:41 | Сообщение # 120
Рядовой
Группа: Пользователи
Сообщений: 10
Награды: 0
Статус: Offline
NOPROBLEM,
За ответ спасибо, но я немного видимо туплю. Наверное это от того что "С" изначально осваивать начал и при помощи CodeVisionAVR чегото пытаться ваять. Я на сколько понимаю порты целиком или частично необходимо объявить входами или выходами ну с этим предположим немного понятно хотя и не совсем, а как быть если я не хочу подключать диоды или кнопки?, мне достаточно мигания квадратиков, а как подключить подтяжку выводов порта. По хелпнику должно быть судя по всему 3 режима конфигурации Configuration (simple), Configuration (expert), Configure. У меня при входе в меню Chip-Configure появляется окно в котором можно сконфигурировать чип только лиш записью шестьнадцатиричных чисел, а как более разумным способом это сделать как хелпе написано.
Quote
Кстати, Матрикс Мультимедиа уже выпустила четвертую версию, а умельцы с казуса Казус ее неслабо окучили

Там для ПИКов, а я АВРами балуюсь хотя уже начинаю жалеть что начал их изучать, для ПИКов больше всякого добра написано еще и на русском.
И еще вопрос, а нет ли русика для версии 3.3.5.45 для АВР?


Сообщение отредактировал Melvin77 - Понедельник, 15.06.2009, 23:48
 
ТЕХНИЧЕСКИЙ ФОРУМ » ЭЛЕКТРОНИКА » МИКРОКОНТРОЛЛЕРЫ » АЗЫ ПРОГРАММИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ - FlowCode_V3 (курс обучения для начинающих и по настоящему с нуля!)
Поиск:

Copyright MyCorp © 2024