Добрый день всем! Попалась засада..понять не могу где сидит. Есть проц, ПЫК16F714. На нем поднимаю прерывание INT на RB0.
В первом приближении хочу, чтобы оно словило сигнал CS (на этом странном устройстве это ВЛУ), повисело в while пока сигнал есть и вылетело с исчезновением ВЛУ на RB0. Парюсь... А когда пин RB0 сконфигурирован как INT с него вообще читается TTL-уровень???
void interrupt isr(void) { if(INTF) { INTF = 0; while(RB0) { RB1 ^= 1; //мигаю с большой скоростью } } }
Если убрать while и оставить только "мигание" то четко видно подмаргивание в момент, когда происходит обмен по шине. Т.е ловится. А с вайлом - мертво. Не ловится условие.
Плохо так в прерывании "зависать" в любом случае. Сделайте прерывание по обоим фронтам. Поставьте в прерывании некий флаг (переменную) при высоком уровне, снимайте флаг при низком. И мигайте в основном цикле уже при взведенном флаге. А иначе в чем смысл прерывания, если вы зависаете в нём так?
Ну если от балды, то с 16f84 в своё время была засада. Чтение с порта шло прямиком с TTL уровнями, а на прерывание с того же пина шло через триггер Шмитта. В результате, если амплитуда импульса не достигала порога триггера Шмитта, то лог.1 прекрасно читалась, но прерывание не происходило. Или это было на 16c84? уже не помню точно
_________________ А люди посмотрят и скажут: "Собаки летят. Вот и осень."
ВЛУ 5V. Я так понял, должна быть некоторая задержка срабатывания прерывания. У меня обратная ситуация, есть прерывание но нет TTL. Я же не туплю, "rising edge" - означает по переходу "НЛУ->ВЛУ"??
Но в целом понятно. TTl считываться Должен. Малой кровью не обойдусь, макетировать придется для выяснения. Ну ладно.
К слову. Компилятор XC8, включил оптимизацию типа standart, с акцентом "оптимизация на время исполнения".(т.к слыхал, что без оптимизации вообще ХС8 в код мусора добавляет и ухудшает тайминги, не знаю на сколько так, но похоже)
Скорее всего ДА. Про платку с ПИКом известно только то, что она разработана для захвата данных с этой шины, но производитель отказался давать хексы, вот я и реверсю.
"есть прерывание но нет TTL". Ммм... код я выложил весь. Разве из него может следовать что-то другое? Другой вопрос.. это может быть CS не на весь период сессии а только короткий синхроимпульс, и к моменту попадания в вайл его действительно уже нет.
Какие то у Вас убогие методы захвата сигнала... На этой же ноге сидит ECCP. Так и сделайте на нем захват - он для этого и создан. Сразу узнаете длительность импульса.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения