Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: ivan_fd 
Форум Picbasic.ru » Программирование МК » PicBasicPro » Прерывание!
Прерывание!
Broka Дата: Чт, 22.10.2009, 20:43  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 245
Репутация: 9   ±
Замечания:   ±
На сайте с 30.09.2009

Статус: Offline

Прочитал несколько раз про Прерывания в микроконтроллерах,так ничего и непонял.
16F84A(В наличие). Задача состоит в том, что бы на PORTB.0 всегда выходил сигнал на инфракрасный светодиод,
а PORTA.0 принимал в это время другим датчиком и при изменение уровня на PORTA.0 включилась,та или иная функция. Программа идёт циклически,так что одновременно излучать и принимать у меня в программе неполучается.
Мне посоветовали сделать это на 16F628,так как у него есть выход аппаратного шима.Но понимаете в чём дело,если я сейчас это не пойму( именно 16F84A), потом будет труднее.
Если можете покажите пожалуйста на примере как это делается(в смысле прерывание).


Наладчик КИП и А
ЯНДЕКС Дата: 22.10.2009
Dmitry Дата: Пт, 23.10.2009, 00:22  |                                                                                                                Сообщение # 2
Группа: Пользователи
Ранг:  Могу и подсказать
Сообщений: 161
Репутация: 6   ±
Замечания:   ±
На сайте с 12.05.2009

Статус: Offline

Quote (Broka)
Но понимаете в чём дело,если я сейчас это не пойму( именно 16F84A), потом будет труднее.

Потом будет легче. На вашем нынешнем уровне разобраться с аппаратным ШИМ-ом - как раз подходящая задача. А с прерываниями (тоже аппаратными, программное вам тут не подойдет) - рановато.
ADMIN Дата: Пт, 23.10.2009, 03:26  |                                                                                                                Сообщение # 3
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1109
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

А прерывания от чего вас интересует? Просто PORTA.0 не имеет функции прерывания, а PORTB.0 имеет. Может, имеет смысл поменять местами выполняемые функции?
Broka Дата: Пт, 23.10.2009, 09:03  |                                                                                                                Сообщение # 4
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 245
Репутация: 9   ±
Замечания:   ±
На сайте с 30.09.2009

Статус: Offline

Спасибо,будем разбираться с ШИМ cool

Наладчик КИП и А
terrarus Дата: Пт, 23.10.2009, 09:41  |                                                                                                                Сообщение # 5
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 542
Репутация: 16   ±
Замечания:   ±
На сайте с 21.08.2008

Статус: Offline

Broka, советую почитать даташит на русском языке о модуле CCP (ШИМ) в PIC-микроконтроллерах . Он находится на сайте http://terrarus.ucoz.ru/proton_plus_ide/index.html далее в меню и в разделе DATASHEETs/PIC/RUS/Модуль CCP.
То есть это аппаратный узел в микроконтроллере который может работать в фоновом режиме, если его задействовать микроконтроллер может отдновременно выполнять и нужную программу и независимо от нее гнать импульсную последовательность с изменяемой скважностью на отделный вывод микроконтроллера. Обычно таких ШИМ модулей в микроконтроллере 2, но есть и с 3 модулями.
Для работы с аппаратными ШИМ модулями применяется команда HPWM
А команда PWM обеспечивает программную реализацию ШИМ. которая в фоновом режиме невозможна. То есть пока
микроконтроллер генерирует ШИМ ничего другого он делать не может.


Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
Broka Дата: Сб, 24.10.2009, 19:28  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 245
Репутация: 9   ±
Замечания:   ±
На сайте с 30.09.2009

Статус: Offline

terrarus, Спасибо большое за разьяснение,Вы мне конкретно всё рассказали про ШИМ,
Я теперь знаю ,что такой аппаратный ШИМ и что такое программный.
Ещё раз Спасибо большое smile


Наладчик КИП и А
Dmitry Дата: Сб, 24.10.2009, 20:45  |                                                                                                                Сообщение # 7
Группа: Пользователи
Ранг:  Могу и подсказать
Сообщений: 161
Репутация: 6   ±
Замечания:   ±
На сайте с 12.05.2009

Статус: Offline

Quote (terrarus)
Для работы с аппаратными ШИМ модулями применяется команда HPWM

Чет мне кажется, ему HPWM не подойдет. Ему надо
Quote (Broka)
На выходе нужна частота 36KHz

, а в мануале на пикбейсик сказано:
"HPWM Channel,Dutycycle,Frequency
...
Frequency is the desired frequency of the PWM signal. ... The highest
frequency at any oscillator speed is 32767Hz."

В протоне тоже такое странное ограничение?

Сообщение отредактировал Dmitry - Сб, 24.10.2009, 20:47
terrarus Дата: Сб, 24.10.2009, 21:01  |                                                                                                                Сообщение # 8
Группа: Модераторы
Ранг:  Разобрался
Сообщений: 542
Репутация: 16   ±
Замечания:   ±
На сайте с 21.08.2008

Статус: Offline

Да в Протоне такое ограничение существует. Если его не устроит максимально возможная частота в 32767 Гц. то придется ему писать вставку на асемблере, что наверное на этом этапе для него будет сложно, если не сказать больше...
А может быть его устройство будет нормально работать на частотах около 32 кГц.


Если у в Вас что-то не получается, подумай, не стоит ли прочитать инструкцию...!
Dmitry Дата: Сб, 24.10.2009, 21:17  |                                                                                                                Сообщение # 9
Группа: Пользователи
Ранг:  Могу и подсказать
Сообщений: 161
Репутация: 6   ±
Замечания:   ±
На сайте с 12.05.2009

Статус: Offline

Зачем на ассемблере? Пусть напрямую пишет в регистры модуля CCP прямо на бейсике. Вот разобраться в назначении отдельных битов этих регистров будет сложновато. Если с техническим английским проблемы,
то можно почитать тут:
http://www.microchip.ru/files/d-sheets-rus/pic16f62x.pdf
на стр. 63-64. Особенно пункт 10.3.3 (стр. 64)

Сообщение отредактировал Dmitry - Сб, 24.10.2009, 21:44
rdx75 Дата: Чт, 19.11.2009, 02:11  |                                                                                                                Сообщение # 10
Группа: Проверенные
Ранг:  Новенький
Сообщений: 8
Репутация: 0   ±
Замечания:   ±
На сайте с 29.08.2009

Статус: Offline

Ребята, кто подскажет в чем ошибка в коде программы. Мк 16f873a.
Короче прога меряет (точнее должна мерять) сколько машинных циклов пройдет за время когда на входе portb.4 сменится логическое значение и пускает результат по rs232 на комп. Для замера количества тактов используется таймер TMR1.

Вот текст самой проги:

Include "modedefs.bas" ' Описание режимов последовательного порта

INTCON = 0
OPTION_REG = %10000000 'подтягивающие резисторы выключены
t1con = %00000001 'включение модуля tmr1

'----------------Настройки порта B,C -----------------------------

TrisB = %00010000 ' 1 = вход, 0 = выход
portb = %00000000
trisc = %10000000 'на портс.7 вход данных на рс232 (портс.6 - выход)
portc = %00000000
c1 var byte
c2 var byte
t1 var bit 'значение предыдущего состояния входа
c1=0:c2=0

pir1.0 = 0 'обнулен флаг по переполнению таймера TMR1

Begin:

if (portb.4 = 1 and t1 = 0) or (portb.4 = 0 and t1 = 1) then
c1 = tmr1h: c2 = tmr1l 'таймер TMR1 16-рязрядный, поэтому у него 2 регистра tmr1h и tmr1l
tmr1h = 0: tmr1l = 0
serout portc.6, T2400, [c1,c2]
t1 = portb.4
endif

goto Begin

end

Но прога почему-то выдает на комп только нули, но зато только в моменты смены логического уровня на входе portb.4

Dmitry Дата: Чт, 19.11.2009, 22:33  |                                                                                                                Сообщение # 11
Группа: Пользователи
Ранг:  Могу и подсказать
Сообщений: 161
Репутация: 6   ±
Замечания:   ±
На сайте с 12.05.2009

Статус: Offline

а комп как принимает, терминалом или спец прогой? мож лучше отсылать serout portc.6, T2400, [dec c1, dec c2] в терминал для проверки?
rdx75 Дата: Сб, 21.11.2009, 00:50  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Новенький
Сообщений: 8
Репутация: 0   ±
Замечания:   ±
На сайте с 29.08.2009

Статус: Offline

Весь прикол в том, что этот код работает. Когда я на следующий день запустил комп и включил мк все сразу заработало. Видимо у меня просто завис ком-порт. Для обмена данными я использую прогу COMPump.
Dmitry Дата: Вс, 22.11.2009, 22:38  |                                                                                                                Сообщение # 13
Группа: Пользователи
Ранг:  Могу и подсказать
Сообщений: 161
Репутация: 6   ±
Замечания:   ±
На сайте с 12.05.2009

Статус: Offline

Ну слава богу! А то я минут 10 втыкал в код, тож не мог понять почему он не работает smile
Форум Picbasic.ru » Программирование МК » PicBasicPro » Прерывание!
Страница 1 из 11
Поиск: