Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Модератор форума: demanik, ivan_fd  
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Регулятор яркости на pic
Регулятор яркости на pic
tolyan249 Дата: Ср, 31.10.2012, 16:58  |                                                                                                                Сообщение # 16
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 183
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

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

если знаешь,помоги.
Сообщение отредактировал tolyan249 - Ср, 31.10.2012, 16:59
Matrix252005 Дата: Ср, 31.10.2012, 17:09  |                                                                                                                Сообщение # 17
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 636
Репутация: 43   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

У Вас прога не выходит из прерываний!!! Вот в этом и вся проблема!!! Я так понял, Вы взяли один проект и скрестили его с другим... Я прав???

THE TRUTH IS OUT THERE.

С уважением, Николай.
tolyan249 Дата: Ср, 31.10.2012, 17:21  |                                                                                                                Сообщение # 18
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 183
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

ну да примерно так, но суть не в этом а должна выходить из прерывания по идее может конфигурация какая другая нужна.

Добавлено (31.10.2012, 17:21)
---------------------------------------------
Спасибо за советы и ответы.


если знаешь,помоги.
Сообщение отредактировал tolyan249 - Ср, 31.10.2012, 17:22
Matrix252005 Дата: Ср, 31.10.2012, 17:37  |                                                                                                                Сообщение # 19
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 636
Репутация: 43   ±
Замечания:   ±
На сайте с 12.10.2007

Статус: Offline

В конфиге прерываний однозначна ошибка, но пока не могу понять где... И что нужно, а что нет... Может проще с нуля написать???

THE TRUTH IS OUT THERE.

С уважением, Николай.
DAlexV Дата: Ср, 31.10.2012, 20:28  |                                                                                                                Сообщение # 20
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (tolyan249)
должна выходить из прерывания по идее может конфигурация какая другая нужна.

Quote (Matrix252005)
В конфиге прерываний однозначна ошибка
Всем добрый вечер. Таймер 1 выключить нужно. Включить то в коде включили, а в прерывании об нем ни слова.
И не знаю как у Вас господа, но у меня (Prot 7.7 SP2) код не отображался до момента выбрасывания переменных f и f1. Предположу что в пике есть регистр с одноименным названием. Исправленный вариант приложил. Успехов wink
P/S. Прошу прощения. Маленькая поправка. В основном блоке заменить PORTB.1 на PORTB.2, т.к. PORTB.1 у нас занят
Прикрепления: Pic_Power.rar (43.6 Kb)


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
Сообщение отредактировал DAlexV - Ср, 31.10.2012, 20:51
tolyan249 Дата: Чт, 01.11.2012, 08:20  |                                                                                                                Сообщение # 21
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 183
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

Вот примерно что то сделал

Добавлено (01.11.2012, 08:17)
---------------------------------------------
Спасибо Огрмное за Советы ответы и помощь.

Добавлено (01.11.2012, 08:20)
---------------------------------------------
ВОТ програмка вроде в проэусе работает.

исходник приложен

Declare SHOW_SYSTEM_VARIABLES = OFF ' При симуляции в Proteus не показывать внутренние переменные
Declare FSR_CONTEXT_SAVE = OFF ' Не заботиться о сохранении содержимого регистра FSR
Declare Reminders = OFF ' Выключить напоминания компилятора
Declare Warnings = OFF ' Выключить предупреждения компилятора
Declare Optimiser_Level 4 ' Включить оптимизацию программы
Declare Bootloader = OFF ' Выключить загрузчик

;-------------------------- Общие настройки------------------------------------

Device = 16F877A ' Используемый микроконтроллер
Xtal = 20 ' Частота осциллятора 20 МГц

'-------------------------- Конфигурация программирования --------------------

Config CP_OFF, DEBUG_OFF, WRT_OFF, CPD_OFF, LVP_OFF, BODEN_OFF, PWRTE_OFF, WDT_OFF, XT_OSC

'-------------------------- Настройки портов ---------------------------------

PortB_Pullups = OFF ' Выключить подтягивающие резисторы на PORTB
Declare All_Digital = On ' Установить все порты цифровыми входами/выходами



'--Определение назначения каналов портов--

TRISA = %00000000 ' Сделать канал PORTA.0 входом для АЦП-мерить напряжение
TRISE = %00000011 ' Сделать канал (вывод) AN5 (PORTE.50 выходом, RE1, RE2 входами
' ADCON1 = %10000010 ' Установить все выводы PORTA в режим АЦП
TRISC = %00000000 ' PORTC выход
TRISD = %00000000 ' Сделать каналы PORTD выходами
TRISB = %00000001 ' Сделать каналы PORTВ.0 входом

'-------------------------- OPTION_REG ----------------------------------------

OPTION_REG.0=0 ' Бит установки предделителя TMR0
OPTION_REG.1=0 ' Бит установки предделителя TMR0
OPTION_REG.2=0 ' Бит установки предделителя TMR0
OPTION_REG.3=0 ' Выбор включения предделителя ,предделитель выключен
OPTION_REG.4=1 '1- Выбор фронта приращения TMR0 при внешнем тактовом сигнале -выключен
OPTION_REG.5=0 ' Выбор тактового сигнала для TMR0-приращение таймера от внутреннего генератора -включен
OPTION_REG.6=0 ' Выбор активного фронта сигнала на входе внешнего прерывания INT, PORTB.0
OPTION_REG.7=1 ' Включение подтягивающих резисторов на PORTB -включен


'-------------------------- INTCON --------------------------------------------

INTCON.0=0 ' Флаг внешнего прерывания по PORTB.4-PORTB.7 -выключен
INTCON.1=1 ' Флаг внешнего прерывания по PORTB.0(INT) -включен
INTCON.2=1 ' Флаг переполнения TMR0 -включен
INTCON.3=0 ' Бит разрешения прерывания по PORTB.4-PORTB.7 -выключен
INTCON.4=1 ' Бит разрешения прерывания по PORTB.0(INT) -включен
INTCON.5=1 ' Бит разрешения прерывания по переполнению TMR0 -включен пока
INTCON.6=1 ' Бит разрешения прерывания от периферийных устройств -включен
INTCON.7=1 'Бит глобального разрешения прерываний -включен


TMR0=255 'считать таймер будет до 256

'переменные каналов мощности до 100(100-полная мощность в процентах)
Dim FESTOON_1 As Byte '
Dim FESTOON_2 As Byte '
Dim FESTOON_3 As Byte '
Dim FESTOON_4 As Byte '
Dim FESTOON_5 As Byte '
Dim FESTOON_6 As Byte '
Dim FESTOON_7 As Byte '
Dim FESTOON_8 As Byte '
Dim FESTOON_9 As Byte '
Dim FESTOON_10 As Byte '
Dim FESTOON_11 As Byte '
Dim FESTOON_12 As Byte '
Dim FESTOON_13 As Byte '
Dim FESTOON_14 As Byte '
Dim FESTOON_15 As Byte '
Dim FESTOON_16 As Byte '
Dim FESTOON_17 As Byte '
Dim FESTOON_18 As Byte '
Dim FESTOON_19 As Byte '
Dim FESTOON_20 As Byte '
Dim FESTOON_21 As Byte '
Dim FESTOON_22 As Byte '
Dim FESTOON_23 As Byte '
Dim FESTOON_24 As Byte '
Dim FESTOON_25 As Byte '
Dim FESTOON_26 As Byte '





'флаги разрешения работы каналов(1-разрешено 0-запрещено)
Dim ON_1 As Bit '
Dim ON_2 As Bit '
Dim ON_3 As Bit '
Dim ON_4 As Bit '
Dim ON_5 As Bit '
Dim ON_6 As Bit '
Dim ON_7 As Bit '
Dim ON_8 As Bit '
Dim ON_9 As Bit '
Dim ON_10 As Bit '
Dim ON_11 As Bit '
Dim ON_12 As Bit '
Dim ON_13 As Bit '
Dim ON_14 As Bit '
Dim ON_15 As Bit '
Dim ON_16 As Bit '
Dim ON_17 As Bit '
Dim ON_18 As Bit '
Dim ON_19 As Bit '
Dim ON_20 As Bit '
Dim ON_21 As Bit '
Dim ON_22 As Bit '
Dim ON_23 As Bit '
Dim ON_24 As Bit '
Dim ON_25 As Bit '
Dim ON_26 As Bit '






'просто переменные
Dim s As Byte
Dim i As Byte






Clear

PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0

On_Interrupt GoTo te
GoTo main


te:
Context Save

If INTCON.1=1 Then 'произошло прерывание по PORTB.0
If OPTION_REG.6=0 Then 'если это фронт то делать сдедующие
s=0
TMR0=255
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0
OPTION_REG.6=1'переключаем для прерывания по спаду что бы мерить имульс а не период весь
Else
OPTION_REG.6=0 'возращаем на место что бы прерывание было опять по фронту
s=0
TMR0=255
PORTA=0
PORTB=0
PORTC=0
PORTD=0
PORTE=0
EndIf
INTCON.1=0
EndIf
If INTCON.2=1 Then 'пришло прерывание от таймера TMR0-что он переполнился
Inc s 'переполнение происходит каждые 256мкс-микросекунд
INTCON.2=0 'считываем эти переполнения и увеличеваем переменную на 1
EndIf 'что бы знать сколько переполнений было





'---------------------------------------
If ON_1=1 Then
If s=1 Then PORTB.1=1
If s=FESTOON_1 Then PORTB.1=0
Else
PORTB.1=0
EndIf

If ON_2=1 Then
If s=1 Then PORTB.2=1
If s=FESTOON_2 Then PORTB.2=0
Else
PORTB.2=0
EndIf

If ON_3=1 Then
If s=1 Then PORTB.3=1
If s=FESTOON_3 Then PORTB.3=0
Else
PORTB.3=0
EndIf

If ON_4=1 Then
If s=1 Then PORTB.4=1
If s=FESTOON_4 Then PORTB.4=0
Else
PORTB.4=0
EndIf

If ON_5=1 Then
If s=1 Then PORTB.5=1
If s=FESTOON_5 Then PORTB.5=0
Else
PORTB.5=0
EndIf

If ON_6=1 Then
If s=1 Then PORTB.6=1
If s=FESTOON_6 Then PORTB.6=0
Else
PORTB.6=0
EndIf

If ON_7=1 Then
If s=1 Then PORTB.7=1
If s=FESTOON_7 Then PORTB.7=0
Else
PORTB.7=0
EndIf
'---------------------------------------

If ON_8=1 Then
If s=1 Then PORTC.0=1
If s=FESTOON_8 Then PORTC.0=0
Else
PORTC.0=0
EndIf

If ON_9=1 Then
If s=1 Then PORTC.1=1
If s=FESTOON_9 Then PORTC.1=0
Else
PORTC.1=0
EndIf

If ON_10=1 Then
If s=1 Then PORTC.2=1
If s=FESTOON_10 Then PORTC.2=0
Else
PORTC.2=0
EndIf

If ON_11=1 Then
If s=1 Then PORTC.3=1
If s=FESTOON_11 Then PORTC.3=0
Else
PORTC.3=0
EndIf

If ON_6=12 Then
If s=1 Then PORTC.4=1
If s=FESTOON_12 Then PORTC.4=0
Else
PORTC.4=0
EndIf

If ON_6=13 Then
If s=1 Then PORTC.5=1
If s=FESTOON_13 Then PORTB.5=0
Else
PORTC.5=0
EndIf

If ON_14=1 Then
If s=1 Then PORTC.6=1
If s=FESTOON_15 Then PORTC.6=0
Else
PORTC.6=0
EndIf

If ON_15=1 Then
If s=1 Then PORTC.7=1
If s=FESTOON_15 Then PORTC.7=0
Else
PORTC.7=0
EndIf
'-----------------------------------------------------------------

If ON_16=1 Then
If s=1 Then PORTD.0=1
If s=FESTOON_16 Then PORTD.0=0
Else
PORTD.0=0
EndIf

If ON_17=1 Then
If s=1 Then PORTD.1=1
If s=FESTOON_17 Then PORTD.1=0
Else
PORTD.1=0
EndIf

If ON_18=1 Then
If s=1 Then PORTD.2=1
If s=FESTOON_18 Then PORTD.2=0
Else
PORTD.2=0
EndIf

If ON_19=1 Then
If s=1 Then PORTD.3=1
If s=FESTOON_19 Then PORTD.3=0
Else
PORTD.3=0
EndIf

If ON_20=1 Then
If s=1 Then PORTD.4=1
If s=FESTOON_20 Then PORTD.4=0
Else
PORTD.4=0
EndIf

If ON_21=1 Then
If s=1 Then PORTD.5=1
If s=FESTOON_21 Then PORTD.5=0
Else
PORTD.5=0
EndIf

If ON_22=1 Then
If s=1 Then PORTD.6=1
If s=FESTOON_22 Then PORTD.6=0
Else
PORTD.6=0
EndIf

If ON_23=1 Then
If s=1 Then PORTD.7=1
If s=FESTOON_23 Then PORTD.7=0
Else
PORTD.7=0
EndIf











Context Restore


main:
ON_1=1'включить 1-канал
ON_2=1'включить 2-канал
ON_3=1'включить 3-канал
GoSub ustr
GoTo main




'режимы программ с разной мощностиью каждого канала
'сделать разные режимы сколько хватит фантазии
' FESTOON_-отвечает за мощность в канале в процентах
' FESTOON_1=25 это соответствует 25-процентов мощности ну и так далее
ustr:

If ON_1=1 Then

For i=0 To 90
DelayMS 5
Inc FESTOON_1
Next

For i=0 To 90
DelayMS 5
Dec FESTOON_1
Next

EndIf

If ON_2=1 Then
For i=0 To 50
DelayMS 5
Inc FESTOON_2
Next
EndIf

If ON_3=1 Then
For i=0 To 75
DelayMS 5
Inc FESTOON_3
Next
EndIf

If ON_2=1 Then
For i=0 To 50
DelayMS 5
Dec FESTOON_2
Next
EndIf


If ON_3=1 Then
For i=0 To 75
DelayMS 5
Dec FESTOON_3
Next
EndIf

If ON_1=1 And ON_2=1 And ON_3=1 Then
For i=0 To 95
DelayMS 5
Inc FESTOON_1
Inc FESTOON_2
Inc FESTOON_3
Next
EndIf

If ON_1=1 And ON_2=1 And ON_3=1 Then
For i=0 To 95
DelayMS 5
Dec FESTOON_1
Dec FESTOON_2
Dec FESTOON_3
Next
EndIf


Return








End

Прикрепления: 8549133.zip (57.6 Kb)


если знаешь,помоги.
ЯНДЕКС Дата: 01.11.2012
tolyan249 Дата: Чт, 01.11.2012, 19:19  |                                                                                                                Сообщение # 22
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 183
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

Управление симистором наверно понял не так, а должно быть наверно так,ширина импульса открывания симистора всегда постоянна примерно 200-400мкс, а подаеться импульс если в начале полупериода то максимальная мощность,
чем ближе мы дадим этот импульс к концу полупериода тем будет меньше мощность. т.е алгоритм надо будет переделать в программе . т.е импульс 200-400мкс должен гулять в нутри полупериода в зависимости от того какую мощность нужно получить, график примерно такой. а я написал программу котрая работает как шим ,т.е. меняю ширину импульса, а это наверно не правильно.
Прикрепления: 3478467.jpg (13.5 Kb)


если знаешь,помоги.
Сообщение отредактировал tolyan249 - Чт, 01.11.2012, 19:21
dimitriy-bc Дата: Чт, 01.11.2012, 23:27  |                                                                                                                Сообщение # 23
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 150
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

Всем доброго времени суток.
tolyan249, работу тиристоров (симистров) Вы поняли правильно. При подаче управляющего импульса, тиристор (симистор) открывается и если ток, проходящий через них равен или больше тока удержания, то они остаются в открытом состоянии. Когда ток, при переходе через ноль, станет меньше тока удержания, тиристор (симистор) закроется. Длительность управляющего импульса должна быть не меньше указанной в параметрах на конкретный тип. И еще раз напомню, что параллельно тиристорам (симисторам) анод-катод, рекомендуется подключать последовательную цепочку из конденсатора и резистора.
В программе предложенной мною, я не заморачивался длительностью импульса. Главное не перегрузить по току микроконтроллер. После прерывания (переход сети через ноль), начинается новый отсчет таймера1. После этого программа переходит на участок, где Вы можете спокойно вносить изменения в алгоритм работы гирлянд. Ведь нет никакой гарантии, что напряжения в начале полупериода будет достаточно для создания тока удержания в симисторе. После этого, программа входит в цикл, где сравниваются заданные Вами временные интервалы для гирлянд, со значением таймера1. Когда значение таймера1 превысит заданное значение для конкретной гирлянды, дается добро на включение ее симистора.
И просьба, если не сложно выкладывайте программу так, чтоб можно было ее без дополнительных манипуляций посмотреть в ПРОТОНЕ и если есть программа для ПРОТЕУСА, то можно и ее.
tolyan249 Дата: Пт, 02.11.2012, 04:22  |                                                                                                                Сообщение # 24
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 183
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

Программы выкладываю полностью в архивах для протеуса,скачивайте просматривайте вот я и советуюсь в
8549133.zip(58Kb) архив там есть все, там я сделал что меняеться ширина импульса ,запустите в протеусе увидите что меняю ширину импульса, может это не правильно.

Спасибо огромное за помощь .


если знаешь,помоги.
Сообщение отредактировал tolyan249 - Пт, 02.11.2012, 04:26
dimitriy-bc Дата: Пт, 02.11.2012, 10:31  |                                                                                                                Сообщение # 25
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 150
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

Всем доброго времени суток.
tolyan249, в принципе у Вас все нормально. Единственное, что у Вас управление заложено нулем. Т.е. анод диода оптрона подключите к плюсу питания, а катод к выходу порта.
Удачи.

Добавлено (02.11.2012, 10:31)
---------------------------------------------
И еще, управление желательно сделать симметричным по обоим полупериодам. Это важно если нагрузка приближается к номинальной мощности питающего силового трансформатора.

DAlexV Дата: Пт, 02.11.2012, 10:35  |                                                                                                                Сообщение # 26
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

И снова здравствуйте !!!! Маленькие дополнения по схемотехнике(проверенно на себе). В качестве датчика начала полупериода можно использовать сдвоенный оптрон и тогда не потребуется в прерывании менять полярность сигнала(фронт-спад). На приклеенном рисунке вариант В. При падении напряжения(переход) - 1 , в остальном -0. Если про алгоритм, то можно попробовать по другому.

  • Таймер настраивается на четкие временные промежутки (0,1мс например)
  • Прерывания по началу фазы.
    сбрасываем порты(так как 1-ца появится до момента перехода через 0, то беспокоится о сбросе упр. импульсов особо не нужно, достаточно до начала следующей полуволны просто обнулить порты)
    и обнуляем счетчик переполнения таймера
    Стартует таймер
  • Прерывание по переполнению таймера
    +1 к счетчику переполнения таймера, разрешаем флаг сравнения значений яркости со счетчиком переполнения
  • В основном блоке уже выполняем сравнения значений яркости со счетчиком переполнения без пауз и т. д.
    в конце блока сбрасываем флаг сравнения(дабы постоянно не сравнивал)
    оставшееся время заниматься еще какими нибудь делами


P/s. С помощью детектора фазы можно так же считать время (проверенно, работает)

Удачи wink
Прикрепления: 6141032.png (133.9 Kb)


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
tolyan249 Дата: Пт, 02.11.2012, 11:50  |                                                                                                                Сообщение # 27
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 183
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

Может так нужно сделать, архив приложил.

Спасибо огромное всем за ответы советы и помощь.

Добавлено (02.11.2012, 11:50)
---------------------------------------------
DAlexV -а прмер программы можно.

Прикрепления: 4901811.zip (70.9 Kb)


если знаешь,помоги.
tolyan249 Дата: Пт, 02.11.2012, 12:35  |                                                                                                                Сообщение # 28
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 183
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

ОПИСАНИЕ ПРОГРАММЫ МИКРОКОНТРОЛЛЕРА
Исходный текст программы публикуется вместе с данной статьей как есть. Программа доступна для повторения и изменения, но автор не несет ответственности за ее работоспособность при каждом повторении конструкции.
Программа написана на ассемблере в виде монолитного текста. Стиль программирования и оформления программы автор не обсуждает. Он значительно изменился, так как с момента окончания разработки данного устройства прошло 2 года, в течении которых регулятор успешно работает.
Текст программы содержит подробные комментарий на русском языке, поэтому ниже будут пояснены только основные, так сказать, "идейные" моменты этой программы.
Программа управления регулятора использует два прерывания микроконтроллера MCS51: прерывание по уровню на входе INT0 и прерывание таймера T0. Прерывание таймера T0 имеет более высокий приоритет.
В основной фоновой программе выполняется инициализация микроконтроллера, считывание сохраненных параметров из энергонезависимой памяти перед началом работы регулятора и постоянный контроль бита необходимости сохранения параметров, который устанавливается в подпрограмме обработки прерывания INT0. При установленном бите фоновая программа записывает изменившиеся значения в энергонезависимую память и сбрасывает бит.
Прерывание таймера T0 предназначено для формирования импульса управления симистором длительностью около 25 микросекунд по окончанию времени загруженного в таймер и загрузки таймера T0 новым табличным значением времени задержки, соответствующим текущему уровню мощности. Сам таймер по выходу из прерывания T0 оказывается выключенным. Таким образом, таймер T0 подготавливается к началу новой полуволны сетевого напряжения. Это позволяет сократить время реакции микроконтроллера. Сам таймер запускается в самом начале прерывания INT0.
Подпрограмма обработки прерывания INT0 является, в сущности, ключевой частью программы регулятора. В момент "перехода через 0" новой полуволны сетевого напряжения на входе микроконтроллера INT0 внешней схемой формируется отрицательный импульс. Этот импульс и является причиной возникновения прерывания INT0.
В подпрограмме прерывания INT0 в первую очередь запускается таймер T0. Затем производится динамический опрос кнопок и сохранение результата опроса. После окончания опроса кнопок порт P1 начинает работать исключительно на светодиодный дисплей.
Содержимое вспомогательных регистров выводится на соответствующее знакоместо светодиодного семисегментного индикатора. Данные для отображения подготавливаются в предыдущем полупериоде. Это позволяет сократить время необходимое для вывода данных на индикацию.
В каждом полупериоде сетевого напряжения знакоместа дисплея чередуются. Таким образом, частота динамической индикации составляет 50 Гц.
После обработки индикации производится анализ состояния кнопок в соответствии с текущим активным режимом. Одновременно обеспечивается защита от дребезга контактов. Возможно, кому-то этот фрагмент программы покажется нерациональным, автор не будет с этим спорить но, тем не менее, все надежно работает.
По ходу обработки прерывания INT0 контролируются различные вспомогательные биты, определяющие режим работы регулятора. Посредством этих битов и различных счетчиков реализуются антидребезг, темп изменения параметров, темп изменения яркости лампы при включении и выключении регулятора, выделение коротких и длительных нажатий на кнопки, выдержка времени необходимости сохранения параметров и т.п.
Особенностью разработанной программы является использование оригинальной, как представляется автору, таблицы углов задержки включения симистора. Данная таблица получена путем вычисления в таблице Excel 100 интервалов времени за полупериод сетевого напряжения, уменьшенного на 5%. Интервалы времени рассчитывались из условия равенства интегралов мгновенного значения синусоиды. При этом получаются неравномерные интервалы времени, соответствующие различным уровням мощности. Максимальному уровню мощности соответствует минимальная задержка.

Графическая иллюстрация результата расчета приведена на рисунке 4. Для наглядности расчет выполнен для 20 интервалов. Как видно из графиков интервал времени между соседними точками на максимуме синусоиды почти в три раза меньше времени первого интервала.

Пояснение таблицы углов включения симистора
Полученная неравномерность таблицы позволяет сделать более равномерное изменение яркости лампы при изменении уровня мощности. Положительным результатом такого подхода является то, что с момента "перехода сетевого напряжения через 0", до момента времени, соответствующего 99% интеграла напряжения за полупериод, проходит порядка 640 микросекунд. Это свидетельствует о том, что в распоряжении микроконтроллера достаточно времени для выполнения различных операций без потери максимально возможной мощности. Таким образом, если не учитывать потери на симисторе, регулятор с установленным значением мощности 100% будет выдавать на нагрузку почти такую же мощность, какую потребляет просто включенная в розетку та же самая нагрузка!
Конечно, при этом желательно, чтобы используемый симистор имел как можно меньшее значение тока управления, которое можно считать практически равным току удержания симистора. Если ток удержания симистора относительно большой, то слишком быстрое включение симистора при установленном уровне мощности 100% не даст результата - импульс управления окончится, а симистор так и не включится.
Таблица построена на основании того факта, что частота питающего напряжения является самым стабильным параметром в отечественной энергосистеме, отклонения частоты в сети не превышают 5%.
Прикрепления: 8052414.gif (22.2 Kb)


если знаешь,помоги.
DAlexV Дата: Пт, 02.11.2012, 19:37  |                                                                                                                Сообщение # 29
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 657
Репутация: 27   ±
Замечания:   ±
На сайте с 13.05.2008

Статус: Offline

Quote (tolyan249)
DAlexV -а прмер программы можно.
C Протоном как бы не особо дружу. Могу перекидать данную программу(если автор не возражает)


Будьте оригинальны-не повторяйте чужих ошибок ! Рыба сдохла. Теперь STM32(TS)+C#(VS).Старею :)
tolyan249 Дата: Пт, 02.11.2012, 20:10  |                                                                                                                Сообщение # 30
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 183
Репутация: 0   ±
Замечания:   ±
На сайте с 11.10.2007

Статус: Offline

Вот еще программа может нужно такю архив приложен.
Прикрепления: 3999258.zip (72.6 Kb)


если знаешь,помоги.
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Регулятор яркости на pic
  • Страница 2 из 3
  • «
  • 1
  • 2
  • 3
  • »
Поиск: