Мегаобучалка Главная | О нас | Обратная связь


Описание программы управления контроллером



2020-03-19 159 Обсуждений (0)
Описание программы управления контроллером 0.00 из 5.00 0 оценок




 

Изучив прототип представленный в журнале «Радио», а так же после соответствующего изменения схемы под выбранный мной контроллер и имеющиеся датчики я построил следующую программу, которая выполняет управление домашней метеостанцией и выполняет передачу данных на удаленный компьютер. Для этого я использовал специальный цифровой мост USB.COM, что упрощает написание программы т.к. используются стандартные функции последовательного обмена, встроенные в контроллер, но при этом позволяет связь через USB. При необходимости без модификации программы заменой данного моста на преобразователь 485 интерфейса (MAX 487) возможность удаления этой станции может быть до 1,5 км. от центрального компьютера.

Для съема данных используются два датчика температуры: один наружного расположения, другой внутренний. Если наружный датчик не выносить на улицу, а расположить в воде, то по разности температур данная метеостанция может выполнять расчет влажности. Так как датчики цифровые и подключены через интерфейс 1WARE для реализации корректного обмена с ними в обработчике таймера реализована соответствующая сложная процедура. Так как обработчик позволяет отслеживать такты времени для соблюдения нужных временных интервалов, я произвел предварительный расчет всех интервалов протокола и занес полученные значения в массив констант, что позволяет используя соответствующие циклы формировать управляющее воздействие с четкой привязкой по времени. Параллельно с этим в основном теле программы производится выполнение процедуры оцифровки. Процедура оцифровки выполняется путем наращивания значения ЦАП и контроля состояния компаратора. Как только компаратор изменяет свое состояние приращение ЦАП прекращается и последнее значение будет нами измерено.

Вывод информации на LCD выполняется также в обработчике таймера, что позволяет не ждать готовности индикатора, а выдерживать тайм-ауты более достаточные для того чтобы успел отработать контроллер ЖК-индикатора.

Для того чтобы учитывать скорость ветра используется механическая крыльчатка с электрическим датчиком в виде автопары. В обработчике таймера один раз в секунду пересчитывается число импульсов, соответствие скорости ветра.

Как указывалось ранее, для клавиатуры используется специализированная клавиатура шифратора, подключенная к каналу внешнего обработчика EX1. Клавиатура легко считывается и обслуживается в этом обработчике.

клавиша выполняет приращение часов.

клавиша выполняет приращение минут.

клавиша выполняет приращение часов таймера.

клавиша выполняет приращение минут таймера.

клавиша выполняет включение режима измерения влажности.

клавиша выполняет режим просмотра внешнего термометра.

клавиша выполняет просмотр состояния на час назад.

клавиша выполняет просмотр состояния на час вперед.

Для этого все полученные данные сохраняются каждый час по взведенному в обработчике таймера флагу.

За счет использования стандартного встроенного интерфейса I2C не требуется выполнять программную реализацию этого протокола т.к. он обеспечивается оборудованием контроллера.

В основном теле выполняется математическое преобразование температуры, давления, влажности и запоминание массива вывода на индикатор, а также контролируется срабатывание будильника (таймера) и выполняется включение звукового индикатора.

Последняя процедура это сохранение каждый час измеренных показателей и их последовательное извлечение из памяти, и вывод на индикатор. Для обмена с компьютером разрешено использовать прерывание последовательного порта. При приходе команды запроса, данные в этом же обработчике, отправляются удаленному компьютеру.


Вывод

 

При реализации данного проекта мной более детально изучена архитектура контроллера 52 серии. Изучены два новых интерфейса: 1WARE и I2C. Сформированная схема и написанная к ней программа по моему мнению полностью реализует поставленную передо мной задачу и позволяет выполнить все необходимые функции.

 


Приложение (Схема устройства)

 


 

Приложение (Листинг программы)

meteo: do;

$include(reg812.dcl)

Time (*) byte constant(0DCh,50h,0DCh,8Ch),

/*тайминги передачи команды CCh - пропуск трансляции внутреннего кода*/

Time1 (*) byte constant(0DCh,9Ah,0DCh,0D6h,0DDh,12h,0DDh,20h,0DDh,5Ch,0DDh,6Ah),(*) byte constant(0DDh,78h,0DDh,0B4h,DDh,0C2h,0DDh,0D6h,0DDh,0FEh,0DEh,0Ch),(*) byte constant(0DEh,48h,0DEh,56h,DEh,86h),

/*тайминги передачи кода 44h - на оцифровку температуры*/

Time 4 (*) byte constant (0DEh,0C2H,0DEh,0E5h,0DFh,21h),(*) byte constant(0DFh,5Dh,0DFh,6Bh,0DFh,0A7h,0DFh,0B5h,0DFh,0F1h,0DFh,0FFh),(*) byte constant(0E0h,0Dh,0E0h,49h,0E0h,85h,0E0h,93H,0E0h,0CFh,0E0h,0DDh),

/*тайминги для передачи B8H - запрос наполучение температуры*/

Time7 (*) byte constant(0DEh,95h,0DEh,0D0h,0DFh,8H,0DFh,021h,0DFh,02Fh),(*) byte constant(0DFh,66h,0DFh,79h,0DFh,0B5h,0DFh,0C3H,0DFh,0FFh,0E0h,03Bh),(*) byte constant(0E0h,49h,0E0h,85h,0E0h,93h,0E0h,0CFh,0E0h,0DDh),

/*тайминги для приема кода температуры*/

Time10(*) byte constant(0E0h,0E7h,0E1h,23h,0E1h,2Dh,0E1h,37H,0E1h,073h,0E1h,07Dh),(*) byte constant(0E1h,87h,0E1h,0C3h,0E1h,0CDh,0E1h,0D7H,0E2h,0B3h,0E2h),(*) byte constant(0BDh,0E2h,0C7h,0E3h,3,0E3h,0Dh,0E3h,17H,0E3h,53h,0E3h,5Dh),

/*тайминги приема знака*/(*) byte constant(0E3h,67h,0E3h,0А3h,0E3h),

(Davl,VVeter) byte,                    /*измер давление и скор ветра*/

(T1,T2) byte,                              /* измеряемая температура */

(Zn1,Zn2)bit,                              /*знак принятой температуры*/

(thp, tlp) byte,

(f1,f2) bit,                                   /*флаги ответа датчиков температуры*/

Chvetr byte,                                         /*счетчик определения скор ветра*/

ind(32) byte,

(i,j,tp,n,p,pt,adrh1,adrh2,adrl1,adrl2,pp) byte,

(flTim, flVlagn,flTemometr,FlC,FlI2C) bit,   /*флаги определения режима работы */ byte,                                            /*номера нажатой клавиши */

(Sek,Min,Chas,TimerChas,Timermin,DanP) byte   /*счетчики часов и таймера*/

Dat (6) byte,

flViev;                                                  /*флаг просмотра содержим памяти*/

V _ Vetra : procedure interrupt 0;/*определение скорости ветра*/

Chvetr=chvetr+1;V_Vetra;_key:procedure interrupt 2;

k= (P1 and 000000111b);case k;

:do;Chas=Chas+1;if chas=24 then chas=0;end;

: do;min=min+1;if min=60 then min=0;end

:do;TimerChas=Chas+1;if Timerchas=24 then Timerchas=0;end

:do;Timermin=Timermin+1;if Timermin=60 then Timermin=0;end

:FlVlagn=1;

:FlT=1;

:do;DanP=10;FlViev=1;adrl1=adrl1+1; if CY then adrh1=adrh1+1;pp=0;end;

:do;DanP=10;FlViev=1;adrl1=adrl1+1; if CY then adrh1=adrh1+1;pp=0;end;;

end in_key;_int: procedure interrupt 1; /* прерывание t0 */

th0=0d8h;tl0=0efh;=pt+1;pt=100 then do;sek=sek+1;per_t0=0;sek=60 then ;min=min+1;min=60 then min=0;=Chas+1;chas=24 then do;=0;

/*запись информации в память*/

flI2C=1;pp=0;

end;;p30=0 then P14=1 else p14=0;10=0;

P14,p13=0; /*начальный сброс и проверка наличия устройства*/

Do while (th0<0DAh ) and(tl0<0E3h );end;/*пауза сброса 500мкс*/

Do while (th0<0DBh) and (tl0<2Fh) ;end;not (P13) then f1=1; not ( P 14) then f 2=1; /*при ответе датчика устанавл флаг готовн к обмену*/

Do while (th0<0DCh ) and(tl0<42h );end;/*таймаут для завершения инициализации*/

/*цикл передачи команды безадресного обращения - ССh */

Do n=0 to 8/*передача таймслота по заранее рассчитанным задержкам*/

If f1 then P14=0; if f2 then P32=0; /*передача 0*/while (th0<Time(n*4)) and(tl0<Time(n*4+1)); end;f1 then P31=1; if f2 then P32=1;/*передача 1 */while (th0< Time(n*4+2)) and(tl0< Time(n*4+3)); end;;while (th0<0deh) and(tl0<86h); end;/*пауза 60mkc перед передачей команды*/

If not ( fout ) then do ;/*передача запроса 44 h на оцифровку*/

/*передача команды 44h для безадресного обращения*/

Do n=0 to 8/*передача таймслота по заранее рассчитанным задержкам*/

If f1 then P14=0; if f2 then P32=0; /*передача 0*/while (th0<Time4(n*4)) and(tl0<Time4(n*4+1)); end;f1 then P31=1; if f2 then P32=1;/*передача 1 */while (th0< Time4(n*4+2)) and(tl0< Time4(n*4+3)); end;

Else do ;

/*передача запроса B 8 h на прием информации с датчика*/

Do n=0 to 8/*передача таймслота по заранее рассчитанным задержкам*/

If f1 then P14=0; if f2 then P32=0; /*передача 0*/while (th0<Time7(n*4)) and(tl0<Time7(n*4+1)); end;f1 then P31=1; if f2 then P32=1;/*передача 1 */while (th0< Time7(n*4+2)) and(tl0< Time7(n*4+3)); end;;

Do while (th0<0e0h) and(tl0<0ddh); end;

Do n=0 to 7; /*прием данных от датчиков*/

If f1 then P31=0; if f2 then P32=0;/*передача строба 10мкс 0 в таймслоте*/

Do while (th0<0 Time10(n*6)) and(tl0< Time10(n*6+1)); end; f1 then P31=1; if f2 then P32=1;/*востановление1 и ожидание 60мкс */

Do while (th0< Time10(n*6+2)) and(tl0< Time10(n*6+3)); end;f1 and p31 then T1=rol((T1+1),1) else T1=rol(T1,1);f2 and p32 then T2=rol((T2+1),1) else T2=rol(T2,1);while (th0< Time10(n*6+4)) and(tl0< Time10(n*6+5));end;; n=0 to 7; /*прием знака */

If f1 then P31=0; if f2 then P32=0;/*передача строба 10мкс 0 в таймслоте*/while (th0<0 Time13(n)) and(tl0< Time13(n+1)); end; f1 then P31=1; if f2 then P32=1;/*востановление1 и ожидание 60мкс */

Do while (th0< Time10(n+2)) and(tl0< Time10(n+3)); end;f1 and p31 then Zn1=1 else Zn1=0;f2 and p32 then Zn2=1 else Zn2=0;;

VVetr=ChVetr/4;/*расчет скорости ветра*/

/*расчет реальной температуры*/

If zn1 thenT1=shr(not(T1+1),1) else T1=Shr(T1,1);

If zn2 thenT1=shr(not(T2+1),1) else T1=Shr(T2,1);=1;/*флаг готовности данных*/

Tp=0;

If FlVlagn then ;;/*Расчет влажности*/

End;FlI2C then

if pp<5 then do;CADD=Adrh1*255+Adrl1;case pp;

:I2CDat=T1;

: I2CDat=T2;

: I2CDat=VVetr;

: I2CDat=Vlagn;

: I2CDat=Chas;

End;=pp+1;else Adrl1=Adrl1+pp;FlInd then

if pp<5 then do;CADD=Adrh1*255+Adrl1+pp;case pp;

: T1=I2CDat;

: T2=I2CDat;

: VVetr=I2CDat;

: Vlagn=I2CDat;

End;=pp+1; ;

End ;

/*Вывод на индикатор*/

If FlC then P2=01010000b+shr(ind(tp),4) and 0fh);do;tp=tp+1;if tp>22 then FTim=0; P2=01010000b+ind(tp) and 0fh);end;=not(FlC);/*инверсия флага тетрады для передачи мл или ст тетрад*/

end;timer_int;: procedure interrupt 4 /* обработ прерывания отUART*/ Ri then do;    /*прерывание по приему данных*/

/*анализ принятых команд просмотром старших трех бит*/

If Sbuf=0 then

do;Sbuf=T1; p=1;end;/*запуск передачи данных*/

Else If (Sbuf and 0E0h)=0e0h then flagk=1;If (Sbuf and 0E0h)=0C0h then stop=0If (Sbuf and 0e0h)=40h then flTimer=0If (Sbuf and 0e0h)=60h then flTimer=1 do; /*прием номера устанавл параметра и его значения*/

If (Sbuf and 0e0h)=40h then If FlTimer then Tim=Sbuf else Chan=Sbuf;(Sbuf and 0e0h)=80h then If FlTimer then Timer(Tim)=Sbuf else Dat(Chan)=Sbuf;

end;(Ti and (P<4)) then /*передача массива данных*/case p;

:;

:Sbuf=T2;

:Sbuf=Vlagn;

:Sbuf=Vetr;

:Sbuf=Chas;

:Sbuf=min;;=p+1;

end UART;

tmod=00000001b;/*пеpвый pежим для 0 го таймеpа */=1;/*пpеpывание по фpонту сигнала пеpеполнения*/,tl0=0;tr0=1; /*обнул счетчики и pазpешаем pаботу 0 таймеpa*/=1;/*запускаем таймеp 0 */=1; /*pазpешаем пpеpывания Т0 */

th0,tl0=0fdh;/*работа послед порта на скорости 9600*/

ea=1;/*pазpешаем все пpеpывания*/=01001000b; /*UART такт поТ1 8 бит данных без четн */

I2CCon=11111011;

PCON=0;ES=1; /*разрешение прерывания UART*/

/*устаналиваем значения по умолчанию*/

t_1=6;t_2=6;

end init;



2020-03-19 159 Обсуждений (0)
Описание программы управления контроллером 0.00 из 5.00 0 оценок









Обсуждение в статье: Описание программы управления контроллером

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение...
Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней...
Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (159)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.006 сек.)