|
|
  |
Неясности с работой порта, attiny25 |
|
|
|
Oct 30 2009, 12:26
|
Участник

Группа: Участник
Сообщений: 40
Регистрация: 15-10-08
Из: Воронеж
Пользователь №: 40 984

|
Использую МК 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; }; }; };
|
|
|
|
|
Oct 30 2009, 12:52
|
Участник

Группа: Участник
Сообщений: 40
Регистрация: 15-10-08
Из: Воронеж
Пользователь №: 40 984

|
Цитата(mempfis_ @ Oct 30 2009, 15:43)  А что вы в принципе хотите получить? Зачем нужна такая странная конструкция - вызов внешнего прерывания через дёргание своей-же ножки контроллера? Собираюсь составить цепь из нескольких МК. Количество МК в цепи может менятьсь от 1 до 4. Соответственно, если имеем 2 и более МК, то вывод PB3 приходит на PB2 следующего МК, а если в цепи 1 МК, то на PB2 этого же. Как я подозреваю, если я выведу PB3 с одного МК на PB2 другого, то частота все равно уменьшится. Обработчик прерывания не описывается. Добавление строки GIMSK = 0x40; вносит искажение в сигнал.
Сообщение отредактировал vv_gulyaev - Oct 30 2009, 12:53
|
|
|
|
|
Oct 30 2009, 14:10
|
Участник

Группа: Участник
Сообщений: 40
Регистрация: 15-10-08
Из: Воронеж
Пользователь №: 40 984

|
Цитата(mempfis_ @ Oct 30 2009, 15:57)  Вы так и не объяснили что вы хотите получить - если нужна генерация импульса с постоянным периодом поовторения то есть другие способы это сделать. Есть цепочка из МК. Один МК сделал какие-то действия и должен подать короткий сигнал второму. Я думал сделать это так: вывести импульс с PB3 одного на PB2 другого и по прерыванию обработать его. При отладке использовал один МК, т.е. заводил импульс на тот же самый МК. Хотелось бы чтобы этот импульс был как можно короче, но при разрешении прерывания (GIMSK = 0x40) этот импульс затягивается. При этом я еще никак не описывал процедуру обработки прерывания, только разрешил его.
|
|
|
|
|
Oct 30 2009, 14:48
|
Участник

Группа: Участник
Сообщений: 40
Регистрация: 15-10-08
Из: Воронеж
Пользователь №: 40 984

|
Цитата(mempfis_ @ Oct 30 2009, 17:36)  Если МК будут расположен на одной плате то ваш вариант может в принципе пройти. Но если будут сильные помехи которые смогут создать на входах короткие импульсы но достаточные для срабатывания прерывания - как в этом случае будете поступать? Для вашего варианта нужно былобы или удлинить импульс чтобы после входа в обработчик прерывания второй МК по состоянию пина определил что это сигнал от МК а не помеха. Или построить систему на основе банального опроса входа с алгоритмом фильтрации помех (аналог антидребезга). МК будут расположены на одной плате, так что о помехах пока особо не задумывался, но все же потребуется как-то их убирать. Цитата(mempfis_ @ Oct 30 2009, 17:36)  Каково время реакции на изменение состояния входа? Я пока никак не обрабатывал изменение состояния входа, поэтому ничего не могу сказать о времени.
Сообщение отредактировал vv_gulyaev - Oct 30 2009, 14:52
|
|
|
|
|
Oct 30 2009, 15:01
|

Профессионал
    
Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409

|
Цитата(vv_gulyaev @ Oct 30 2009, 17:48)  Я пока никак не обрабатывал изменение состояния входа, поэтому ничего не могу сказать о времени. Вопрос был насколько быстро второй МК доложен реагировать на сигнал от первого. При необходимости очень быстрой реакции думаю следует установить вывод на первом МК и подождать некоторое время (зависит от времени вхождения в обработчик внешнего прерывания второго МК). А во втором МК в обработчике прерывания проверить что это сигнал от первого МК а не помеха путём опроса состояния входа. Если время реакции не критично то можно во втором МК по таймеру например раз в 500 мкс опрашивать состояние входа с фильтрацией. Если в течение определённого времени состояние остаётся стабильным то считать что это сигнал от первого МК. А не хотите объединить ножки SPI-интерфейса? В принципе даже командами/статусами можно будет обмениваться и тоже будет занято 2 ножки МК.
|
|
|
|
|
Oct 30 2009, 15:39
|
Участник

Группа: Участник
Сообщений: 40
Регистрация: 15-10-08
Из: Воронеж
Пользователь №: 40 984

|
Цитата(mempfis_ @ Oct 30 2009, 18:01)  Вопрос был насколько быстро второй МК доложен реагировать на сигнал от первого. Второй МК должен реагировать как можно быстрей. Цитата(mempfis_ @ Oct 30 2009, 18:01)  А не хотите объединить ножки SPI-интерфейса? В принципе даже командами/статусами можно будет обмениваться и тоже будет занято 2 ножки МК. Сейчас занято по 1 ноге на каждом МК (PB3 на первом и PB2 на втором).
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|