Мелкие вопросы по МК и ПЛИС.

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1306
Зарегистрирован: Вс янв 18, 2009 20:51:02

Сообщение ooogo »

Возникла проблема с захватом. Нужно замерить время до прихода первого импульса(примерно 20-25 мкс), сигнал с внешнего компаратора завожу на ICP1 (PD6, 20 ножка) МК ATMega16, использую 16 битный таймер 1, включаю прерывание по захвату(по спадающему фронту) и переполнению таймера, затем запускаю таймер и жду пока не произвойдет захват или переполнение. Происходит захват, но на "ровном месте", т.е. смотрю по осцилографу в этом месте нет даже намека на спадающий фронт, а захват происходит. PD6 сконфигурировал на вход без подтяжки, установил следующие биты:

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

TCCR1B=0b10000001; //подавление помех, захват по спадающему фронту, источкик зг
TIMSK=0b00100100; //прерывания захват и переполнение Т1
Что я не правильно сделал?
Реклама
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1138
Зарегистрирован: Сб апр 03, 2010 08:57:35

Сообщение Modest »

ooogo писал(а):PD6 сконфигурировал на вход без подтяжки
Может в этом проблема?
[img]http://i053.radikal.ru/1102/71/0a0346d3a067.gif[/img]
[size=85]Ты думаешь ты думал как ты думаешь? (с)[/size]
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Сообщение ValBag »

ooogo
А от "родного" компаратора не может поступать сигнал захвата, бит ACIC обнулен?
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1306
Зарегистрирован: Вс янв 18, 2009 20:51:02

Сообщение ooogo »

родной компаратор отключен ACIC обнулен, код вижан постарался

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

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
Реклама
Эиком - электронные компоненты и радиодетали
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1306
Зарегистрирован: Вс янв 18, 2009 20:51:02

Сообщение ooogo »

Modest писал(а): Может в этом проблема?
как это может повлиять?
на выходе компаратора +5 В постоянно, пока не придут импульсы. :?
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Сообщение ValBag »

Ну, тогда, очевидно, по "железу", где-то могут "иголки" от внешнего компаратора проскакивать. Чтобы удостовериться, попробуйте RC фильтром чуть сгладить.
Схема есть?
Реклама
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1306
Зарегистрирован: Вс янв 18, 2009 20:51:02

Сообщение ooogo »

схему прикрепил, в качестве микрофона ультразвуковой датчик.
А если алгоритм для определения длительности импульса прикрутить?
Вложения
Приёмник ультразвука4.rar
схема
(4.58 КБ) 154 скачивания
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Сообщение ValBag »

ooogo, у вас импульсы с LM311 идут? В каком месте сигнала на ICP1 происходит захват?. В компаратор лучше бы ввести некоторый гистерезис, т. к. сигнал у вас с пъезо..., то возможны игольчатые импульсы, которые осциллографом не сразу обнаружишь, при том масштабе развертки в которой смотрите сигнал.
А вообще, такие вещи, лучше отладить подавая на вход регулярный известный сигнал, начиная со входа МК и далее к началу. Тогда будет ясно, в какой части схемы "заковыка".
А то, что сейчас происходит - да, можно попытаться определить длительность импульса захвата программным путем.
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1306
Зарегистрирован: Вс янв 18, 2009 20:51:02

Сообщение ooogo »

ValBag писал(а): у вас импульсы с LM311 идут?
да, смотрю осцилографом после компаратора, при включенном пиковом детекторе, при развертке 5 мкс.
В каком месте сигнала на ICP1 происходит захват?.

примерно через 1,2 мкс, после того как разрешаю прерывание.
В компаратор лучше бы ввести некоторый гистерезис, т. к. сигнал у вас с пъезо..., то возможны игольчатые импульсы, которые осциллографом не сразу обнаружишь, при том масштабе развертки в которой смотрите сигнал.
не вижу смысла в гистерезисе, мне нужно зафиксировать только первый импульс, а от игольчитых импульсов он не спасет, единственное может быть осцилографом только будут заметны
А вообще, такие вещи, лучше отладить подавая на вход регулярный известный сигнал, начиная со входа МК и далее к началу. Тогда будет ясно, в какой части схемы "заковыка".
наверное в железе, но не могу понять в какой части. для проверки PD6 сделал выходом и записывал в него ноль через определенную задержку, захват вроде работает нормально, длительность задержки определяет точно.
А то, что сейчас происходит - да, можно попытаться определить длительность импульса захвата программным путем.
можно по подробней, а то ни разу не сталкивался с таким вопросом.
Вложения
3.07.rar
осцилограммы
(68.2 КБ) 140 скачиваний
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Сообщение ValBag »

ooogo, да, на выходе компаратора, вроде ничего лишнего нет. А что за импульс внизу, в начале? По его фронтам есть какие-то выбросы на входе около 50 mV. Написали бы подробнее во вложении задачу и что хотите получить, с расстановкой процессов по времени и способом возбуждения входа.
Попробуйте перед разрешением прерывания сбросить флаг запроса по захвату.
По измерению длительности напишу попозже.
Открыл глаза
Сообщения: 43
Зарегистрирован: Ср мар 17, 2010 23:27:58

Сообщение lirik »

Ребят подскажите есть мега16 и 8MHZ кремний нужно запрограммировать 2 таймера, чтобы один обнулялся каждые 10мс а второй каждые 0.1 мс, какие нужно числа в регистры TCNT,TCCR и OCR1 загонять?
по той считалке что в обучалке чет не получается нужные числа высчитать... :?
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб

Сообщение AI_Disable »

TCCR0=0x0A; //CTC, clkI/O/8
OCR0=100;
//(8*100)/8000000=0000,1c=0,1мс

TCCR1B=0x0B; //CTC, clkI/O/64
OCR1A=1250;
//(64*1250)/8000000=0,01c=10мс
Контактная информация:
Открыл глаза
Сообщения: 43
Зарегистрирован: Ср мар 17, 2010 23:27:58

Сообщение lirik »

Спасибо большое))
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1306
Зарегистрирован: Вс янв 18, 2009 20:51:02

Сообщение ooogo »

ValBag писал(а): да, на выходе компаратора, вроде ничего лишнего нет. А что за импульс внизу, в начале?
это синхроимпульс для запуски развертки, он же возбуждающий импульс передатчика уз. Возбуждение происходит методом ударного импульса, т.е. стоит полевик в истоке которого стоит колебательный контур с уз датчиком.
По его фронтам есть какие-то выбросы на входе около 50 mV.
"звон" от возбуждающего контура, проникает в приемник через общий трансформатор питания.
Написали бы подробнее во вложении задачу и что хотите получить, с расстановкой процессов по времени и способом возбуждения входа.
хочу измерить время прхождения уз через образец.
1. устанавливаю единицу на затворе полевика(IRL640), возбуждающего контура и сразу запускаю таймер;
2. пауза 3 мкс обнуляю затвор полевика;
3. пауза 3 мкс, для того что бы не словить "звон";
4. разрешаю прерывание захвата;
5. жду пока не сработает захват или переполнение.
Попробуйте перед разрешением прерывания сбросить флаг запроса по захвату.
По измерению длительности напишу попозже.
флаг сбрасывать пробовал не помогает.
по поводу длительности, думаю соединить вход ICR1 INT0, захват по спаду, прерывание по передниму фронту, и во внешнем прерывании брать значение TCNT1L TCHT1H счетчика таймера и смотреть разнизу с захватом ICR1L ICR1H !?
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 326
Зарегистрирован: Сб сен 06, 2008 12:56:13

Сообщение ValBag »

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);
   }
Ну а по поводу ложного срабатывания ...даже не знаю, что еще сказать. У вас задержка есть 6 мкс, чтобы убрать возможные последствия от "звона". Надеюсь, что правильно сбрасывали флаг запроса прерывания - записью в него логической еденицы. Может просаживается питание во время возбуждения или по земляной шине что-то "лезет", при достаточно больших токах в этот момент.
Последний раз редактировалось ValBag Пн июл 05, 2010 19:01:53, всего редактировалось 1 раз.
Встал на лапы
Сообщения: 125
Зарегистрирован: Вс мар 01, 2009 20:41:19

Сообщение xVekx »

Народ как в режиме мастера принять данные по SPI интерфейсу ???. (atmega8)
Последний раз редактировалось xVekx Пн июл 05, 2010 17:57:12, всего редактировалось 1 раз.
Chettuser

Сообщение Chettuser »

Народ! А где можно раскопать сводную таблицу по командам ассемблера под PIC24 (32)??? Я ассемблерщик, в Си - знаю только название :))
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб

Сообщение AI_Disable »

xVekx писал(а):Народ как в режиме мастера принять данные по SPI интерфейсу ???. (atmega8)
Даташит -> вкладка "Serial Peripheral Interface – SPI" (страница 124 Rev.2486V) или читайте форум или дайте больше информации (режим SPI, программный/аппаратный).
Контактная информация:
Встал на лапы
Сообщения: 125
Зарегистрирован: Вс мар 01, 2009 20:41:19

Сообщение xVekx »

AI_Disable писал(а):
xVekx писал(а):Народ как в режиме мастера принять данные по SPI интерфейсу ???. (atmega8)
Даташит -> вкладка "Serial Peripheral Interface – SPI" (страница 124 Rev.2486V) или читайте форум или дайте больше информации (режим SPI, программный/аппаратный).
Есть ацп ADS1241 24-бит у него CLK является входным, передача МК(atmega8)->ацп более менее понятна.
Не могу разобраться как написать код под аппаратный SPI работающий на приём МК(atmega8)<-ацп.
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1116
Зарегистрирован: Чт окт 15, 2009 14:16:18
Откуда: Екб

Сообщение AI_Disable »

SPI - дуплексный интерфейс. Вот вы знаете, как осуществить передачу, дак вот, приём точно так же. Просто, после того, как передача завершится, читайте содержимое регистра SPDR, там уже будут принятые данные.
Контактная информация:
Ответить

Вернуться в «Разные вопросы по МК»