|
Часы реального времени на 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
--------------------
Самурай без меча - такой же, как самурай с мечом, только без меча
|
|
|
|
|
 |
Ответов
(1 - 46)
|
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, то дерзайте. Не забудте только что Вам надо считать не секунды, а реальное время/дату с високосными годами, разным количеством дней в месяце и т.д.
|
|
|
|
|
Oct 5 2008, 22:45
|
Участник

Группа: Новичок
Сообщений: 16
Регистрация: 4-10-08
Пользователь №: 40 693

|
Цитата(SysRq @ Oct 5 2008, 15:54)  У вас задача стоит именно сделать RTC на МК? ИМХО, проще внешнюю микросхему подключить, коих множество. и правильней ! Хотя РАБОЧИЙ пример часов програмных с часовым кварцем есть в примерах CVAVR.
Сообщение отредактировал hainiken - Oct 5 2008, 22:46
|
|
|
|
|
Oct 5 2008, 23:01
|
Частый гость
 
Группа: Новичок
Сообщений: 97
Регистрация: 15-04-08
Пользователь №: 36 783

|
Цитата(Qwertty @ Oct 6 2008, 01:11)  Однофарадовый ионистор по цене и габаритам может запросто переплюнуть связку например pcf8563+0.22F. Проиграв при этом во времени автономной работы - pcf8563 кушает всего 0.25uA. Но если Вы уже все решили в пользу софтового RTC, то дерзайте. Не забудте только что Вам надо считать не секунды, а реальное время/дату с високосными годами, разным количеством дней в месяце и т.д. 1Ф стоит 10грн 0.33Ф стоит 8.5грн M8/88-10грн pcf8583-10грн. потребление pcf8583 в даташите написано10-30мка. откуда вы взяли цифру 0,25мкА?
--------------------
Самурай без меча - такой же, как самурай с мечом, только без меча
|
|
|
|
|
Oct 5 2008, 23:48
|
Частый гость
 
Группа: Новичок
Сообщений: 97
Регистрация: 15-04-08
Пользователь №: 36 783

|
Цитата(SasaVitebsk @ Oct 6 2008, 02:45)  У меня пару изделий работает на М48 с часовым кварцем и СЦ2032. Но потом я, всё же отказался от такой реализации. В пользу DS1307. Правда тоже хапнул романтики. Уже по другому поводу.  Последнее время на питание как-то не смотришь - всё работает от 3.3V.  Ну а тут - осечка.  А платы сделаны уже. Ноги свободные были - вывел частоту на OC1, и вольтдобавку на питание DS. Там такая плата была, что эти изменения не критичны - так и выпускается - не стал переделывать. и сколько DS1307 стоит, и есть ли у неё преимущества перед8583 ?
--------------------
Самурай без меча - такой же, как самурай с мечом, только без меча
|
|
|
|
|
Oct 6 2008, 00:02
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(Electronic) @ Oct 6 2008, 02:48)  и сколько DS1307 стоит, и есть ли у неё преимущества перед8583 ? Мы брали "фирменные" и китайские.  Первые - около 1$ вторые 0.4 при 10 - 20 штуках.  Насчёт преимуществ с 8583 - не знаю. Я не пользовал 8583. Насчёт m88/48 - её реально использовать только в варианте megaX8p. То есть picopower. Иначе весь кайф ломает BOD. Встроенный, если мне не изменяет память, потребляет 1.6ма.  Что чудовищно много для таких приложений, а внешний - стоит теже деньги, что и внешние часы. А гимору - на порядок больше. Начнём с того, что при применении внешних часов вам надо просто завести батарейку на пустую ногу часов, а не городить огород с переключением на батарейное питание. Ну и так далее и тому подобное...
|
|
|
|
|
Oct 6 2008, 00:14
|
Частый гость
 
Группа: Новичок
Сообщений: 97
Регистрация: 15-04-08
Пользователь №: 36 783

|
я уже писал что там потребление будет в пределах 30-40мкА, и как раз всё будет проще если я не буду ставить внешний RTC) получится диод ионистор на 1ф и контролер.. все дела... питание пропало он ушол в спячку , потом проснулся при появлении питания и работает дальше сохранив в себе время.
Сообщение отредактировал Electronic) - Oct 6 2008, 00:17
--------------------
Самурай без меча - такой же, как самурай с мечом, только без меча
|
|
|
|
|
Oct 6 2008, 07:27
|
Частый гость
 
Группа: Новичок
Сообщений: 97
Регистрация: 15-04-08
Пользователь №: 36 783

|
Цитата(SysRq @ Oct 6 2008, 04:14)  Получается что в режиме сна события вы не регистрируете и только время считаете? Далее появляется питание, вы регистрируете события и записываете их в память с какой-то отметкой времени. Далее включается комп и забирает из МК список событий. А зачем вообще RTC? Выдать компу события, и пусть вычислит реальное время событий с отсчетом времени назад от текущего по отметкам времени в МК. При этом отметки времени в МК можете считать как угодно (в лоб: инкременировать счетчик времени  по любому таймеру\событию\etc с нужной точностью).. в режиме сна считает только время...(когда питания нет) когда появляется питания (но комп не включен) начинается запись событий в память, у событий должно быть время. можно конечно записывать только разницу времени но смысла это не меняет, в спящем режиме должен вестись отчёт времени(или разница времени), тактирование от внутренего генератора, вобщем вопросы как были так и остаются открытыми...
--------------------
Самурай без меча - такой же, как самурай с мечом, только без меча
|
|
|
|
|
Oct 6 2008, 10:32
|
Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782

|
Цитата(singlskv @ Oct 6 2008, 00:14)  Поясните пожалуйста что это за магический генератор ? термостабилизированный ? Или еще какое неведомое изобретение ? Например DS32C35 имеет встроенные генератор и термодатчик, взависимости от которого переключаются корректирующие емкости генератора, обеспечивается та самая термокомпенсация плюс еще 4к FRAM (все по I2C). Конечно по цене не 1307, зато очень функциональное устройство, для батарейки отдельный вход, никакие праздники даже бразильский карнавал не страшен.
|
|
|
|
|
Oct 6 2008, 13:14
|
Частый гость
 
Группа: Новичок
Сообщений: 97
Регистрация: 15-04-08
Пользователь №: 36 783

|
Цитата(VladimirYU @ Oct 6 2008, 13:32)  Например DS32C35 имеет встроенные генератор и термодатчик, взависимости от которого переключаются корректирующие емкости генератора, обеспечивается та самая термокомпенсация плюс еще 4к FRAM (все по I2C). Конечно по цене не 1307, зато очень функциональное устройство, для батарейки отдельный вход, никакие праздники даже бразильский карнавал не страшен. ну вот как бы Вы должны меня тогда понять больше всех так как вот цены в грн! : микросхемы DS32C35-33# MAX/DALL SO20 108.72 микросхемы DS32C35-33IND# MAX/DALL SO20 116.42 да и не нужен мне RTC на месяцы. 2-3 дня максимум 7 дней нужно что бы время шло. обычный режим ночь без света. а утром правильное время с компа в ком порт и по новой! + будут варианты исполнения в которых оябзателен будет акумулятор на 2.5Ач! и ионистор уже не надо будет. тоесть микропотребление не сама цель. цель в нормальной реализации RTC без доплаты! Всем спасибо за помощь! Остался последний вопрос!- Как имено грамотно сделать RTC немного не понятно. начну с главного вопроса. если исптользовать таймер 2 асинхронно то получается нужно использовать внутрений RC генератор. а его стабильность в зависимости температуры не известна. а ведь довольно важно что бы скорость обмена с СОМ портом (UART) была в районе +/- 0.5 %. Так же не смог найти калибровочный байт (нужен для частоты 8Мг). Подскажите плиз как и где его прочитать!? В книгах написано что он должен прочитатся программатором при програмировании и т.д. у меня програматор STK 200\300самодельный а программа ICC_AVR V7. 000. я вощем не смог разобратся.
Сообщение отредактировал Electronic) - Oct 6 2008, 13:15
--------------------
Самурай без меча - такой же, как самурай с мечом, только без меча
|
|
|
|
|
Oct 6 2008, 14:32
|
Участник

Группа: Участник
Сообщений: 60
Регистрация: 11-07-06
Из: Челябинск
Пользователь №: 18 726

|
Цитата(GDI @ Oct 6 2008, 19:53)  сделайте калибровку внутреннего RC от вашего часового кварца или от приамбулы поступающей с COM-порта, если нет веры в покупаемые часовые кварцы
|
|
|
|
|
Oct 6 2008, 18:17
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(ARV @ Oct 6 2008, 21:52)  разница, как вы понимаете, будет 10%... хотя на счет 5% я, пожалуй, погорячился - скорее все же 3% предел... НемогоOFF: И 3% уже бывает много 3+3 = 6% а это уже больше чем нужно для 8N1 Имел недавно разборки с соединеннием PC и платки с АРМ7, там ошибки сыпало примерно один раз на 100 пакетов. После безрезультатного перекапывания почти всего кода(код был чужой), решил проверить все с самого начала, оказалось что была ошибка округления при настройке делителя UART. Ошибка установки скорости была ~2,5% вместо ~1,25% и ошибки уже сыпало... После правки ошибки исчезли совсем. Так что ИМХО 1,5-2% с одной стороны, это максимум на который можно закладываться.
|
|
|
|
|
Oct 6 2008, 18:58
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(ARV @ Oct 6 2008, 23:52)  разница, как вы понимаете, будет 10%... хотя на счет 5% я, пожалуй, погорячился - скорее все же 3% предел... 0,5% работает в подавляющем большинстве случаев. Там же где погрешность baudrate выше, работает или случайно или "до поры до времени"  Погрешности тактовых двух независимых источников в общем случае также независимы, поэтому погрешности являются аддитивными, т.е. их нужно суммировать. 2,5%+2,5% это будет конечно 5%, что вроде как допустимо для 8N1. Но тут еще нужно учитывать среду передачи, в которой фронты импульсов далеки от прямоугольных. Особенно, если опторазвязка какая-нибудь используется. Так что стремиться нужно к 0,5% и тогда не будет лишнего геморроя и загадочных эффектов.
|
|
|
|
|
Oct 6 2008, 19:15
|
дятел
    
Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065

|
Цитата(ARV @ Oct 6 2008, 22:34)  вы снова говорите о суммировании отклонений... а если один "абонент" имеет стабильную частоту - второму можно отклоняться и на 3%... а иногда получается и больше... Я же показал реальную ситуацию, сколько погрешность на моем PC я не знаю, сколько будет на компе у клиента я тоже не знаю, поэтому нельзя закладываться на лучший вариант, типа на компе будет 0% а на девайсе 3-5% и все будет работать... Поэтому как минимум делим погрешность пополам и плюс еще запас, хотя лучше стремится вобще к отсутствию этой "цифровой" погрешности. В описываемом мною примере, после нахождения правильных коэф PLL, вносимая погрешность стала =0%, хотя и при 1,25% все уже работало без сбоев.
|
|
|
|
|
Oct 7 2008, 11:52
|
Местный
  
Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101

|
Во-первых, хочу поддержать автора за его стремление сделать красивый экономичный девайс. Добавить микросхему, аккумулятор и написать инструкцию, куда не нажимать - это просто, но НЕ ПРАВИЛЬНО. Правильно когда девайс работает несмотря ни на что. Цитата(Electronic) @ Oct 5 2008, 15:27)  Здравствуейте. У меня свой проэкт в котором M8 работает как регистратор внешних событий, а внешний комп записывает приходящие на СОМ порт дные и подписывает их время. И есть задание сделать так что бы если комп отключен то что бы логи записывались в память а потом скидывались на сом порт при подключении компа. память я выбрал 24LC256 microchip (5ms). Так как ночью могут отключать вобще рубильник света а включать утром то устройство должно включится в рабочий режим с правильным временем. Из чего тут следует, что питания не бывает сутками? Цитата(Electronic) @ Oct 5 2008, 15:27)  Как имено грамотно сделать RTC немного не понятно. начну с главного вопроса. если исптользовать таймер 2 асинхронно то получается нужно использовать внутрений RC генератор. а его стабильность в зависимости температуры не известна. а ведь довольно важно что бы скорость обмена с СОМ портом (UART) была в районе +/- 0.5 %. Так же не смог найти калибровочный байт (нужен для частоты 8Мг). Подскажите плиз как и где его прочитать!? В книгах написано что он должен прочитатся программатором при програмировании и т.д. у меня програматор STK 200\300самодельный а программа ICC_AVR V7. 000. я вощем не смог разобратся. Всё правильно - один кварц уже есть, под него подгоняем RC генератор. Есть аппнота AVR055: Using a 32kHz XTAL for run-time calibration of the internal RC. Точность частоты COM-порта должна быть 2%. Это согласуется с 5%, о которых говорят другие авторы, если учитывать погрешность н аобеих сторонах канала. Калибровочный байт называется OSCCAL, адрес его 0x31(0x51) в даташите на мегу8 есть про него много. Он читается программатором, напрмер avreal'ом: Device connected, MEGA16 detected Chip not locked Fuses OSCCAL = BD, BD, B7, B7 BODLEVEL = 1 BODEN = 1 SUT = 2 CKSEL = F BLB1 = 3 BLB0 = 3 OCDEN = 1 JTAGEN = 1 CKOPT = 0 EESAVE = 1 BOOTSZ = 0 BOOTRST = 1 Цитата(Electronic) @ Oct 5 2008, 15:27)  Второе это как именно организовать отсчёт времени , ведь Т2 переполняется после 255. (при частоте кварца 32768 и коэфициенте деления 1024 частота работы таймера будет 32). тоесть переполнение произойдёт после 8 секундн. а контролер находится в слип режиме, тоесть надо получается через 8 сек пробудить его и добавить +8 секунд в переменну памяти и снова отправить в слип Именно так! Цитата(Electronic) @ Oct 5 2008, 15:27)  Ещё есть впрос как пробуждать контролер если появилось питание? Физически могу организовать изменение напряжения на практичски любой из ножек (0-нет питания, 4В - есть питание, или наоборот). но я посмотрел асинхнно внешние прерывания в мегах 8/88 определятся не могут. тоже нужен совет! Глядя на таблицу 14 даташита "Table 14. Active Clock Domains and Wake-up Sources in the Different Sleep Modes" вижу, что светит Вам режим Power save, в котором Wake-up Sources INT0,1 и Timer2. Если не получается с INT, что мешает проверить какую-нибудь ногу на наличие высокого уровня от основного источника питания? Всё равно по таймеру просыпаться - время наращивать.
Сообщение отредактировал Maik-vs - Oct 7 2008, 11:56
|
|
|
|
|
Oct 9 2008, 22:31
|
Частый гость
 
Группа: Новичок
Сообщений: 97
Регистрация: 15-04-08
Пользователь №: 36 783

|
Спасибо! уже всё работает не смотря не на что, благодарен что ответили чётко. остался вопрос почему в слипе Т2 спешит на 1 сек за час ? ... я грешу на флюс.. на сам знаю что это не очень верное предположение... вот прерывание от Т2
#pragma interrupt_handler timer2_ovf_isr:5 void timer2_ovf_isr(void) { g=g^1;if(g==1){LED_ON;}else{LED_OFF;} sec_pl=1; }
и то что в main его обрабатывает if(sec_pl==1){
sec++;if(sec>=60){sec=0;} if(sec==0){min++;if(min>=60){min=0;} if(min==0 && sec==0){hor++;if(hor>=24){hor=0;}}} sec_pl=0;
if(V==0x01 && sleep_en==1){sleep_en=2;sleep_off();} if(sleep_en==1){asm("sleep");asm("nop");} if(sleep_en==2){clock(0,0);} }//end if(sec_pl==1) что скажет народ?
Сообщение отредактировал Electronic) - Oct 9 2008, 22:31
--------------------
Самурай без меча - такой же, как самурай с мечом, только без меча
|
|
|
|
|
Oct 9 2008, 22:58
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(Electronic) @ Oct 10 2008, 04:31)  остался вопрос почему в слипе Т2 спешит на 1 сек за час ? Видимо потому, что кусок функции часов Цитата(Electronic) @ Oct 10 2008, 04:31)  и то что в main его обрабатывает if(sec_pl==1){
sec++;if(sec>=60){sec=0;} if(sec==0){min++;if(min>=60){min=0;} if(min==0 && sec==0){hor++;if(hor>=24){hor=0;}}} sec_pl=0; должен выглядеть как-то так Код if(sec_pl!=0) { if (sec<59) sec++; else { sec=0; if (min<59) min++; else { min=0; if (hour<23) hour++; else hour=0; } } sec_pl=0; }
|
|
|
|
|
Oct 11 2008, 10:03
|
Частый гость
 
Группа: Новичок
Сообщений: 97
Регистрация: 15-04-08
Пользователь №: 36 783

|
да уход одинаковый... проверил. 2 сек в час не зависимо от того слип или не слип
--------------------
Самурай без меча - такой же, как самурай с мечом, только без меча
|
|
|
|
|
Oct 12 2008, 09:49
|
Частый гость
 
Группа: Новичок
Сообщений: 97
Регистрация: 15-04-08
Пользователь №: 36 783

|
//TIMER2 initialize - prescale:1024 // WGM: Normal // desired value: 1Hz // actual value: 1,000Hz (0,0%) void timer2_init(void) { TCCR2 = 0x00; //stop ASSR = 0x08; //set async mode TCNT2 = 0x00; //setup OCR2 = 0x00; TCCR2 = 0x05; //start* }
--------------------
Самурай без меча - такой же, как самурай с мечом, только без меча
|
|
|
|
|
Oct 12 2008, 10:33
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(Electronic) @ Oct 11 2008, 14:03)  да уход одинаковый... проверил. 2 сек в час не зависимо от того слип или не слип Почитайте доку на используемый кварц. Почитайте доку MCU. Обратите внимание на параметр "емкостная нагрузочная способность". Кварцы бывают разные 6pf, 12pf. Это сильно влияет на точность хода часов (проверено опытным путём).
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Oct 12 2008, 16:44
|
Частый гость
 
Группа: Участник
Сообщений: 149
Регистрация: 2-06-08
Из: Москва
Пользователь №: 38 003

|
Цитата(Electronic) @ Oct 12 2008, 13:49)  //TIMER2 initialize - prescale:1024 // WGM: Normal // desired value: 1Hz // actual value: 1,000Hz (0,0%) void timer2_init(void) { TCCR2 = 0x00; //stop ASSR = 0x08; //set async mode TCNT2 = 0x00; //setup OCR2 = 0x00; TCCR2 = 0x05; //start* } Пересмотрел всю тему, может я невнимателен, но так и не нашел, какова частота кварца? Если предположить, что "часовой" зачит 32,768 кГц, то при делителе 1024 Вы никак не получите прерывание по переполнению таймера частотой в 1 Гц при начальном значении TCNT2==0, значит либо нужен более высокочастотный кварц, либо в регистр TCNT2 нужно записать какое-то число каждый раз при переполнении (в данном режиме работы таймера). Если в TCNT2 что-то пишется, то действия при записи и могут быть причиной неточности.
|
|
|
|
|
Oct 12 2008, 18:43
|
Частый гость
 
Группа: Новичок
Сообщений: 97
Регистрация: 15-04-08
Пользователь №: 36 783

|
ой... то просто у меня оставалось с давних пор. кварц 32768. делитель 128 (0х05 в 3-ем варианте исполнеия Т2 это clk/128) а 128*256 =32768
Сообщение отредактировал Electronic) - Oct 12 2008, 18:47
--------------------
Самурай без меча - такой же, как самурай с мечом, только без меча
|
|
|
|
|
Oct 13 2008, 11:43
|
Частый гость
 
Группа: Новичок
Сообщений: 97
Регистрация: 15-04-08
Пользователь №: 36 783

|
Значит ТАК! перевёл на платформу М88 и время стало идти нормально! секунда в секунду... незнаю что это значит... но алгоритм я не менял! Новички учтите!
--------------------
Самурай без меча - такой же, как самурай с мечом, только без меча
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|