Добрый день! Прошу помощи у специалистов. Планируется сделать устройство на Atmega8, суть в следующем: при изменении состояния входов микроконтроллер будет генерировать код состоящий из индивидуального номера устройства 3 байта и его состоянии 6 байт. Байты состоят только из цифровых значений от 0 до 9, следовательно для их кодирования будет использоваться 4 бита (в калькулятор вводим десятичное значение и переводим в двоичное). Приемная сторона принимает посылку и выводит в СОМ порт стандартным UART в формате 9600,8,N,1. Возможно потребуется ввести стартовый бит\байт для инициализации приема. В качестве приемо-передатчиков будут использоваться радиостанции не имеющие встроенного модема. Канал односторонний. То есть на передатчике выход МК подключен на вход радиостанции, возможно через ФНЧ фильтр, что бы преобразовать в нечто похожее на синус. На приемной стороне радиостанция выходом динамика подключена на компаратор, который преобразует синус в нечто похожее на меандр, а микроконтроллер считает импульсы и если посылка имеет смысл (а не мусор из эфира) отправляет на компьютер.
Какие мысли:
1. Использовать стандартный UART преобразовав его ФНЧ в синус, а на приемной стороне компаратор и МК. Но получается в стандартном уарте слишком много лишней информации старт\стоп биты и видимо байт состоит из 8 бит, получается избыточность.
2. Намного лучший вариант, но не могу понять как его реализовать в коде. Передающий МК генерит два разных сигнала с частотой 600 и 1200 герц (как пример) 600 герц это 0, 1200 герц это 1. Меандр выводим в синус ФНЧ, отправляем по эфиру, компаратором возвращаем в меандр и расшифровываем.
Загвоздка возникла на самом первом пути: для генерирования сигнала пробовал код типа:
Do
port=1
waitms=1
port=0
waitms=1
Loop
Синус получил, довольно правильный, но только при значениях waitms=0.8 около 500 Герц. Дальнейшие изменения не позволяют получить сигнал с частотой 1000-1200, видимо МК не успевает работать с такими задержками.
Пробовал Sound, но не могу рассчитать корректные значения что бы издать звук с частотой 600 Герц длительностью 1 мс и 1200 такой же длительностью.
Так же нет понимания как реализовать приемную сторону по 2 варианту. МК измеряет количество импульсов за определенное время, если их N, то это 600, если 2N, то 1200.
Может кто подскажет еще варианты или отрезок кода по реализации обоих проектов. Заранее спасибо.