Собственно задача.
Давно разрабатывался проект светодиодной матрицы на 1024 светодиода. Управляющая программа на ПК формировала монохромное изображение и со скоростью 25 пакетов в секунду на $baud = 38400 передавала в контроллер Мега8. Он только принимал пакеты и в динамике запихивал в регистры, также управлял столбцами со скважностью 1/16. Появилась потребность в автономном устройстве. Вроде бы дело пошло - взял 32 мегу, на ней формирую изображение и передаю на мегу 8, по RS232. Но хочется оставить возможность работать и от ПК.
Пробовал после приёма 128 пакетов сразу же передавать их (используется один и тот же RS232 и на приём, и на передачу). Контроллер виснет... Даже если пакеты идут со скоростью 1 раз в секунду. Может есть более элегантное решение, чем подводить м Меге 8 данные от ПК и от Меги 32 через логические ключи, которыми управляем Мега 32? Например, есть пакеты от ПК, они идут в М32 и на ключ - к М8. М32 увидела пакеты, открыла ключ к М8. Перестала посылать свои пакеты. Перестал идти сигнал с ПК - закрыла ключ, стала посылать свои пакеты. Вообщем, пока только тупик... Может кто-то с подобным сталкивался, есть идеи?
$crystal = 18432000 'кварцевый генератор 18,432 MHz
$regfile = "m32.def.dat" 'декларируем контроллер
$hwstack = 256 'Размер аппаратного стека
$swstack = 256 'Размер программного стека
$framesize = 256 'Размер области импользуемой для преобразования
'и временного храненияя данных
'==========Настройка портов==========
Ddra = &B11111110 'направление линий порта A: 1 - на вывод
Porta = &B00000000 'исходное состояние линий A: 00000000
Ddrb = &B11110011 'направление линий порта B: 1 - на вывод
Portb = &B00000000 'исходное состояние линий B: 00000000
Ddrc = &B11111111 'направление линий порта C: 1 - на вывод
Portc = &B00000000 'исходное состояние линий C: 00000000
Ddrd = &B11111110 'направление линий порта D: 1 - на вывод
Portd = &B00000000 'исходное состояние линий D: 00000000
'==========Настройка RS232==========
$baud = 38400
Enable Urxc 'разрешить прерывание приемника UART
On Urxc Rs232_isr
'==========Объявление переменных==========
Dim Flgrs232 As Bit : Flgrs232 = 0 'Флаг прихода данных Rs232
Dim Picsel(129) As Byte 'Видеоданные
Dim Index As Byte 'Счётчик принятых байт от мастера
Do 'Главный цикл
If Flgrs232 = 1 Then
'Disable Urxc
Flgrs232 = 0
If Inkey() = "$" Then 'Маркер начала пакета
For Index = 1 To 129
Picsel(index) = Waitkey() 'Принимаем видеоданные и яркость
Next Index
End If
Printbin Marker ; Picsel(1)
'Enable Urxc
End If
Loop
' Действие при срабатывании UART
Rs232_isr:
Flgrs232 = 1 'Пришёл пакет данных от мастера
Return 'выход из обработчика прерывания