www.horizontautomatics.ru

Программирование, автоматизация.

Вывод для сброса таймера .

Модератор: Евгений

Re: Вывод для сброса таймера .

Сообщение mush25 » 09 июн 2018, 18:42

Укоротил некоторые label ы , вот как они выглядят .
Вложения
сокращ.jpg
mush25
 
Сообщения: 144
Зарегистрирован: 05 июн 2018, 15:54

Re: Вывод для сброса таймера .

Сообщение Евгений » 11 июн 2018, 04:58

Код блока с приоритетом по R:
Код: Выделить всё
#ifndef _FBD45_
#define _FBD45_ FBD45
#message define FBD45 time off reset
;Размер FBD блока
;1 байт  -вход I
;1 байт  -вход R
;2 байта -период
;1 байт  -выход
;Оперативная память:
;  1 байт  - состояние
;  2 байта - отсечка времени

FBD45_run:
  ld    A,    X+                                   ;читаем байт состояния
  ld    Uz1L, X+                                   ;отсечка времени Lw
  ld    Uz1H, X+                                   ;отсечка времени Hw
  sbiw  XL,   3                                    ;Возвращаем указатель

  rcall Read_cfg_Load_Uz2                          ;вход  I
  rcall Read_cfg_Load_Uz3                          ;вход  R
  rcall Read_cfg                                   ;Читаем длительность  Lw
  mov   C, Addr_Data                               ;Читаем длительность  Lw
  rcall Read_cfg                                   ;Читаем длительность  Hg
  mov   D, Addr_Data                               ;Читаем длительность  Hg   

  tst   Uz3L                                       ;Тестируем состояние входа R
  brne  FBD45_reset                                ;Проверяем, переходим если 1

//***************** Отслеживаем сигнал **********************
  sbrc Uz2L, 0
  rjmp FBD45_start
//*********** Проверка сигнала запуска **********************
  tst  A                     //Тест бита (отсчет времени)
  brpl FBD45_zero            //Тест бита (отсчет времени)
//************* Нет сигнала запуска *************************
  rcall Timer_Diff           //Вычисляем разницу времени
  cp   ZL,  C                //Сраниваем
  cpc  ZH,  D                //Сраниваем
  brmi FBD45_one

FBD45_reset:
  andi A, 0b01111111         //(сбрасываем бит отсчет времени)

FBD45_zero:
  mov Uz3L, Zero                                   ;Вывод "0"
FBD45_end:
  st   X+,   A               //сохраняем
  st   X+,   Uz1L            //сохраняем
  st   X+,   Uz1H            //сохраняем
  rcall Read_cfg_Save_Uz3    //выводим состояние
  ret

FBD45_start:
  mov  Uz3L, One                            ;Вывод "1"
  ori  A,   0b10000000                      //(устанавливаем бит отсчет времени)
  lds  Uz1L, TimerCounter0_DATA_RAM+1       //Отсечка времени старта
  lds  Uz1H, TimerCounter0_DATA_RAM+2       //Отсечка времени старта
  rjmp FBD45_end                            //

FBD45_one:
  mov  Uz3L, One               //выводим 1
  rjmp FBD45_end

FBD45:
 .db 5, 3            //Размер FBD блока, необходимая оперативная память
 .dw FBD45_run, Init_default


#else
 #error redeclared FBD45 __FILE__
#endif


Блок схема:
Диаграмма1.gif
Аватара пользователя
Евгений
Администратор
 
Сообщения: 325
Зарегистрирован: 08 окт 2014, 11:36

Re: Вывод для сброса таймера .

Сообщение mush25 » 11 июн 2018, 08:30

Красота , получилось то что надо .

Вот добавил описание --
<!-- Таймер с задержкой отключения-->
<!-- Блок используется для задержки отключения выхода. -->
<!--На выходе Q блока появится логическая «1» по фронту-->
<!--сигнала на входе I, а начало отсчета времени задержки-->
<!--отключения (Tзад) происходит по каждому спаду входно- -->
<!--го сигнала. После отключения входного сигнала на выходе-->
<!--появится логический «0» с задержкой Tзад.-->
<!--По фронту сигнала на входе RES , отсчёт времени сбрасывается -->
<!--и на выходе появится логический «0»-->
<!--Приоритет у входа RES -->
<!-- -->
<!--Допустимый диапазон Tзад=Т: от 0 до 65000 мс-->
mush25
 
Сообщения: 144
Зарегистрирован: 05 июн 2018, 15:54

Re: Вывод для сброса таймера .

Сообщение Евгений » 11 июн 2018, 10:53

<!-- Таймер с задержкой отключения-->
<!-- Блок предназначен для задержки отключения логического -->
<!--сигнала. Блок имеет: вход I- входной сигнал, R- вход сброса,-->
<!--вход Q- выходной сигнал. Блок задержки имеет одну внутреннюю-->
<!--переменную определяющую задержку спада логического сигнала. -->
<!--В своей работе блок не задерживает прохождение логической единицы-->
<!--со входа I на выход Q, а логический ноль задерживает на время -->
<!--определенное внутренней переменной Tзад. Появление логической-->
<!--Единицы на входе R обнуляет выход блока R и прекращает отсчет-->
<!--задержки времени, если выполнялась задержка 0.-->
Аватара пользователя
Евгений
Администратор
 
Сообщения: 325
Зарегистрирован: 08 окт 2014, 11:36

Re: Вывод для сброса таймера .

Сообщение Евгений » 11 июн 2018, 10:59

toff_r.png
toff_r.png (27.12 КБ) Просмотров: 1174


По изображению блока непонятно где какой вход, надо скорректировать изображение и выбрать окончательное название блока
Аватара пользователя
Евгений
Администратор
 
Сообщения: 325
Зарегистрирован: 08 окт 2014, 11:36

Re: Вывод для сброса таймера .

Сообщение mush25 » 11 июн 2018, 12:29

Вот ошибка при закрытии .
Вложения
ошибка при закрытии.jpg
mush25
 
Сообщения: 144
Зарегистрирован: 05 июн 2018, 15:54

Re: Вывод для сброса таймера .

Сообщение mush25 » 11 июн 2018, 12:30

Счётчик секунд .
Вложения
time.xml
(15.24 КБ) Скачиваний: 101
mush25
 
Сообщения: 144
Зарегистрирован: 05 июн 2018, 15:54

Re: Вывод для сброса таймера .

Сообщение mush25 » 11 июн 2018, 12:31

Счётчик секунд
Вложения
time_counter_seconds.inc
(3.6 КБ) Скачиваний: 364
mush25
 
Сообщения: 144
Зарегистрирован: 05 июн 2018, 15:54

Re: Вывод для сброса таймера .

Сообщение mush25 » 11 июн 2018, 20:02

Вот ещё одно зависание .
Вложения
ЗАВ.jpg
mush25
 
Сообщения: 144
Зарегистрирован: 05 июн 2018, 15:54

Пред.

Вернуться в Микроконтроллеры AVR

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron