Код: Выделить всё
TCCR1B=0b10000001; //подавление помех, захват по спадающему фронту, источкик зг
TIMSK=0b00100100; //прерывания захват и переполнение Т1Что я не правильно сделал?
Код: Выделить всё
TCCR1B=0b10000001; //подавление помех, захват по спадающему фронту, источкик зг
TIMSK=0b00100100; //прерывания захват и переполнение Т1ooogo писал(а):PD6 сконфигурировал на вход без подтяжки
Код: Выделить всё
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;Modest писал(а):Может в этом проблема?
ValBag писал(а): у вас импульсы с LM311 идут?
В каком месте сигнала на ICP1 происходит захват?.
В компаратор лучше бы ввести некоторый гистерезис, т. к. сигнал у вас с пъезо..., то возможны игольчатые импульсы, которые осциллографом не сразу обнаружишь, при том масштабе развертки в которой смотрите сигнал.
А вообще, такие вещи, лучше отладить подавая на вход регулярный известный сигнал, начиная со входа МК и далее к началу. Тогда будет ясно, в какой части схемы "заковыка".
А то, что сейчас происходит - да, можно попытаться определить длительность импульса захвата программным путем.
ValBag писал(а): да, на выходе компаратора, вроде ничего лишнего нет. А что за импульс внизу, в начале?
По его фронтам есть какие-то выбросы на входе около 50 mV.
Написали бы подробнее во вложении задачу и что хотите получить, с расстановкой процессов по времени и способом возбуждения входа.
Попробуйте перед разрешением прерывания сбросить флаг запроса по захвату.
По измерению длительности напишу попозже.
Может лучше попробовать так:ooogo писал(а):...по поводу длительности, думаю соединить вход ICR1 INT0, захват по спаду, прерывание по передниму фронту, и во внешнем прерывании брать значение TCNT1L TCHT1H счетчика таймера и смотреть разнизу с захватом ICR1L ICR1H !?
Код: Выделить всё
...
#define modTOP 0xFFFF // модуль счета Т1
unsigned char OverCount; // счетчик переполнения Т1
unsigned int TimeDN, TimeUP; // время спада и фронта импульса
unsigned int RezTime; // для широких импульсов long
...
// обработка переполнения
OverCount++;
...
// обработка захвата
if (~(PIND&0x40))
{
TimeDN=ICR1;
TCCR1B|=(1<<ICES1); // следующий захват по фронту
OverCount=0;
}
else
{
TimeUP=ICR1;
TCCR1B&=(~(1<<ICES1)); // следующий захват по спаду
RezTime=TimeUP - TimeDN + (OverCount * modTOP);
}xVekx писал(а):Народ как в режиме мастера принять данные по SPI интерфейсу ???. (atmega8)
AI_Disable писал(а):xVekx писал(а):Народ как в режиме мастера принять данные по SPI интерфейсу ???. (atmega8)
Даташит -> вкладка "Serial Peripheral Interface – SPI" (страница 124 Rev.2486V) или читайте форум или дайте больше информации (режим SPI, программный/аппаратный).