Режим захвата в Tiny2313

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 163
Зарегистрирован: Вт окт 14, 2008 11:29:03
Откуда: Алтайский край, Бийск

Сообщение Antol.St »

Здраствуйте. Необходимо измерить время между двумя импульсами,
в интернете прочитал что для этого подойдёт режим захвата.
Объясните пожалуйста как настроить этот режим чтобы замер времени был между первыми фронтами импульсов подаваемыми на PORTD.6.
Последний раз редактировалось Antol.St Ср июл 22, 2009 18:19:41, всего редактировалось 1 раз.
Контактная информация:
Реклама
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

Берете ДШ открываете раздел "Таймеры" ищете режим "ICP" пишите в регистры управляющие коды, разрешаете прерывание и все...

На каком языке пишете то?
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 163
Зарегистрирован: Вт окт 14, 2008 11:29:03
Откуда: Алтайский край, Бийск

Сообщение Antol.St »

Пишу на С.

А откуда тогда результат брать, и в чём этот результат будет?
Контактная информация:
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

результат будет в регистровой паре ICRH:ICRL, читают обычно в теле обработчика прерывания, после чтения обнулить счетчик TCNT.
Пишу на асме, так что с кодом на С помочь не могу.
могу предложить асм код (кусок из программы)

Код: Выделить всё

;========================
; Обработка прерываний
;========================
t1_icp:
	; обнулить счетчик TCNT1
		clr	tmp
		out	TCNT1H,tmp
		out	TCNT1L,tmp
	; прочитать значение ICR
		in	lo_icr,ICR1L
		in	hi_icr,ICR1H
	; установить флаг готовности результатов
		sbr	flags,1<<ready
	; вычисление переменных
		inc	dm
		cpi	dm,60
		breq	icp01
		rjmp	out_t1_icp		
icp01:		clr	dm
		inc	sm

out_t1_icp:
		reti
;========================
правда код использовался не на tiny2313. но ща гляну как для таньки будет
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

Посмотрел, для таньки тоже самое: таймер Т1 режим захвата

зы только сейчас замети концовка не красиво сделана:
надо будет заменить breq на brne и убрать rjmp
:roll: не забыть бы.
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Реклама
akl
Друг Кота
Сообщения: 4468
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Antol.St писал(а): А откуда тогда результат брать, и в чём этот результат будет?
Здравствуйте. Вот пример, где вся работа основана на захвате. Может что пригодится. Правда на ассемблере.
http://radiokot.ru/forum/viewtopic.php?p=193610#193610
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 163
Зарегистрирован: Вт окт 14, 2008 11:29:03
Откуда: Алтайский край, Бийск

Сообщение Antol.St »

Спасибо всем за помощь, разобрался с режимом захвата.
Но сразу возникла другая проблема.
Если регистр ICR1 16 разрядный, то как мне из него число извлечь?
Для примера:
В регистре ICR1L имеем число 10111011, а в регистре ICR1H число 11101010.
Что мне нужно сделать в программе чтобы получилось 1110101010111011 чтобы потом его в десятичное переконвертить?
Контактная информация:
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

Посмотри выше,

Код: Выделить всё

; прочитать значение ICR 
      in   lo_icr,ICR1L 
      in   hi_icr,ICR1H
только обязательно сначало мл.байт потом старший
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
akl
Друг Кота
Сообщения: 4468
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Жаль,что Вы не посмотрели исходник, а ведь там есть ответ

Код: Выделить всё

		IN	R14,ICR1L
		IN	R13,ICR1H	; конечное значение nox
Такой порядок считывания обязателен для всех 16-разрядных регистров периферии, при записи наоборот, первым записывается старший байт, вторым-младший.

Код: Выделить всё

		CLR	B
		OUT	TCCR1B,B
		OUT	TCNT1H,B
		OUT	TCNT1L,B
Это касается ассемблера; как считывать на сях и сях++, не знаю.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница

Сообщение urry »

unsigned int summa;
summa= ICR1H<<8;
summa +=ICR1L ;
--------------------------------------
unsigned char arr2[2];
unsigned int summa;
arr2[0]=ICR1L;
arr2[1]=ICR1H;
summa = * (unsigned int*)&arr2;
--------------------------------------
union
{
struct {
unsigned char lo;
unsigned char hi;
}bt;
unsigned int all;
}un;

un.bt.hi =ICR1H;
un.bt.lo =ICR1L;
summa=un.all;
Контактная информация:
akl
Друг Кота
Сообщения: 4468
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Афффигеть :shock: как просто! :oops:
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

а потом удивляются - чего это у них *.hex в 3 раза больше чем при написании на асме :))) :))) :)))
Асм был, есть и будет есть!!!
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 163
Зарегистрирован: Вт окт 14, 2008 11:29:03
Откуда: Алтайский край, Бийск

Сообщение Antol.St »

Спасибо всем за помощь .
Контактная информация:
Открыл глаза
Аватара пользователя
Сообщения: 75
Зарегистрирован: Чт дек 06, 2007 22:26:18

Сообщение @ndrey »

GP1 писал(а):а потом удивляются - чего это у них *.hex в 3 раза больше чем при написании на асме :))) :))) :)))
Асм был, есть и будет есть!!!
urry выложил 3 примера. Первый пример после компиляции может чуточку по размеру больше получится, чем на ACMе. Ну никак не в 3 раза :-)
GP1
Поставщик валерьянки для Кота
Аватара пользователя
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград

Сообщение GP1 »

по конкретней пожалуста - сколько вешать в байтах (можно в словах) :)))
приведенный мной код весит 4 байта(2 слова), а у вас?
Чем дальше, тем больше становлюсь занудой...
Изображение
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»