Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
03.12.2011, 16:40
|
#1
|
Частый гость
Регистрация: 15.07.2008
Сообщений: 12
Сказал спасибо: 58
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
TM0 в ATtiny2313
Добрый день.
Как сгенерирывать прерывание ТМ0 по совпадению?
Вот код:
.cseg
.org 0
rjmp start
reti ;INT0addr = 0x0001 ; External Interrupt Request 0
reti ; INT1addr = 0x0002 ; External Interrupt Request 1
reti ; ICP1addr = 0x0003 ; Timer/Counter1 Capture Event
reti ; OC1Aaddr = 0x0004 ; Timer/Counter1 Compare Match A
reti ; OC1addr = 0x0004 ; For compatibility
reti ; OVF1addr = 0x0005 ; Timer/Counter1 Overflow
reti ;rjmp OVFO ; OVF0addr = 0x0006 ; Timer/Counter0 Overflow
reti ; URXCaddr = 0x0007 ; USART, Rx Complete
reti ; URXC0addr = 0x0007 ; For compatibility
reti ; UDREaddr = 0x0008 ; USART Data Register Empty
reti ; UDRE0addr = 0x0008 ; For compatibility
reti ; UTXCaddr = 0x0009 ; USART, Tx Complete
reti ; UTXC0addr = 0x0009 ; For compatibility
reti ; ACIaddr = 0x000a ; Analog Comparator
reti ; PCIaddr = 0x000b ;
reti ; OC1Baddr = 0x000c ;
rjmp OC0A ; = 0x000d ;
reti ;rjmp OC0B ; OC0Baddr = 0x000e ;
reti ; USI_STARTaddr = 0x000f ; USI Start Condition
reti ; USI_OVFaddr = 0x0010 ; USI Overflow
reti ; ERDYaddr = 0x0011 ;
reti ; WDTaddr = 0x0012 ; Watchdog Timer Overflow
start:
ldi tmp, low(RAMEND)
out SPL, tmp
cli
;----Настройка таймера WDT--
out WDTCR, tmp ;запрещяем
;----Выставляем прерывания--
clr tmp
out GIMSK, tmp
ldi tmp, 0x0F
out TIMSK, tmp
ldi temp_red, 0x2F
ldi tmp, 0x0F
out PORTD, tmp
out PORTB, tmp
sei
;----Настраиваем таймерTM0---
ldi tmp, 0x0D ;0x7d
out OCR0A, tmp
ldi tmp, 0x02
out TCCR0A,tmp
ldi tmp, 0x02
out TCCR0B, tmp
klav:
nop
nop
rjmp klav
OC0A: ; само прерывние
dec temp_red
breq ee1
reti
ee1:
ldi temp_red, 0x2F
swap tmp
out PORTD, tmp
out PORTB, tmp
reti
Вроде все по учебнику, пробую в протеусе, не выходит.
Если переписывать для ТМ1 то все окей.
В чем проблема и где ошибка?
|
|
|
|
03.12.2011, 17:30
|
#2
|
Гражданин KAZUS.RU
Регистрация: 14.11.2008
Сообщений: 701
Сказал спасибо: 298
Сказали Спасибо 283 раз(а) в 193 сообщении(ях)
|
Re: TM0 в ATtiny2313
Проверьте таблицу векторов. Какая-то она странная.
|
|
|
|
03.12.2011, 17:45
|
#3
|
Частый гость
Регистрация: 15.07.2008
Сообщений: 12
Сказал спасибо: 58
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: TM0 в ATtiny2313
Сообщение от kittec
|
Проверьте таблицу векторов. Какая-то она странная.
|
Таблица взята из tn2313def.inc
Последний раз редактировалось ABrej; 03.12.2011 в 17:48.
|
|
|
|
03.12.2011, 18:10
|
#4
|
Почётный гражданин KAZUS.RU
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: TM0 в ATtiny2313
Не неправильно установлен
Цитата:
|
ldi tmp, 0x0D ;0x7d
out OCR0A, tmp
|
Вам ндао установить таймер в режим CTC.
|
|
|
Сказали "Спасибо" nonamedov
|
|
|
03.12.2011, 18:46
|
#5
|
Почётный гражданин KAZUS.RU
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: TM0 в ATtiny2313
надо убрать в TIMSK неиспользуемые
прерывание, у Вас одновременно происходит несколько прерываний и в рельтате обрабатывается только прерывание с большим приоритетом, т.е. TIMER0 OVF , у таймера1 все наоборот сперва обрабатывается TIMER1 COMPA, а после TIMER1 OVF.
|
|
|
Сказали "Спасибо" nonamedov
|
|
|
03.12.2011, 18:53
|
#6
|
Частый гость
Регистрация: 15.07.2008
Сообщений: 12
Сказал спасибо: 58
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: TM0 в ATtiny2313
Сообщение от nonamedov
|
Вам надо установить таймер в режим CTC.
|
Регистр OCR0A предназначен для кода по которому происходит сравнение
Сообщение от nonamedov
|
надо убрать в TIMSK неиспользуемые
|
Для работы по сравнению в TIMSK нежно выставит 0 бит в 1 что будет соответствовать разрешению прерывания для ТМ0 канала А по совпадению.
Делал:
ldi tmp, 0x01
out TIMSK, tmp
не помогло.
|
|
|
|
03.12.2011, 19:14
|
#7
|
Почётный гражданин KAZUS.RU
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: TM0 в ATtiny2313
Сообщение от ABrej
|
reti ; OC1addr = 0x0004 ; For compatibility
|
Сообщение от ABrej
|
reti ; URXC0addr = 0x0007 ; For compatibility
|
А эти то для чего???
|
|
|
Сказали "Спасибо" nonamedov
|
|
|
03.12.2011, 19:20
|
#8
|
Почётный гражданин KAZUS.RU
Регистрация: 06.06.2008
Сообщений: 1,530
Сказал спасибо: 78
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
|
Re: TM0 в ATtiny2313
вот нормальная таблица векторов прерывания:
Цитата:
|
0x0000 rjmp RESET ; Reset Handler
0x0001 rjmp INT0 ; External Interrupt0 Handler
0x0002 rjmp INT1 ; External Interrupt1 Handler
0x0003 rjmp TIM1_CAPT ; Timer1 Capture Handler
0x0004 rjmp TIM1_COMPA ; Timer1 CompareA Handler
0x0005 rjmp TIM1_OVF ; Timer1 Overflow Handler
0x0006 rjmp TIM0_OVF ; Timer0 Overflow Handler
0x0007 rjmp USART0_RXC ; USART0 RX Complete Handler
0x0008 rjmp USART0_DRE ; USART0,UDR Empty Handler
0x0009 rjmp USART0_TXC ; USART0 TX Complete Handler
0x000A rjmp ANA_COMP ; Analog Comparator Handler
0x000B rjmp PCINT ; Pin Change Interrupt
0x000C rjmp TIMER1_COMPB ; Timer1 Compare B Handler
0x000D rjmp TIMER0_COMPA ; Timer0 Compare A Handler
0x000E rjmp TIMER0_COMPB ; Timer0 Compare B Handler
0x000F rjmp USI_START ; Usi Start Handler
0x0010 rjmp USI_OVERFLOW ; USI Overflow Handler
0x0011 rjmp EE_READY ; EEPROM Ready Handler
0x0012 rjmp WDT_OVERFLOW ; Watchdog Overflow Handler
|
|
|
|
Сказали "Спасибо" nonamedov
|
|
|
03.12.2011, 19:44
|
#9
|
Частый гость
Регистрация: 15.07.2008
Сообщений: 12
Сказал спасибо: 58
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: TM0 в ATtiny2313
Сообщение от nonamedov
|
вот нормальная таблица векторов прерывания:
|
К сожалению я не сильный специалист в аврах, только учусь.
Вот файл взятый из набора AVR000 но это по моему не особо влияет (как написано), главное чтобы прерывание отрабатывалось по адресу 0x000D.
Кстати смотрел hex, там в таблице прерываний правильно прописывается.
|
|
|
|
03.12.2011, 19:46
|
#10
|
Гражданин KAZUS.RU
Регистрация: 14.11.2008
Сообщений: 701
Сказал спасибо: 298
Сказали Спасибо 283 раз(а) в 193 сообщении(ях)
|
Re: TM0 в ATtiny2313
Сообщение от nonamedov
|
вот нормальная таблица векторов прерывания:
|
А оно ему надо. У него есть лучше.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Таймер на ATtiny2313
|
Lockdog |
Микроконтроллеры, АЦП, память и т.д |
1 |
19.07.2010 16:18 |
Микроконтроллер attiny2313
|
Kabzon |
Микроконтроллеры, АЦП, память и т.д |
8 |
29.12.2009 15:56 |
ATtiny2313 и Proteus 7.1
|
rocky7 |
Микроконтроллеры, АЦП, память и т.д |
1 |
23.03.2009 23:30 |
Проблема с ATtiny2313
|
kvark85 |
Микроконтроллеры, АЦП, память и т.д |
28 |
26.02.2009 14:34 |
AT90S2313 vs Attiny2313-20
|
Edward_tlt |
Микроконтроллеры, АЦП, память и т.д |
68 |
20.03.2008 23:11 |
Часовой пояс GMT +4, время: 14:16.
|
|