![]() |
Цитата:
|
Цитата:
"-Радиостанция на броневике. - Извините, радиостанция на полупроводниках или лампах?! - Я же сказал-"На броневике!"". |
Информацию в МК лучше загонять с контактов импульсного реле.
Защиту от дребезга контакта делай на RS триггере. |
А я знаю как написать драйвер "состояния контакта" и триггера не надо.
|
Цитата:
С помощью задержки. Сам так делал. Просто если он собирается использовать прерывание по изменению сигнала на выводе МК, то тут задержка не прокатит. Прерывание вызывается при изменении входного сигнала, например с 0-1. А уже в обработчике прерывания считаем количество импульсов. В длинном интервале кодового цикла принимаем решение о поступившем коде. ............................... Сам так делал. |
Конечно, драйвер - это громко сказано :laduh:.
Обычно на прерывании от таймера считывали состояние всех контактов (обработчик прерывания должен быть как можно меньше и по возможности линейным). На фоне проверяли их состояние, если 1, то +1 в счётчик, увеличиваем то определённого уровня, если 0, то -1 в счётчике, вычитаем до 0. Принцип интегрирования. unsigned char InSig[N]; // Состояние считанного сигнала. unsigned char StatusSig[N]; // Состояние сигнала. unsigned char Counter[N]; // Счётчик состояния. // Получить состояние сигнала. unsigned char GetState ( unsigned char N ) // N - номер сигнала. { // Проверка наличия изменения. if ( InSig[N] != StatusSig[N] ) { // Изменение есть! // Проверим как изменился сигнал. if ( InSig[N] == 0 ) { if ( Counter[N] != 0 ) Counter[N]--; } else { if ( Counter[N] != Level ) Counter[N]++; } // Определим Новое состояние сигнала. if ( Counter[N] == 0 ) StatusSig[N] = 0; else if ( Counter[N] == Level ) StatusSig[N] = 1; } return StatusSig[N]; } Это просто демонстрация, на самом деле состояние сигнала хранятся в бинарном виде в бинарном массиве. Согласитесь на "С" это более читаемо, чем на ассемблере. Иногда печатная плат нового устройства не была готова, но чтобы не тормозить разработку, программу писал на "С" для компьютера и отлаживал, а когда была готова железка достаточно было этот исходник перекомпилировать (используйте условную компиляцию, пишите в Posix стандарте, тогда будет максимальная переносимость) под соответствующий процессор железки. Время разработки ПО резко сокращалось. Всем всего доброго! |
Rafa,Твой алгоритм в неправильном направлении умеет таботать?
|
| Часовой пояс GMT +3, время: 22:48. |
Powered by vBulletin® Version 3.8.1
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot