За връзка със slave контролерите за улеснение и по-нататъчно разширяване на системата и изместване на измервателните контролери на отдалечено разстояние чрез безжична връзка бе целесъобразен избора на лесен за предаване по възуха протокол. Избран бе код на манчестър като най-сигурна физическа връзка, и е добавена и допълнителна проверка на цикличния остатък.
Кодът на манчестър (известен още като код с фазово кодиране) е линеен код, в който кодирането на всеки информационен бит има поне една транзиция и заема винаги едно и също време. Той няма постоянна съставка и е самосинхронизиращ се, което означава, че може да бъде индукнивно или капацитивно свързан и тактовия сигнал може да бъде извлечен от информацията. На Фиг.2.14 е показан код на манчестър и извлечените от него тактов сигнал и информационен.
Използваната подпрограма е за софтуерна комуникация по код на манчестър и е предоставена свободно на страницата на Microchip. При използване на чисто софтуерна комуникация максимално достижимите скорости на предаване са около 600bps, което на фона на останалите видове съвременна комуникация е много ниско. За целите на метеорологичната станция скорости от този порядък са напълно достатъчни, тъй като на всеки 10 минути се предават не повече от 100 байта полезна информация.
Комуникацията започва и свършва винаги със стартов и стопов байт. Избрани бяха 0х0В и 0х0Е като начален и стопов байт. Мастер контролера (ядрото) се ориентира за предаваната информация по тези два байта. След получаването на стартовия байт се предава информацията в модифициран вид. Вида на протокола за предаване със slave1 и slave2 е следния:
Избора на източник на сигнала slave1 или slave2 се прави чрез външни електронни врати 74HCT125 - Фиг. 2.16.
За коректност на получените данни се използва CRC проверка на цикличния остатък с два контролни номера. В началото преди изпращане на данните винаги се изпраща единица, в края на полезната информация се изпраща контролен номер, производен на четността на сумата на изпратените елементи и константа. В приемната част при прочитане на чексумата и разкодирането и със същата константа и при наличието на начална 1ца се пристъпва към напълване на съответните променливи за времето от получения стринг. По-долу е показана извадка от кода за манчестър приемника.
RA4_bit=1; // отвори врата на slave1 RA5_bit=0; // дръж затворена врата на slave2 Delay_ms(10); // почакай 10ms да се отворят вратите :) while (1) { tempman = Man_Receive(&error); // опитай да получиш байт if (tempman == 0x0B) // ако е стартовия байт break; // имаме стартовата поредица - излез от while`a if (error) // ако е грешка, пак излез за да не break; // зацикли винаги } do { tempman = Man_Receive(&error); // опитай да получиш байт if (error) { // ако е станала грешка ErrorCount++; // инкрементирай брояча на грешки с 1 if (ErrorCount > 20) { // в случай на повече от 20 грешки tempman = Man_Synchro(); // опитай да синхронизираш на ново // Man_Receive_Init(); // алтернатива, опитай да иниц. на ново ErrorCount = 0; // занули брояча на грешките } } else { // инак, ако няма станала грешка if (tempman != 0x0 // ако стоповия байт е пристигнал прекрати комуник manch1[m]=tempman; // напълни полученото в масив manch1 m++; }