Dmitri Vladimirovich писал(а):Он меняет не только длинну импульсов но и скважность
#include <mega32.h>
interrupt [EXT_INT2] void ext_int2_isr(void)
{
unsigned int channel0;
if(PINB.2) // Передний фронт
{
TCNT1 = 0; // Обнуление таймера
MCUCSR=0x00; // Переключаемся на режим "По заднему фронту"
}
else // Задний фронт
{
MCUCSR=0x40; // Переключаемся на режим "По переднему фронту"
channel0 = TCNT1; // В channel0 длительность импульса в 2x микросекундах
channel0 = (3000 - channel0) + 3000; // Реверс
PORTA = 0xFF; // Старт инмпульса
TCNT1 = 0; // Обнуление таймера
while(TCNT1<channel0) continue;
PORTA = 0x00; // Стоп импуьса
}
}
void main(void)
{
PORTA=0x00; DDRA=0xFF;
PORTB=0xFF; DDRB=0x00;
PORTC=0x00; DDRC=0x00;
PORTD=0x00; DDRD=0x00;
// Внешнее прерывание
GICR|=0x20;
MCUCR=0x00;
MCUCSR=0x40; // По переднему фронту
GIFR=0x20;
// Timer/Counter 1 initialization
// Clock source: System Clock
TCCR1A=0x00; TCCR1B=0x02; // Clock value: 2000,000 kHz
TCNT1H=0x00; TCNT1L=0x00;
ICR1H=0x00; ICR1L=0x00;
OCR1AH=0x00; OCR1AL=0x00;
OCR1BH=0x00; OCR1BL=0x00;
TIMSK=0x00;
#asm("sei")
while (1) continue;
}
Вернуться в Arduino и другие Xduino
Сейчас этот форум просматривают: Bing [Bot] и гости: 15