СХЕМЫ И ДОКУМЕНТАЦИЯ

Радиолюбительская светомузыка из компьютера на 32 канала

Радиолюбительская светомузыка из компьютера на 32 канала

Козлов Сергей
uk8amk (at) mail.ru

Предлагаю свой вариант компьютерной светомузыки на 32 канала. Схема проста и не содержит дефицитных деталей, подключается к параллельному порту. Принцип действия следующий. С параллельного порта  по очереди данные D0-D7  записываются в восьмиразрядные регистры D3-D6. Выбор микросхемы для записи в нее двоичного значения происходит путем подачи с регистра Control (выводы 1,14,16) параллельного порта двоичного сигнала на микросхему D1. Она выполняет роль дешифратора. Вывод C2 порта является синхронизирующим (его требует дешифратор). Микросхема D1 имеет инверсные выходы, поэтому к ним подключены 4 инвертора D2. На выходах инверторов формируется управляющий сигнал, разрешающий запись в выбранный регистр D3-D6.

Радиолюбительская светомузыка

Схему можно нагрузить на 32 ярких разноцветных светодиода через 32 одинаковых усилителя. Их входы нужно подключить непосредственно к выходам Q1-Q8 микросхем D3-D6. Получится неплохая светомузыка для дома. Можно также нагрузить ее на 220 вольтовые лампы через тиристорные ключи с гальванической развязкой.

В качестве примера для управления этой схемой можно воспользоваться следующей программой, реализующей эффект «бегущая волна». Код программы был написан на Quick Basic 7.1 и на более ранних версиях не проверялся. Следует отметить также то, что прямой доступ к  портам возможен только в версиях Win9X. Для доступа к портам из версий Windows, базированных на технологии NT, потребуется специальный драйвер.

В приведенном примере используется порт LPT1 с шестнадцатиричным адресом 378. Если у вас используется другой адрес, то придется его поменять, например, в BIOS. К сожалению вариант управляющей программы, работающей со звуком, пока недоступен. Я только начал изменение программных кодов  восьмиканальной версии программы СВЕТОМАНИЯ для работы на 32 канала. Так что в ближайшем будущем ожидается появление новой версии.

Cls

Dim i, j As Integer
Dim dta1, dta2, dta3, dta4 As Long
Dim z
Dim c(32)

j = 0

TIMER ON
On Timer(1) GoSub ABC

Print "Press any key to exit"

Do
Loop Until INKEY$ <> ""

ABC:
        If j > 31 Then j = 0: z = Not (z)

        If Not z Then
                c(j) = 1
        Else
                c(j) = 0
        End If

        j = j + 1

        dta1 = 0
        dta2 = 0
        dta3 = 0
        dta4 = 0

        For i = 0 To 31
                If i < 8 Then
                        If c(i) = 1 Then dta1 = dta1 Or 2 ^ i

                ElseIf i < 16 Then
                        If c(i) = 1 Then dta2 = dta2 Or 2 ^ (i - 8)

                ElseIf i < 24 Then
                        If c(i) = 1 Then dta3 = dta3 Or 2 ^ (i - 16)

                Else
                        If c(i) = 1 Then dta4 = dta4 Or 2 ^ (i - 24)

                End If
        Next i

        OUT &H37A, 3

        OUT &H378, dta1
        OUT &H37A, 4
        OUT &H37A, 3

        OUT &H378, dta2
        OUT &H37A, 5
        OUT &H37A, 3
        
        OUT &H378, dta3
        OUT &H37A, 6
        OUT &H37A, 3
        
        OUT &H378, dta4
        OUT &H37A, 7
        OUT &H37A, 3

        Print dta1, dta2, dta3, dta4

Return