PIC18F і таймер?

M

M3GAPL3X

Guest
Привіт хлопці,

Я початківець з мікроконтролерів і необхідності деякі поради про те, як implment цю функцію енергозбереження.

Мені потрібно поставити 18F ПІК серія пристроїв для сну і розбудити всі 20 мс, щоб перевірити стан різних компонентів.Основна причина цього полягає в економії електроенергії.Після деяких досліджень, здається, кращий спосіб реалізувати це буде з сторожовий таймер?

Чи правильно це?Будь-яке керівництво в правильному напрямку буде прийнята з вдячністю!

Я буду використовувати компілятор MPLAB C18.

 
Так, сторожовий таймер (WDT) є шлях.
1 - біт конфігурації мати WDT вогню кожні 20 мс
2 - Якщо ви хочете поїхати в режим зниженого енергоспоживання, що дозволяють WDT і виконати інструкцію сну.Переконайтеся, що ви відключіть усі периферійні модулі Вам не потрібно мати активну ході Power Down, або ви не redcuce енергоспоживання багато.
3 - Після 20 мс DWT буде вогнем і пробудження ПОС.Код почне виконуватися в інструкції відразу після сну інструкція
4 - Вимкнути WDT, щоб будь-який периферійних модулів, які ви повинні використати, а потім запустити додаток - повторити з кроку 2

 
Не забудьте!Якщо Ви включите Watchdog за замовчуванням (WDTEN конфігурації розрядні наскільки я пам'ятаю ...) і якщо ви не спите (добре, коли ПОС Awake) більш ніж на 20ms, воно буде через скидання Watchdog ...тому "Відкритий сторожового пса", якщо вам потрібно буде жити більш 20ms ...Я зробив цю помилку один раз!(але, можливо, ідею Watchdog дозволять програмним забезпеченням, як GSMMan запропонувати, є більш відповідною ...)

Також!будь-яке переривання буде включений пробудження ПІК!Замість WDT!GIE якщо активний, то він буде також ввести Interrup-рутиною, якщо ні, то буде просто пробудження!(Я використав INT0 прокидатися на певних умовах ..., dissabling WDT або очищаючи її, зробить роботу ...)

 
Привіт хлопці,

Я високо ціную відповіді!Я дізнався, що щось нове сьогодні.

Kurenai_ryu, фактично мій оригінальний дизайн щоб перервати розбудити ПІК, однак, що було визначено, що перевірка кожного 20ms будь-яких змін і збільшення боротьбі кожні 20ms приблизно до 4 секунд, досягнутим в боротьбі краще за все, щоб зберегти владу.Я буду дивитися на WDT трохи більше сьогодні і, можливо, повернуся ще кілька допомогу!

GSM Людина, я збираюся здійснити це звичайні сьогодні і подивимося, як воно йде.

Дякуємо вам за відповідь!Додано через 5 годин 49 хвилин:Я не збираюся робити підхід Watchdog Timer0 але використовувати для сну і неспання з переривань, однак, дивлячись на специфікації, він стверджує, що в режимі сну, Timer0 вимикається і не може прокинутися ПІК навіть з Timer0 прапор переривання як високу.

Чи означає це також виникати, якщо ПОС в режимі очікування?

 
Який пристрій ви використовуєте?
В цілому, коли в сплячий режим, всі годинники є інвалідами, а в години холостому режимі процесор не горить, але певні периферійні годинник включений - які з них залежить від пристрою і настройками холостому режимі.

Одна справа мати на увазі, що режим сну має найнижчий поточний розіграш будь-якому режимі.Якщо вам потрібен периферійних Біг - таких, як Real Time Clock - це правило, краще помістити пристрій спати, а не його простою.

 
Привіт GSM,

Я буду використовувати ПІК 18F14K50.

Я був дуже стурбовані тим, що таймер буде відключено під час сну режимах, але специфікація каже, що тільки Timer0 є інвалідом і Timer1 можуть бути використані під час сну режимі.Таким основному я буду використовувати Timer1's перервати розбудити ПІК після певної кількості часу.

Взагалі мене дизайн буде наступним:

Після 10 мс сну, я буду перевіряти різні порти для певної напруги.Оскільки цей пристрій захисту від напруги в діапазоні> 4,5 V, я вимкнути живлення для виводу, якщо він перевищує цю напругу.Напруга буде перевірятися кожні 10 мс.

Крім того, ви думаєте, 1 МГц підходить для цього завдання?Я можу піти ще нижче?

Спасибо!

 
Ну, я не зустрів цю ПІК особисто

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Посмішка" border="0" />

але багато мікроконтролери ПІК відключає всі годинники і периферія під час сну, за винятком тих, чи раби, чи асинхронним ...Тому, можливо, таймер 1 продовжує працювати, якщо асинхронної осцилятора дозволити ....Будь ласка, перевірте цього питання ...

також!багато ОСТО могли б працювати з вторинним години!(як це асинхронні timer1 різне) так, він може працювати на більш низьких частотах при цьому виснажливої роботи.але може отримати якнайшвидший, коли це потрібно!Timer1 асинхронних осцилятора зазвичай використовується з 32,768 кГц кристала (так ви отримаєте одну другу графу 15 біта), але він каже, він може працювати до 200KHz ...Може бути, це могло б допомогти ...Нарешті я бачив ПОС (pic18f46j50), які мають внутрішні РТК, який не буде вимкнено, а ПІК спить ...Може бути, ваша є щось подібне, які можуть бути корисними ...

сподіваюся, що це допоможе, прошу пробачення за мій поганий англійська ...

 
M3GAPL3X пише:

...
але специфікації говорить, що тільки Timer0 є інвалідом і Timer1 можуть бути використані під час сну режимі.
 
Дякуємо за відповіді, хлопці.

У специфікації, він говорить наступне:

"Вступаючи в сплячий режим або з Запуск або холостому режимі
не потрібно перемикання годинник.Це тому, що немає
Годинники необхідно після того, контролер має вступив
Спати.Якщо вибрати WDT, джерело LFINTOSC

буде продовжувати функціонувати. Якщо Timer1 осциляторвключений, він також буде продовжувати працювати ".Однак я думаю, з тим щоб використовувати цю функцію, але мені потрібно буде використовувати зовнішній кристал навіть взяти участь у цій функції.

І так, всі внутрішні годинники вимикається, коли ПІК знаходиться в режимі сну.Спасибо GSM за це і спасибі за роз'яснення RYU Таймер 1 години під час сну режимі.

Я міг би піти іншим шляхом для моєї конструкції з тих пір я не можу робити будь-яких змін зовнішнього покласти кристал на таймер 1.Я не можу згадати жодного іншого способу розбудити ПІК із сплячого режиму кожні 10 мс без таймера собаки годинник.

 
Чому ви не хочете використовувати сторожовий таймер?Це звичайний спосіб прокинутися пристрою.

 
Я буду реалізації таймера в цьому пристрої.Я думала, що можна було б краще замість використання таймера буду пристрій.

Завдяки GSM!Додано через 1 годину 14 хвилин:Ось мій код.Це гарний спосіб реалізації таймера?

Код:/ / LFINTOSC включається автоматично, якщо WDT включений.
У нашому випадку, WDTEN = 0 і WDTCON.SWDTEN = 1# Включити <p18f14k50.h>/ / Pragma кодів

# Pragma конфігурації FOSC = IRC / / дозволити внутрішнім генератором

# Pragma конфігурації WDTEN = Off / / таймер буде програмним керуванням

# Pragma конфігурації WDTPS = 256 / / 1:128 postscalar для таймера
Основними Void ()

(

TRISC = 0x00; / / C встановити всі порти як виходиWhile (1)

(

WDTCONbits.SWDTEN = 1; / / включити таймерSleep (); / / CPU сну.
Пробудження, коли Watchdog overlfows

LATC ^ = 0xFF; / / Коли таймер переповнення, загоряються всі світлодіоди

WDTCONbits.SWDTEN = 0 / / вимкнути таймер

)

)
 
, Що виглядає добре, але conserse влади в той час як в сплячий режим, переконайтеся, що ви відключіть усі периферійні пристрої.

 
Ок зробимо.Дякуємо за всі ваші хлопці допомогу.Я багато чому навчився через весь цей процес і, ймовірно, є ще питання.Ось короткий Світлодіодний лічильник я зробив з Watchdog в 1 секунду, якщо хто потребує допомоги з командою

Код:/ / LFINTOSC включається автоматично, якщо WDT включений.
У нашому випадку, WDTEN = 0 і WDTCON.SWDTEN = 1# Включити <p18f14k50.h>/ / Pragma кодів

# Pragma конфігурації FOSC = IRC / / дозволити внутрішнім генератором

# Pragma конфігурації WDTEN = Off / / таймер буде програмним керуванням

# Pragma конфігурації WDTPS = 256 / / 1:256 postscalar для Watchdog, це дасть близько 1 секундна затримка
Основними Void ()

(

непідписаних х = 0;

TRISC = 0x00; / / C встановити всі порти як виходиWhile (1)

(

WDTCONbits.SWDTEN = 1; / / включити таймерSleep (); / / сну протягом 1 секунди

X ; / / приросту змінна х/ / Перевіримо, якщо змінна х до 15 років

(х <= 15)

(

LATC = X;

)

зе / / якщо старше 15 років, скидання LATC і змінної X і почати все спочатку

(

LATC = 0;

X = 0;

)

WDTCONbits.SWDTEN = 0; / / відключити сторожовий таймер

)

)

 
Ви повинні перемістити рядок:
"WDTCONbits.SWDTEN = 0; / / відключити сторожовий таймер"
між рядків "Sleep ();" і "Х ".Ви хочете вимкнути таймер перед виконанням вашого коду.З Вашого існуючого коду він не буде робити різниці тому що ваш код буде зроблено задовго до того, сторожовий таймер часу очікування.Однак, якщо ви додасте в свій код ви можете знайти сторожовий таймер часу очікування, перш ніж повернутися на сон, інструкція.У цьому випадку процесор буде скинутий.

 
Будуть робити на мій код з затримкою 10 мс.Ще раз спасибі!Додано після 23 хвилин:Схоже, що WDT очищає сама автоматично, коли Sleep () інструкція відбувається.Це те, що сказано в специфікації:WDT іочищаються postscaler, коли будь-яке з наступних подій

the

місце: спати або CLRWDT інструкція виконується,

IRCF біти регістра OSCCON змінені або
Годинники провал ставсяДодано через 45 хвилин:Інший швидкий питання я також хотів би зробити деякі ADC ПІК, коли спить.Чи можу я запустити таймер WDT години та години АЦП (FRC) в режимі сну в той же час?

 
M3GAPL3X пише:

Схоже, що WDT очищає сама автоматично, коли Sleep () інструкція відбувається.
Це те, що сказано в специфікації:

WDT і postscaler очищаються при виконанні будь-якого з наступних подій: сон або CLRWDT інструкція виконується
 
Завдяки GSM.Ось моє розташування моєї програми до цих пір:

WDT налаштування програмного забезпечення контрольованої
Використання 1:2, пост-скалярних
Створити глобальну змінну лічильник

Початок Основна програма
Поставити RC0 як внесок в контроль комутатора за допомогою TRISC
Початок назавжди а петля
Увімкніть сторожовий таймер
Запустіть AtoD яка використовує FRC як годинник почати діяти в сплячий режим (вимкнути, коли зробив)
Перейдіть в режим сну
Вимкніть таймер Watchdog
Перевірка контактних RC0, щоб побачити, якщо натиснута, якщо так, то приріст лічильник, якщо ні, то лічильник 0
Робіть це назавжди

Як це логіка?Додано після 23 хвилин:Ось мій код.Я повинен перевірити це, як я не відладчик на моїй на даний момент.Це для перетворення AtoD.Будь-які натяки або поради Буду вдячний.

Код:AtoD Void (Порожнеча)

(

/ / 1.
Налаштувати порт

/ / Вимкнення драйвера контактний вихідний RC0, RC1 і RC3

TRISC = 0b00001011;/ / Налаштувати Пальці як аналоговий

Ansel = 0b10110000 / / RC3, RC1 і RC0 встановити як аналогового Pins/ / Список налаштувати напруга/ / (Позитивне опорне напруга буде надходити з VREF PIN-код) - на 01

ADCON1bits.PVCFG1 = 0;

ADCON1bits.PVCFG1 = 1;/ / Негативне опорне напруга буде надходити з VREF-контактний - на 01

ADCON1bits.NVCFG1 = 0;

ADCON1bits.NVCFG1 = 1;/ / SELECT перетворення каналів АЦП

ADCON0bits.CHS3 = 0; / / SELECT RC3 біт першого (0111)

ADCON0bits.CHS2 = 1;

ADCON0bits.CHS1 = 1;

ADCON0bits.CHS0 = 1;/ / Вибір формату результату

ADCON2bits.ADFM = 0; / / лівому краю/ / Вибір затримки придбання (16 TADS - 110)

ADCON2bits.ACQT2 = 1;

ADCON2bits.ACQT2 = 1;

ADCON2bits.ACQT2 = 0;/ / Включення модуля АЦП

ADCON0bits.ADON = 1;/ / 5.
Початок перетворень, встановивши GO / Вчинено розрядні

ADCON0bits.GO_DONE = 1; / / Примітка: біт автоматично очищається від устаткування, коли відбувається перетворенняякщо (ADCON0bits.GO_DONE = 0) / / опитування GODONE прапор, щоб побачити, якщо перетворення виконується для RC3

(

/ / Перевіряємо, якщо результат більше КІЛЬКІСТЬ ВИДІВ

)ADCON0bits.ADON = 0;

)

 

Welcome to EDABoard.com

Sponsor

Back
Top