|
|
  |
Часы реального времени на M8 или M88, как это граммотрно сделать? |
|
|
|
Oct 5 2008, 11:27
|
Частый гость
 
Группа: Новичок
Сообщений: 97
Регистрация: 15-04-08
Пользователь №: 36 783

|
Здравствуейте. У меня свой проэкт в котором M8 работает как регистратор внешних событий, а внешний комп записывает приходящие на СОМ порт дные и подписывает их время. И есть задание сделать так что бы если комп отключен то что бы логи записывались в память а потом скидывались на сом порт при подключении компа. память я выбрал 24LC256 microchip (5ms). Так как ночью могут отключать вобще рубильник света а включать утром то устройство должно включится в рабочий режим с правильным временем.
Как имено грамотно сделать RTC немного не понятно. начну с главного вопроса. если исптользовать таймер 2 асинхронно то получается нужно использовать внутрений RC генератор. а его стабильность в зависимости температуры не известна. а ведь довольно важно что бы скорость обмена с СОМ портом (UART) была в районе +/- 0.5 %. Так же не смог найти калибровочный байт (нужен для частоты 8Мг). Подскажите плиз как и где его прочитать!? В книгах написано что он должен прочитатся программатором при програмировании и т.д. у меня програматор STK 200\300самодельный а программа ICC_AVR V7. 000. я вощем не смог разобратся.
Второе это как именно организовать отсчёт времени , ведь Т2 переполняется после 255. (при частоте кварца 32768 и коэфициенте деления 1024 частота работы таймера будет 32). тоесть переполнение произойдёт после 8 секундн. а контролер находится в слип режиме, тоесть надо получается через 8 сек пробудить его и добавить +8 секунд в переменну памяти и снова отправить в слип или я что то не понимаю? (я так понял что пока мега спит я же не могу ничего записывать программно так как тактирование алу и памяти отключены)
Ещё есть впрос как пробуждать контролер если появилось питание? Физически могу организовать изменение напряжения на практичски любой из ножек (0-нет питания, 4В - есть питание, или наоборот). но я посмотрел асинхнно внешние прерывания в мегах 8/88 определятся не могут. тоже нужен совет!
Всем кто реально может подсказать, особено по аське(7277332), очень прошу помочь! если есть кошелёк webmoney могу символически капнуть за помощь. Заранее всем огромное СПАСИБО!!!
Сообщение отредактировал Electronic) - Oct 5 2008, 11:29
--------------------
Самурай без меча - такой же, как самурай с мечом, только без меча
|
|
|
|
|
Oct 5 2008, 12:40
|
Частый гость
 
Группа: Новичок
Сообщений: 97
Регистрация: 15-04-08
Пользователь №: 36 783

|
Цитата(SysRq @ Oct 5 2008, 14:54)  У вас задача стоит именно сделать RTC на МК? ИМХО, проще внешнюю микросхему подключить, коих множество. я тоже так хотел, но получается новые платы, + запаивать кварц и микруху RTC из них я нашол только PCF8583 (2$) а она хоть и доступная и не дорогая но большая сама по себе) хоть и смд, я собираюсь начать производство этих устройств и если это рельно сделать RTC на МК толучше на МК сделать, это будет дёшево и сердито. меньше пайки дыма и бегони за деталями. конечно в крайнем случае переделаю платы и буду ствить просто PCF8583. но это очень не практично считаю. Жду реальной помощи по вопросам!
--------------------
Самурай без меча - такой же, как самурай с мечом, только без меча
|
|
|
|
|
Oct 5 2008, 14:38
|

Местный
  
Группа: Свой
Сообщений: 226
Регистрация: 2-06-06
Пользователь №: 17 720

|
Цитата если исптользовать таймер 2 асинхронно то получается нужно использовать внутрений RC генератор. а его стабильность в зависимости температуры не известна есть же часовой кварц - можно периодически калибровать частоту RC генератора по прерыванию часового таймера - для этого есть регистр OSCCAL. за несколько секунд частота выходит на точное значение, связь работает отлично. Калибровочный байт тут не поможет, разве что плата будет в термостатированном корпусе, ну и калибровать каждое изделие - не очень эффективный выход. Цитата Второе это как именно организовать отсчёт времени , ведь Т2 переполняется после 255 32768 - это 128*256, то есть нужно просто включить предделитель 128 для таймера 2. Цитата Ещё есть впрос как пробуждать контролер если появилось питание? в основном цикле - проверять напряжение внешн.питания, если появилось - запустить всю периферию и работать в нормальном режиме, если нет - засыпать дальше.
|
|
|
|
|
Oct 5 2008, 15:14
|
Частый гость
 
Группа: Новичок
Сообщений: 97
Регистрация: 15-04-08
Пользователь №: 36 783

|
Цитата(umup @ Oct 5 2008, 17:38)  есть же часовой кварц - можно периодически калибровать частоту RC генератора по прерыванию часового таймера - для этого есть регистр OSCCAL. за несколько секунд частота выходит на точное значение, связь работает отлично. Калибровочный байт тут не поможет, разве что плата будет в термостатированном корпусе, ну и калибровать каждое изделие - не очень эффективный выход. 32768 - это 128*256, то есть нужно просто включить предделитель 128 для таймера 2. в основном цикле - проверять напряжение внешн.питания, если появилось - запустить всю периферию и работать в нормальном режиме, если нет - засыпать дальше. "есть же часовой кварц - можно периодически калибровать частоту RC генератора по прерыванию часового таймера" вобще идея интересна только как подсчитывать количество тактов встроеного RC генератора с частотой 8Мг.... ведь программа на С++, это на асемблере можно считать сколько должна тактов пройти программа... "32768 - это 128*256, то есть нужно просто включить предделитель 128 для таймера 2." там вобще вопрос в другом я пределитель вобще поставил бы 1024 (я там писал) "в основном цикле - проверять напряжение внешн.питания, если появилось - запустить всю периферию и работать в нормальном режиме, если нет - засыпать дальше." - тоесть я так понял по напряжению на ножках никак нельзя прерывания получить? и ещё... как запустить основной цикл? ведь всё спит... в справочнике написано что из PowerDown возможно выйти 1- WDT 2- BOD 3-I2C 4- внешнее прерываение если оно обнаруживается аснхронно(! или Вы предлагаете WDT перегружать каждые 2сек раз M8 и смотреть питание и снова в sleep уходить? Вобщем вопросы открыты, весем гуру срочно сюда!) только есть просьба поподробнее описывать как всё реализовывается! я ведь и сам понимаю что в основном цикле можно всё делать, только вот как в него войти!)
Сообщение отредактировал Electronic) - Oct 5 2008, 15:16
--------------------
Самурай без меча - такой же, как самурай с мечом, только без меча
|
|
|
|
|
Oct 5 2008, 15:42
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(Electronic) @ Oct 5 2008, 19:14)  ведь программа на С++, это на асемблере можно считать сколько должна тактов пройти программа... Никто не запрещает вставлять ассемблерные вставки в с(++), тем более что это стандартные фишки Цитата там вобще вопрос в другом я пределитель вобще поставил бы 1024 (я там писал) не принципиально. В одном случае время будет квантоваться по 1с, в другом - по 8 Цитата я ведь и сам понимаю что в основном цикле можно всё делать, только вот как в него войти!) main() После пробуждения и обработки прерывания автоматически вываливаетесь в основной поток и продолжаете с места последнего "засыпания". Там проверяете всё что нужно, выполняете все необходимые действия и засыпаете дальше.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Oct 5 2008, 16:34
|
Частый гость
 
Группа: Участник
Сообщений: 149
Регистрация: 2-06-08
Из: Москва
Пользователь №: 38 003

|
Цитата(Electronic) @ Oct 5 2008, 15:27)  .... но я посмотрел асинхнно внешние прерывания в мегах 8/88 определятся не могут. тоже нужен совет! .... может я чего-то не понимаю, но вот цитата из даташита на мегу88 Цитата ... Pin change interrupts on PCINT23..0 are detected asynchronously. This implies that these interrupts can be used for waking the part also from sleep modes other than Idle mode. Как я понимаю здесь говорится о том что прерывания по изменинию ног детектируются асинхронно, и могут быть использованы для выхода из слип-режимов и из режима идле. а это из даташита на мегу8 Цитата Low level interrupts on INT0/INT1 are detected asynchronously. This implies that these interrupts can be used for waking the part also from sleep modes other than Idle mode. смысл тот же, только для прерываний инт0, инт1
|
|
|
|
|
Oct 5 2008, 17:28
|
Частый гость
 
Группа: Новичок
Сообщений: 97
Регистрация: 15-04-08
Пользователь №: 36 783

|
Цитата(smac @ Oct 5 2008, 19:34)  может я чего-то не понимаю, но вот цитата из даташита на мегу88
Как я понимаю здесь говорится о том что прерывания по изменинию ног детектируются асинхронно, и могут быть использованы для выхода из слип-режимов и из режима идле. а это из даташита на мегу8 смысл тот же, только для прерываний инт0, инт1 Спасибо!!! уже засел проверять на практике! просто наши переводчики так переводят что я умный человек не могу понять что они перевели) надо оригиналы смотреть ты прав) Цитата(MrYuran @ Oct 5 2008, 18:42)  Никто не запрещает вставлять ассемблерные вставки в с(++), тем более что это стандартные фишки не принципиально. В одном случае время будет квантоваться по 1с, в другом - по 8 main() После пробуждения и обработки прерывания автоматически вываливаетесь в основной поток и продолжаете с места последнего "засыпания". Там проверяете всё что нужно, выполняете все необходимые действия и засыпаете дальше. флудер!)
Сообщение отредактировал Electronic) - Oct 5 2008, 17:30
--------------------
Самурай без меча - такой же, как самурай с мечом, только без меча
|
|
|
|
|
Oct 5 2008, 20:14
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(ARV @ Oct 5 2008, 23:56)  непонятно только, почему для UART вам требуется такая точность... во многих случаях и 5% отклонения не страшны, Отлично, эксперимент проводить будем ? Вы делаете +5% на приемнике а я -5% на передатчике  Цитата(Огурцов @ Oct 5 2008, 23:56)  Кстати, в данный момент тестирую часики со встроенным генератором - несколько суток идут из секунды в секунду, в отличие от обычных кварцев, которые разбегаются в течение очень короткого времени. Поясните пожалуйста что это за магический генератор ? термостабилизированный ? Или еще какое неведомое изобретение ?
|
|
|
|
|
Oct 5 2008, 21:10
|
Частый гость
 
Группа: Новичок
Сообщений: 97
Регистрация: 15-04-08
Пользователь №: 36 783

|
не флудите))))) тут серьёзная тема. RTC на М8/88! насчёт потребления... PCF8583 у меня на 1Фараде работала 2 недели точно. её потребление 30мкА. думаю у М88 c часовым кварцем для Т2 будет потреблять не больше.
--------------------
Самурай без меча - такой же, как самурай с мечом, только без меча
|
|
|
|
|
Oct 5 2008, 22:11
|
Местный
  
Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527

|
Цитата(Electronic) @ Oct 6 2008, 01:10)  не флудите))))) тут серьёзная тема. RTC на М8/88! насчёт потребления... PCF8583 у меня на 1Фараде работала 2 недели точно. её потребление 30мкА. думаю у М88 c часовым кварцем для Т2 будет потреблять не больше. Однофарадовый ионистор по цене и габаритам может запросто переплюнуть связку например pcf8563+0.22F. Проиграв при этом во времени автономной работы - pcf8563 кушает всего 0.25uA. Но если Вы уже все решили в пользу софтового RTC, то дерзайте. Не забудте только что Вам надо считать не секунды, а реальное время/дату с високосными годами, разным количеством дней в месяце и т.д.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|