|
Запускаем АЦП (и делаем 1-е преобразование)
Ждём его окончания
Разрешаем прерывание по окончанию преобразования на АЦП
Запускаем оба таймера, но на разную частоту
Чтобы случайно не напутать с частотой генератора, выборами источников и делителями
выводим на вывод ШИМ от нулевого таймера (0-й разряд порта)
В прерывании по АЦП каждый раз инвертируем 3-й бит порта.
После запуска - смотрим частоту ШИМ (бит 0) и частоту на тестовой ноге (бит 3)
Делаем достоверный вывод - с какого таймера он запускается (если вообще не с обоих).
Поправ, если что не так.
(АЦП написано с перестраховками)
-----------------------------------------------------------------------------------
; System clock 1 MHz (Internal RC 8MHz/8)
.include "tn45def.inc"
rjmp main ; Reset Handler
rjmp main ; IRQ0 Handler
rjmp main ; PCINT0 Handler
rjmp main ; Timer1 CompareA Handler
rjmp main ; Timer1 Overflow Handler
rjmp main ; Timer0 Overflow Handler
rjmp main ; EEPROM Ready Handler
rjmp main ; Analog Comparator Handler
rjmp ADC_Int ; ADC Conversion Handler
main:
ldi r16,low(ramend) ; Stack initialisation
out SPL,r16 ;
ldi r16,high(ramend);
out SPH,r16 ;
;------------------------------------------------------------------------------------
ldi r16,9 ; Set up an ADC activity test point (PORTB.3) as output
; Set up an Timer0 freq test point (PORTB.0) as output
out DDRB,r16 ; 0000 1001
;-----------------------------------------------------------------------------------
ldi r16,147 ; Prepare ADC
out ADCSRA, r16 ; 1001 0011
ldi r16,211 ; Start conversion
out ADCSRA, r16 ; 1101 0011
first_conv:
in r16,ADCSRA ; Wait for ADC conversion complete flag (ADIF)
sbrs r16,ADIF ;
rjmp first_conv ;
ldi r16,147 ; Clear flag
out ADCSRA, r16 ; 1001 0011
ldi r16,155 ; Enable ADC Int
out ADCSRA, r16 ; 1001 1011
;-----------------------------------------------------------------------------------
ldi r16, 6 ; Clear all Timer OverFlow Int flags
out TIFR,r16 ; 0000 0110
ldi r16, 64 ; Set PWM value = 1/4 T
out OCR0A,r16 ;
ldi r16, 195 ; Set TCNT0 mode - Activate PWM for Timer freq test point
out TCCR0A,r16 ; Fasr PWM - Set OC0A on Compare Match, clear OC0A at TOP
sei ; Int Enable
ldi r16, 3 ; Run TCNT0 at Fclk/64
out TCCR0B,r16 ;
ldi r16, 4 ; Run TCNT1 at Fclk/256
out TCCR1B,r16 ;
;------------------------------------------------------------------------------------
Loop: rjmp Loop
;------------------------------------------------------------------------------------
ADC_Int:
sbis PinB, 3 ; Inverse test pin
sbi PortB, 3
sbic PinB, 3
cbi PortB, 3
ldi r16, 6 ; Clear all Timer OverFlow Int flags
out TIFR,r16 ; 0000 0110
reti