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

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

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

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

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

Сообщение GP1 »

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

На каком языке пишете то?
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
Antol.St
Нашел транзистор. Понюхал.
Сообщения: 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
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Antol.St писал(а):А откуда тогда результат брать, и в чём этот результат будет?

Здравствуйте. Вот пример, где вся работа основана на захвате. Может что пригодится. Правда на ассемблере.
http://radiokot.ru/forum/viewtopic.php?p=193610#193610
Аватара пользователя
Antol.St
Нашел транзистор. Понюхал.
Сообщения: 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
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 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

Это касается ассемблера; как считывать на сях и сях++, не знаю.
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 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
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

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

Сообщение GP1 »

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

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

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

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

GP1 писал(а):а потом удивляются - чего это у них *.hex в 3 раза больше чем при написании на асме :))) :))) :)))
Асм был, есть и будет есть!!!

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

Сообщение GP1 »

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

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