Устройство предназначено для создания сетки синхроимпульсов совпадающих с эфирными.
строчечные импульсы подстраиваются с помощью управляемого задающего генератора.
Кадровые путём деления строчечных. с пропуском или добавлением ещё одного строчечного импульса.
Входная частота получается из 16 МГц делением на 4-е. т.е. ATtiny13 тактируется 4 МГц.
Данный контроллер входит в состав Вывод "бегущей строки" посредством помехи
https://www.youtube.com/watch?v=9d4xFLEtIzE
Аналогичная тема на другом ресурсе
Исходник на BASCOM
CODE
'программа Генерируеит вертикальную 50+-0,5 гц горцзонтальную 15625 гц
$regfile = "ATtiny13.DAT" ' тип процессора
'$crystal = 12000000 ' частота кварца
'$baud = 115200 ' скорость связи
'-------------------------------------------------------------------------------
' соответствие электрических цепей выводам портов
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
' константы
'-------------------------------------------------------------------------------
'Const T1 = 7 ' период
Const T2 = 48 ' минимальный период
'-------------------------------------------------------------------------------
' переменные
'----------------------------------------------------------------------
Dim T_1 As Byte ' период
Dim T_2 As Byte ' период 'max U'
Dim T_3 As Byte ' период стабилизации
Dim T_4 As Byte
'Dim M As Bit ' режим
Dim N As Byte ' kadr
'Dim Tmpi As Byte '
'Dim Tmpu As Byte '
'Dim Hsync As Byte
Dim Vsync As Byte '
'Dim Adc02 As Word '
'Dim U_hsync As Byte 'горцзонтальную
Dim U As Byte 'вертикальную
'============================================================================
===
' начало программы
'-------------------------------------------------------------------------------
' вектор прерывания по сбросу (начало программы)
Startmodule:
Resetwd: ' сброс по сторожевому таймеру
' resetFlag = MCUCSR
' MCUCSR.WDRF = 0
Configmodule:
Init:
'внутреннее сопротивление
'0 - 100кОм(в микроконтроллер)
'1- низкое (измикроконтроллера)
'подтягивание
'1 - к плюсу
'0 - на нуле
Ddrb = &B00000011 '1 где шим
Portb = &B00000000
Tccr0a = &B11000011
'Tccr0b = &B01001001 'f0 коэффициент деления 1
Tccr0b = &B10000001 'f0 коэффициент деления 1
'Ocr0a = 16 ' Ocr0a - период в режиме 3 fast PWM
'Ocr0b = 16 ' Ocr0b - длительность в режиме 3 fast PWM
'Admux = 0
Adcsra = &B10000101 ' включение АЦП
'T = Tmax ' мин частота
'Set N ' увеличене частоты
'Reset Portb.0 ' режим поджига
'Reset R
'Uold = 0
'Tw = Twmin
'Told = 0
On Timer0 Timer0_int
'Повесить подпрограмму на прерывание.
Config Watchdog = 2048
Start Watchdog
Enable Interrupts
' разрешить работу прерываний
Enable Timer0
Ocr0a = T2
N = 0
Main:
Admux = &B00100010 ' REF=Vcc, ADC=2 (напряжение)
Set Adcsra.adsc ' запуск измерения
While Adcsra.adsc = 1 ' ожидание конца измерения
Delay
Wend
U = Adch
Shift U , Right , 5
T_3 = 102 + U '+4 ADC
T_4 = 7 + T_3
Shift U , Right , 1
T_1 = 48 + U '+2 ADC
T_2 = 7 + T_1
Reset Watchdog
'If R = 1 Then Reset Watchdog
'If Vsync > 56 And N = 1 Then Reset R
Goto Main
Timer0_int:
Disable Interrupts
Incr Vsync
If Vsync = 255 Then Incr N
If N = 1 Then
If Vsync = T_1 Then Reset Portb.1
If Vsync = T_2 Then
Set Portb.1
' Vsync = 0
End If
End If
If N = 2 Then
If Vsync = T_3 Then Reset Portb.1
If Vsync = T_4 Then
Set Portb.1
Vsync = 0
N = 0
End If
End If
Enable Interrupts
Return
$regfile = "ATtiny13.DAT" ' тип процессора
'$crystal = 12000000 ' частота кварца
'$baud = 115200 ' скорость связи
'-------------------------------------------------------------------------------
' соответствие электрических цепей выводам портов
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
' константы
'-------------------------------------------------------------------------------
'Const T1 = 7 ' период
Const T2 = 48 ' минимальный период
'-------------------------------------------------------------------------------
' переменные
'----------------------------------------------------------------------
Dim T_1 As Byte ' период
Dim T_2 As Byte ' период 'max U'
Dim T_3 As Byte ' период стабилизации
Dim T_4 As Byte
'Dim M As Bit ' режим
Dim N As Byte ' kadr
'Dim Tmpi As Byte '
'Dim Tmpu As Byte '
'Dim Hsync As Byte
Dim Vsync As Byte '
'Dim Adc02 As Word '
'Dim U_hsync As Byte 'горцзонтальную
Dim U As Byte 'вертикальную
'============================================================================
===
' начало программы
'-------------------------------------------------------------------------------
' вектор прерывания по сбросу (начало программы)
Startmodule:
Resetwd: ' сброс по сторожевому таймеру
' resetFlag = MCUCSR
' MCUCSR.WDRF = 0
Configmodule:
Init:
'внутреннее сопротивление
'0 - 100кОм(в микроконтроллер)
'1- низкое (измикроконтроллера)
'подтягивание
'1 - к плюсу
'0 - на нуле
Ddrb = &B00000011 '1 где шим
Portb = &B00000000
Tccr0a = &B11000011
'Tccr0b = &B01001001 'f0 коэффициент деления 1
Tccr0b = &B10000001 'f0 коэффициент деления 1
'Ocr0a = 16 ' Ocr0a - период в режиме 3 fast PWM
'Ocr0b = 16 ' Ocr0b - длительность в режиме 3 fast PWM
'Admux = 0
Adcsra = &B10000101 ' включение АЦП
'T = Tmax ' мин частота
'Set N ' увеличене частоты
'Reset Portb.0 ' режим поджига
'Reset R
'Uold = 0
'Tw = Twmin
'Told = 0
On Timer0 Timer0_int
'Повесить подпрограмму на прерывание.
Config Watchdog = 2048
Start Watchdog
Enable Interrupts
' разрешить работу прерываний
Enable Timer0
Ocr0a = T2
N = 0
Main:
Admux = &B00100010 ' REF=Vcc, ADC=2 (напряжение)
Set Adcsra.adsc ' запуск измерения
While Adcsra.adsc = 1 ' ожидание конца измерения
Delay
Wend
U = Adch
Shift U , Right , 5
T_3 = 102 + U '+4 ADC
T_4 = 7 + T_3
Shift U , Right , 1
T_1 = 48 + U '+2 ADC
T_2 = 7 + T_1
Reset Watchdog
'If R = 1 Then Reset Watchdog
'If Vsync > 56 And N = 1 Then Reset R
Goto Main
Timer0_int:
Disable Interrupts
Incr Vsync
If Vsync = 255 Then Incr N
If N = 1 Then
If Vsync = T_1 Then Reset Portb.1
If Vsync = T_2 Then
Set Portb.1
' Vsync = 0
End If
End If
If N = 2 Then
If Vsync = T_3 Then Reset Portb.1
If Vsync = T_4 Then
Set Portb.1
Vsync = 0
N = 0
End If
End If
Enable Interrupts
Return