Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Разное » Сетевой диммер. Мерцает.


Сетевой диммер. Мерцает.

Сообщений 1 страница 7 из 7

1

Приветствую! Прошу помощи, т.к. у самого уже даже догадок нет. Собрал двухканальный сетевой диммер,который управляется по bluetooth, работает, только заметно мерцают лампы при малой яркости. Пробовал переделать под один канал, результат тот же. По железу: силовая часть оптосимистор МОС3022 + симистор Т835-600G, детектор 0: диодный мост + PC817. Соответственно сам код:

Код:
$regfile = "m168pdef.dat"
$crystal = 11059200
$baud = 9600
$swstack = 32
$hwstack = 32
$framesize = 32

Config Portd.5 = Output
Opto_1 Alias Portd.5
Opto_1 = 0

Config Portd.6 = Output
Opto_2 Alias Portd.6
Opto_2 = 0

Dim Get_byte As Byte
Dim Temp_1 As String * 1
Dim Temp_2 As String * 1
Dim Uart_in As String * 4
Dim Uart_in_len As Byte
Dim Light_1 As Byte
Dim Light_2 As Byte

Config Int0 = Falling
On Int0 Zero
Enable Int0

Config Timer0 = Timer , Prescale = 1024
On Timer0 Channel_1 Nosave
Enable Timer0
Stop Timer0

Config Timer2 = Timer , Prescale = 1024
On Timer2 Channel_2 Nosave
Enable Timer2
Stop Timer2

On Urxc Getchar Nosave
Enable Urxc

Enable Interrupts

'160 - минимальный уровень яркости, 250 - максимум
Light_1 = 160
Light_2 = 160

Wait 2

Do
!NOP
Loop
End

Zero:
Timer0 = Light_1
Timer2 = Light_2
Start Timer0
Start Timer2
Return

Channel_1:
 Stop Timer0
 Opto_1 = 1
 Waitus 100
 Opto_1 = 0
Return

Channel_2:
 Stop Timer2
 Opto_2 = 1
 Waitus 100
 Opto_2 = 0
Return

Getchar:
Get_byte = Udr0
Uart_in = Uart_in + Chr(get_byte)

If Get_byte = 13 Then
   Uart_in_len = Len(uart_in)
   Delchar Uart_in , Uart_in_len

   Temp_1 = Mid(uart_in , 1 , 1)
   Temp_2 = Mid(uart_in , 2 , 1)

   Light_1 = Asc(temp_1)
   Light_2 = Asc(temp_2)
   Uart_in = ""
End If
Return

0

2

Посмотрите здесь

0

3

Спасибо огромное! Проверю на своем железе, отпишусь.

0

4

Проверил, все равно мерцает. В чем может быть еще дело?

0

5

1. неверно работает детектор нуля - у меня было тож е самое, что и у вас
2. возможно неверно выставлены задержки

http://savepic.su/5355340.jpg

Z_cross Alias Pind.2                              ' нога   - вход, от детектора перехода через 0 (INT0)
Tx_out Alias Portb.3                              ' нога   - выход, к драйверу связи
Dimmer_out Alias Portb.1                          ' нога   - выход, к оптосимистору на симистор

Config Int0 = Change                              ' Установка прерывания INT0 на изменение сигнала
On Int0 Z_cross_int
Enable Int0                                       ' Прерывание на вход датчика перехода синусоиды через ноль

''===============
Ovf1_my:
   If Dimmer_on = 1 Then
     Dimmer_out = 1
     Waitus 90
     Dimmer_out = 0
   Else
     Dimmer_out = 0
   End If
Return

' =============== Обработка прерывания по изменению на INT 0 ==================
Z_cross_int:
   Timer1 = Dimmer_delay_w
   Z_cross_f = 1
Return


'---------------------------------------------------------------------------------------------
Dimmer_modul:                                     ' -------------- УПРАВЛЕНИЕ ДИММЕРОМ --------------------------
Reset Watchdog
   If Level_dimmer = 0 Then
      Dimmer_on = 0
      Disable Ovf1
     Else
      Dimmer_on = 1
      If Level_dimmer < 8 Then Enable Ovf1
   End If

   If Level_dimmer > 7 Then
     ' Dimmer_delay_w = &HFFFC ' Ярко горит - 230v
     Disable Ovf1
     Dimmer_out = 1
     Level_dimmer = 8                             ' <<<<<<<<<<<<<<<<<<<<<<<< ограничитель
   End If

   If Level_dimmer = 1 Then Dimmer_delay_w = 57900       ' Тускло горит - 25v
   If Level_dimmer = 2 Then Dimmer_delay_w = 58300       ' 51v
   If Level_dimmer = 3 Then Dimmer_delay_w = 58700       ' 78v
   If Level_dimmer = 4 Then Dimmer_delay_w = 59000       ' 85v
   If Level_dimmer = 5 Then Dimmer_delay_w = 59400       ' 149v
   If Level_dimmer = 6 Then Dimmer_delay_w = 59900       ' 175v
   If Level_dimmer = 7 Then Dimmer_delay_w = 61100       ' 189v
   Waitus 950
Return

Отредактировано Александр Д. (2015-03-12 23:00:55)

0

6

Airat, какой мощности лампы?

0

7

Лампы по 60 Вт.

0


Вы здесь » Программирование ATMEL в BASCOM. » Разное » Сетевой диммер. Мерцает.