Здравствуйте,уважаемые Коты-профессионалы, котята-специалисты и просто радиолюбители!
Снова прошу вашей помощи в реализации моей задачи. Необходимо написать программу для контроллера PIC16F628A или аналогичный для управления 10-ю нагрузками + 1 управляемый выход для RESET дополнительного устройства.
Работа "Таймера" заключается в следующем: 1) При включении питания на выходе RA3 устанавливается логическая "1" (включение дополнительного устройства),одновременно включается порт RB0(лог. "1"), при этом RB1-RB7,RA0,RA6 ="0" 2)В течение программно установленного времени (1-10часов) порт RB0 включен 3)По истечении времени на выходе RA3 на 5сек. устанавливается лог. "0", одновременно на порту RB0 устанавливается "0", а на порту RB1 - "1". 4)Чере 5 сек. включается порт RA3 и отчет времени для порта RB1 продолжается в течение 1-10 часов. 5)В течение программно установленного времени (1-10часов) порт RB1 включен 6)По истечении времени на выходе RA3 на 5сек. устанавливается лог. "0", одновременно на порту RB1 устанавливается "0", а на порту RB2 - "1"... И так далее пока не включится последний порт RA6. По окончании времени на портах RA3 и RA6 устанавливается "0", отчет завершается, на порту RA7 устанавливается лог. "1" (загорается диод) Таким образом, последовательно, c выходом "RESET" порта RA3 переключаются порты RB0-RB1-RB2-RB3-RB4-RB5-RB6-RB7-RA0-RA6. Время переключения между портами должно задаваться программно в окне EEPROM при прошивке контроллера от 1 до 10 часов. По умолчанию нужно поставить 6 часов. Предварительная схема устройства во вложении.
...Необходимо написать программу для контроллера PIC16F628A или аналогичный для управления 10-ю нагрузками + 1 управляемый выход для RESET дополнительного устройства...
Смотрите вложение. Проект в Proteus для симуляции и две прошивки. Которая Timer_test.hex - ускоренная, для тестирования. В ней один час длится 30 сек. Вторая - рабочая. Значение количества установленных часов должно быть записано в ячейку EEPROM с адресом 0х00. Если в ячейке число больше 15, то берется по умолчанию 6. Пара замечаний. 1. Почему обязательно вручную через EEPROM запись времени? Есть свободные выводы в МК, можно организовать установку джамперами. Или одной кнопкой, с контролем по количеству вспышек светодиода. 2. Зачем внешняя логика? Может ее в МК прописать?
Пара замечаний. 1. Почему обязательно вручную через EEPROM запись времени? Есть свободные выводы в МК, можно организовать установку джамперами. Или одной кнопкой, с контролем по количеству вспышек светодиода. 2. Зачем внешняя логика? Может ее в МК прописать?
Если можно организовать все эти логические элементы на кристалле одного контроллера, то это будет превосходно! Но только нужно сделать один вход в контроллере для управление с внешнего устройства сигналом CS (лог.1), который как в схеме висит на первой ноге каждого 10 логического элемента. Алгоритм следующий: 1(SC) 0(pic)=0(вых), 1(SC) 1(pic) =1(вых) Насчет кнопки и диода я тоже думал. Если получится сделать так, то сделайте этот вариант. Установка одного часа - 1 мигание диода, 2 часа- 2 мигания и тд.
Если можно организовать все эти логические элементы на кристалле одного контроллера, то это будет превосходно!
Конечно, можно. Я сделал как в Вашей схеме, внешний сигнал CS воздействует только на те выхода, что и по схеме. Управление реле, светодиод живут своей жизнью, таймер продолжает считать. Если сигнал CS должен как-то влиять на них - опишите подробно.
lucifern писал(а):
Установка одного часа - 1 мигание диода, 2 часа- 2 мигания и тд.
Сделал. Порядок установки: 1. Перед включением питания нажать и удерживать кнопку SET. 2. Подать питание, включен режим установки. В режиме установки таймеры не работают, все выхода, кроме светодиода отключены. 3. Нажатием на SET установить количество часов от 1 до 15 по кругу. 4. Для запуска устройства необходимо отключить и включить питание с отпущенной кнопкой SET. Во вложении две версии прошивки, Вы уже в курсе.
Я Вами восхищен! Супер!Спасибо Вам огромное! Теперь дело за малым- всё это собрать воедино в моем железе.Как только всё соберу, запущу, тога уже буду думать что и как должно еще взаимодействовать. Пока буду теорию в практику воплощать
Сегодня экспериментировал с железом. Выяснил, что вход CS должен непосредственно подаваться на устройство через контроллер. То есть все то же самое, только контроллер должен на каждый порт после отсчета установленного времени подавать CS сигнал как он есть без участия логических элементов. Получается, что с порта RA1 сигнал через отсчет времени поступает на порт RB0,RB1...RA6. Контроллер в этом случае выполняет роль шлюза. Немного необходимо изменить в задержке переключения между нагрузками и RESET: Так как установка времени отсчитывается в часах, необходимо после окончания отсчета,например отсчиталось 6 часов, поставить задержку в 5 секунд перед выключением порта RA3(транзисторного ключа "RESET") и одновременным переключением в контроллере портов управления нагрузкой.Остальное остается без изменения. Порт RA3 отключается на 5 секунд, в этот момент контроллер с RA1 сигнал CS переключает с порта RB0 на RB1 и тд. Вот как то так Это возможно сделать?
Выяснил, что вход CS должен непосредственно подаваться на устройство через контроллер. То есть все то же самое, только контроллер должен на каждый порт после отсчета установленного времени подавать CS сигнал как он есть без участия логических элементов... ...Немного необходимо изменить в задержке переключения между нагрузками и RESET...
Что-то не въезжаю. Объясните на примере, последовательно расписав алгоритм, как должно работать.
Алгоритм: 1) Установка времени от 1-15часов с помощью кнопки SET,перезагрузка, включение ( всё как Вы описали) 2)На контроллер с внешнего исполнительного устройства на порт RA1 поступает сигнал CS. На порту RA3 установлена лог. "1" (Транзисторный ключ включен), одновременно на порт RB0 с порта RA1 поступает сигнал CS.На остальных портах RB1-RB2-RB3-RB4-RB5-RB6-RB7-RA0-RA6 сигнала нет, выходы отключены. 3) Идет отсчет установленного времени(1-15 часов). Все это время порт RA3 включен,на порт RB0 идет CS. 4) Установленное время отсчиталось (1-15 часов), еще в течении 5 секунд контроллер находится в исходном состоянии. 5) По истечении 5 секунд порт RA3 выключается (лог "0"), сигнал с RA1 переключается на RB1. Порт RB0 отключается. 6) Через 5 секунд на порт RA3 подается лог."1" и отсчет времени продолжается уже для установленного следующего порта RB1. 7) Установленное время отсчиталось (1-15часов), еще в течении 5 секунд контроллер находится в исходном состоянии. По истечении 5 секунд порт RA3 выключается (лог "0"), сигнал с RA1 переключается на RB2. Порт RB1 отключается. И так далее пока не включится последний порт RA6. По окончании времени на портах RA3 и RA6 устанавливается "0", отчет завершается, на порту RA7 устанавливается лог. "1" (загорается диод)
Получается, что порт RA1 соединяется последовательно шлюзом через контроллер с портами RB0-RB1-RB2-RB3-RB4-RB5-RB6-RB7-RA0-RA6 Через него сигнал CS должен проходить без изменения от внешнего исполнительного устройства к 10-ти управляемым нагрузкам.
Последний раз редактировалось lucifern Ср авг 21, 2013 07:47:01, всего редактировалось 2 раз(а).
Что нужно изменить так и не понял. Все так и сделано в последней прошивке, кроме п.4, смысл которого мне вообще непонятен. То есть отсчитали 6 часов, а затем еще 5 сек ничего не меняя? Или что означает "еще в течении 5 секунд контроллер находится в исходном состоянии"? Какой смысл в 6 часах и 5 сек? погрешность без применения кварцевого резонатора будет больше...
Изменить нужно -убрать внутри контроллера по выходу логический элемент "И", и сделать переключение между портом RA1 и портами RB0-RB1-RB2-RB3-RB4-RB5-RB6-RB7-RA0-RA6 напрямую без потери формы и вида сигнала который приходит на порт RA1 от внешнего устройства. Насчет пункта 4) - верно....Без кварца получится большой разброс. Тогда необходимо сделать еще один выход в контроллере,который после истечении установленного времени включался на 5 секунд, отключался, и после него уже происходило отключение порт RA3 и переключение выходов RB0-RB1-RB2-RB3-RB4-RB5-RB6-RB7-RA0-RA6. Нюанс еще такой , что выходы должны отключаться от RA1 не подключаясь к лог. "0"
Последний раз редактировалось lucifern Ср авг 21, 2013 07:44:22, всего редактировалось 1 раз.
Изменить нужно -убрать внутри контроллера по выходу логический элемент "И", и сделать переключение между портом RA1 и портами RB0-RB1-RB2-RB3-RB4-RB5-RB6-RB7-RA0-RA6 напрямую без потери формы и вида сигнала который приходит на порт RA1 от внешнего устройства.
А чем Вам не нравится элемент И? Он ведь выполняет то, о чем Вы пишете. Что значит без "потери формы"? С чего ей теряться, это цифровой сигнал или 1 или 0. Устройство на данном этапе в этой части работает именно так, как Вы описываете. Что в этом вопросе надо изменить я не понимаю.
lucifern писал(а):
Тогда необходимо сделать еще один выход в контроллере,который после истечении установленного времени включался на 5 секунд, отключался, и после него уже происходило отключение порт RA3 и переключение выходов RB0-RB1-RB2-RB3-RB4-RB5-RB6-RB7-RA0-RA6.
То есть, отсчитали 6 часов, на 5 сек на дополнительном выходе устанавливается 1, затем, через эти 5 сек отключается RA3, переключаются выходы и еще через 5 сек включается RA3?
lucifern писал(а):
выходы должны отключаться от RA1 не подключаясь к лог. "0" (если это возможно,если нет, то садить на "0")
То есть в 3-е состояние? Или логическая 1 или 3-е состояние? А как же "без потери формы"?
У Вас по выходу работает логический элемент "И" 1 1 =1, 1 0=0, вот его и надо убрать, чтобы просто соединять последовательно один порт с 10-тью выходами с помощью контроллера.
А чем Вам не нравится элемент И? Он ведь выполняет то, о чем Вы пишете. Что значит без "потери формы"? С чего ей теряться, это цифровой сигнал или 1 или 0. Устройство на данном этапе в этой части работает именно так, как Вы описываете. Что в этом вопросе надо изменить я не понимаю.
По этому порту идут данные от внешнего устройства, вот эти данные и нужно подать без потерь с порта RA1 на 10 выходов последовательно,переключаясь между ними через установленное время. Логические 1 и 0 тут уже не нужны. Отпадает и логический элемент "И". Нужно сделать просто шлюз между портами,который бы переключался с одного на другой.
Цитата:
То есть, отсчитали 6 часов, на 5 сек на дополнительном выходе устанавливается 1, затем, через эти 5 сек отключается RA3, переключаются выходы и еще через 5 сек включается RA3?
Отсчитали 6 часов(к примеру), на 5 сек на дополнительном выходе устанавливается 1, затем, через эти 5 сек на дополнительном выходе устанавливается 0 ,отключается RA3, переключаются выходы и еще через 5 сек включается RA3
Цитата:
То есть в 3-е состояние? Или логическая 1 или 3-е состояние? А как же "без потери формы"?
Третье состояние нужно,чтобы порт данных не посадился на общую шину питания и не произошел сбой, поэтому его нужно просто отключить от всего (3 состояние)
В общем идея такая Нужно с исполнительного устройства перенести данные без потерь на 10 других устройств. Контроллер производит переключение между этими 10-ю устройствами по одному порту данных.Чтобы исполнительное устройство не зависло, его мы перезагружаем, переключаемся с первого приемного устройства на второе и последующие устройства. Дополнительный выход нужен для того, чтобы сэмитировать автосохранение данных на первом устройстве перед перезагрузкой исполнительного. Таким образом, мы исключаем возможность потери данных за период сохранения информации от 1 до 15 часов. Вот как то так в двух словах
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения