режим sleep в pic16f876a
|
|
tesla88 |
Дата: Вт, 10.12.2013, 09:58 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
114
Замечания:
±
На сайте с 20.11.2010
Статус:
Offline
|
Всем большой привет!!! начал я тут проект по позиционированию солнечной батареи вслед за солнцем, и возникла проблема со спящим режимом , компилятор ругается всё время на команду sleep, может кто подскажет в чём косяк? прилагаю код с коментами и срин - Device 16F876A ' КОНФИГУРАЦИИ ОБОРУДОВАНИЯ И МОДУЛЕЙ Declare Xtal = 4 ' ЧАСТОТА КВАРЦА 4-мГ
Declare Reminders Off Config HS_OSC , WDT_ON , PWRTE_ON , BODEN_OFF , LVP_OFF , CP_OFF , DEBUG_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 A1 = PORTB.0 Symbol B1 = PORTB.1 Symbol C1 = PORTB.2 Symbol D1 = PORTB.3 Symbol A2 = PORTB.4 Symbol B2 = PORTB.5 Symbol C2 = PORTB.6 Symbol D2 = PORTB.7 ' ОБЪЯВЛЕНИЕ ПЕРЕМЕННЫХ Dim R1 As Word Dim R2 As Word Dim R3 As Word Dim R4 As Word
Cls ' ОСНОВНАЯ ПРОГРАММА MAIN: ' ОПРОС ДАТЧИКОВ R1 = ADIn 0 R2 = ADIn 1 R3 = ADIn 2 R4 = ADIn 3 DelayUS 1 ' Wait for 1us ' ВЫВОД ДАННЫХ НА 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, " " DelayMS 1000 ' ШАГИ МОТОРА PORTC.1 = 1 PORTB = %00000001 DelayMS 100 PORTB = %00000010 DelayMS 100 PORTB = %00000100 DelayMS 100 PORTB = %00001000 DelayMS 100 PORTB = %00000000 PORTC.1 = 0 ' СОН НА 10 СЕК. Sleep 10 ' GoTo MAIN End
|
|
|
|
tesla88 |
Дата: Вт, 10.12.2013, 10:21 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
114
Замечания:
±
На сайте с 20.11.2010
Статус:
Offline
|
А самое интересное , что в протеусе всё работает, возникает вопрос почему компилятор ругается??? фаил протеуса прилагаю)
Сообщение отредактировал
tesla88 - Вт, 10.12.2013, 10:21
|
|
|
|
ADMIN |
Дата: Вт, 10.12.2013, 11:17 | Сообщение # 3 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Он не ругается, а предупреждает о том, что собака выключена и МК, возможно, никогда не проснется. В реальности не будет работать, скорей всего.
|
|
|
|
tesla88 |
Дата: Вт, 10.12.2013, 11:22 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
114
Замечания:
±
На сайте с 20.11.2010
Статус:
Offline
|
Всмысле в железе программа работать не будет? я правильно понял, и если да, то по какой причине?
|
|
|
|
ADMIN |
Дата: Вт, 10.12.2013, 11:38 | Сообщение # 5 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Я не утверждаю, конечно, но всякое может быть. Я, например, не до конца понимаю, какой счетчик считает время сна.
|
|
|
|
tesla88 |
Дата: Вт, 10.12.2013, 12:11 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
114
Замечания:
±
На сайте с 20.11.2010
Статус:
Offline
|
Вообще задумка такая - считывать показания с фоторезисторов по двум осям , если значения резисторов примерно равны (разброс показаний устанавливается экспериментально), то погрузить контроллер в режим спячки на определённое время, после пробуждения опять опросить датчики и если их показания отклонились друг от друга на определённую величину, то запускать корректировку положения панели при помощи шаговых моторов. это один вариант , второй такой же , но только пробуждение контроллера происходит по прерыванию от ADC ( то есть если показания на одном канале изменились на определённую величину то выйти из спячки - опросить остальные каналы - сравнить их и произвести корректировку), но вот как сделать прерывания по изменению показаний ацп на определённую величину я увы пока не знаю, может кто то делал что то подобное?
|
|
|
|
ADMIN |
Дата: Вт, 10.12.2013, 12:27 | Сообщение # 7 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
по-моему, прерывания от изменения на входе АЦП не существует. Но можно все-таки и проверить вариант со Sleep
|
|
|
|
tesla88 |
Дата: Вт, 10.12.2013, 12:49 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Продвинутый
Сообщений:
114
Замечания:
±
На сайте с 20.11.2010
Статус:
Offline
|
я вот тоже начал думать что не существует, судя по этой вырезке из даташита:book: просто первый вариант более безжалостен к аккумулятору, а тут идёт борьба за каждый милиампер кстати вот такой вопрос - подскажите где на каком сайте можно заказать SMD КОНТРОЛЛЕРЫ (в частности pic16f876a) ???
Сообщение отредактировал
tesla88 - Вт, 10.12.2013, 12:53
|
|
|
|
mikhail09p |
Дата: Вт, 10.12.2013, 14:30 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Я вот так делал:
Device = 16F628A Xtal = 4
Config INTOSC_OSC_NOCLKOUT , MCLRE_OFF, WDT_Off , PWRTE_ON , BODEN_OFF , LVP_Off , CP_OFF
loop:'--------------------------------------------------------------------------------------------------------------------
If Power = 0 Then PORTA = %00010000 Sleep p = 0 GoTo loop Else If p = 0 Then DelayMS 2000 If Power = 0 Then loop p = 1 Print $FE,$40,$06,$09,$09,$06,$00,$00,$00,$00 '8 Ïîcëàòü íà ÆÊÈ êîìàíäó ñîçäàíèÿ çíàêà ãðàäóñà EndIf EndIf
Тут программа.....
Работает и сегодня. Да, потребляет около 50 микроампер.
Сообщение отредактировал
mikhail09p - Вт, 10.12.2013, 14:33
|
|
|
|
ADMIN |
Дата: Вт, 10.12.2013, 15:13 | Сообщение # 10 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Цитата tesla88 ( ) кстати вот такой вопрос - подскажите где на каком сайте можно заказать SMD КОНТРОЛЛЕРЫ (в частности pic16f876a) ???я я, в основном, заказываю в платане. там цены наиболее оптимальные. не подводили ни разу. касаемо вашего вопроса - вот что дал запрос на их сайте
mikhail09p, а по какому событию выход из sleep?
|
|
|
|
G2212 |
Дата: Вт, 10.12.2013, 15:14 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
9
Замечания:
±
На сайте с 06.11.2012
Статус:
Offline
|
подскажите где на каком сайте можно заказать SMD КОНТРОЛЛЕРЫ (в частности pic16f876a) ???
Например здесь - http://www.terraelectronica.ru/catalog....PageS=1
|
|
|
|
mikhail09p |
Дата: Вт, 10.12.2013, 15:41 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Пока Power = 0 то Sleep и переход в начало, а Else - задержка 2 сек., ещё раз проверка, не равняется ли Power нулю и дальше инициализация (у меня) ЖК дисплея, про что тоже тут на форуме обсуждалось и основная программа. Выложить полностью проект? Программируемый термостат (часы, в частности) для дома.
|
|
|
|
доцент2 |
Дата: Вт, 10.12.2013, 17:25 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
291
Замечания:
±
На сайте с 13.09.2011
Статус:
Offline
|
вот здесь точно есть и по умеренным ценам http://trt.ru. Сам делал заказ наложенным платяжом, пришло через неделю (движение в пути отслеживается по инету.)
|
|
|
|
ADMIN |
Дата: Вт, 10.12.2013, 17:38 | Сообщение # 14 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Цитата mikhail09p ( ) Пока Power = 0 то Sleep и переход в начало, а Else - задержка 2 сек., ещё раз проверка, не равняется ли Power нулю и дальше инициализация (у меня) ЖК дисплея, про что тоже тут на форуме обсуждалось и основная программа. Выложить полностью проект? Программируемый термостат (часы, в частности) для дома. Ну,структуру программы я понимаю. Мне непонятно следующее - в режиме sleep программа не выполняется, если я не ошибаюсь. Каким образом происходит проверка? Или sleep не так работает, или он не уходит туда. Мне непонятно. Если честно, то не пытался практически, разобраться с этим, так как не было нужды.
|
|
|
|
xvovanx |
Дата: Вт, 10.12.2013, 17:56 | Сообщение # 15 |
Группа:
Модераторы
Ранг:
Помогаю всем
Сообщений:
328
Замечания:
±
На сайте с 02.05.2013
Статус:
Offline
|
А зачем вообще со сном заморачиваться? Сколько мы сьэкономим в данном случае, 1мА? Если уж энергии хватает на шаговые двигатели, то на работу программы уж подавно хватит.
P.S.в предыдущем примере тоже не понял как схема просыпается из сна
Sleep p = 0 GoTo loop
если он уснул, то он не присвоит р=0 и не пойдет на начало цикла (если только где-нибудь в теле программы нет таймеров).
P.S.2. насчет предупреждений компилятора - и с зелеными и оранжевыми предупреждениями все работает и в симуляторе и в железе. При красном -увы, не будет компиляции.
Сообщение отредактировал
xvovanx - Вт, 10.12.2013, 17:59
|
|
|
|