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

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

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

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

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

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

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.RU
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
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.RU
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
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.RU
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
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.RU
 
Аватар для gary2007
 
Регистрация: 24.09.2007
Адрес: Полтава, UA
Сообщений: 2,450
Сказал спасибо: 376
Сказали Спасибо 1,060 раз(а) в 624 сообщении(ях)
gary2007 на пути к лучшему
По умолчанию Re: Помогите разобраться с таймером

Выберете тот который стоит. У них TIMSK отличаются, если верить ДШ.
Или что-то не так в настройках проекта.
__________________
Мелочи не решают главного. Они решают всё!
gary2007 вне форума  
Непрочитано 23.12.2013, 03:57  
omercury
Почётный гражданин KAZUS.RU
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
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.RU
 
Регистрация: 05.05.2011
Адрес: Харьков
Сообщений: 5,049
Сказал спасибо: 592
Сказали Спасибо 3,968 раз(а) в 1,826 сообщении(ях)
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
АЦП - для чайника (помогите разобраться)! Apach111 Электроника - это просто 2 30.05.2008 10:10


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


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot