Помогите разобраться с программой - Страница 2 - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 2 из 2«12
Модератор форума: terrarus 
Форум Picbasic.ru » Программирование МК » Mikrobasic » Помогите разобраться с программой (Не работает)
Помогите разобраться с программой
retas Дата: Сб, 05.03.2011, 11:13  |                                                                                                                Сообщение # 16
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 462
Репутация: 10   ±
Замечания:   ±
На сайте с 10.09.2007

Статус: Offline

1. На счет доп.ЛОГИКИ - оно дало бы только возможность ОДНОВРЕМЕННО следить за двумя
сигналами. МК этого в принципе не может, но пожалуй с вашим подходом (с INT и CCP) вроде
должно получиться - у меня такого опыта нет.
2. Какой либо сигнал на выходе логики, появлялся бы только при появлении хоть какого то сдвига
между имп.
3. Как то я не пойму "это я рассчитаю только смещение, а мне необходимо знать и ширину"?
ПМ, смещение и есть ширина, только выражена в тактах таймера.

4. По вами представлену алгоритму программы, выходит что вам не требуется одновременно
следить за несколькими сигналами да и что сравнивать - получили, скажем, 10 импульсов и
ширину импульса в 1мс?!
5. По ранее вами написанному "посчитать количество импульсов на оборот от начала отсчета",
так вам нужно в МК иметь четко заданную длительность равную необходимой длительности
импульса с датчика и её сравнивать с реально получаемой с датчика.

Удачи.


Новый подход к питанию потребителей переменного тока: http://ekolaif.ucoz.ru
Сообщение отредактировал retas - Сб, 05.03.2011, 11:14
ЯНДЕКС Дата: 05.03.2011
Axell Дата: Сб, 05.03.2011, 12:14  |                                                                                                                Сообщение # 17
Группа: Пользователи
Ранг:  Новенький
Сообщений: 13
Репутация: 0   ±
Замечания:   ±
На сайте с 25.02.2011

Статус: Offline

Quote (retas)
По ранее вами написанному "посчитать количество импульсов на оборот от начала отсчета", так вам нужно в МК иметь четко заданную длительность равную необходимой длительности импульса с датчика и её сравнивать с реально получаемой с датчика.

Посмотрите выше проект, там это реализовано уже...Мне не надо сравнивать в мк ничего, просто подсчитать кол-во импульсов..Какое должно быть мне уже заранее известно, просто нуно знать, правильно ли оно или нет..

Quote (retas)
Как то я не пойму "это я рассчитаю только смещение, а мне необходимо знать и ширину"? ПМ, смещение и есть ширина, только выражена в тактах таймера.

Ширина -- это длительность положительного фронта импульса..Импульсы подаются смещенными друг относительно друга..Мне нуно знать величину смещения в тактах и длительность импульса, что бы понять в какую сторону смещен -- для дальнейшей настройки..См. рисунок выше.

Quote (retas)
По вами представлену алгоритму программы, выходит что вам не требуется одновременно следить за несколькими сигналами да и что сравнивать - получили, скажем, 10 импульсов и ширину импульса в 1мс?!

В принципе так оно и есть..Просто на мк заводится три канала с импульсами и в зависимости от выбранной программы выполнять действия...

Но..Главные вопросы у меня написаны в предыдущем посте..По поводу прогаммы..

Сообщение отредактировал Axell - Сб, 05.03.2011, 12:14
ADMIN Дата: Сб, 05.03.2011, 12:36  |                                                                                                                Сообщение # 18
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

На ЖКИ подходит 6 ног минимум. Второе, прерывания можно настроить в том месте, где они тебе будут нужны.
Подпрограммы оформляются так:

sub function function_name(...) as return_type
<объявление локальных переменных>
...
end sub

В теле Main подпрограмма вызовется как

function_name()

Прочитай в справке Microbasic - Program organization.

Потом, зачем считать нажатия кнопок? Думаю, что по одному таймеру ты можешь начать счет ширины одного импульса, а по приходе второго, не сбрасывать таймер, а зафиксировать в переменную смещение, и продолжать счет всей ширины импульса. Ну как-то так

Axell Дата: Пт, 11.03.2011, 00:22  |                                                                                                                Сообщение # 19
Группа: Пользователи
Ранг:  Новенький
Сообщений: 13
Репутация: 0   ±
Замечания:   ±
На сайте с 25.02.2011

Статус: Offline

Подскажите плиз...
Использую модуль ССР, настрроил на захват по переднему фронту.Нуно в теле программы переключится на захват по заднему и расчитать разницу..Подскажите плиз как это сделать, а то мне не очень понятно из документации..

И исче..Я так понимаю, что захваченное значение TMR1 нуно сохранять в регистр или в область памяти,что бы потом произвести математические действия. подскажите плиз как правильно это делать(сохранять)..Я пытался сохранять в переменную(это не правильно)-- оно меняется с каждым изменением значения захвата..

Спасибо..

Прикрепления: 3795377.rar(80Kb)
ADMIN Дата: Пт, 11.03.2011, 05:00  |                                                                                                                Сообщение # 20
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

А где вчерашний вариант? В этом варианте получается, что значение переменной меняется с каждым изменением значения захвата потому, что оно стоит в теле программы, а не в прерывании:
Code

      while TRUE
          Delay_Ms(200)
          if PORTB.5 = 0 then
                   pulse= 0
                   TMR1H = 0
                   TMR1L = 0
                   CCPR1L = 0  'А здесь постоянно обнуляется CCPR1
                   CCPR1H = 0  
                   T1CON.0 = 0
                          

          end if

                   pulse = (TMR1H*256)+TMR1L
                   imp_2 = CCPR1L + (CCPR1H*256)
                   shirina = imp_1 - imp_2 'Здесь постоянно происходит вычитание и так до бесконечности

                   WordToStr(pulse,pulse_ex)
                   Lcd_Out(1,3, pulse_ex)

                   WordToStr(imp_2,null_ex)
                   Lcd_Out(2,3,null_ex)

                   WordToStr(shirina,shiri na_ ex)    
                   Lcd_Out(1,11,shirina_ex )

                   WordToStr(imp_1,imp_1_ex)
                   Lcd_Out(2,11,imp_1_ex )
      wend

Вариант, который я отправил вчера, содержал две строчки - CCP1CON = 0x05(включает захват по переднему фронту), и CCP1CON = 0x04(включает захват по срезу импульса). Причем этот вариант работал(там нужно было только учесть время в нахождения в прерывании).
В момент прихода импульса устанавливается флаг CCP1IF, что вызывает прерывание. В прерывании проверяем, если включен захват по переднему фронту, то значение CCPR1L и CCPR1H закидываем в переменную(это будет точка отсчета ширины импульса) и устанавливаем прерывание по срезу импульса. Потом сбрасываем флаг прерывания CCP1IF и ждем следующего прерывания по срезу. Как только мы вошли в прерывание, то вычитаем текущее значение CCPR1 и значение начала отсчета ширины импульса. Получаем ширину.Что там не понравилось?

Прикрепления: default.rar(402Kb)
Axell Дата: Пт, 11.03.2011, 06:37  |                                                                                                                Сообщение # 21
Группа: Пользователи
Ранг:  Новенький
Сообщений: 13
Репутация: 0   ±
Замечания:   ±
На сайте с 25.02.2011

Статус: Offline

Quote (ADMIN)
А где вчерашний вариант?

Извините за дублирование.
Просто на момент написания этого ответа мой ясчик еще был пуст.. sad
Сча все есть и будем разбираться..
Спасибо Вам..

Axell Дата: Пт, 11.03.2011, 20:50  |                                                                                                                Сообщение # 22
Группа: Пользователи
Ранг:  Новенький
Сообщений: 13
Репутация: 0   ±
Замечания:   ±
На сайте с 25.02.2011

Статус: Offline

Уважаемый ADMIN подскажите плиз, как в ПРОТЕУСЕ подать вот такие 2 последовательности импульсов на разные входа со смещением..А то как не кручу у меня хоть по одному фронту но совпадает..

Спасибо

Прикрепления: 0216965.jpg(54Kb)
DAlexV Дата: Пт, 11.03.2011, 23:22  |                                                                                                                Сообщение # 23
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 691
Репутация: 17   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

"Бог в Помощь !!!" (м.ф. Жил был пес) biggrin

Берем 2 источника прямоугольных импульсов. Частота у обоих одинаковая(какая требуется). Смещение регулируем в генераторе B (задержкой первого фронта)
схему прицепил. Успехов wink

Прикрепления: 2_Gen.dsn(55Kb)


Будьте оригинальны - не повторяйте чужих ошибок !!!!
Пишу только на Рыбе (SwordFish). Другую пищу не предлагать, на шерсть влияет :)
ADMIN Дата: Сб, 12.03.2011, 07:51  |                                                                                                                Сообщение # 24
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Применительно к PIC можно использовать 2 таймера. Один использовать для генерации одной последовательности, другой - для другой. Главное - это вычислить точное время нахождения в прерывании для точной генерации.
Axell Дата: Сб, 19.03.2011, 00:21  |                                                                                                                Сообщение # 25
Группа: Пользователи
Ранг:  Новенький
Сообщений: 13
Репутация: 0   ±
Замечания:   ±
На сайте с 25.02.2011

Статус: Offline

Подскажите плиз, почему проект в протеусе работает в идеале, а как соберу в железе то со счетом начинается свистопляска... cry Нет стабильности в измерении импульсов..Даже при измерении ширины на каждом импульсе разное значение, хотя импульсы поступают с одинаковым периодом..Правда не такие идеальные, как в Потеусе(у меня есть маленьие срезы на заднем фронте), но все же почему так...

ПыСы.Пробовал подовать на контроллер через делитель -- становилось лучше, но не идеально..

Программа нужна для проверки вот такого устройства...Только на приведенной схеме 15В, а у меня устройства на 5В...Принцип один и тот же..

И исче вопрос, как измеряется скважность..?? В доке написано так : конфигурируем на захват по пер.фронту - сохраняем, конфиг.по заднему - высчитываем, конфиг. опять по переднему- высчитываем - сдесь судя по докум. должно сохранится первое и последнее значение, а у меня первое почемуто перепиcываетя последним и ничего не получается..Почему так.?

Code

         if CCP1CON = 0x05 THEN   
            imp_1=  CCPR1L + (CCPR1H*256)                       
                 CCP1CON= 0x04                     
                 imp_2 = CCPR1L + (CCPR1H*256)            
                   ELSE
                 CCP1CON= 0x05                     
                 W = (CCPR1L + (CCPR1H*256)) - imp_2       
                 T=(CCPR1L + (CCPR1H*256)) - imp_1
                 S=T / W
                end if

Добавлено (19.03.2011, 00.21.40)
---------------------------------------------
C предыдущим вопросом разобрался... smile

Возник другой вопрос..
Как правильно вывести результат деления, который получается дробным...
Например : двоичный код (0001) / двоичный код (0010) = результат в десятичном (0.5)
Как правильно ето оформить в программе..??

Сообщение отредактировал Axell - Сб, 19.03.2011, 00:23
Men Дата: Чт, 15.03.2012, 16:31  |                                                                                                                Сообщение # 26
Группа: Проверенные
Ранг:  Новенький
Сообщений: 2
Репутация: 0   ±
Замечания:   ±
На сайте с 15.03.2012

Статус: Offline

Доброго времени!!!На просторах интернета попалась программка...скопировав ее захотелось немного поучится в освоении программирования на примере простой программки.Пытаюсь ее компилировать...а mikroBasic v7.0.0.2 не хочет ничего делать....Помогите пожалуйста....может что то не так в программе...или подскажите что нужно сделать....чтобы получить HEX ?Заранее спасибо!!!
Прикрепления: _1057PIC628.pbas(5Kb)
ivan_fd Дата: Чт, 15.03.2012, 17:46  |                                                                                                                Сообщение # 27
Группа: Модераторы
Ранг:  Специалист
Сообщений: 882
Репутация: 47   ±
Замечания:   ±
На сайте с 12.01.2009

Статус: Offline

Так это не проект, а какой то набор букв. Посмотрите на примеры среды разработки, там много всего.
И скачайте свежий компилятор.


Меня все время преследуют умные мысли...но я быстрее!!!
Форум Picbasic.ru » Программирование МК » Mikrobasic » Помогите разобраться с программой (Не работает)
Страница 2 из 2«12
Поиск: