Таймеры в Atmega128
Добавлено: Вт май 19, 2015 23:14:14
Всех приветствую! Возникла небольшая проблема с таймерами в 128меге. С данным микроконтроллером работаю впервые.
Проблемы следующие:
1. Счётчик №2 настроен под шим. Баг шима в том, что при изменении значения регистра ocr2 помимо длительности импульса меняется и частота, хотя по логике вещей она не должна меняться.
2. Счётчик №1 16 бит настроен на прерывания по совпадению c ocr1a, но данное прерывание вообще не запускается.
3. Я ,конечно, не знаю, должно быть так или нет но всё же: на выводах pf4, pf7, pf5 почему-то постоянно весит лог. 1, хотя все порты настроенны на ввод без подтяжки
p.s. файл с прогой не загрузился, по этому кидаю так
.include "m128def.inc"
rjmp RESET ; Reset Handler
rjmp EXT_INT0 ; IRQ0 Handler
rjmp EXT_INT1 ; IRQ1 Handler
rjmp EXT_INT2 ; IRQ2 Handler
rjmp EXT_INT3 ; IRQ3 Handler
rjmp EXT_INT4 ; IRQ4 Handler
rjmp EXT_INT5 ; IRQ5 Handler
rjmp EXT_INT6 ; IRQ6 Handler
rjmp EXT_INT7 ; IRQ7 Handler
rjmp TIM2_COMP ; Timer2 Compare Handler
rjmp TIM2_OVF ; Timer2 Overflow Handler
rjmp TIM1_CAPT ; Timer1 Capture Handler
rjmp TIM1_COMPA; Timer1 CompareA Handler
rjmp TIM1_COMPB; Timer1 CompareB Handler
rjmp TIM1_OVF ; Timer1 Overflow Handler
rjmp TIM0_COMP ; Timer0 Compare Handler
rjmp TIM0_OVF ; Timer0 Overflow Handler
rjmp SPI_STC ; SPI Transfer Complete Handler
rjmp USART0_RXC; USART0 RX Complete Handler
rjmp USART0_DRE; USART0,UDR Empty Handler
rjmp USART0_TXC; USART0 TX Complete Handler
;rjmp ADC ; ADC Conversion Complete Handler
rjmp EE_RDY ; EEPROM Ready Handler
rjmp ANA_COMP ; Analog Comparator Handler
rjmp TIM1_COMPC; Timer1 CompareC Handler
rjmp TIM3_CAPT ; Timer3 Capture Handler
rjmp TIM3_COMPA; Timer3 CompareA Handler
rjmp TIM3_COMPB; Timer3 CompareB Handler
rjmp TIM3_COMPC; Timer3 CompareC Handler
rjmp TIM3_OVF ; Timer3 Overflow Handler
rjmp USART1_RXC; USART1 RX Complete Handler
rjmp USART1_DRE; USART1,UDR Empty Handler
rjmp USART1_TXC; USART1 TX Complete Handler
rjmp TWI ; Two-wire Serial Interface Interrupt Handler
rjmp SPM_RDY ; SPM Ready Handler
RESET: ; Reset Handler
EXT_INT0: ; IRQ0 Handler
EXT_INT1: ; IRQ1 Handler
EXT_INT2: ; IRQ2 Handler
EXT_INT3: ; IRQ3 Handler
EXT_INT4: ; IRQ4 Handler
EXT_INT5: ; IRQ5 Handler
EXT_INT6: ; IRQ6 Handler
EXT_INT7: ; IRQ7 Handler
TIM2_COMP: ; Timer2 Compare Handler
TIM2_OVF: ; Timer2 Overflow Handler
TIM1_CAPT: ; Timer1 Capture Handler
;TIM1_COMPA:; Timer1 CompareA Handler
TIM1_COMPB:; Timer1 CompareB Handler
TIM1_OVF: ; Timer1 Overflow Handler
TIM0_COMP: ; Timer0 Compare Handler
TIM0_OVF: ; Timer0 Overflow Handler
SPI_STC: ; SPI Transfer Complete Handler
USART0_RXC:; USART0 RX Complete Handler
USART0_DRE:; USART0,UDR Empty Handler
USART0_TXC:; USART0 TX Complete Handler
;ADC: ; ADC Conversion Complete Handler
EE_RDY: ; EEPROM Ready Handler
ANA_COMP: ; Analog Comparator Handler
TIM1_COMPC:; Timer1 CompareC Handler
TIM3_CAPT: ; Timer3 Capture Handler
TIM3_COMPA:; Timer3 CompareA Handler
TIM3_COMPB:; Timer3 CompareB Handler
TIM3_COMPC:; Timer3 CompareC Handler
TIM3_OVF: ; Timer3 Overflow Handler
USART1_RXC:; USART1 RX Complete Handler
USART1_DRE:; USART1,UDR Empty Handler
USART1_TXC:; USART1 TX Complete Handler
TWI: ; Two-wire Serial Interface Interrupt Handler
SPM_RDY: ; SPM Ready Handler
ldi R16,low(RAMEND)
out SPL,R16
ldi R16,high(RAMEND)
out SPH,R16
ldi r16,0x00
out DDRA,r16
ldi r16,0x01
out PORTA,r16
ldi r16,0x80
out DDRB,r16
ldi r16,0x00
out PORTB,r16
ldi r16,0x01
out DDRC,r16
ldi r16,0x00
out PORTC,r16
ldi r16,0x00
out DDRD,r16
ldi r16,0x00
out PORTD,r16
ldi r16,0x00
out DDRE,r16
ldi r16,0x00
out PORTE,r16
ldi r16,0x00
out DDRF,r16
ldi r16,0x00
out PORTF,r16
ldi r16,0x00
out DDRG,r16
ldi r16,0x00
out PORTG,r16
ldi r16,0xe9
out TCCR2,r16
ldi r16,0x2f
out OCR2,r16
ldi r16,0x09
out TCCR1B,r16
ldi r16,0x10
out TIMSK,r16
ldi r16,high(1000)
out OCR1AH,r16
ldi r16,low(1000)
out OCR1AL,r16
sei
cycle: rjmp cycle
TIM1_COMPA: push r16
in r16,SREG
push r16
in r16, portc
ldi r22,0x01
eor r16,r22
out portc,r16
pop r16
out SREG,r16
pop r16
reti
Проблемы следующие:
1. Счётчик №2 настроен под шим. Баг шима в том, что при изменении значения регистра ocr2 помимо длительности импульса меняется и частота, хотя по логике вещей она не должна меняться.
2. Счётчик №1 16 бит настроен на прерывания по совпадению c ocr1a, но данное прерывание вообще не запускается.
3. Я ,конечно, не знаю, должно быть так или нет но всё же: на выводах pf4, pf7, pf5 почему-то постоянно весит лог. 1, хотя все порты настроенны на ввод без подтяжки
p.s. файл с прогой не загрузился, по этому кидаю так
.include "m128def.inc"
rjmp RESET ; Reset Handler
rjmp EXT_INT0 ; IRQ0 Handler
rjmp EXT_INT1 ; IRQ1 Handler
rjmp EXT_INT2 ; IRQ2 Handler
rjmp EXT_INT3 ; IRQ3 Handler
rjmp EXT_INT4 ; IRQ4 Handler
rjmp EXT_INT5 ; IRQ5 Handler
rjmp EXT_INT6 ; IRQ6 Handler
rjmp EXT_INT7 ; IRQ7 Handler
rjmp TIM2_COMP ; Timer2 Compare Handler
rjmp TIM2_OVF ; Timer2 Overflow Handler
rjmp TIM1_CAPT ; Timer1 Capture Handler
rjmp TIM1_COMPA; Timer1 CompareA Handler
rjmp TIM1_COMPB; Timer1 CompareB Handler
rjmp TIM1_OVF ; Timer1 Overflow Handler
rjmp TIM0_COMP ; Timer0 Compare Handler
rjmp TIM0_OVF ; Timer0 Overflow Handler
rjmp SPI_STC ; SPI Transfer Complete Handler
rjmp USART0_RXC; USART0 RX Complete Handler
rjmp USART0_DRE; USART0,UDR Empty Handler
rjmp USART0_TXC; USART0 TX Complete Handler
;rjmp ADC ; ADC Conversion Complete Handler
rjmp EE_RDY ; EEPROM Ready Handler
rjmp ANA_COMP ; Analog Comparator Handler
rjmp TIM1_COMPC; Timer1 CompareC Handler
rjmp TIM3_CAPT ; Timer3 Capture Handler
rjmp TIM3_COMPA; Timer3 CompareA Handler
rjmp TIM3_COMPB; Timer3 CompareB Handler
rjmp TIM3_COMPC; Timer3 CompareC Handler
rjmp TIM3_OVF ; Timer3 Overflow Handler
rjmp USART1_RXC; USART1 RX Complete Handler
rjmp USART1_DRE; USART1,UDR Empty Handler
rjmp USART1_TXC; USART1 TX Complete Handler
rjmp TWI ; Two-wire Serial Interface Interrupt Handler
rjmp SPM_RDY ; SPM Ready Handler
RESET: ; Reset Handler
EXT_INT0: ; IRQ0 Handler
EXT_INT1: ; IRQ1 Handler
EXT_INT2: ; IRQ2 Handler
EXT_INT3: ; IRQ3 Handler
EXT_INT4: ; IRQ4 Handler
EXT_INT5: ; IRQ5 Handler
EXT_INT6: ; IRQ6 Handler
EXT_INT7: ; IRQ7 Handler
TIM2_COMP: ; Timer2 Compare Handler
TIM2_OVF: ; Timer2 Overflow Handler
TIM1_CAPT: ; Timer1 Capture Handler
;TIM1_COMPA:; Timer1 CompareA Handler
TIM1_COMPB:; Timer1 CompareB Handler
TIM1_OVF: ; Timer1 Overflow Handler
TIM0_COMP: ; Timer0 Compare Handler
TIM0_OVF: ; Timer0 Overflow Handler
SPI_STC: ; SPI Transfer Complete Handler
USART0_RXC:; USART0 RX Complete Handler
USART0_DRE:; USART0,UDR Empty Handler
USART0_TXC:; USART0 TX Complete Handler
;ADC: ; ADC Conversion Complete Handler
EE_RDY: ; EEPROM Ready Handler
ANA_COMP: ; Analog Comparator Handler
TIM1_COMPC:; Timer1 CompareC Handler
TIM3_CAPT: ; Timer3 Capture Handler
TIM3_COMPA:; Timer3 CompareA Handler
TIM3_COMPB:; Timer3 CompareB Handler
TIM3_COMPC:; Timer3 CompareC Handler
TIM3_OVF: ; Timer3 Overflow Handler
USART1_RXC:; USART1 RX Complete Handler
USART1_DRE:; USART1,UDR Empty Handler
USART1_TXC:; USART1 TX Complete Handler
TWI: ; Two-wire Serial Interface Interrupt Handler
SPM_RDY: ; SPM Ready Handler
ldi R16,low(RAMEND)
out SPL,R16
ldi R16,high(RAMEND)
out SPH,R16
ldi r16,0x00
out DDRA,r16
ldi r16,0x01
out PORTA,r16
ldi r16,0x80
out DDRB,r16
ldi r16,0x00
out PORTB,r16
ldi r16,0x01
out DDRC,r16
ldi r16,0x00
out PORTC,r16
ldi r16,0x00
out DDRD,r16
ldi r16,0x00
out PORTD,r16
ldi r16,0x00
out DDRE,r16
ldi r16,0x00
out PORTE,r16
ldi r16,0x00
out DDRF,r16
ldi r16,0x00
out PORTF,r16
ldi r16,0x00
out DDRG,r16
ldi r16,0x00
out PORTG,r16
ldi r16,0xe9
out TCCR2,r16
ldi r16,0x2f
out OCR2,r16
ldi r16,0x09
out TCCR1B,r16
ldi r16,0x10
out TIMSK,r16
ldi r16,high(1000)
out OCR1AH,r16
ldi r16,low(1000)
out OCR1AL,r16
sei
cycle: rjmp cycle
TIM1_COMPA: push r16
in r16,SREG
push r16
in r16, portc
ldi r22,0x01
eor r16,r22
out portc,r16
pop r16
out SREG,r16
pop r16
reti