У меня есть GPIO-контакт (GP4) на микроконтроллере с непрерывной цифровой импульсной линией, входящей в нее. Я пишу ему на C и не имею прерываний на этом чипе. Я вызываю свой ввод «#define inputA GP4». В C я хотел бы найти положительный фронт импульса и запустить таймер на нем. Я не уверен, что XOR выполнит то, что мне нужно, если в какой-то момент будет хранить inputA в другой переменной. Другая проблема, которая у меня есть, - это то, что мне нужно это сделать, а не попадаться в бесконечный цикл, где я могу делать другие вещи последовательно с моим кодом, если, например, inputA переходит в 0 и постоянно остается на 0. Это означает, что мой вариант использования while (inputA = 0); не может быть и речи. Заранее спасибо!Как эмулировать триггерный флип-флоп?
ответ
Вы должны написать старое значение некоторой переменной.
Положительный край определяется по старому значению 0
и новому 1
. Вы должны проверить точно, что:
char oldval, newval;
oldval = inputA;
while (1) {
newval = inputA;
// if (oldval == 0 && newval == 1) {
if (!oldval && newval) {
// positive edge
}
oldval = newval;
// do other stuff
}
Я не уверен, что этот код будет ждать триггера положительного края. Случай, когда мой импульсный поезд не находится в положительном краевом триггере, и в моем выражении if понимается код. Они не всегда будут происходить одновременно. Другими словами, оператор if будет пропущен, если (! Oldval && newval) не является истинным. – Stumpyhuck29
Предполагая, что цифры в комментарии [@ Stumpyhuck29] (http://stackoverflow.com/questions/21563430/how-to-emulate-an-edge-triggered-flip-flop#comment32569060_21563430) точны, я не думаю, что это вероятно, это сможет удовлетворить их, даже если нет '// делать другие вещи' – jerry
Прошу прощения, мой счетчик программ не выполняет вычисления каждые 128us. На моем PIC12F510 я использую 8 МГц часы с программным счетчиком, который инструктирует на 2 МГц. Это означает, что я буду ПЕРЕГРУЗИТЬ каждый 128us с коэффициентом масштабирования 1: 1. У меня есть опции для коэффициентов предварительного масштабирования от 1 до 256, а тактовые частоты 4 или 8 МГц. – Stumpyhuck29
- 1. Как реализовать триггерный механизм?
- 2. триггерный клик и цепочка поведения клика
- 3. After_Update триггерный каротаж
- 4. jQuery триггерный клик бесконечно
- 5. iTerm2 триггерный регистр нечувствителен
- 6. Триггерный динамический набор заданий
- 7. триггерный клик? autoload lightbox
- 8. Триггерный щелчок LinkButton
- 9. Как эмулировать поведение AllowAnonymousAttribute?
- 10. Как эмулировать async Filestream
- 11. Как эмулировать Event.timeStamp
- 12. Как эмулировать onLowMemory()?
- 13. Как эмулировать remove_unless
- 14. Как эмулировать контейнеры visio?
- 15. Как эмулировать ISNOTNULL()
- 16. как эмулировать хороший рисунок
- 17. Как эмулировать среду IE8?
- 18. Как «эмулировать» логин администратора?
- 19. RxJava: как эмулировать withLatestFrom?
- 20. Как эмулировать потоковый API?
- 21. Как эмулировать GL_DEPTH_CLAMP_NV?
- 22. Как отключить триггерный щелчок после первого щелчка
- 23. Как ссылаться на триггерный элемент в cluetip?
- 24. jQuery datepicker - как обнаружить триггерный элемент
- 25. Триггерный фильтр на свойстве POCO
- 26. Материализовать получить модальный триггерный элемент
- 27. триггерный переход и завершение перехода
- 28. триггерный клик с живым событием?
- 29. stm32f405 генерировать триггерный сигнал pwm
- 30. когда триггерный жест отменяет состояние?
Вы знаете максимальную частоту сигнала на входе, какие приемлемая задержку между триггером и его обнаружением, частотой, на которой ваше ядро работает, или какой процент ваших циклов вы хотите посвятить другим задачам? – jerry
Мой счетчик программ на моем чипе выполняет инструкции каждые 128us. Входной сигнал имеет частотный диапазон от 25 Гц до 533 Гц. Я хотел бы сохранить задержку минимальной (до 800us). Циклы, с которыми я могу жить с выборкой только каждую секунду или около того. Это не бесконечный процесс любыми способами, и несколько сотен миллисекунд времени между циклами, которые не проверяются, не являются моей проблемой. – Stumpyhuck29
Вы имели в виду '128 ns' вместо' 128 us'? Если вы на самом деле запускаете этот медленный (возможно, режим с низким энергопотреблением?), Я не вижу альтернативы занятому циклу, чтобы получить ответ за так много циклов. Это не означает, что вам нужно блокировать, если сигнал будет привязан к минимуму. Другой вопрос: когда вы говорите, что у вас нет прерываний, вы имеете в виду внешние прерывания или ** любые ** прерывания вообще (например, например, прерывание по таймеру)? – jerry