Обсуждаем приемники, передатчики, радиомикрофоны, жучки, генераторы, ВЧ-усилители, антенны и прочее радиохозяйство
Ответить

Re: Передатчик FS1000A - как ослабить передачу?

Вт фев 21, 2017 18:49:17

risez писал(а):Есть намного более крутые по чувствительности приемники, чем базовый.
Есть конечно, но на данный момент мы говорим об этих, что Вы выложили в старт посте.
risez писал(а):Есть передатчик стандартный на 433 Мгц
СпойлерИзображение

Re: Передатчик FS1000A - как ослабить передачу?

Вт фев 21, 2017 21:47:35

risez писал(а):Мне интересно от roman.com услышать, какой номинал сопротивления он использовал для уменьшения усиления передатчика?

для уменьшения усиления приёмника, а не передатчика... Передатчик я не трогал))

Я бы для начала добавил подстроечный резистор (~1МОм) так:
0016.JPG
(147.12 KiB) Скачиваний: 783

risez писал(а):Я вижу эти тесты в теориии, на практике цифровые устройства передают и принимают то, что нужно передать и принять на довольно большое расстояние.

Не понял... Там все тесты на практике, а не в теории))

Там же (ниже) есть мой тест на дальность этих модулей...
roman.com писал(а):Провели тест на дальность. Получилось так:

-Частота 433,92 Мгц.
-Мощность передатчика TX ~0,005 Ватт (при 5 вольт).
-Чувствительность приёмника RX ~1,2 мкВ (при 5 вольт).
-Антенна 1/4 штырь.

Дальность устойчивой связи fs1000a, в зависимости от высоты антенны:

-Высота антенны TX = 0 метров. Высота антенны RX = 1 метр.
-дальность в чистом поле - до 170 метров.
-дальность в мелком лесу - до 120 метров.
...
-Высота антенны TX =10 метров. Высота антенны RX = 1 метр.
-дальность в мелком лесу - более 600 метров.
-дальность по трассе - более 900 метров.
...

При желании можно сравнить))

По дому (если конечно у вас дом не 1000 квадратных метров)) ) они работают без антенн (естественно с замираниями).
risez писал(а):цель на самом деле - 5-10 сантиметров чтобы работало, больше не надо.

Это может быть не так просто. Для этого нужна очень маленькая мощность, при которой ганератор просто не сможет запуститься...

Re: Передатчик FS1000A - как ослабить передачу?

Ср фев 22, 2017 12:16:33

Ну имхо найти минимум, где он работает, если будет недостаточно - небольшой экранчик.

Вот еще идею написали:

Там сигнал управления задаёт базовый ток передатчика. Поставьте резистор, лучше потенциометр килоОм на 10-100 последовательно в сигнальный провод. Мощность и упадёт, если переборщить - генератор совсем не возбудится.

Добавлено after 36 minutes 38 seconds:
На сигнальный провод кинул 90кОм сопротивление (больше под рукой нет) передача упала до 1.5м, что уже почти то, что нужно. Нужно попробовать увеличить сопротивление, блин пока нечем. Но заметил, что 50кОм, что 90кОм - результат плюс мину один 1.5м. Может и правда тут еще провода излучают.

Добавлено after 16 minutes 40 seconds:
100кОм - упало до метра! Нужно навесить еще...

Добавлено after 59 minutes 41 second:
В общем для стандартного приемника результат есть, но к сожалению RXB6 приемник видит даже заглушенный сигнал без проблем по всему помещению. Дальше 5 метров не отходил, но бьет уверенно. :(

Re: Передатчик FS1000A - как ослабить передачу?

Ср фев 22, 2017 15:44:15

Здесь уже проскакивало правильное решение:
risez писал(а):Николай_С писал(а):
Полностью согласен.
В данном случае мощность передатчика уменьшается добавлением в цепь эмиттера Q1 резистора номиналом от 100 до 1 кОм. Добейтесь четкого срабатывания команд при максимальном сопротивлении резистора. Это и будет минимальная мощность передатчика.

P.s. Кстати, этот же транзистор стоит в УМ дальнобойного радиотелефона Sanyo CLT-55,65,75,85KM. С хорошим приёмником и антенной дОбит на десятки километров.


Добавлено after 8 minutes 6 seconds:
Типа так:

Изображение

Резистор может быть подстроечным (движок соединить с нижним концом), номиналом в пределах 10к.....20к.

Re: Передатчик FS1000A - как ослабить передачу?

Чт фев 23, 2017 12:56:54

От 100 Ом до 1кОм, или от 100 кОм до 1 кОм?
Ниже также предложение от 10 - 20кОм.

Добавлено after 1 hour 6 minutes 6 seconds:
И еще вопрос по поводу идеи резистора на питание повесить, снизив ток?

По сути идеи сводятся к:
1) Понизить ток, подаваемый на передатчик.
2) Понизить ток с эмиттера транзистора.
3) Понизить ток передаваемого сигнала.

4) Совместить все эти идеи? :beer:

Добавлено after 1 hour 28 minutes 59 seconds:
В общем задача решилась проще - на питание 3.3В(работает от 3 до 12В, подали почти минимум) при сопротивлении в 5.5кОм на питание, передатчик уже не слышно в метре от хорошего! чувствительного приемника. В 10см от него - прием уверенный. Т.е. мы понизили мощность передатчика, ограничив ток потребления до 0.6 милиампера. Можно наверняка либо еще пару сотен ом накинуть, либо небольшой соорудить экран.

Re: Передатчик FS1000A - как ослабить передачу?

Чт фев 23, 2017 14:14:18

risez писал(а):2) Понизить ток с эмиттера транзистора.
Снижение тока тут не основное. Резюк в эмиттере определяет величину ООС по току, его увеличение плавно снижает усиление одновременно значительно улучшая стабильность рабочего режима.

Re: Передатчик FS1000A - как ослабить передачу?

Пн окт 05, 2020 23:23:26

Помогите разобраться. Есть у меня модуль RXB6. Есть у меня Ардуина с программой для просмотра кодов. Ну например вставляешь скажем радиомодуль на 315 мгц и начинаешь с пульта кнопки нажимать и видишь какие коды дает пульт. Ну а потом уже с этими кода делаешь че хочешь.

Так вот вставиль я этот модуль, питание, граунд, дата. Все по класссике. Нажимаю на пульт. Ничего. Пульт кварцованый на 433.92 Указано на кварце. Модуль тоже на 433. Но указано 433 и все. Короче, не высветиль мне экранчик ничего. Как будто и нет приема.

Ладно, я на Дата поставли светодиод и резюк на 4.7к. Включил, сразу приметил, что светодиод помаргивает, даже если не даю сигнал с плуьта. А когда даю сигнал тоже уверенно моргает. Странно.

Подключил вместо светодиода наушники. Услышал шум, ну типа эфирного шума и услышал сигналы дальних сигналок и каких-то пультов. Нажал на свой поульт услышал характерным переливчатый звук. Отнес пульт на 10м , попросил нажать, услышал уверенный прием.

Гдето в интернетах читал, что якобы у этого модуля RXB6 очнеь слабый выходной сигнал. И че с этим делать, как с эитм жить? Транзистор какой ставить типа усилителя. И вообще почему шум эфира в наушниках? Впроде этот приенмик гетеродинный и должне как то получше рабоать.

Что скажете?

Re: Передатчик FS1000A - как ослабить передачу?

Вт окт 06, 2020 07:29:20

Эти приемопередатчики тупые, вся кодировка/декодировка в мк, возможно ваш пульт использует совсем другую. Не шумят только тупые приемники или без антенны (хотя некоторым нравится, даже видосы выкладывают где, забравшись в сервис-меню какого нибудь аппарата за 200 тыс руб, выкручивают чувствительность в минимум - оппа, не шумит!), главное чтобы при подаче сигнала обеспечивалось необходимое соотношение сигнал/шум.

Re: Передатчик FS1000A - как ослабить передачу?

Вт окт 06, 2020 10:23:08

1- Первым делом подключаем осциллограф и смотрим сигнал...
2- Если очень слабый выходной сигнал, то в МК есть АЦП, который работает с очень слабым выходным сигналом (милливольты).
3- И самое главное - выкидываем Ардуину)) :)))

Re: Передатчик FS1000A - как ослабить передачу?

Ср окт 07, 2020 11:09:43

Morroc, оказалось что действительно слабый выход.

roman.com, вот допустим есть аналоговый вход. И есть выход с этого радиомодуля. Какой будет алгоритм?

Ну допустим при определенном напряжении устанавливаю высокий уровень на цифровой лапке. А если напряжение уменьшилось то сразу низкий ставлю

Re: Передатчик FS1000A - как ослабить передачу?

Ср окт 07, 2020 14:09:10

В теме "Радиоуправляемый кораблик своими руками." мы делали радиоуправление на разных радио модулях.
https://www.radiokot.ru/forum/viewtopic ... 8&t=148087
На самодельных радио модулях...

На заводских радио модулях...
Nokia 5110.JPG
(128.35 KiB) Скачиваний: 139

Там же мы сняли осциллограммы самодельных радио модулей...

Там же мы подробно разобрали алгоритм работы самодельных радио модулей...
https://www.radiokot.ru/forum/viewtopic ... &start=441
Алгоритм для ЦИФРОВОГО входа МК очень простой - непрерывно измеряем напряжение на выходе приёмника.
Обработка сигнала.jpg
(230.18 KiB) Скачиваний: 133

Там же мы переделали схему на АЦП... (правда не доделали)
Дискретизация и квантование.jpg
(49.34 KiB) Скачиваний: 125

olegue писал(а):Какой будет алгоритм?

Алгоритм для АНАЛОГОВОГО входа МК очень простой - непрерывно измеряем напряжение с помощью АЦП на выходе детектора приёмника относительно среднего значения. Далее тоже самое что и для ЦИФРОВОГО входа МК.
Благодаря АЦП мы можем обрабатывать сигнал прямо с выхода детектора приёмника, без дополнительных усилителей на транзисторах...

Добавлено after 22 minutes 44 seconds:
P.S.
Все современные радио модули построены по типовой схеме с использованием АЦП на выходе детектора приёмника.

Например вот модуль популярный радио модуль для FM приёмника:
Screenshot_1.jpg
(55.15 KiB) Скачиваний: 134

Или вот например популярный радио модуль для рации:
Screenshot_2.jpg
(58.09 KiB) Скачиваний: 138

На этом модули китайцы делают практически все свои рации.
Например вот популярная китайская рация на этом модуле:
китайская рация.jpg
(10.19 KiB) Скачиваний: 119

А вот к примеру популярный радио модуль Lora
Screenshot_3.jpg
(55.21 KiB) Скачиваний: 127

И т.д.

Короче... во всех современных радио модулях стоит АЦП на выходе детектора приёмника.
А для обработки сигнала используют сигнальный процессор (DSP).
:tea:

Re: Передатчик FS1000A - как ослабить передачу?

Ср окт 07, 2020 17:54:46

roman.com, простите, не смог пока осилить все что вы дали.
Пока иду "своим" путем, пытаясь постичь основы.

Код:
ISR(ADC_vect)  //Прерывание по АЦП
{
   
   // Крутим резистор
   // В переменной  ADCH оцифрованное значение напряжения на лапке PB4 (adc
   t=ADCH;
   
   if (t>200)
      {
   PORTB|=(1<<PB0);
    }
   else
   {
     PORTB|=(0<<PB0);
      }
   
   }



я кручу резстор и когда дохожу до значения 200 светодиод загорается, но почему, черт возьми, он не гаснет, когда кручу назад. В чем пробелема?

Re: Передатчик FS1000A - как ослабить передачу?

Ср окт 07, 2020 19:50:28

olegue писал(а):Пока иду "своим" путем, пытаясь постичь основы.

Хорошо.
Какой у Вас МК ?

Рекомендую начать изучение АЦП с выводом данных на простые светодиоды... 8 штук:
Вот я спаял на ATmega128 светодиоды... 8 штук:
Screenshot_1.jpg
(48.09 KiB) Скачиваний: 124

Вот я спаял на ATmega8 светодиоды... 8 штук:
Screenshot_2.jpg
(9.8 KiB) Скачиваний: 121

схема на ATmega8 такая... светодиоды... 8 штук:
Screenshot_3.jpg
(49.15 KiB) Скачиваний: 139

Кручу резистор и смотрю показание АЦП в двоичном виде (0...255)... на светодиоды... 8 штук: ))

ISR(ADC_vect) //Прерывание по АЦП
{

// Крутим резистор
// Выводим ADCW в порт D
PORTD=ADCW;

}

Добавлено after 6 minutes 9 seconds:
P.S.
У АЦП два регистра для чтения:

ADCH // 0000 0011 - старший регистр АЦП
ADCL // 1111 1111 - младший регистр АЦП

Или можно читать сразу два регистра за один раз:

ADCW // 0000 0011 1111 1111
:tea:

Re: Передатчик FS1000A - как ослабить передачу?

Ср окт 07, 2020 22:12:32

attiny13. C старшими и младшим регистрами пока не понятно. Вроде как у меня должно работать в том коде который я привел.

Добавлено after 24 minutes 30 seconds:
Да, понял с регстрами. Но!
В порте D - 8 бит -8 диодов подключено

а в объединенном регистре ADCW = 16бит.
Какие светодиоды зажгутся? Младшего регистра?

Re: Передатчик FS1000A - как ослабить передачу?

Ср окт 07, 2020 23:49:01

attiny13 плохой МК.
1- Мало выводов (светодиоды 8 шт. не подключишь).
2- Данные АЦП можно передавать на компьютер (программа терминал) по UART. Но в attiny13 нет UART. Там вообще ничего нет))

Все МК AVR имеют АЦП 10-бит (1111111111):
Screenshot_1.jpg
(112.77 KiB) Скачиваний: 129

В одном регистре 8 бит.
Чтоб запихнуть 10 бит сделали два регистра:

ADCH // 00000011 - старший регистр АЦП - сюда записываются 2 старших бит АЦП.
ADCL // 11111111 - младший регистр АЦП - сюда записываются 8 младших бит АЦП.

В сумме два эти регистра (ADCH + ADCL) содержат 10 бит:

11 (2 бита) + 1111 1111 (8 бит) = 1111111111 (10 бит).

в объединенном регистре ADCW = 1111111111 (10 бит).

Какие светодиоды зажгутся? Зажгутся Младшего регистра:

PORTD=ADCW; // ADCL = 11111111 - младший регистр АЦП - сюда записываются 8 младших бит АЦП.
:tea:

Добавлено after 28 minutes 46 seconds:
Чтоб зажечь все 10-бит (1111111111) надо припаять ещё 2 светодиода на другой порт.
Например в ATmega128 есть свободный порт А.
Код будет такой:

ISR(ADC_vect) //Прерывание по АЦП
{
// Крутим резистор
// Выводим ADCL в порт D
PORTD=ADCL;
// Выводим ADCH в порт A
PORTA=ADCH;
}
//Зажгли все 10-бит (1111111111) АЦП. ))

Или можно так:
ISR(ADC_vect) //Прерывание по АЦП
{
// Крутим резистор
// Выводим ADCW в младшие 8 бит в порт D
PORTD=ADCW;
// Выводим ADCW в старшие 2 бит в порт A
PORTA=ADCW >> 8;
}
//Зажгли все 10-бит (1111111111) АЦП. ))

P.S.
Если читать два регистра (ADCH + ADCL) по отдельности, то при чтении всегда надо первым читать младший регистр (ADCL).
Об этом написано в даташите подробно. Там хитрая система чтения регистров (эти два регистра связаны между собой внутри МК).
:tea:
Поэтому проще читать "бъединенный регистр ADCW".
На самом деле это никакой не "бъединенный регистр ADCW", это два отдельных регистра, просто компилятор думает что это один регистр "бъединенный регистр ADCW". ))
:tea:

Добавлено after 26 minutes 52 seconds:
Но сначала надо правильно настроить АЦП.

Вот полный список всех битов настройки и флагов АЦП (всего два регистра настройки):
----------
ADMUX=0b01100001; // настройка АЦП
----------
//ADMUX
//1... .... REFS1 - опорное напряжение - 0
//.1.. .... REFS0 - опорное напряжение - 1 - AVCC
//..1. .... ADLAR - Выравнивание результата
//...1 .... -
//.... 1... MUX3 - номер канала
//.... .1.. MUX2 - номер канала
//.... ..1. MUX1 - номер канала
//.... ...1 MUX0 - номер канала - ADC0...ADC7 (0000=ADC0)
----------
//REFS1=0 REFS0=0 - ИОН=AREF
//REFS1=0 REFS0=1 - ИОН=AVCC
//REFS1=1 REFS0=0 - не используется (зарезервировано)
//REFS1=1 REFS0=1 - ИОН=2.56V (встроенный ИОН 2.56V)
----------
//ADLAR=1
// Выравнивание результата в левую сторону < (8-бит):
// ADCH // 1111 1111 - читать вторым (или первым, тогда последии 2 бит потеряем)
// ADCL // 0000 0011 - читать первым
//ADLAR=0
// Выравнивание результата в правую сторону > (10-бит):
// ADCH // 0000 0011 - читать вторым
// ADCL // 1111 1111 - читать первым
----------
// MUX3...MUX0 - номер канала:
// 0000 - ADC0
// 0001 - ADC1
// .................
// 0111 - ADC7

// 1110 - ИОН (1,23V) !

----------
ADCSRA|=0b01000000; // Старт АЦП.
----------
//ADCSRA
//1... .... ADEN - 1- вкл ADC. (0-ADC не потребляет мощности)
//.1.. .... ADSC - 1- Старт. При завершении преобразования сбрасывается аппаратно.
//..1. .... ADFR - 1- режим Непрерывного Преобразования.
//...1 .... ADIF - 1- флаг завершения преобразования
-сброс программно.
-для прерывания очищается аппаратно.
//.... 1... ADIE - 1- Разрешение прерывания
//.... .1.. ADPS2 - предделитель
//.... ..1. ADPS1 - предделитель
//.... ...1 ADPS0 - предделитель

предделитель ADC:
ADPS2 -ADPS1 -ADPS0
----------
// 000: 1 МГц/2=500.000 Hz
// 001: 1 МГц/2=500.000 Hz
// 010: 1 МГц/4=250.000 Hz
// 011: 1 МГц/8=125.000 Hz
// 100: 1 МГц/16=62.500 Hz
// 101: 1 МГц/32=31.250 Hz
// 110: 1 МГц/64=15.625 Hz
// 111: 1 МГц/128=7.812,5 Hz
----------

Выбираем режим работы АЦП...
Частоту преобразования...
Выравнивание результата...
Источник опорного напряжения...
Канал (мультиплексор)...

После пишем программу))

Добавлено after 23 minutes 22 seconds:
Вот сама программа (для mega8):
Прерывание я не использую.
----------
#include <mega8.h>
#include <delay.h>

unsigned int u; // переменная для АЦП

// функция АЦП: -время одного преобразования АЦП = 0,000.070c
void adc(unsigned char adc_input)
{
ADMUX = 0b01000000 | adc_input; // Опорное напряжение АЦП = AVCC // канал АЦП = ADC0...ADC7
delay_us(10); // Стабилизация входа...
ADCSRA|=0b01000000; // Старт преобразования АЦП...
while (ADCSRA & 0b01000000); // Ждём окончания преобразования АЦП...
//При завершении преобразования этот бит сбрасывается аппаратно.
}


// главная функция
void main(void)
{

// Настройка PORTD:
DDRD = 0xFF; // PORTD
PORTD = 0x00; // PORTD

// Настройка АЦП:
ADCSRA=0x84; // вкл. АЦП // Режим одиночного преобразования // Частота преобразования = 4 МГц/16=250.000 Hz


while (1)
{
// запускаем одиночное преобразование АЦП (канал 5):
adc(5); a=ADCW;
// выводим значение АЦП в PORTD
PORTD = a;
// ждём 1 секунду...
delay_ms(1000);
};

}
----------
Светодиоды показывают напряжение на входе АЦП (ножка PC5). Обновление каждую секунду.
Всё))
:tea:

Re: Передатчик FS1000A - как ослабить передачу?

Чт окт 08, 2020 13:51:40

roman.com, как будет в коде выглядеть преобразования зашумленнго сигнала?
подаем на вход зашумленный сигнал
на выходе имеем красивые импульсы.

Добавлено after 16 minutes 39 seconds:
Алгоритм для АНАЛОГОВОГО входа МК очень простой - непрерывно измеряем напряжение с помощью АЦП на выходе детектора приёмника относительно среднего значения. Далее тоже самое что и для ЦИФРОВОГО входа МК.
Благодаря АЦП мы можем обрабатывать сигнал прямо с выхода детектора приёмника, без дополнительных усилителей на транзисторах...


я пытаюсь делать хотя бы вот это
Код:
// Крутим резистор
   // В переменной  ADCH оцифрованное значение напряжения на лапке PB4 (adc
   t=ADCH;
   
   if (t>200)
      {
   PORTB|=(1<<PB0);
    }
   else
   {
     PORTB|=(0<<PB0);
      }


но у меня светодиод зажигается при значении 200, но потом не гаснет когда я уменьшаю значение переменным резистором. Что здесь не так?

Re: Передатчик FS1000A - как ослабить передачу?

Чт окт 08, 2020 15:15:30

// Крутим резистор
// В переменной ADCH оцифрованное значение напряжения на лапке PB4 (adc
t=ADCH;

if (t>200)
{
PORTB|=(1<<PB0);
}
else
{
PORTB|=(0<<PB0);
}

Что тут не так ? )) Тут всё не так))
1- Где вы берёте такие коды... мой компилятор не понимает запись PORTB|=(1<<PB0); PORTB|=(0<<PB0);
2- Что значит логическая операция "|" ? https://ru.wikipedia.org/wiki/Дизъюнкция
3- Что значит логическая операция "&" ? https://ru.wikipedia.org/wiki/Конъюнкция

Можно записать так:
// Крутим резистор
// В переменной ADCH оцифрованное значение напряжения на лапке PB4 (adc
t=ADCH;

if (t>200)
{
PORTB |= 0b00000001;
}
else
{
PORTB &= 0b11111110;
}

Или так:
// Крутим резистор
// В переменной ADCH оцифрованное значение напряжения на лапке PB4 (adc
t=ADCH;

if (t>200)
{
PORTB = 0b00000001;
}
else
{
PORTB = 0b00000000;
}

Или так:
// Крутим резистор
// В переменной ADCH оцифрованное значение напряжения на лапке PB4 (adc
t=ADCH;

if (t>200)
{
PORTB = 0x01;
}
else
{
PORTB = 0x00;
}

Или проще так:
// Крутим резистор
// В переменной ADCH оцифрованное значение напряжения на лапке PB4 (adc
t=ADCH;

if (t>200)
{
PORTB.0= 1;
}
else
{
PORTB.0= 0;
}

Или по другому)) Вариантов миллион)) Я не знаю как работает Ваш компилятор...

Добавлено after 16 minutes 6 seconds:
В Вашем случае это скорее всего будет так:
// Крутим резистор
// В переменной ADCH оцифрованное значение напряжения на лапке PB4 (adc
t=ADCH;

if (t>200)
{
PORTB|=(1<<PB0);
}
else
{
PORTB&=(0<<PB0);
}

Добавлено after 4 minutes 27 seconds:
olegue писал(а):как будет в коде выглядеть преобразования зашумленнго сигнала?

это было давно...
https://www.radiokot.ru/forum/viewtopic ... &start=737
в коде будет как-то так))

...
...
mesto_3:
////////////////////////////////////////////////////////////////////////////////////////////////////// RX
////////////////////////////////////////////////////// преамбула:
for (x=0;x<2;x++) {
PORTC.3=1; // контроль
for (w=0;w<234;w++) {
if (PINB.0==1) { // ФНЧ
d++;
};
};
m[x] = d;
d=0;
PORTC.3=0; // контроль
};
//////////////////////////////////////////////////////
if ( ((m[0]-m[1])<30) || ((m[1]-m[0])<30) ) { // допуск +/-
if ( (50 < m[0]) && (m[0] < 150) ) { // вероятность 50%
goto mesto_2;
};
};

goto mesto_3;
//////////////////////////////////////////////////////

mesto_2:
delay_us(300);
////////////////////////////////////////////////////// синхро:
si=0;
b=0;
while (b<4){ // "1" > "1" > "1" > "1" >
si++;
if (si>38) {
PORTC.4=0; // связь
goto mesto_1; // синхро > сброс
};
PORTC.3=1; // контроль
b++;
for (w=0;w<246;w++) { // ФНЧ
if (PINB.0==1) {
d++;
};
};
PORTC.3=1; // контроль
if (d<123) { // вероятность 50%
b=0; // ошибка "1"
};
d=0;
PORTC.3=0; // контроль
}; // "1" > "1" > "1" > "1" >
////////////////////////////////////////////////////// синхро:
b=0;
while (b<4){ // "0" > "0" > "0" > "0" >
si++;
if (si>38) {
PORTC.4=0; // связь
goto mesto_1; // синхро > сброс
};
PORTC.3=1; // контроль
b++;
for (w=0;w<246;w++) { // ФНЧ
if (PINB.0==0) {
d++;
};
};
PORTC.3=1; // контроль
if (d<123) { // вероятность 50%
b=0; // ошибка "0"
};
d=0;
PORTC.3=0; // контроль
}; // "0" > "0" > "0" > "0" >
////////////////////////////////////////////////////// запись:
for (x=0;x<96;x++) {
PORTC.3=1; // контроль
PORTC.3=1; // контроль
PORTC.3=1; // контроль
for (w=0; w<245; w++) {
if (PINB.0==1) { // ФНЧ
d++;
};
};
m[x] = d;
d=0;
PORTC.3=0; // контроль
PORTC.3=0; // контроль
// PORTC.3=0; // контроль
};
////////////////////////////////////////////////////// манчестер 1=|10|, 0=|01|:
for (x=0;x<96;x=x+2) {
w=x+1;
m[x] = ( m[x] > m[w] ) ? 1 : 0; // вероятность 50%
};
////////////////////////////////////////////////////// сборка:
// ........ 11111111 ........ ........ ........ ........
b1=(m[0]<<7)|(m[2]<<6)|(m[4]<<5)|(m[6]<<4)|(m[8]<<3)|(m[10]<<2)|(m[12]<<1)|m[14];
// 11111111 ........ ........ ........ ........ ........
b1=(b1<<8);
// ........ 11111111 ........ ........ ........ ........
b2=(m[16]<<7)|(m[18]<<6)|(m[20]<<5)|(m[22]<<4)|(m[24]<<3)|(m[26]<<2)|(m[28]<<1)|m[30];
// 11111111 11111111 ........ ........ ........ ........
b1^=b2;
// ........ ........ ........ 11111111 ........ ........
b3=(m[32]<<7)|(m[34]<<6)|(m[36]<<5)|(m[38]<<4)|(m[40]<<3)|(m[42]<<2)|(m[44]<<1)|m[46];
// ........ ........ 11111111 ........ ........ ........
b3=(b3<<8);
// ........ ........ ........ 11111111 ........ ........
b4=(m[48]<<7)|(m[50]<<6)|(m[52]<<5)|(m[54]<<4)|(m[56]<<3)|(m[58]<<2)|(m[60]<<1)|m[62];
// ........ ........ 11111111 11111111 ........ ........
b3^=b4;
// ........ ........ ........ ........ ........ 11111111
b5=(m[64]<<7)|(m[66]<<6)|(m[68]<<5)|(m[70]<<4)|(m[72]<<3)|(m[74]<<2)|(m[76]<<1)|m[78];
// ........ ........ ........ ........ 11111111 ........
b5=(b5<<8);
// ........ ........ ........ ........ ........ 11111111
b6=(m[80]<<7)|(m[82]<<6)|(m[84]<<5)|(m[86]<<4)|(m[88]<<3)|(m[90]<<2)|(m[92]<<1)|m[94];
// ........ ........ ........ ........ 11111111 11111111
b5^=b6;
////////////////////////////////////////////////////// crc:
crc=b1; // crc -1 11111111 11111111 ........ ........ ........ ........
bcrc=b3;
fcrc(); // fcrc -2 ........ ........ 11111111 11111111 ........ ........
bcrc=b5;
fcrc(); // fcrc -2 ........ ........ ........ ........ 11111111 11111111
...
...
И т.д. ))
PCM 256-2.rar
(858.19 KiB) Скачиваний: 122

:roll:
Это старый код... Новый код будет другой. Но принцип тот же))
Ответить