режим sleep в pic16f876a
|
|
mikhail09p |
Дата: Вт, 10.12.2013, 19:15 | Сообщение # 16 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Цитата ADMIN ( ) не пытался практически, разобраться с этим, так как не было нужды А я разобрался, так как была нужда. Ещё раз: Проверяем, есть ли питание, если нет, то ПИК засыпает на 2-3 (2,3 в книге) секунды, потом просыпается, идёт на начало программы, опять проверяет, есть ли питание... Он периодически просыпается! И в этом режиме потребляет, в зависимости от времени выполнения проверки питания или чего ещё микроамперы. Минимум я добивался практически 40 - 80 микроампер. А WDT я выключал, с ним не работает...
|
|
|
|
tesla88 |
Дата: Вт, 10.12.2013, 19:57 | Сообщение # 17 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
114
Замечания:
±
На сайте с 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 мкА, осталось на железе проверить)))
|
|
|
|
mikhail09p |
Дата: Вт, 10.12.2013, 21:07 | Сообщение # 18 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Цитата tesla88 ( ) я сейчас проверил свой код с отключенным WDT , программа при входе в спячку засыпает на совсем, а вот со включённым WDT прекрасно работает Вот чёрт побери! Я столько игрался с этим! Наверное, компиляторы разные или звёзды так стали... Вот весь проэкт, пожалуйста. 'Power' и 'р' конечно переменные. Там две программы, одна - просто программируемый терморегулятор, а другая - то же, но управляет клапаном воды. В зависимости от разницы установленной и реальной температуры умноженоой на множитель клапан открыт или закрыт. Обогрев 2-го этажа в данный момент. Работает в настоящее время. Временные интервалы уже не помню...
tesla88, ещё, посмотрите, может WDT просто сбрасывает контроллер?..
Сообщение отредактировал
mikhail09p - Вт, 10.12.2013, 21:09
|
|
|
|
tesla88 |
Дата: Вт, 10.12.2013, 22:54 | Сообщение # 19 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
114
Замечания:
±
На сайте с 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 мА. так как акб тоже должен чем то заряжаться). вот гдето так)
|
|
|
|
mnbv |
Дата: Ср, 11.12.2013, 12:31 | Сообщение # 20 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
17
Замечания:
±
На сайте с 09.03.2011
Статус:
Offline
|
Делаю немного по-другому: WDT всегда, если не забуду, выключаю. Перед sleep включаю его (WDTCON.0 = 1), затем снова отключаю. Для минимизации тока потребления надо отключать модули, например BOD (BOREN). Потребление составит единицы микроампер.
|
|
|
|
tesla88 |
Дата: Ср, 11.12.2013, 15:39 | Сообщение # 21 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
114
Замечания:
±
На сайте с 20.11.2010
Статус:
Offline
|
спасибо за пример, учтём) вот только не как не могу разобраться как pic16f876a от внетреннего генератора тактировать? возможно ли это вообще? и если я правильно понял, то его можно только от внешней RC цепи запускать, так как intosc я не нашёл в мануале(((
Сообщение отредактировал
tesla88 - Ср, 11.12.2013, 15:49
|
|
|
|
ADMIN |
Дата: Ср, 11.12.2013, 16:11 | Сообщение # 22 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Просто у этого МК нет внутреннего генератора
|
|
|
|
mikhail09p |
Дата: Ср, 11.12.2013, 20:50 | Сообщение # 23 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Цитата mnbv ( ) Для минимизации тока потребления надо отключать модули, например BOD (BOREN) Согласен. Это касается также и модуля АЦП в частности. Symbol ADON = ADCON0.0 ' Включение модуля АЦП ADON = 0
|
|
|
|
tesla88 |
Дата: Чт, 12.12.2013, 12:26 | Сообщение # 24 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
114
Замечания:
±
На сайте с 20.11.2010
Статус:
Offline
|
может посоветуете какой контроллер лучше взять , чтобы 4 канала ADC было, ножек как у 16ф628 и тактировался чтоб от внутренней рс цепи?
|
|
|
|
anatol |
Дата: Чт, 12.12.2013, 18:12 | Сообщение # 25 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
471
Замечания:
±
На сайте с 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 Божеская цена. Доступен. Фишек надолго разбираться хватит. В Протоне существует.
|
|
|
|
tesla88 |
Дата: Чт, 12.12.2013, 19:06 | Сообщение # 26 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
114
Замечания:
±
На сайте с 20.11.2010
Статус:
Offline
|
Большое спасибо anatol, я и сам сегодня перелопатил гору пиков, но такой вариант не встречал ( дело не в лени, просто знающие люди могут подсказать оптимальный и проверенный вариант, например как вы).
|
|
|
|