vv_gulyaev 0 30 октября, 2009 Опубликовано 30 октября, 2009 · Жалоба Использую МК ATtiny25. Частота работы 16 МГц. С порта PB3 вывожу импульс, который должен придти на порт PB2 этого же МК. Если разрешаю прерывание по входу INT0(PB2), то сигнал искажается (уменьшается частота). Можно ли как-нибудь предотвратить такое искажение? iint main(void){ PORTB = 0xFC;//set default value of pins DDRB = 0xEB;//set direction of pins // GIMSK = 0x40;//external pin interrupt is enabled MCUCR = 0x02;//interrupt by falling edge sei(); while(1){ flag = 0; if (!flag){ PORTB ^= 0x08; PORTB ^= 0x08; }; }; }; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mempfis_ 0 30 октября, 2009 Опубликовано 30 октября, 2009 · Жалоба Использую МК ATtiny25. Частота работы 16 МГц. С порта PB3 вывожу импульс, который должен придти на порт PB2 этого же МК. Если разрешаю прерывание по входу INT0(PB2), то сигнал искажается (уменьшается частота). Можно ли как-нибудь предотвратить такое искажение? Частота уменьшается скорее всего за счёт входа в обработчик внешнего прерывания (если он есть). Даже если нет и если стоит инструкция RETI то всёравно будет тратится время на прыжок на вектор прерывания и выход по RETI. А что вы в принципе хотите получить? Зачем нужна такая странная конструкция - вызов внешнего прерывания через дёргание своей-же ножки контроллера? p.s. по поводу как получить стабильный период - если вам нужен очень маленький период то врятли чтото получится, а при периоде от нескольких десятков мкс можно заставить дёргаться ножку по прерыванию от таймера. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vv_gulyaev 0 30 октября, 2009 Опубликовано 30 октября, 2009 (изменено) · Жалоба А что вы в принципе хотите получить? Зачем нужна такая странная конструкция - вызов внешнего прерывания через дёргание своей-же ножки контроллера? Собираюсь составить цепь из нескольких МК. Количество МК в цепи может менятьсь от 1 до 4. Соответственно, если имеем 2 и более МК, то вывод PB3 приходит на PB2 следующего МК, а если в цепи 1 МК, то на PB2 этого же. Как я подозреваю, если я выведу PB3 с одного МК на PB2 другого, то частота все равно уменьшится. Обработчик прерывания не описывается. Добавление строки GIMSK = 0x40; вносит искажение в сигнал. Изменено 30 октября, 2009 пользователем vv_gulyaev Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
=GM= 0 30 октября, 2009 Опубликовано 30 октября, 2009 · Жалоба Ничего удивительного, вы же формируете сигнал программно, а программа перешла на обработку прерывания. Попробуйте формировать импульсы аппаратно, например, с помощью пина OC1А. Кстати, для тайни25 изменять состояние пина можно одной командой PINB=0x08. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mempfis_ 0 30 октября, 2009 Опубликовано 30 октября, 2009 · Жалоба Собираюсь составить цепь из нескольких МК. Количество МК в цепи может менятьсь от 1 до 4. Соответственно, если имеем 2 и более МК, то вывод PB3 приходит на PB2 следующего МК, а если в цепи 1 МК, то на PB2 этого же. Как я подозреваю, если я выведу PB3 с одного МК на PB2 другого, то частота все равно уменьшится. Уменьшится только если вы закоротите ножки одного МК (постоянно) или если с другого МК будут приходить импульсы на вход внешенго прерывания (будет запаздывание на время обработки внешнего прерывания). Вы так и не объяснили что вы хотите получить - если нужна генерация импульса с постоянным периодом поовторения то есть другие способы это сделать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vv_gulyaev 0 30 октября, 2009 Опубликовано 30 октября, 2009 · Жалоба Вы так и не объяснили что вы хотите получить - если нужна генерация импульса с постоянным периодом поовторения то есть другие способы это сделать. Есть цепочка из МК. Один МК сделал какие-то действия и должен подать короткий сигнал второму. Я думал сделать это так: вывести импульс с PB3 одного на PB2 другого и по прерыванию обработать его. При отладке использовал один МК, т.е. заводил импульс на тот же самый МК. Хотелось бы чтобы этот импульс был как можно короче, но при разрешении прерывания (GIMSK = 0x40) этот импульс затягивается. При этом я еще никак не описывал процедуру обработки прерывания, только разрешил его. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mempfis_ 0 30 октября, 2009 Опубликовано 30 октября, 2009 · Жалоба Есть цепочка из МК. Один МК сделал какие-то действия и должен подать короткий сигнал второму. Я думал сделать это так: вывести импульс с PB3 одного на PB2 другого и по прерыванию обработать его. При отладке использовал один МК, т.е. заводил импульс на тот же самый МК. Хотелось бы чтобы этот импульс был как можно короче, но при разрешении прерывания (GIMSK = 0x40) этот импульс затягивается. При этом я еще никак не описывал процедуру обработки прерывания, только разрешил его. А вы планируете подтверждать приём сигнала завершения действия? Если МК будут расположен на одной плате то ваш вариант может в принципе пройти. Но если будут сильные помехи которые смогут создать на входах короткие импульсы но достаточные для срабатывания прерывания - как в этом случае будете поступать? Для вашего варианта нужно былобы или удлинить импульс чтобы после входа в обработчик прерывания второй МК по состоянию пина определил что это сигнал от МК а не помеха. Или построить систему на основе банального опроса входа с алгоритмом фильтрации помех (аналог антидребезга). Каково время реакции на изменение состояния входа? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vv_gulyaev 0 30 октября, 2009 Опубликовано 30 октября, 2009 (изменено) · Жалоба Если МК будут расположен на одной плате то ваш вариант может в принципе пройти. Но если будут сильные помехи которые смогут создать на входах короткие импульсы но достаточные для срабатывания прерывания - как в этом случае будете поступать? Для вашего варианта нужно былобы или удлинить импульс чтобы после входа в обработчик прерывания второй МК по состоянию пина определил что это сигнал от МК а не помеха. Или построить систему на основе банального опроса входа с алгоритмом фильтрации помех (аналог антидребезга). МК будут расположены на одной плате, так что о помехах пока особо не задумывался, но все же потребуется как-то их убирать. Каково время реакции на изменение состояния входа? Я пока никак не обрабатывал изменение состояния входа, поэтому ничего не могу сказать о времени. Изменено 30 октября, 2009 пользователем vv_gulyaev Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mempfis_ 0 30 октября, 2009 Опубликовано 30 октября, 2009 · Жалоба Я пока никак не обрабатывал изменение состояния входа, поэтому ничего не могу сказать о времени. Вопрос был насколько быстро второй МК доложен реагировать на сигнал от первого. При необходимости очень быстрой реакции думаю следует установить вывод на первом МК и подождать некоторое время (зависит от времени вхождения в обработчик внешнего прерывания второго МК). А во втором МК в обработчике прерывания проверить что это сигнал от первого МК а не помеха путём опроса состояния входа. Если время реакции не критично то можно во втором МК по таймеру например раз в 500 мкс опрашивать состояние входа с фильтрацией. Если в течение определённого времени состояние остаётся стабильным то считать что это сигнал от первого МК. А не хотите объединить ножки SPI-интерфейса? В принципе даже командами/статусами можно будет обмениваться и тоже будет занято 2 ножки МК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vv_gulyaev 0 30 октября, 2009 Опубликовано 30 октября, 2009 · Жалоба Вопрос был насколько быстро второй МК доложен реагировать на сигнал от первого. Второй МК должен реагировать как можно быстрей. А не хотите объединить ножки SPI-интерфейса? В принципе даже командами/статусами можно будет обмениваться и тоже будет занято 2 ножки МК. Сейчас занято по 1 ноге на каждом МК (PB3 на первом и PB2 на втором). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться