Технический Портал Левши Пятница, 29.03.2024, 17:29
| RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Модератор форума: terpelivi, VasylYE  
ТЕХНИЧЕСКИЙ ФОРУМ » ЭЛЕКТРОНИКА » МИКРОКОНТРОЛЛЕРЫ » АЗЫ ПРОГРАММИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ - FlowCode_V3 (курс обучения для начинающих и по настоящему с нуля!)
АЗЫ ПРОГРАММИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ - FlowCode_V3
ЛЕВШАДата: Воскресенье, 05.07.2009, 00:23 | Сообщение # 136
Admin
Группа: Администраторы
Сообщений: 1923
Награды: 2
Статус: Offline
Привыкайте - среда раработки это только инструмент а не панацея.
Полагаться только на прогу нельзя, голову тоже подключать нужно. smile
После разаботки программы, перед прошивкой в камень обязательно перепроверяйте в PROTEUS
Это позволит избежать критических ошибок, но помните что протеус тоже не панацея... smile


упростить - улучшить!
если ВЫ хотите помочь сайту в развитии,
наши счета:
Z789673670495 ($)
R806233314616 ®
41001205775274(yand)
 
Melvin77Дата: Воскресенье, 05.07.2009, 09:28 | Сообщение # 137
Рядовой
Группа: Пользователи
Сообщений: 10
Награды: 0
Статус: Offline
Помогите с такой проблемой. Семисегментные индикаторы в програме реализованы с обшим анодом, а как сделать их с обшим катодом?.
 
NOPROBLEMДата: Воскресенье, 05.07.2009, 09:38 | Сообщение # 138
Лейтенант
Группа: Проверенные
Сообщений: 66
Награды: 0
Статус: Offline
Quote (Melvin77)
Помогите с такой проблемой. Семисегментные индикаторы в програме реализованы с обшим анодом, а как сделать их с обшим катодом?.

Или ставить транзисторные инверторы на каждый сегмент (можно и микросхемы, но ИМХО ьудет более громоздко) или переписывать макрос cry
 
Melvin77Дата: Воскресенье, 05.07.2009, 21:35 | Сообщение # 139
Рядовой
Группа: Пользователи
Сообщений: 10
Награды: 0
Статус: Offline
Quote
Или ставить транзисторные инверторы на каждый сегмент (можно и микросхемы,

Да у меня готовая плата с напаяными компонентами поэтому железо уже никак. Вообщето хочу в качестве тренировки написать небольшую програмку для проверки трех техразрядных семисегментников с обшим катодом. Плата очень ужатая и бывают проблемы с микротрещинами на дорожках, уже сколько раз бока были. Я бы на Си написал но интересно в FlowCode написать очень очень удобно.
Quote
или переписывать макрос

Ачто значит макрос переписать?, а как его переписывать?, если можно подробнее, а нет ли готового.
 
NOPROBLEMДата: Воскресенье, 05.07.2009, 21:49 | Сообщение # 140
Лейтенант
Группа: Проверенные
Сообщений: 66
Награды: 0
Статус: Offline
Quote (Melvin77)
Ачто значит макрос переписать?, а как его переписывать?, если можно подробнее, а нет ли готового.

Сам я этого не делал, но полагаю, что поступил бы следующим образом:
1. Написал бы возможно короткую программу с обращением к индикаторам.
2. Откомпилировал ее в С
3. Просмотрев код, нашел библиотеку, где идет обращение к портам при выводе на индикатор.
4. Изменил бы в ней полярность требуемым образом
5. Заставил бы ФК выполнять измененный кусок программы вместо родного. Там вроде для этого есть немало средств, но их как-то обходил пока и ничего конкретного посоветовать не могу, знаю только что можно.
Удачи, что получится - напиши!
 
shura_gamДата: Воскресенье, 05.07.2009, 23:01 | Сообщение # 141
Рядовой
Группа: Пользователи
Сообщений: 1
Награды: 0
Статус: Offline
А подскажите пожалуйста как решить такую проблему: имеется поток PCM на входе PIC16F628A амплитудой 3 вольта. Необходимо выдать на выходе импульс при пропадании потока в течении например 1 секунды.
 
NOPROBLEMДата: Понедельник, 06.07.2009, 00:28 | Сообщение # 142
Лейтенант
Группа: Проверенные
Сообщений: 66
Награды: 0
Статус: Offline
Quote (shura_gam)
А подскажите пожалуйста как решить такую проблему: имеется поток PCM на входе PIC16F628A амплитудой 3 вольта. Необходимо выдать на выходе импульс при пропадании потока в течении например 1 секунды.

Для начала настрой таймер. Это нужно поставить в самом начале программы инициализацию прерываний, выбрать в нем инициализацию по переполнению таймера, не забыть в окошке переключить работу таймера от внутреннего тактового генератора. Затем установить делитель так, чтобы прерывания происходили с частотой, достаточной для установки точности твоего отсчета в 1с.
Затем заполняешь макрос подпрограммы прерывания. Тебе понадобятся два флага (биты в переменных), один будет говорить о том, что время надо считать (ф1), другой, что секунда уже прошла (ф2) (имена переменных пиши только латиницей!) и еще переменная счетчика (обычно байт)
Так вот, в макросе прежде всего проверяешь ф1. Если она равна нулю - выход из прерывания. Если нет-инкремент счетчика, если он отсчитал 1 секунду, то устанавливаешь Ф2 и сбрасываешь Ф1, если нет, выходишь из прерывания.
В основной программе. После блока инициализации прерывания настройка компаратора (в ФК-3- только вставками на ассемблере или С, в ФК-4- не знаю), затем бесконечный цикл, внутри него проверка - если выход компаратора нуль - устанавливаешь Ф1, и проверяешь ф2, если он не нуль-формируешь импульс, сбрасываешь в нуль ф2 и завершаешь цикл. Если вход компаратора не нуль - сбрасываешь в нуль ф1 и ф2
Вот и все!
 
ValeronДата: Среда, 08.07.2009, 07:09 | Сообщение # 143
Рядовой
Группа: Пользователи
Сообщений: 1
Награды: 0
Статус: Offline
У меня такой вопрос, у кого-нибудь есть пример программы на flowcode avr подключения термодатчика ds18b20. Мучаюсь 3 день, никак не получается считать данные. Помогите!!!
Если у кого нибудь есть примеры программ(или стандартные examples) на flowcode avr скиньте пожалуйста. Зарание благодарен.
 
GirsanДата: Воскресенье, 26.07.2009, 22:45 | Сообщение # 144
Рядовой
Группа: Пользователи
Сообщений: 4
Награды: 0
Статус: Offline
отдохнув немного после первой неудачи, решил разобраться в чем дело - составил простенькую програмку мигание всех светодиодов (pic12f629) проверил в proteus кукиш не работает. Поменял в ФК контроллер на pic16f628a откомпилировал проверил и о чудо заработал мигает 5 портами А. Решил что ФК недолюбливает pic12. Тогда в своем первом проекте поменял контроллер на pic16f628a загнал в proteus ни хрена не заработало.
Решил откомпилировать с-файл в microC но он заругался что не смог прочитать файлы:
C:/Program Files/Matrix Multimedia/Led_Blinking.c:6: warning: The macro is redefined
#define P12F629
previously macro "P12F629" defined as: #define P12F629 1 /* (predefined):0 */
C:/Program Files/Matrix Multimedia/Led_Blinking.c:12: error: Can't open include file "system.h"
#include <system.h>
c:/program files/matrix multimedia/flowcode v4/fcd/internals.h:51: error: Can't open include file "float.h"
#include <float.h>
from C:/Program Files/Matrix Multimedia/Led_Blinking.c: 19: #include "C:\Program Files\Matrix Multimedia\Flowcode V4\FCD\internals.h"
2 errors in preprocessor.

короче на маялся а разобраться не смог. Помогите разобраться. Неужели ФК при фомировании hex делает какието ошибки? wacko

Добавлено (26.07.2009, 22:45)
---------------------------------------------
привет всем! Уменя халявы с ФК так и не получилось. Порывшись в интернете нашел книгу а потом и сайт Корабельникова Е.А "самоучитель по програмированию PIC для начинающих" класная книга, за неделю навоял прогу на асемблере котороя в ФК не пошла biggrin , но потрудится пришлось!. Так что не так страшен асемблер как его малюют!

 
carworkerДата: Вторник, 11.08.2009, 22:37 | Сообщение # 145
Ефрейтор
Группа: Проверенные
Сообщений: 20
Награды: 1
Статус: Offline
FC AVR Где в своиствах "Прерывания" (только там есть таймер 0 по переполнению) выбрать "внутренний генератор" и как можно использовать в "Прерывание по" вкладку "Выбор"? А по большему счету хотелось бы что бы кто нибуть показал живой, рабочий пример для FC AVR работы счетчика прерываний с выполнением команды например: включить диод, через 1 сек погасить, опять включить на 1 сек, погасить. Не понимаю как это сделать. Дальше чем 1+ 1 у меня не идет.
 
NOPROBLEMДата: Вторник, 11.08.2009, 23:35 | Сообщение # 146
Лейтенант
Группа: Проверенные
Сообщений: 66
Награды: 0
Статус: Offline
У меня для ПИКа, но интерфейс аналогичный. Когда ты поставишь в алгоритм иконку прерывания, кликнешь по ней и выберешь прерывания от переполнения таймера, то справа от этого окошка будет окошко свойств. В нем можно выбрать источник сигнала для таймера, фронт, по которому он считает и значение коэффициента деления. Внизу для твоей тактовой частоты будет посчитана частота прерываний. Как с этим дальше работать можно прочитать в этой ветке, например мой пост №110 и далее. Если разберешься с алгоритмом, то многое поймешь, а что не поймешь - спрашивай!
 
carworkerДата: Понедельник, 17.08.2009, 01:06 | Сообщение # 147
Ефрейтор
Группа: Проверенные
Сообщений: 20
Награды: 1
Статус: Offline
Вот с ходу не понятно. ФК 3.3.5.45 AVr Прикрепил скриншоты квадратика "Прерывание". Что такое "no clock"? Изначально при выборе чипа устанавливается тактовая частота чего? Внутренняя, внешняя? Дело в том что у меня есть пара рабочих игрушек в железе без прерываний в программе, но я из ФК брал только Си, загонял его в CVAVR и уже там настраивал порты, частоту, итд. И с нее заливал в камень. И если не трудно изложите в двух словах принцип построения алгоритма.
Прикрепления: FCavr.rar (42.8 Kb) · int.fcf_avr.noext (4.0 Kb)


Сообщение отредактировал carworker - Понедельник, 17.08.2009, 01:45
 
NOPROBLEMДата: Понедельник, 17.08.2009, 14:40 | Сообщение # 148
Лейтенант
Группа: Проверенные
Сообщений: 66
Награды: 0
Статус: Offline
Quote (carworker)
ФК 3.3.5.45 AVr Прикрепил скриншоты квадратика "Прерывание". Что такое "no clock"? Изначально при выборе чипа устанавливается тактовая частота чего? Внутренняя, внешняя?

На самом деле источник (генератор) тактовой частоты не важен. Просто для учета временнЫх интервалов ФК должно знать, на какой частоте процессор работать будет, вот и просит Вас ее указать. Это ни на что другое не влияет и в программе проявляется только как изменение рассчитанных по этим данным числа тактов задержек, например в DELAY. А вот по поводу "no clock" вопрос не сюда, а к даташиту. У меня такого пункта нет. Дело в том, что у разных кристаллов разные механизмы прерываний и разные делители подключать можно. Подключение многих из них ребята из МатриксМультиМедиа автоматизировали в виде выбора в выпадающем окошке, но далеко не все, хотя, те что сделали, сделали почти без ошибок. Но они все-таки есть. Похоже здесь, при отсутствии тактирования считается частота прерываний как для делителя 1:1. Вроде он и эмулироваться в программе так-же будет, а вот если в кристалл прошьете, ничего работать не будет. Ну простим их, с кем не бывает!
Quote
я из ФК брал только Си, загонял его в CVAVR и уже там настраивал порты, частоту, итд

А частоту ФК и не может настраивать, Он только HEX генерирует, а слово конфигурации процессора, где тактовый генератор указывают настраивают интегрированные с ним программаторы, причем в ФК-4 интеграция еще сильнее сделана и уже начинает доставать angry Я тоже не пользуюсь ни одним из их программаторов, правда еще не смотрел, что что и как в настройках поменять можно.
В новых ПИКах, например, можно программно перестраивать частоту внутреннего тактового генератора. ФК это не осилил, и ее и настраивать нужно вставками на С или АСМ, и эмулирует он только на одной частоте, правда переключается она легко.
А вот порты Вы зря настраиваете. В ФК это сделано уже, причем динамически, то есть один и тот же вывод можно одновременно и на выход и на вход использовать. Подробности об этом с примерами схемных решений можно посмотреть в Хелпе, там где описано подключение светодиодов.
Quote
И если не трудно изложите в двух словах принцип построения алгоритма.

Микропроцессор (МП) - это железяка, которая реагирует на входные сигналы изменением напряжений на своих ножках. Его возможности разработчик изложил в даташите. ФК позволяет анализировать работу МП путем анализа горения светодиодов, при изменении входных сигналов кнопками/тумблерами.
В большинстве наших случаев алгоритм начинается с инициализации, где подключаются и настраиваются все задействованные модули.
Следующим этапом обычно устанавливается бесконечный цикл, который повторяет тело (что внутри цикла) заново без конца, каждый раз, когда очередной цикл будет выполнен. Наполнение тела цикла зависит только от решаемой задачи. Она исполняется путем анализа входов (путем копирования их состояния в значение переменной), проведения необходимых расчетов, и установки значений комбинации выходов. В ФК входы и выходы настраиваются автоматически и очень корректно каждый раз, когда задействуются функции обращения к ним.
Для того, чтобы временные интервалы не зависели от длительности выполняемых расчетов, используется аппарат прерываний, который генерирует корректную АППАРАТНУЮ приостановку выполняемой программы для организации расчетов с целью тактирования управления. Также прерывания используются для реакции на те воздействия, которые надо обработать срочно, не дожидаясь когда подойдет их очередь в цикле работы. Обычно, подпрограмма прерываний не выполняет какие-либо серьезных действия, а устанавливает значение специально выделенной для этого переменной - Флага. В основной программе, где надо его состояние проверяется и при необходимости выполняется последовательность необходимых действий.
Не все возможности МП ФК автоматизировала, но с ее помощью легко можно все дополнить на С или АСМ если прочитать даташит.
 
carworkerДата: Четверг, 20.08.2009, 23:58 | Сообщение # 149
Ефрейтор
Группа: Проверенные
Сообщений: 20
Награды: 1
Статус: Offline
NOPROBLEM Большое спасибо! Однако прерывания все равно спокойно спать не дают. Продолжаю задавать вопросы. Прикрепил файлы. Посмотрите, есть между примером int.fcf_avr и примером m int.fcf_avr принципиальная разница? Является ли пример m int.fcf_avr счетчиком по переполнению? Если в этом примере число 255 представить в виде переменной и менять ее значение, то что это будет ШИМ? Я в даташите Atmega 16- 32 не нашел что такое no clock. Но если в свойствах прерываний установить предделитель 1:1 или 1:255 то ничего не работает. Только no clock. Как Вы думаете это глюк ФК или как? И последнее. В примере m int eror.fcf знчек прерываний я поставил перед циклом. То есть с точки зрения Си я обьявил прерывания. По сравнению с примером m int.fcf_avr изменилось все. Получилась моргалка с задержкой. Или если просто всавить коментарий то ФК обязятельно вернется в счетчик и добавит 1. По логике Си такого быть не должно.
Прикрепления: 7253199.noext (4.0 Kb) · mint255.fcf_avr.noext (4.5 Kb) · mint255eror.fcf.noext (4.5 Kb)
 
NOPROBLEMДата: Пятница, 21.08.2009, 01:39 | Сообщение # 150
Лейтенант
Группа: Проверенные
Сообщений: 66
Награды: 0
Статус: Offline
Quote (carworker)
Прикрепил файлы.
К сожалению у меня нечем открыть этот формат. Попробовал переименовать и импортировал в ФК для ПИКов. Посмотрел программки. Настраивать прерывание, конечно, нужно вне цикла. Как и любую настройку ее надо делать однажды и в самом начале. Когда он у тебя в цикле торчал, то каждый раз инициализировался и счетчик свой обнулял, вот и висел в цикле. Мог бы и сам это все посмотреть в пошаговом режиме, нажимая F8. Если в процессе работы какие-то параметры настройки надо менять, то это ИМХО надо оформить как параметр в макросе прерываний, и менять этот параметр.
Теперь о самом прерывании. Поскольку файл импортный, у меня в окошке свойств прерываний вообще пусто, но калькулятор показывает частоту прерываний в 15гц. Такого быть не может, это у него глюк. А анализировать возможную реакцию при глюке дело бесперспективное. ИМХО надо найти в даташите приемлемый вариант и попытаться его в ФК реализовать, тем более, что он для этого очень предназначен. Если надо время отсчитать, то надо задействовать таймер Т0. На вход ему подключается тактовая процессора. Если без делителя (1:1), то счетчик переполнится с частотой почти 4кГц, если 1:255 то через 1/15 секунды. В этом случае он корректно упакует все регистры и придет в свой макрос, выполнив все то, что между старт и конец расположено. После этого корректно продолжит основную программу.Почему у тебя ничего не работало? Да ты просто ничего не замечал! Чтобы заметить, надо поставить время эмуляции поменьше, чем максимально возможное. Тогда он тебе покажет, что через 256 тактов (при 1:1) возникнет прерывание и счетчик (значение всех переменных в окошечке будут) изменит свое значение. Очень не скоро он переполнится и ты из первого цикла во второй перскочишь... Ты видимо до этого счастья еще не дожил, а переменные не видел из за того, что скорость эмуляции максимальную поставил. При отладке прерываний счетчик вместо 255 надо на 2 переписать, а то от скуки взбесишься, глядя как квадратики мелькают. Только потом не забудь вернуть назад!
Еще замечание. Результат работы русифицированной версии вряд ли удастся откомпилировать. Дело в том, что транслятор с С русские буквы, неважно где угодно, воспринимает за управляющие символы и результат непредсказуем.
Ну и по структуре программы. Тут, конечно, дело вкуса. Но я бы отсчет времени в прерываниях весь сделал. Он несколько тактов в него входил, пару тактов на проверки его не сильно удлинят. Ну например, тебе надо чтобы лампочки с частотой в 1Гц мигали. Ставишь делитель прерываний 1:128, (30 гц) и после инкремента счетчика проверяешь, не достиг ли он 15? Если достиг - обнуляешь счетчик и выставляешь флаг (присваиваешь любое ненулевое значение специально выделенной для этого переменной).
В основной программе проверяешь флаг, если он есть-сбрасываешь его в нуль и проверяешь лампочку: горит -тушишь, нет - зажигаешь. И все это внутри бесконечного цикла. Но если только лампочку включать, то можно без всякого флага, прямо в прерываниях ее и включать и выключать, тогда в основной программе только бесконечный цикл останется.
Quote
Если в этом примере число 255 представить в виде переменной и менять ее значение, то что это будет ШИМ?

Да это будет он, родимый. Но надо еще и время паузы тоже менять. Но это надо все в прерываниях делать. И других прерываний не использовать. А то он на время любого прерывания программу приостонавливает. Если в это время ШИМ формирует короткий временной интервал, то он будет удлиннен до окончания обработки прерывания. Это будет редко, но тем обиднее. Как редкие сбои. Также неприятности будут, если значение меняешь во время сравнения. Поэтому проще взять кристалл, где он аппаратно уже есть. Прописал значение в регистр и все. Он сам все аппаратно без сбоя формировать и на приличной частоте будет.
ЗЫ А вообще тут есть даже отдельная ветка с примерами программной реализации ШИМа
 
ТЕХНИЧЕСКИЙ ФОРУМ » ЭЛЕКТРОНИКА » МИКРОКОНТРОЛЛЕРЫ » АЗЫ ПРОГРАММИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ - FlowCode_V3 (курс обучения для начинающих и по настоящему с нуля!)
Поиск:

Copyright MyCorp © 2024