режим sleep в pic16f876a - Страница 2 - Форум Picbasic.ru
Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 2 из 2«12
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » режим sleep в pic16f876a (погружение контроллера в режим сна)
режим sleep в pic16f876a
mikhail09p Дата: Вт, 10.12.2013, 19:15  |                                                                                                                Сообщение # 16
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 495
Репутация: 10   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Цитата ADMIN ()
не пытался практически, разобраться с этим, так как не было нужды
А я разобрался, так как была нужда.
Ещё раз:
Проверяем, есть ли питание, если нет, то ПИК засыпает на 2-3 (2,3 в книге) секунды, потом просыпается, идёт на начало программы, опять проверяет, есть ли питание... Он периодически просыпается! И в этом режиме потребляет, в зависимости от времени выполнения проверки питания или чего ещё микроамперы. Минимум я добивался практически 40 - 80 микроампер. А WDT я выключал, с ним не работает...
ЯНДЕКС Дата: 10.12.2013
tesla88 Дата: Вт, 10.12.2013, 19:57  |                                                                                                                Сообщение # 17
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 121
Репутация: 0   ±
Замечания:   ±
На сайте с 20.11.2010

Статус: Offline

ну во первых огромное спасибо за ссылки (попробуем заказать),  mikhail09p можешь весь проект продемонстрировать (думаю будет весьма полезно),  кстати вопрос - а 'Power' и 'р' это у тебя просто переменные? просто без листинга программы несовсем понятно.
и такой вопрос - в протеусе столкнулся с таким моментом - при эмуляции работы микросхемы l297 не работает её внутренний гениратор , и на выходе к l298 приходит по три импульса на каждый шаг, уже третий час туплю , не могу разобраться почему же так происходит . скрин прилагаю.

Добавлено (10.12.2013, 19:57)
---------------------------------------------
mikhail09p я сейчас проверил свой код с отключенным WDT , программа при входе в спячку засыпает на совсем, а вот со включённым   WDT прекрасно работает , ну по крайней мере в протеусе
вот код с последними изменениями
;-------------------------------------------------------------------------------
;**** Added by Fuse Configurator ****
; Use the Fuse Configurator plug-in to change these settings

Device = 16F876A
Declare Xtal = 4 ' ЧАСТОТА КВАРЦА 4-мГ

    Declare Reminders Off 
Config CP_OFF, DEBUG_OFF, WRT_OFF, CPD_OFF, LVP_ON, PWRTE_OFF, WDTE_ON, XT_OSC, BOREN_ON, CP_OFF, WDT_ON, WRT_OFF
    Declare Reminders On 

' КОНФИГУРАЦИЯ ПОРТОВ 
CMCON = %11111111 
TRISA = %11101111 
PORTA = %00000000 
PORTA = %00000000 
PORTB = %00000000 
TRISB = %00000000
PORTC = %00000000
TRISC = $00000000
TRISA.4 = 0

' ИНИЦИАЛИЗАЦИЯ LCD 16*2
Declare  LCD_Type ALPHA  
Declare  LCD_DTPin  PORTC.4  
Declare  LCD_ENPin  PORTC.3  
Declare  LCD_RSPin  PORTC.2  
Declare  LCD_Interface  4   
Declare  LCD_CommandUs  200   
Declare  LCD_DataUs  50  
Declare  LCD_Lines   2

DEFINE ADC_BITS 8 ' Set number of bits in result 
DEFINE ADC_CLOCK 3 ' Set clock source (rc = 3) 
DEFINE ADC_SAMPLEUS 50 ' Set sampling time in microseconds
TRISA = 255 ' Set PORTA to all input 
ADCON1 = 2 ' PORTA is analog 
ADCON0 = %11000001 

' ПОРТЫ А

Symbol EN = PORTA.4

' ПОРТЫ B ВЫХОДЫ НА МОТОРЫ
Symbol ENX = PORTB.0
Symbol ENY = PORTB.1 
Symbol DIRX = PORTB.2
Symbol STEPX = PORTB.3 
Symbol DIRY = PORTB.4 
Symbol STEPY = PORTB.5
Symbol led = PORTB.6
Symbol D2 = PORTB.7
 
' ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ 
Dim R1 As Word
Dim R2 As Word
Dim R3 As Word
Dim R4 As Word

 Cls  
' ОСНОВНАЯ ПРОГРАММА
MAIN:
led = 1
' ОПРОС ДАТЧИКОВ
R1 = ADIn 0
DelayUS 30
R2 = ADIn 1
DelayUS 30
R3 = ADIn 2
DelayUS 30
R4 = ADIn 3
DelayUS 30
DelayUS 1 ' Wait for 1us 
led = 0
' ВЫВОД ДАННЫХ НА LCD
Print At 1, 1, Dec R1, "     " 
Print At 1, 10, Dec R2, "     "   
Print At 2, 1, Dec R3, "     "
Print At 2, 10, Dec R4, "     "
' сравнение показаний 

If R1 > R2 + 1000 Then 
GoTo X_P
ElseIf R1 < R2 - 1000 Then
GoTo X_L
ElseIf R1 < R2 + 1000 And R1 > R2 - 1000 Then 
GoTo SL
End If

GoTo MAIN

' ШАГИ МОТОРА ПО ОСИ Х
X_P:
ENX = 1
DIRX = 0
STEPX = 1
DelayMS 50 
ENX = 0
STEPX = 0
DIRX = 0
GoTo MAIN

X_L:
ENX = 1
DIRX = 1
STEPX = 1
DelayMS 50 
ENX = 0
STEPX = 0
DIRX = 0
GoTo MAIN

' ШАГИ МОТОРА ПО ОСИ Y
Y_P:

GoTo MAIN
Y_L:

GoTo MAIN
' СОН НА 10 СЕК.
SL:
Sleep 1 '
led = 1
GoTo MAIN
End
в таком ключе всё прекрасно и потребление 165 мкА, осталось на железе проверить)))

Прикрепления: 7982755.png(376Kb)
mikhail09p Дата: Вт, 10.12.2013, 21:07  |                                                                                                                Сообщение # 18
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 495
Репутация: 10   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Цитата tesla88 ()
я сейчас проверил свой код с отключенным WDT , программа при входе в спячку засыпает на совсем, а вот со включённым   WDT прекрасно работает
Вот чёрт побери! Я столько игрался с этим! Наверное, компиляторы разные или звёзды так стали... Вот весь проэкт, пожалуйста.  'Power' и 'р' конечно переменные. Там две программы, одна - просто программируемый терморегулятор, а другая - то же, но управляет клапаном воды. В зависимости от разницы установленной и реальной температуры умноженоой на множитель клапан открыт или закрыт. Обогрев 2-го этажа в данный момент. Работает в настоящее время. Временные интервалы уже не помню...

tesla88, ещё, посмотрите, может WDT просто сбрасывает контроллер?..
Прикрепления: Prog_Thermo628_.rar(112Kb)

Сообщение отредактировал mikhail09p - Вт, 10.12.2013, 21:09
tesla88 Дата: Вт, 10.12.2013, 22:54  |                                                                                                                Сообщение # 19
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 121
Репутация: 0   ±
Замечания:   ±
На сайте с 20.11.2010

Статус: Offline

Вы правы, он сбрасывался всякий раз пока не спал ( во время выполнения корректировки ), но после вставки команды CLRWDT  всё встало на свои места -
 
MAIN:
led = 1
' ОПРОС ДАТЧИКОВ
R1 = ADIn 0
DelayUS 30
R2 = ADIn 1
DelayUS 30
R3 = ADIn 2
DelayUS 30
R4 = ADIn 3
DelayUS 30
  • Clrwdt ' программный сброс таймера до его переполнения

DelayUS 1 ' Wait for 1us 
led = 0
' ВЫВОД ДАННЫХ НА LCD
Print At 1, 1, Dec R1, "     " 
Print At 1, 10, Dec R2, "     "   
Print At 2, 1, Dec R3, "     "
Print At 2, 10, Dec R4, "     "
' сравнение показаний 

If R1 > R2 + 1000 Then 
GoTo X_P
ElseIf R1 < R2 - 1000 Then
GoTo X_L
ElseIf R1 < R2 + 1000 And R1 > R2 - 1000 Then 
GoTo SL
End If
GoTo MAIN

прилагаю осциллограммы

     
сейчас вроде всё работает, ну по крайней мере в протеусе.
на вопрос "А зачем вообще со сном заморачиваться? Сколько мы сьэкономим в данном случае, 1мА? Если уж энергии хватает на шаговые двигатели, то на работу программы уж подавно хватит. "
отвечу так, - контроллер и драйвер с моторами работают от маленькой солнечной батареи с маленьким аккумулятором  ( дабы снизить вес и стоимость комплекса) , моторы работают только когда происходит корректировка, а всё остальное время батарея питает мк и заряжает АКБ (батарея на 6 вольт 10 мА, схема драйвера и контроллер не должны превышать 6-8 мА.
 так как акб тоже должен чем то заряжаться). вот гдето так) rah
Прикрепления: 0953567.png(243Kb) · 9366173.png(395Kb) · 6930880.png(335Kb)
mnbv Дата: Ср, 11.12.2013, 12:31  |                                                                                                                Сообщение # 20
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 22
Репутация: 0   ±
Замечания:   ±
На сайте с 09.03.2011

Статус: Offline

Делаю немного по-другому: WDT всегда, если не забуду, выключаю. Перед sleep включаю его (WDTCON.0 = 1), затем снова отключаю. Для минимизации тока потребления надо отключать модули, например BOD (BOREN). Потребление составит единицы микроампер.
tesla88 Дата: Ср, 11.12.2013, 15:39  |                                                                                                                Сообщение # 21
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 121
Репутация: 0   ±
Замечания:   ±
На сайте с 20.11.2010

Статус: Offline

спасибо за пример, учтём)
вот только не как не могу разобраться как pic16f876a  от внетреннего генератора тактировать? возможно ли это вообще?
   и если я правильно понял,  то его можно только от внешней RC  цепи запускать, так как intosc  я не нашёл в мануале(((
Прикрепления: 0122262.png(38Kb)

Сообщение отредактировал tesla88 - Ср, 11.12.2013, 15:49
ADMIN Дата: Ср, 11.12.2013, 16:11  |                                                                                                                Сообщение # 22
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1097
Репутация: 24   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Просто у этого МК нет внутреннего генератора
mikhail09p Дата: Ср, 11.12.2013, 20:50  |                                                                                                                Сообщение # 23
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 495
Репутация: 10   ±
Замечания:   ±
На сайте с 04.05.2010

Статус: Offline

Цитата mnbv ()
Для минимизации тока потребления надо отключать модули, например BOD (BOREN)
Согласен. Это касается также и модуля АЦП в частности. Symbol ADON = ADCON0.0     ' Включение модуля АЦП
ADON = 0
tesla88 Дата: Чт, 12.12.2013, 12:26  |                                                                                                                Сообщение # 24
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 121
Репутация: 0   ±
Замечания:   ±
На сайте с 20.11.2010

Статус: Offline

может посоветуете какой контроллер лучше взять , чтобы 4 канала ADC было, ножек как у 16ф628 и тактировался чтоб от внутренней рс цепи?
anatol Дата: Чт, 12.12.2013, 18:12  |                                                                                                                Сообщение # 25
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 535
Репутация: 13   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Ну ленивые.. Мне нравится PIC16F1847. - 4 канала шим, 5 таймеров ..http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en549760
Даташит http://ww1.microchip.com/downloads/en/DeviceDoc/40001453E.pdf
Божеская цена. Доступен. Фишек надолго разбираться хватит. В Протоне существует. wink
tesla88 Дата: Чт, 12.12.2013, 19:06  |                                                                                                                Сообщение # 26
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 121
Репутация: 0   ±
Замечания:   ±
На сайте с 20.11.2010

Статус: Offline

Большое спасибо anatol, я и сам сегодня перелопатил гору пиков, но такой вариант не встречал ( дело не в лени, просто знающие люди могут подсказать оптимальный и проверенный вариант, например как вы).
Форум Picbasic.ru » Программирование МК » Proton PicBasic » режим sleep в pic16f876a (погружение контроллера в режим сна)
Страница 2 из 2«12
Поиск: