Вы вошли на сайт, как Гость
Регистрация

Измерение ширины импульсов

Программные примеры для микроконтроллеров AVR - AVRStudio
(Измерение ширины импульсов)

На вывод ICP (Input Capture Pint — вывод захвата на входе) микроконтроллера подаются импульсы, ширина которых измеряется и ее значение в миллисекундах отображается с помощью светодиодов, подключенных к выводам порта С. Пример для микроконтроллера AT90S8535 представлен ниже.

Примечание: при компиляции проекта требуется добавить в проект следующие библиотеки: "avr/io.h","avr/interrupt.h","avr/signal.h".

unsigned char OverflowC;
unsigned int EdgeR, EdgeF;
unsigned long PulseClocks;

INTERRUPT(SIG_OVERFLOW1)
{
  OverflowC++;
}

INTERRUPT(SIG_INPUT_CAPTURE1 )
{
  if ((PIND & 0x40) != 0)
  {
    EdgeR = ICR1;
	TCCR1B = TCCR1B & 0xBF;
	OverflowC = 0;
  }
  else
  {
    EdgeF = ICR1;
	TCCR1B = TCCR1B | 0x40;
	PulseClocks = (unsigned long)EdgeF -
	              (unsigned long)EdgeR +
				  (unsigned long)OverflowC * 0x10000;
	PORTC = PulseClocks / 500;
  }
}

int main (void)
{
  DDRC = 0xFF;
  TCCR1B = 0xC2;
  TIMSK = 0x24;
  sei();
  while(1) ;
}

Файлы проекта можно скачать здесь: