Страница 2 из 2

Re: Встраеваемый ИК пульт управления (PIC+Atmel=проблема)

Добавлено: 30 июн 2014, 15:42
Jman
Просто мне кажется, что в sleep mode намного дольше хватало бы батарей питания. Можно же его в существующий код внести, как поправку? На Си примерно понимаю как :

// Инициализация режима сна
set_sleep_mode (SLEEP_MODE_PWR_DOWN);
while(1)
{
sleep_enable(); // разрешение режима сна
sleep_cpu(); // активация режима сна
}

На асме не знаю как... =(

Re: Встраеваемый ИК пульт управления (PIC+Atmel=проблема)

Добавлено: 01 июл 2014, 00:02
rhf-admin
Попробуй как-то так:
1) добавляем в шапку
.def Sleep_Counter=r22

2) после org 0 вставляем

Код: Выделить всё

      rjmp  Init       ; reset
      reti             ; INT0
      reti             ; Pin Change
      reti             ; Timer (переход к обработч.прерывания от таймера)
      reti             ; EEPROM
      reti             ; comparator
      reti             ; timer compare match A
      reti             ; timer compare match B
      reti             ; watchdog
      reti             ; ADC
3) Вот этот кусок:

Код: Выделить всё

Scan: sbis PINB,4         ; если на входе PB4 низкий уровень - нажата КН1
      rjmp Tx_CMD1
      sbis PINB,2         ; если на входе PB2 низкий уровень - нажата КН2
      rjmp Tx_CMD2
      sbis PINB,0         ; если на входе PB0 низкий уровень - нажата КН3
      rjmp Tx_CMD3
      sbis PINB,1         ; если на входе PB1 низкий уровень - нажата КН4
      rjmp Tx_CMD4
      sbr  MBC,0b00100000 ; установить toggle bit в 1 (первое нажатие)
      rjmp Scan
меняем на вот такой:

Код: Выделить всё

          ldi w, 0b00010111
          out PCMSK,w
          ldi w,0b00100000
          out GIMSK,w
Scan:  sei
         ldi Sleep_Counter, 5 ; устанавливаем счётчик на 5 сканов (если за это время ничего не произойдёт - уснём)
Test_Sleep:
          dec Sleep_Counter
          brne Test_Buttons  ; если ещё не сделали 5 сканов - продолжаем сканить кнопки
          ldi w,0b00100000
          out MCUCR,w        ; разрешаем засыпание
          sleep                    ; засыпаем
          clr w
          out MCUCR,w        ; запрещаем засыпания
          ldi Sleep_Counter, 5  ; устанавливаем счётчик на 5 сканов
Test_Buttons:
      sbis PINB,4         ; если на входе PB4 низкий уровень - нажата КН1
      rjmp Tx_CMD1
      sbis PINB,2         ; если на входе PB2 низкий уровень - нажата КН2
      rjmp Tx_CMD2
      sbis PINB,0         ; если на входе PB0 низкий уровень - нажата КН3
      rjmp Tx_CMD3
      sbis PINB,1         ; если на входе PB1 низкий уровень - нажата КН4
      rjmp Tx_CMD4
      sbr  MBC,0b00100000 ; установить toggle bit в 1 (первое нажатие)
      rjmp Test_Sleep
а вот этот:

Код: Выделить всё

      TxRC: sbrc  MBC,7      ; Startbit 1. Если бит равен 1 - выполняется
вот на такой:

Код: Выделить всё

TxRC: cli
      sbrc  MBC,7      ; Startbit 1. Если бит равен 1 - выполняется

Re: Встраеваемый ИК пульт управления (PIC+Atmel=проблема)

Добавлено: 01 июл 2014, 15:43
Jman
Спасибо огромное!!! Повставлял ваши куски кода. Компильнул в АВР студио. Пока полет нормальный. Поставил в холдер новую баталерку. Будем смотреть, как в sleep mode энергия расходуется.

Re: Встраеваемый ИК пульт управления (PIC+Atmel=проблема)

Добавлено: 01 июл 2014, 16:48
rhf-admin
Интересно, кстати, работает или нет. Можешь потребление в sleep режиме измерить и не в sleep режиме (с какой-нибудь нажатой кнопкой).

Re: Встраеваемый ИК пульт управления (PIC+Atmel=проблема)

Добавлено: 02 июл 2014, 12:47
Jman
Все работает!
Потребление в sleep mode:
режим покоя - 800 мкА;
кнопка нажата - 5,5 мА (резистор в цепи ИК-диода я уменьшил до 22 Ом);

*******************************************************************************************************
Потребление с прошивкой RC-5
режим покоя - 3 мА;
кнопка нажата - 5,5 мА (резистор в цепи ИК-диода я уменьшил до 22 Ом);
*******************************************************************************************************
Вот такие мои замеры. Залил прошиву с sleep mode, ибо она рациональнее, тем более под батарейку CR2032.

Re: Встраеваемый ИК пульт управления (PIC+Atmel=проблема)

Добавлено: 02 июл 2014, 13:39
rhf-admin
То есть прошивка со sleep режимом в покое жрёт 800 мкА, а без него в покое жрёт 3 мА? так?
Кстати, это у нас получился sleep-режим, который называется IDLE, когда только CPU останавливается.
А если изменить этот кусок:

Код: Выделить всё

          ldi w,0b00100000
          out MCUCR,w        ; разрешаем засыпание
          sleep                    ; засыпаем
на вот такой:

Код: Выделить всё

          ldi w,0b00110000  ; режим Power Down
          out MCUCR,w        ; разрешаем засыпание
          sleep                    ; засыпаем
то получится режим Power Down и потребление должно стать ещё меньше, поскольку тут даже генератор стопится и вообще все модули, кроме асинхронных...

Re: Встраеваемый ИК пульт управления (PIC+Atmel=проблема)

Добавлено: 02 июл 2014, 14:04
Jman
rhf-admin писал(а):То есть прошивка со sleep режимом в покое жрёт 800 мкА, а без него в покое жрёт 3 мА? так?
Совершенно верно. Попробую намедни перекомпильнуть. Можете мне дать исходник, я подправлю? Затем снова проведу замеры.

Re: Встраеваемый ИК пульт управления (PIC+Atmel=проблема)

Добавлено: 02 июл 2014, 14:07
Jman
Прикрепляю свою печатную плату в формате sLayot5. Может кому пригодится.

Re: Встраеваемый ИК пульт управления (PIC+Atmel=проблема)

Добавлено: 02 июл 2014, 21:40
rhf-admin
Вот исправленный исходник и перекомпиленная прошивка:
RC-5_simple.zip
режим Power Down
(2.77 КБ) 543 скачивания