Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR...

 
Опции темы

Помогите разобраться с таймером

Непрочитано 22.12.2013, 17:26  
Fraktal
Временная регистрация
 
Регистрация: 21.02.2013
Сообщений: 87
Сказал спасибо: 70
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Fraktal на пути к лучшему
По умолчанию Помогите разобраться с таймером

Знатоки помогите правильно настроить прерывание по таймеру.Я ниже приведу все свои расчеты по вычислению числа для компаратора.
Я взял микросхему ATiny2313 вернее ее аналог AT90S2313 с целью научиться работать с портами и прерываниями. Код пишу в AVR Studio5 симулирую в протеусе 7.10. И задался я целью написать програмку где у МК на порте В висят 8 диодов и через каждые 8сек они по очереди загораются, тактовую частоту микроконтроллера взял за 5Мгц. Дальше мои вычисления.
Период МК : 1/5Мгц =200наносек.
Сброс таймера через : 8/8 = 1000милисек (каждый диод горит 8 сек)
При частоте кварца от МК 5Мгц таймер досчитает до 65535 за : 200нс*65535=13милисек.
Частота таймера : 13мс*256=3328мс=3,3сек.
период частоты таймера : 200нс*256=51Микросек.
получаем число которое нужно загрузить в таймер 1000мс/51мкс=19607.

19607(10)=4с97(16) и это число я записываю в регистр программка компилируется нех файл гружу в протеус и по результатам симуляции диоды загораются 2 раза в секунду каждый, приблизительно ))). Подскажите где моя ошибка.
Цитата:
Код:
 .include "2313def.inc"
 .def temp=R16
 .def temp1=R17
 .def temp2=R18
 .def temp3=R19
 .def temp4=R20

.cseg
.org 0

rjmp Reset            ;вектора прерываний
rjmp INT_0
rjmp INT_1
rjmp Timer1_capt1
rjmp Timer1_comp1
rjmp Timer1_OVF1
rjmp Timer0_OVF0
rjmp UART_RX
rjmp UART_UDRE
rjmp UART_TX
rjmp ANA_COMP

;Reset:
INT_0:
INT_1:
Timer1_capt1:
;Timer1_comp1:
Timer1_OVF1:
Timer0_OVF0:
UART_RX:
UART_UDRE:
UART_TX:
ANA_COMP:
          reti

RESET:	ldi			TEMP,0xff
			OUT		DDRB,TEMP			;ИНИЦИАЛИЗАЦИЯ ПОРТА НА ВЫХОД
			
			LDI		TEMP,0B01000000	; РАЗРЕШЕНИЕ ПРЕРЫВАНИЙ КОМПАРАТОРА	
			OUT		TIMSK,TEMP
			
			LDI		TEMP,0B00000100	;РЕЖИМ ТАКТОВОГО СИГНАЛА ТАЙМЕРА
			OUT		TCCR1B,TEMP
			
			LDI		TEMP,0X4C				;ЗАГРУЖАЕМ ЧИСЛО ДЛЯ СРАВНЕНИЯ (ИНИЦИАЛИЗАЦИЯ КОМПАРАТОРА)
			OUT		OCR1AH,TEMP
			LDI		TEMP,0X97
			OUT		OCR1AL,TEMP
						
			LDI		TEMP,RAMEND		;УКАЗАТЕЛЬ НА ПАМЯТЬ
			OUT		SPL,TEMP

			LDI		TEMP1,0X01			 ;ИНИЦИАЛИЗАЦИЯ ИНДИКАТОРА

			LDI		TEMP,0
			OUT		TCNT1H,TEMP
			OUT		TCNT1L,TEMP
		    
			SEI									; РАЗРЕШИТЬ ПРЕРЫВАНИЯ
			

START:	RJMP		START				    ;БЕСКОНЕЧНЫЙ ЦИКЛ

TIMER1_COMP1:		LDI		TEMP,0
							OUT		TCNT1H,TEMP
							OUT		TCNT1L,TEMP
							
BEGIN:					OUT		PORTB,TEMP1
							CPI		TEMP1,0X80
							BREQ		UNIT
							LSL		TEMP1
RJMP		BEGIN
					
RJMP BEGIN					
UNIT:	LDI		TEMP1,0B00000001
RJMP	BEGIN		  

END:
Реклама:
Fraktal вне форума  
Непрочитано 22.12.2013, 19:56  
alvadep
Почётный гражданин KAZUS.RUN
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,042
Сказал спасибо: 589
Сказали Спасибо 3,967 раз(а) в 1,825 сообщении(ях)
alvadep на пути к лучшему
По умолчанию Re: Ребята помогите разобраться с таймером

Начнем с того, что Ваши расчеты слегка не верны.
Если используете таймер 1, то у него есть предделитель. Максимальное число 1024. Т.е. период инкрементирования 1024/5МГц=0,0002048с.
Если нужно получить тайминг 8с, то 8/0,0002048=39062,5. Это число (без дробной части) загружаете в ригистр сравнения и получаете нужную выдержку. Как-то так.
alvadep вне форума  
Сказали "Спасибо" alvadep
Fraktal (22.12.2013)
Непрочитано 22.12.2013, 21:14  
Fraktal
Временная регистрация
 
Регистрация: 21.02.2013
Сообщений: 87
Сказал спасибо: 70
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Fraktal на пути к лучшему
По умолчанию Re: Ребята помогите разобраться с таймером

alvadep, я вычислил позже по другому : 5Мгц/1024=4883 тактов секунду и после для получения числа загружаемого в таймер : 4883*8секунд=39064(10) и 9898(16) это число загрузил в таймер но в протеусе снова диоды моргают не так как задумывалось. Не выдерживается временной интервал в 8 секунд.
Fraktal вне форума  
Непрочитано 22.12.2013, 22:35  
alvadep
Почётный гражданин KAZUS.RUN
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,042
Сказал спасибо: 589
Сказали Спасибо 3,967 раз(а) в 1,825 сообщении(ях)
alvadep на пути к лучшему
По умолчанию Re: Ребята помогите разобраться с таймером

Fraktal, я что-то не вижу выхода из прерывания Timer1_comp1.
У Вас получается программа крутится по циклу BEGIN не выходя из прерывания, соответственно перебор светиков происходит все время, а не по прерыванию.
alvadep вне форума  
Сказали "Спасибо" alvadep
Fraktal (22.12.2013)
Непрочитано 22.12.2013, 23:06  
Fraktal
Временная регистрация
 
Регистрация: 21.02.2013
Сообщений: 87
Сказал спасибо: 70
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Fraktal на пути к лучшему
По умолчанию Re: Ребята помогите разобраться с таймером

alvadep, Благодарю Вас я разобрался с Вашей помощью!!! и ВОЗНИК ЕЩЕ ОДИН ВОПРОС - при отладке программы в AVR Studio5 в окне просмотра I/O View в регистре TIMSK поднимается 5-й бит т.е. бит-OCIE1B хотя я записываю в TIMSK значение 01000000 и по идее должен подниматься 6-й бит : OCIE1A. Почему так? или это настройки среды программирования на это влияют?
Код:
.include "2313def.inc"
 .def temp=R16
 .def temp1=R17
 .def temp2=R18
 .def temp3=R19
 .def temp4=R20


.cseg
.org 0

rjmp Reset            ;вектора прерываний
rjmp INT_0
rjmp INT_1
rjmp Timer1_capt1
rjmp Timer1_comp1
rjmp Timer1_OVF1
rjmp Timer0_OVF0
rjmp UART_RX
rjmp UART_UDRE
rjmp UART_TX
rjmp ANA_COMP

;Reset:
INT_0:
INT_1:
Timer1_capt1:
;Timer1_comp1:
Timer1_OVF1:
Timer0_OVF0:
UART_RX:
UART_UDRE:
UART_TX:
ANA_COMP:
          reti

RESET:	ldi			TEMP,0xff
			OUT		DDRB,TEMP			;ИНИЦИАЛИЗАЦИЯ ПОРТА НА ВЫХОД
			
			LDI		TEMP,0B01000000	; РАЗРЕШЕНИЕ ПРЕРЫВАНИЙ КОМПАРАТОРА	
			OUT		TIMSK,TEMP
			
			LDI		TEMP,0B00000101	;РЕЖИМ ТАКТОВОГО СИГНАЛА ТАЙМЕРА
			OUT		TCCR1B,TEMP
			
			LDI		TEMP,0X98				;ЗАГРУЖАЕМ ЧИСЛО ДЛЯ СРАВНЕНИЯ (ИНИЦИАЛИЗАЦИЯ КОМПАРАТОРА)
			OUT		OCR1AH,TEMP
			LDI		TEMP,0X98
			OUT		OCR1AL,TEMP
						
			LDI		TEMP,RAMEND		;УКАЗАТЕЛЬ НА ПАМЯТЬ
			OUT		SPL,TEMP

			LDI		TEMP1,0X80			 ;ИНИЦИАЛИЗАЦИЯ ИНДИКАТОРА

			LDI		TEMP,0
			OUT		TCNT1H,TEMP
			OUT		TCNT1L,TEMP
		    
			SEI									; РАЗРЕШИТЬ ПРЕРЫВАНИЯ
			

START:	RJMP		START				    ;БЕСКОНЕЧНЫЙ ЦИКЛ

TIMER1_COMP1:		LDI		TEMP,0
							OUT		TCNT1H,TEMP
							OUT		TCNT1L,TEMP
							
BEGIN:					
							CPI		TEMP1,0X80
							BREQ		UNIT
							LSL		TEMP1
							RJMP		OUTPUT
					
UNIT:	LDI		TEMP1,0B00000001
OUTPUT:		OUT		PORTB,TEMP1
RETI		  

END:
Fraktal вне форума  
Непрочитано 23.12.2013, 00:56  
gary2007
Почётный гражданин KAZUS.RUN
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,440
Сказал спасибо: 375
Сказали Спасибо 1,052 раз(а) в 621 сообщении(ях)
gary2007 на пути к лучшему
По умолчанию Re: Помогите разобраться с таймером

Вы в настройках проекта выбрали какой контроллер?

Пробуйте так написать
ldi TEMP,(1‹‹OCIE1A)
out TIMSK,TEMP
__________________
Мелочи не решают главного. Они решают всё!
gary2007 вне форума  
Непрочитано 23.12.2013, 02:22  
Fraktal
Временная регистрация
 
Регистрация: 21.02.2013
Сообщений: 87
Сказал спасибо: 70
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Fraktal на пути к лучшему
По умолчанию Re: Помогите разобраться с таймером

gary2007, указал команду как Вы мне посоветовали , все равно поднимается 5-й бит OCIE1B. Контроллер в настройках выбрал ATtiny2313
Fraktal вне форума  
Непрочитано 23.12.2013, 02:48  
gary2007
Почётный гражданин KAZUS.RUN
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,440
Сказал спасибо: 375
Сказали Спасибо 1,052 раз(а) в 621 сообщении(ях)
gary2007 на пути к лучшему
По умолчанию Re: Помогите разобраться с таймером

Выберете тот который стоит. У них TIMSK отличаются, если верить ДШ.
Или что-то не так в настройках проекта.
__________________
Мелочи не решают главного. Они решают всё!
gary2007 вне форума  
Непрочитано 23.12.2013, 03:57  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Помогите разобраться с таймером

Для 4МГц 8 минут.

UPD
Вставил формулу - так удобнее
Вложения:
Тип файла: txt 90-2313.asm.txt (1.5 Кб, 57 просмотров)

Последний раз редактировалось omercury; 23.12.2013 в 04:36.
omercury вне форума  
Сказали "Спасибо" omercury
Fraktal (23.12.2013)
Непрочитано 23.12.2013, 09:32  
alvadep
Почётный гражданин KAZUS.RUN
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,042
Сказал спасибо: 589
Сказали Спасибо 3,967 раз(а) в 1,825 сообщении(ях)
alvadep на пути к лучшему
По умолчанию Re: Помогите разобраться с таймером

Сообщение от omercury Посмотреть сообщение
Для 4МГц 8 минут.
Не верю! (Станиславский).
При 4 МГц и предделителе 1024 переполнение таймера 1 будет происходить примерно каждые 17 сек.

Последний раз редактировалось alvadep; 23.12.2013 в 10:09.
alvadep вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобраться с микроконтроллером igor140329 Микроконтроллеры, АЦП, память и т.д 7 07.03.2011 03:27
Немецкая схемотехника. Помогите разобраться Luzkov TTL и CMOS логика 23 05.01.2011 11:13
[Решено] Помогите разобраться barbuss Proteus 2 26.10.2010 23:45
Помогите разобраться ,АЦП Тину 13, что то не так... Botan Микроконтроллеры, АЦП, память и т.д 2 14.09.2010 18:31


Часовой пояс GMT +4, время: 14:58.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.