Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Вопросы начинающих

Вопросы начинающих Прежде чем задать вопрос, стоит воспользоваться поиском

Ответ
 
Опции темы Опции просмотра
Старый 08.10.2011, 07:12   #1
Funkehed
Member
 
Регистрация: 02.08.2011
Возраст: 36
Сообщений: 45
Вес репутации: 100/34
Funkehed will become famous soon enoughFunkehed will become famous soon enough
По умолчанию Код для нескольких будильников/таймеров на PIC18

Задача сделать 16 таймеров (потом может и 256), каждый таймер содержит время включения и выключения нагрузки. Время включения и отключения нагрузок лежит в ЕЕПРОМ пачками по 4 байта.
Опрос времени с DS1305 происходит раз в 20 секунд. Ничего умнее, чем сравнивать установленное время всех таймеров в процессе обновления времени я не придумал. Есть ли более изящный способ слежения за такими таймерами?
Или вообще кто нибудь может привести код, желательно в ассемблере, как включается сигнал будильника, только чтобы без постоянного сравнения времени с установленным временем срабатывания будильника.
Funkehed вне форума   Ответить с цитированием
Старый 08.10.2011, 08:44   #2
2AplusA
Senior Member
 
Аватар для 2AplusA
 
Регистрация: 26.02.2007
Адрес: Penza
Возраст: 38
Сообщений: 1,383
Вес репутации: 1267/74
2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of
По умолчанию Re: Код для нескольких будильников/таймеров на PIC18

Цитата:
Сообщение от Funkehed Посмотреть сообщение
Задача сделать 16 таймеров (потом может и 256), каждый таймер содержит время включения и выключения нагрузки. Время включения и отключения нагрузок лежит в ЕЕПРОМ пачками по 4 байта.
Опрос времени с DS1305 происходит раз в 20 секунд. Ничего умнее, чем сравнивать установленное время всех таймеров в процессе обновления времени я не придумал. Есть ли более изящный способ слежения за такими таймерами?
Или вообще кто нибудь может привести код, желательно в ассемблере, как включается сигнал будильника, только чтобы без постоянного сравнения времени с установленным временем срабатывания будильника.
А без сравнения Вашу задачу по-другому никак не решить. Время срабатывания будильников никак друг с другом не завязано, и работа их полностью асинхронна. Т.е. кроме перебора и сравнения вряд ли что-то получится придумать.
А вот как быстро сравнивать - это и будет Ваша основная задача.
__________________
Лучше день потерять, потом за час долететь!
2AplusA вне форума   Ответить с цитированием
Старый 08.10.2011, 11:02   #3
FlashBack
Senior Member
 
Аватар для FlashBack
 
Регистрация: 16.02.2010
Адрес: Грузия, Тбилиси
Возраст: 35
Сообщений: 2,232
Вес репутации: 2337/83
FlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond reputeFlashBack has a reputation beyond repute
По умолчанию Re: Код для нескольких будильников/таймеров на PIC18

Цитата:
Сообщение от Funkehed Посмотреть сообщение
...Опрос времени с DS1305 происходит раз в 20 секунд. ...


Ну и есть целых 20 секунд до следующего опроса для сравнения всех таймеров Раздолье.
FlashBack вне форума   Ответить с цитированием
Старый 08.10.2011, 11:13   #4
IgorV
Senior Member
 
Аватар для IgorV
 
Регистрация: 25.02.2007
Адрес: всем пока
Возраст: 49
Сообщений: 4,100
Вес репутации: 1883/108
IgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant futureIgorV has a brilliant future
Отправить сообщение для IgorV с помощью Skype™
По умолчанию Re: Код для нескольких будильников/таймеров на PIC18

Цитата:
Сообщение от Funkehed Посмотреть сообщение
Задача сделать 16 таймеров (потом может и 256), каждый таймер содержит время включения и выключения нагрузки. Время включения и отключения нагрузок лежит в ЕЕПРОМ пачками по 4 байта.
Опрос времени с DS1305 происходит раз в 20 секунд. Ничего умнее, чем сравнивать установленное время всех таймеров в процессе обновления времени я не придумал. Есть ли более изящный способ слежения за такими таймерами?
Или вообще кто нибудь может привести код, желательно в ассемблере, как включается сигнал будильника, только чтобы без постоянного сравнения времени с установленным временем срабатывания будильника.
DS1305 как и в случае, особенно 1302, лучше было бы заменить на что-то более менее качественное.

Не нравится сравнивать текущее время с временем будильника- ну тогда добро пожаловать в мир вычислений на асме сколько секунд осталось до срабатывания и вычитать это время до нуля в процессе работы.
IgorV вне форума   Ответить с цитированием
Старый 08.10.2011, 18:01   #5
Funkehed
Member
 
Регистрация: 02.08.2011
Возраст: 36
Сообщений: 45
Вес репутации: 100/34
Funkehed will become famous soon enoughFunkehed will become famous soon enough
По умолчанию Re: Код для нескольких будильников/таймеров на PIC18

Извиняюсь, естественно DS1307.
Придется решать проблему в лоб. Такие ресурсозатратные конструкции опроса ЕЕПРОМ, у меня вызывают ложную аналогию между контроллером и двигателем внутреннего сгорания, где с каждым оборотом идет износ двигателя. Я просто надеялся, что есть изящные решения, которые используются для решения вот таких проблем.
Funkehed вне форума   Ответить с цитированием
Старый 08.10.2011, 20:56   #6
fol
Senior Member
 
Аватар для fol
 
Регистрация: 04.05.2007
Возраст: 45
Сообщений: 270
Вес репутации: 264/52
fol is a jewel in the roughfol is a jewel in the roughfol is a jewel in the rough
По умолчанию Re: Код для нескольких будильников/таймеров на PIC18

Прочитал и руки к клаве потянулись...
Не понятно почему несколько десятков пороговых величин (уставок) с коими нужно сравнивать текущее время названы таймерами, но не суть, хотя отсюда уже возникает неправильное понимание.
Если не нравится монотонное сравнение по каждому внешнему клоку, перед запуском программы выстраивайте имеющиеся уставки по приоритетам, это как вариант.
Кроме того насколько понял, при каждом клоке, для сравнения, текущая уставка выбирается из EEPROMа, а нафига ? Положите всё в ОЗУ.
__________________
...с особым цинизмом надругался над общественным мнением
fol вне форума   Ответить с цитированием
Старый 08.10.2011, 22:29   #7
Funkehed
Member
 
Регистрация: 02.08.2011
Возраст: 36
Сообщений: 45
Вес репутации: 100/34
Funkehed will become famous soon enoughFunkehed will become famous soon enough
По умолчанию Re: Код для нескольких будильников/таймеров на PIC18

Цитата:
Кроме того насколько понял, при каждом клоке, для сравнения, текущая уставка выбирается из EEPROMа, а нафига ? Положите всё в ОЗУ
Я делаю проект бытового таймера с управлением по протоколу X10. Поэтому время лучше помещать в ЕЕПРОМ на случай отключения питания.
Цитата:
Не понятно почему несколько десятков пороговых величин (уставок) с коими нужно сравнивать текущее время названы таймерами, но не суть, хотя отсюда уже возникает неправильное понимание.
А термин таймер использую так как это общие понятие для таких вещей на английском языке, хотя только что и вспомнил подходящий перевод для слова установка, но ни на русском ни на английском я его никогда часто не использовал.
Funkehed вне форума   Ответить с цитированием
Старый 08.10.2011, 23:03   #8
alexem
Senior Member
 
Аватар для alexem
 
Регистрация: 08.03.2008
Адрес: Самара
Возраст: 47
Сообщений: 501
Вес репутации: 443/54
alexem is just really nicealexem is just really nicealexem is just really nicealexem is just really nicealexem is just really nice
По умолчанию Re: Код для нескольких будильников/таймеров на PIC18

Цитата:
Сообщение от Funkehed Посмотреть сообщение
Я делаю проект бытового таймера с управлением по протоколу X10. Поэтому время лучше помещать в ЕЕПРОМ на случай отключения питания.
Да и размещай, только при включении питания всё равно в озу скопируй. Что мешает то? Или я не так понял?
alexem вне форума   Ответить с цитированием
Старый 09.10.2011, 00:39   #9
Funkehed
Member
 
Регистрация: 02.08.2011
Возраст: 36
Сообщений: 45
Вес репутации: 100/34
Funkehed will become famous soon enoughFunkehed will become famous soon enough
По умолчанию Re: Код для нескольких будильников/таймеров на PIC18

Цитата:
Сообщение от alexem Посмотреть сообщение
Да и размещай, только при включении питания всё равно в озу скопируй. Что мешает то? Или я не так понял?
Просто я жадный до ресурсов=))) Спасибо за наводку, наверно так и сделаю, но суть алгоритма от этого сильно не меняется.
Funkehed вне форума   Ответить с цитированием
Старый 09.10.2011, 12:10   #10
K_E_S_T
Senior Member
 
Регистрация: 25.08.2010
Возраст: 26
Сообщений: 258
Вес репутации: 275/40
K_E_S_T is a jewel in the roughK_E_S_T is a jewel in the roughK_E_S_T is a jewel in the rough
По умолчанию Re: Код для нескольких будильников/таймеров на PIC18

Делал похожее на PIC16. Но у меня и часы на нем же реализованы таймером и часовым кварцем. Расписание так же хранится в ЕЕПРОМ(но только 3х байтовыми записями). 256 байт ЕЕПРОМ давали около 80 событий.
Раз в час копировал расписание в ОЗУ с учетом дня недели и текущего часа. Т.е. если сегодня понедельник и начинается 12й час то и копируем в ОЗУ только события срабатывающие в 12м часу понедельника. А потом каждую минуту проверяем текущее время и каждый из скопированных элементов. При совпадении обрабатываем. Если надо точность до секунды(хотя как вы написали, опрос раз в 20 сек, то не понадобится) можно так же создавать еще одну выборку для минуты.

Это была система управления аквариумом. на асме. если интересно могу исходники скинуть.
K_E_S_T вне форума   Ответить с цитированием
Старый 09.10.2011, 21:43   #11
2AplusA
Senior Member
 
Аватар для 2AplusA
 
Регистрация: 26.02.2007
Адрес: Penza
Возраст: 38
Сообщений: 1,383
Вес репутации: 1267/74
2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of
По умолчанию Re: Код для нескольких будильников/таймеров на PIC18

Цитата:
Сообщение от Funkehed Посмотреть сообщение
Извиняюсь, естественно DS1307.
Придется решать проблему в лоб. Такие ресурсозатратные конструкции опроса ЕЕПРОМ, у меня вызывают ложную аналогию между контроллером и двигателем внутреннего сгорания, где с каждым оборотом идет износ двигателя. Я просто надеялся, что есть изящные решения, которые используются для решения вот таких проблем.
ВЫ какую ЕЕПРОМ то используете? Я то думал внутреннюю.
__________________
Лучше день потерять, потом за час долететь!
2AplusA вне форума   Ответить с цитированием
Старый 09.10.2011, 23:57   #12
fol
Senior Member
 
Аватар для fol
 
Регистрация: 04.05.2007
Возраст: 45
Сообщений: 270
Вес репутации: 264/52
fol is a jewel in the roughfol is a jewel in the roughfol is a jewel in the rough
По умолчанию Re: Код для нескольких будильников/таймеров на PIC18

Чёт снова руки к клаве потянулись, пофлудеть наверно
Что собственно не устраивает в алгоритме поиска совпадений. В любом случае других вариантов нет, и программа БУДЕТ ЭТО ДЕЛАТЬ, это даже не алгоритм, это надо делать и точка.
Другое дело когда и как. Вот это вопрос. Можно например сделать многозадачную ОС. Можно сделать многоядерную систему... Но это только тогда когда будут проблемы. Стартёр проблем не озвучил, а значит всё в порядке, космические корабли продолжают...

зы
а четыре байта для хранения величины уставки времени - не многовато ли ?
__________________
...с особым цинизмом надругался над общественным мнением
fol вне форума   Ответить с цитированием
Старый 10.10.2011, 08:41   #13
2AplusA
Senior Member
 
Аватар для 2AplusA
 
Регистрация: 26.02.2007
Адрес: Penza
Возраст: 38
Сообщений: 1,383
Вес репутации: 1267/74
2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of2AplusA has much to be proud of
По умолчанию Re: Код для нескольких будильников/таймеров на PIC18

Цитата:
Сообщение от fol Посмотреть сообщение
Чёт снова руки к клаве потянулись, пофлудеть наверно
Что собственно не устраивает в алгоритме поиска совпадений. В любом случае других вариантов нет, и программа БУДЕТ ЭТО ДЕЛАТЬ, это даже не алгоритм, это надо делать и точка.
Другое дело когда и как. Вот это вопрос. Можно например сделать многозадачную ОС. Можно сделать многоядерную систему... Но это только тогда когда будут проблемы. Стартёр проблем не озвучил, а значит всё в порядке, космические корабли продолжают...

зы
а четыре байта для хранения величины уставки времени - не многовато ли ?
Если бы Вы прочитали всю ветку, то Вы бы увидели, что Вы повторили один в один мой пост выше. К чему я этот пост написал, а к тому, что из "родной" ЕЕПРОМ читать намного быстрее и проще. Да и 1Кбайт(4*256) ЕЕПРОМ на многих 18 пиках стоит. Нужно лишь правильно изначально настроить ЕЕПРОМ на чтение. Если же ЕЕПРОМ внешняя, то как большинство ему посоветовало, необходимо с ЕЕПРОМ работать, через образы в ОЗУ. Иначе, дикие тормоза обеспечены. Особенный плюс образов в том, что их легко прочитать/записать из/в ЕЕПРОМ, используя DMA. Поэтому, когда ТС перейдет на более навороченные микроконтроллеры, переделки кода будут минимальными.
__________________
Лучше день потерять, потом за час долететь!
2AplusA вне форума   Ответить с цитированием
Старый 10.10.2011, 17:07   #14
Funkehed
Member
 
Регистрация: 02.08.2011
Возраст: 36
Сообщений: 45
Вес репутации: 100/34
Funkehed will become famous soon enoughFunkehed will become famous soon enough
По умолчанию Re: Код для нескольких будильников/таймеров на PIC18

Цитата:
Сообщение от 2AplusA Посмотреть сообщение
К чему я этот пост написал, а к тому, что из "родной" ЕЕПРОМ читать намного быстрее и проще.
Я изначально родной еепром и использовалал. Уже наваял первоначальный вариант сохранения всего массива в RAM.
На днях пришел программатор, так что сделал упор на запуск более старых кодов уже на железе, а не на симуляторе. Пока не работает, теперь буду изучать, как можно дебагить уже в готовой схеме. Мне кажется проблема в I2C.
Funkehed вне форума   Ответить с цитированием
Старый 11.10.2011, 14:56   #15
Vidoc
Member
 
Регистрация: 02.03.2007
Адрес: Чита
Возраст: 39
Сообщений: 78
Вес репутации: 104/50
Vidoc will become famous soon enoughVidoc will become famous soon enough
По умолчанию Re: Код для нескольких будильников/таймеров на PIC18

Может, пригодится?
__________________
www.picbasic.ru
Vidoc вне форума   Ответить с цитированием
Старый 11.10.2011, 15:32   #16
siargy
Senior Member
 
Аватар для siargy
 
Регистрация: 03.07.2007
Адрес: Минск
Возраст: 40
Сообщений: 919
Вес репутации: 1351/70
siargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud ofsiargy has much to be proud of
По умолчанию Re: Код для нескольких будильников/таймеров на PIC18

Используя косвенную адресацию, подпрограмка перебора ОЗУ на совпадение времени займет 20 команд, у мня для pic16 так сделано.
А после чтения из EEPROM-а в ОЗУ только минут для текущего часа и того меньше.
__________________
Построил тепличку, посеял литопсы, вырастил кактусы
siargy вне форума   Ответить с цитированием
Старый 12.10.2011, 00:31   #17
fol
Senior Member
 
Аватар для fol
 
Регистрация: 04.05.2007
Возраст: 45
Сообщений: 270
Вес репутации: 264/52
fol is a jewel in the roughfol is a jewel in the roughfol is a jewel in the rough
По умолчанию Re: Код для нескольких будильников/таймеров на PIC18

Код:
"2AplusA"
Если бы Вы прочитали всю ветку, то Вы бы увидели
Не увидел, ПП проверки совпадений не запустилась
__________________
...с особым цинизмом надругался над общественным мнением
fol вне форума   Ответить с цитированием
Старый 29.10.2011, 19:44   #18
BORIS51
Guest
 
Сообщений: n/a
По умолчанию Re: Код для нескольких будильников/таймеров на PIC18

попробуйте ассоциативный вариант - текущее время/дата = адресу ячейки, данные в которой соответствуют состоянию нагрузок (примерно две таблицы в ПЗУ)
  Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переделка asm кода ЖКИ с 8 бит на 4 бита Noelchuvak Продукция MICROCHIP 66 27.12.2011 21:46
MAX232 и USART, отсутствует сигнал на выходе. EviL_LaugH Общетехнические вопросы 15 31.01.2011 00:40
Помогите написать программу BreAkeR Вопросы начинающих 59 20.12.2009 13:34
Нужен "manual" для Hi-Tech Pic18 на русском Gera82 Продукция MICROCHIP 1 13.08.2009 20:56
AN1101-Sensor CERGEI1982 Продукция MICROCHIP 12 04.03.2009 18:15


Часовой пояс GMT +3, время: 14:03.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot