Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Зависание

Сообщений 1 страница 30 из 159

1

Имеются два идентичных блока, которые используют одни и те же подпрограммы. Первый работает при установке флага от прерывания Timer1, а второй от Timer2  с внешним часовым кварцем. Проблема в том, что при выполнении подпрограммы, помеченной "проблема" наглухо зависает. Не понимаю, в чём дело. Может есть мысли. Весь проект : https://cloud.mail.ru/public/KQG9/qggqRnvUq

If T1 = 0 Then                                         
      Incr Coun_time
      If Coun_time = 3 Then
         If A = 1 Or A = 4 Then Gosub Getdatetime
         Decr Count_sleep
         If Count_sleep = 0 Then
            Set Sleep_flag
            Count_sleep = Sleep_scr
         End If
         Coun_time = 1
      End If

      Incr Coun                                           
      If Coun = 2 Then Gosub Get_humidity
      If Coun = 3 Then Gosub Gs_temp_davl
      If Coun = 4 Then Gosub Rasch_davl
      If Coun = 5 Then Gosub Rasch_higt_temp
      If Coun = 6 Then
         Coun = 1
         Gosub Sdvig_write_real
         Reset K1
      End If
      Set T1
   End If

   If T2 = 0 Then
      Gosub Getdatetime                               
      Gosub Alarm_check_time
      If Flag_alarm = 1 Then
         A = 200
         Cls
         Incr Count_alarm
         If Count_alarm = 9 Then
            Reset Flag_alarm
            Reset Count_alarm
            Reset Of_alarm
            A = 1
            Cls
            Count_alarm = 1
         End If
      End If

      Incr Coun1                                           
      If Coun1 = 3 Then Gosub Get_humidity
      If Coun1 = 4 Then Gosub Gs_temp_davl
      If Coun1 = 5 Then Gosub Rasch_davl              ' ПРОБЛЕМА
      If Coun1 = 6 Then Gosub Rasch_higt_temp
      If Coun1 = 7 Then
         Coun1 = 1
         Gosub Sdvig_write
         Reset K1
      End If
      Set T2
   End If

Отредактировано Tankor (2015-09-13 15:38:13)

0

2

Вы так открыто и без сомнений используете ассемблер (много вставок). Те регистры, которые задействуете - не сохраняете, вы уверены, что компилятор бэйсика их не использует и вы не портите данные его?
Так же нужно подсчитать количество переменных и окружение, чтобы памяти реально хватало.
А как вы определили, что ЭТО и есть проблемное место? ;)

+1

3

RDW написал(а):

Вы так открыто и без сомнений используете ассемблер (много вставок). Те регистры, которые задействуете - не сохраняете, вы уверены, что компилятор бэйсика их не использует и вы не портите данные его?
Так же нужно подсчитать количество переменных и окружение, чтобы памяти реально хватало.
А как вы определили, что ЭТО и есть проблемное место?

Закомментировал и исчезло. Понимаю, что данные портятся, отловить не могу. А сохранение регистров в основном теле разве необходимо? Знаю, что в прерывании надо. Может маячки на терминал расставить в подпрограмме Gosub Rasch_davl?

Отредактировано Tankor (2015-09-14 07:49:47)

0

4

RDW написал(а):

Так же нужно подсчитать количество переменных и окружение, чтобы памяти реально хватало.

Есть методика подсчёта?

0

5

Mrshilov написал(а):

Попробуйте отключать прерывания на время работы Rasch_davl. Сначала вообще, а если поможет, то выбрать конкретные.
А вообще не понятно, зачем часовой кварц и повторный расчет 0,5с и 8с. Частоты асинхронны - отстояние одного расчета от другого непостоянно. Да и зачем лишняя работа, лишний таймер и кварц, если идет борьба за миниатюризацию и сокращение кода.

Благодарю, попробую. Часовой кварц необходим для режима powerdown, чтоб проснуться- замер в массив и опять спать. Могу фото вечером выложить с экранчика ради чего всё это затевается. Можно конечно отказаться от замера на timer1 и перевести его на timer2, но 8 сек многовато. От таймера1 2 сек, на графиках это интереснее. Сократил код очень сильно по Вашим советам и теперь пока не актуален данные вопрос.. Очень помогло с 93 до 73 процентов.

Отредактировано Tankor (2015-09-14 11:40:34)

0

6

Tankor написал(а):

Есть методика подсчёта?

Методика - "на глаз".  :D
Считаем все dim-ы (с учетом типов), массивы, буфера, начальные настройки (hwstack, swstack, framesize), функции (если используем), стеки (которые сами используем).
Ну и прикидываем сколько свободного места остается (не впритык было).

0

7

RDW написал(а):

Методика - "на глаз".  
Считаем все dim-ы (с учетом типов), массивы, буфера, начальные настройки (hwstack, swstack, framesize), функции (если используем), стеки (которые сами используем).
Ну и прикидываем сколько свободного места остается (не впритык было).

Ну, как говориться, будем попробовать подсчитать.

0

8

Mrshilov написал(а):

Как-то не заметил режимов сна. Либо пропустил, либо код пока сырой. Но все равно тут вполне можно обойтись одним таймером, просто переключая прескалер. 8МГц/1024/65536=0,119 Гц, т.е. те же самые 8,4сек.

Да, код не дописан, поэтому режима сна ещё нет. Надо подумать по использованию одного счётчика. Пока довод только один. Просыпаться часто от таймера 2 -это лишний расход энергии. А при предполагаемых габаритах-это очень актуально.

0

9

Может пригодится, но это далеко не предел, можно добиться потребления МК < 1 мкА

TIMER2 может считать <=8 сек (от запыпания до просыпания), если хороший кварц, то довольно точно

Из режима Powerdown, TIMER2 не выведет, используйте PowerSave.

Не забудьте, что аппаратный контроль напряжения силами МК, потребляет > 50 мкА

Запущенный АЦП ~ 1,5 mA





Пониженое потребление МК

'===============================================================================
  $map       ' Получаем карту распределения памяти компилятором Bascom
  $regfile = "m328pdef.dat"       ' Используемый контроллер
  $crystal = 1000000       ' 1 МГц    , кварц для стабильной работы USART во всём диапазоне скоростей передачи и приёма
  $framesize = 32       'размер области используемой и необходимой для преобразований
  $hwstack = 40       ' Размер аппаратного стека
  $swstack = 16       ' Размер программного стека

'===============================================================================
'                  Узнаём причину сброса МК
'===============================================================================
  Dim Причина_сброса_мк As Byte
  Dim Регистр_причины_сброса As Byte

  !sts {Регистр_причины_сброса} , R0
  Причина_сброса_мк = Регистр_причины_сброса

'===============================================================================
'Всё включено ~ 2 mA

'~ 1.47 mA
'  Didr0.adc0d = 1
'  Didr0.adc1d = 1
'  Didr0.adc2d = 1
'  Didr0.adc3d = 1
'  Didr0.adc4d = 1
'  Didr0.adc5d = 1

'  Didr1.ain0d = 1
'  Didr1.ain1d = 1

'~ 930 мкA
  Ddrb = &B_1111_1111 : Portb = &B_0000_0000
  Ddrc = &B_1111_1111 : Portc = &B_0000_0000
  Ddrd = &B_1111_1111 : Portd = &B_0000_0000

'===============================================================================
'               Конфигурация питания аппаратных модулей МК
'===============================================================================
' PRR – Регистр управления питанием аппаратных средств МК
' Начальное значение регистра PRR = &B00000000       ' Регистр управления питанием аппаратных средств МК

'~ 860 мкА
  Prr = &B_1011_1100
'         |||| ||||
'         |||| |||+--- 0 - PRADC    - если 1, то модуль ADC (АЦП) выключен
'         |||| ||+---- 1 - PRUSART0 - если 1, то модуль USART выключен
'         |||| |+----- 2 - PRSPI    - если 1, то модуль SPI выключен
'         |||| +------ 3 - PRTIM1   - если 1, то Timer1/Counter1 выключен
'         |||+-------- 4 - PRUSART1 - если 1, то модуль USART1 выключен
'         ||+--------- 5 - PRTIM0   - если 1, то Timer0/Counter0 выключен
'         |+---------- 6 - PRTIM2   - если 1, то Timer2/Counter2 выключен
'         +----------- 7 - PRTWI    - если 1, то модуль TWI (I2c) выключен, после включени обязательна повторная инициализация
' Примечание:

'===============================================================================
'            Конфигурация TIMER2, пробуждение и временные интервалы
'==============================================================================
  Config Timer2 = Timer , Async = On , Prescale = 1024       ' Делитель 32768 / 128 / 256 = 1 сек (прерывание TIMER2 = 1 раз в секунду)
  '  Const Количество_срабатываний_timer2 = 1       ' Значение константы используется в подпрограмме "Обработка_прерывания_timer2"
  ' Ссылка на подпрограмму обработчика прерывания TIMER2, для работы часов
  On Timer2 Обработка_прерывания_timer2 Nosave       ' Ссылка на подпрограмму обработчика прерывания TIMER2
  Dim Флаг_есть_прерывание_timer2 As Byte
  Stop Timer2
  Timer2 = 0

  Dim Счетчик_timer2 As Byte

'---------------  Настройка пониженного энергопотребления МК  ------------------

  Assr.3 = 1 : Waitms 100       ' Включить НЧ-генератор AS2 и подождать стабилизации амплитуды генератора
'  При включении  бита AS2 (3) в регистре ASSR (ASSR.3), становится возможным применение режима
' "Powersave" - разновидность спящего режима. Пробуждение МК от TIMER2
'  Mcucr = &B10000000                              ' Разрешаем режим пониженного энергопотребления  Power Idle
'  Mcucr = &B10110000       ' Разрешаем режим пониженного энергопотребления  Power Save

'===============================================================================
'                      Конфигурация USART
'===============================================================================
  $baud = 4800       '19200     '38400     '57600     '76800     '115200    '230400

  Config Com1 = Baud , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
  Ucsr0a.1 = 1       ' Двойная скорость работы USART, скорость трансляции = $baud * 2

  On Utxc Передача_по_usart_закончена Nosave
  Dim Флаг_можно_поспать As Byte

  Print "Тест USART"
  Gosub Причина_сброса_atmega328p

'===============================================================================
'                      Н А С Т Р О Й К А     АЦП
'===============================================================================
  Dim Флаг_данные_ацп As Byte

  Dim Данные_ацп_мк_word As Word       ': Данные_ацп_мк_word = 0
  Dim Данные_ацп_мк_single As Single       ' : Данные_ацп_мк_single = 0
  Dim Данные_ацп_мк_str As String * 10       ' : Данные_ацп_мк_str = "-.-"
'  Dim Уровень_батареи_str As String * 1       ' : Уровень_батареи_str = "0"

'Значение * 3 такта. Время ожидания стабилизации внутреннего источники опорного напряжения 1.1V
'http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf
'стр.305
'Table 29-11
'Bandgap reference start-up time
'1,08545 V
  Const Const_ожидание_готовности_1_1v = 45       'Значение * 3 такта. Время ожидания стабилизации внутреннего источники опорного напряжения 1.1V
'Зависит от конкретного экземпляра МК, температуры и напряжения питания, чем больше Uпит, тем дольше надо ждать, пока внутренний источник опорного напряжения выйдет на рабочий уровень

  Const Const_коэффициент_перещета_1_1v = 1111.5       'Зависит от конкретного экземпляра МК

'Ссылка на обработчик прерывания АЦП
  On Adc Опрос_ацп Nosave

  'Config Aci = Off , Compare = Off , Trigger = Toggle
  Acsr = &B_1000_0001

'Config Adc = Single , Prescaler = 2 , Reference = Avcc
  Admux = &B_0100_1110
  Adcsra = &B_1100_0001
  Adcsrb = &B_0000_0000

'Ждём первого измерения, чтобы исключить неверные значения
Ждем_измерение:
  !lds R16 , ADCSRA
'Ждём флага готового измерения АЦП (Bit 4 – ADIF: ADC Interrupt Flag)
  !SBRs R16 , ADIF
  !rjmp Ждем_измерение
  !lds R17 , adcl
  !lds R17 , adch
  !andi R16 , &B_0000_0111
  !sts ADCSRA , R16

'===============================================================================
'               Настройка МК для работы с LCD TIC-5234
'===============================================================================
  Data_tic5234 Alias Portb.0 : Load_tic5234 Alias Portb.1 : Clk_tic5234 Alias Portb.2

  $include "TIC5234.inc"       ' Подключение библиотеки

   'Вывод данных на LCD TIC-5234
   '                     +------------------------------ Строковая переменная или строковое значение. Значение больше 5 символов (без учёта точек в 1,2,3,4 разрядах) обрезается
   '                     |                 +------------ 3 значение батарейки
   '                     |                 | +---------- 2 значение батарейки
   '                     |                 | |+--------- 1 значение батарейки
   '                     |                 | ||+-------- корпус батарейки
   '                     |                 | |||+------- RH%
   '                     |                 | |||| +----- кПа
   '                     |                 | |||| |+---- МПа
   '                     |                 | |||| ||+--- кгс/см2
   '                     |                 | |||| |||+-- °C
   '                    /|\                | |||| ||||
   'Print_lcd_tic5234 "12345" , &B_0000_0000_1110_0001
    Print_lcd_tic5234 "     " , &B_0000_0000_0000_0000

  Dim Буфер_lcd_tic5234_word As Word
  Dim Буфер_lcd_tic5234_str As String * 8
'===============================================================================
'               Настройка МК для работы с Ds18b20
'===============================================================================

  Vcc_ds18b20 Alias Portc.4 : Config Vcc_ds18b20 = Output : Reset Vcc_ds18b20

  Port_ds18x20 Alias Pinc

  Const Const_запуск_измерения_ds18x20 = &H44
  Const Const_чтение_температуры_ds18x20 = &HBE
  Const Const_подготов_чтения_ds18x20 = &HCC

  Dim Порядковый_номер_ds18x20 As Byte
  Dim Температура_integer As Integer       ' Температура * 16, в HEX формате
  Dim Сырые_данные_ds18x20(9) As Byte At Температура_integer Overlay       ' Массив данных полученных от Ds18b20
  Dim Температура_single As Single
  Dim Готовая_температура_str As String * 10

  Dim Готов_температура_1_ds12x20_str As String * 10
  Dim Готов_температура_2_ds12x20_str As String * 10

'--------------  Разрешаем работу необходимых прерываний  ----------------------
  Enable Adc
  Enable Timer2
  Start Timer2
'------------  Разрешаем работу всех включенных прерываний  --------------------
  Enable Interrupts
'===============================================================================
  Print "Начало программы"
'                   Г Л А В Н Ы Й         Ц И К Л
  Главный_цикл:
'===============================================================================

      If Флаг_есть_прерывание_timer2 > 0 Then

          Incr Счетчик_timer2

          If Счетчик_timer2 > 1 Then
              Счетчик_timer2 = 0
          End If

          Select Case Счетчик_timer2

              Case 0:
                    'Замеряем собственное напряжение питания МК
                    'Включаем АЦП
                     Adcsra.aden = 1       ' Включаем АЦП

                    'Waitus 121       ' граница 121 при Uпит = 4.1V
                    !ldi R16 , Const_Ожидание_готовности_1_1V
                   Пауза_125_циклов:
                    !dec R16
                    !brne Пауза_125_циклов

                   'ADC Noise Reduction
                    !ldi R16 , &B_0000_0011       ' ADC Noise Reduction
                    !sts smcr , R16
                    !sleep

                   'Выключаем АЦП
                    Adcsra.aden = 0       ' Выключаем АЦП

                   'Занимаемся расчётами и отображением значений на LCD TIC-5234
                    Данные_ацп_мк_single = Const_коэффициент_перещета_1_1v / Данные_ацп_мк_word
                    Данные_ацп_мк_str = Fusing(данные_ацп_мк_single , "&.&&&")
                    Данные_ацп_мк_str = Format(данные_ацп_мк_str , "     0")

                    Буфер_lcd_tic5234_word = &B_0000_0001_1110_0000
                    Буфер_lcd_tic5234_str = Данные_ацп_мк_str

              Case 1:

                    'Переустанавливаем TIMER2 на 1 сек
                     Tccr2b = &B_0000_0101

                     Set Vcc_ds18b20
                     Порядковый_номер_ds18x20 = 5
                     Gosub Запуск_измерения_ds18x20

                     Power Powersave

                     Gosub Опрос_ds18x20

                     Буфер_lcd_tic5234_word = &B_0000_0000_0000_0001
                     Буфер_lcd_tic5234_str = Готов_температура_2_ds12x20_str

                     Reset Vcc_ds18b20

                     Ddrc.5 = 1
                     Reset Portc.5

                    'Переустанавливаем TIMER2 на 8 сек
                     Tccr2b = &B_0000_0111

          End Select

          Print_lcd_tic5234 Буфер_lcd_tic5234_str , Буфер_lcd_tic5234_word

          Флаг_есть_прерывание_timer2 = 0
          Goto Главный_цикл
      End If



    Power Powersave

'===============================================================================
  Goto Главный_цикл
' End
'                        П О Д П Р О Г Р А М М Ы
'===============================================================================

'===============================================================================
  Опрос_ds18x20:
'-------------------------------------------------------------------------------
    1wreset Port_ds18x20 , Порядковый_номер_ds18x20
    1wwrite Const_подготов_чтения_ds18x20 , 1 , Port_ds18x20 , Порядковый_номер_ds18x20
    1wwrite Const_чтение_температуры_ds18x20 , 1 , Port_ds18x20 , Порядковый_номер_ds18x20

    If Err = 0 Then       ' Если работа с шиной прошла без ошибок
        Сырые_данные_ds18x20(1) = 1wread(9 , Port_ds18x20 , Порядковый_номер_ds18x20 )
        If Сырые_данные_ds18x20(9) = Crc8(сырые_данные_ds18x20(1) , 8) Then       ' Если контрольная сумма полученных данных правильная
            Gosub Расчет_температуры_ds18x20
           Else       ' Иначе
            ' Обработка ошибки CRC полученных данных
        End If       ' If Ответ_датчика_ds18x20(9) = Crc8(ответ_датчика_ds18x20(1) , 8) Then       ' Проверяем контрольную сумму полученных данных

                                                                'Выставляем количество знаков после запятой
                                                                '||||
        Готовая_температура_str = Fusing(температура_single , "&.&&")

        If Температура_single < 0 Then
            Готовая_температура_str = Format(готовая_температура_str , "+    0")
          Else
            Готовая_температура_str = Format(готовая_температура_str , "     0")
        End If

       Else       ' Иначе
         ' Обработка ошибки работы с шиной 1wire
    End If       ' If Err = 0 Then

    On Порядковый_номер_ds18x20 Goto 0_ds18x20 , 1_ds18x20 , 2_ds18x20 , _
                                     3_ds18x20 , 4_ds18x20 , 5_ds18x20 ,
      0_ds18x20:
        Goto Выход_опрос_ds18x20
      1_ds18x20:
        Goto Выход_опрос_ds18x20
      2_ds18x20:
        Goto Выход_опрос_ds18x20
      3_ds18x20:
        Goto Выход_опрос_ds18x20
      4_ds18x20:
        Готов_температура_1_ds12x20_str = Готовая_температура_str
        Goto Выход_опрос_ds18x20
      5_ds18x20:
        Готов_температура_2_ds12x20_str = Готовая_температура_str
        Goto Выход_опрос_ds18x20

   Выход_опрос_ds18x20:
'     Gosub Запуск_измерения_ds18x20
'-------------------------------------------------------------------------------
  Return
'===============================================================================
  Расчет_температуры_ds18x20:
'-------------------------------------------------------------------------------
    Температура_single = Температура_integer
    Shift Температура_single , Right , 4 , Signed
'-------------------------------------------------------------------------------
  Return
'===============================================================================
  Запуск_измерения_ds18x20:
'-------------------------------------------------------------------------------
    1wreset Port_ds18x20 , Порядковый_номер_ds18x20
    1wwrite Const_подготов_чтения_ds18x20 , 1 , Port_ds18x20 , Порядковый_номер_ds18x20
    1wwrite Const_запуск_измерения_ds18x20 , 1 , Port_ds18x20 , Порядковый_номер_ds18x20
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Опрос_ацп:
'-------------------------------------------------------------------------------
    !push R16

    !lds R16 , adcl
    !sts {Данные_ацп_мк_word} , R16
    !lds R16 , adch
    !sts {Данные_ацп_мк_word + 1} , R16

    !pop R16
    !reti
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
' Подпрограмма обработки прерывания TIMER2, происходит 1 или 2 раза в секунду, в зависимости от настроек TIMER2
'===============================================================================
  Обработка_прерывания_timer2:
'-------------------------------------------------------------------------------
    !push R16
    !ldi R16 , 1
    !sts {Флаг_есть_прерывание_timer2} , R16
    !pop R16
    !reti
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Причина_сброса_atmega328p:
'-------------------------------------------------------------------------------
    If Причина_сброса_мк.3 = 1 Then
        Print "Reset от Watchdog"
        Причина_сброса_мк.3 = 0
        Mcusr.3 = 0
        Waitms 5
    End If

    If Причина_сброса_мк.2 = 1 Then
        Print "Reset от снижения питания"
        Причина_сброса_мк.2 = 0
        Mcusr.2 = 0
        Waitms 5
    End If

    If Причина_сброса_мк.1 = 1 Then
        Print "Reset от кнопки"
        Причина_сброса_мк.1 = 0
        Mcusr.1 = 0
        Waitms 5
    End If

    If Причина_сброса_мк.0 = 1 Then
        Print "Reset от подачи питания"
        Причина_сброса_мк.0 = 0
        Mcusr.0 = 0
        Waitms 5
    End If
'-------------------------------------------------------------------------------
  Return
'===============================================================================

'===============================================================================
  Передача_по_usart_закончена:
'-------------------------------------------------------------------------------
    !push R16
    !ldi R16 , 1
    !sts {Флаг_можно_поспать} , R16
    !pop R16
    !reti
'-------------------------------------------------------------------------------
  Return
'===============================================================================

0

10

Кстати, Atmega32 не очень подходит для пониженого потребления. Возмите МК новых ревизий  Atmega324P_644P_1284P  -  40...44  ножки

Atmega168P_328P  -  28...32 ножки

0

11

sasha_1973 написал(а):

Кстати, Atmega32 не очень подходит для пониженого потребления. Возмите МК новых ревизий  Atmega324P_644P_1284P  -  40...44  ножки

Atmega168P_328P  -  28...32 ножки

Я это заню. Но т.к. работаю с Pinboard- использую мегу32 DIP40 (переходник под 328 лень делать). В железе будет 328p.

0

12

Tankor написал(а):

Но т.к. работаю с Pinboard- использую мегу32 DIP40 (переходник под 328 лень делать). В железе будет 328p.

И что там делать, Вы больше времени тратите на писанину здесь!



Lcd лучше брать (chip on glas), например RDX0154  - потребление без подсветки < 20 мкА

0

13

Mrshilov написал(а):

Так  я и говорю - при переходе в сон переключать прескалер на 8сек. При подъеме опять возвращать на 0,5сек.
Кстати об экономии - а не выгоднее ли поставить дисплей на OLED? Ну зачем тратить драгоценные 15мА на подсветку? Он потребляет 0,08 Ватт, можно запитать прямо от порта МК и подключается к уже задействованному I2C - экономится несколько ног. Если еще минус часовой кварц, то можно перейти на Мегу328 - корпус меньше.

Идея про прескалер понятна, т.о. можно вообще обойтись одним счётчиком. Дисплей такой имеется, но переписывать с нуля под него- ??? быть может, но позже. Уйдя от таймера2, как просыпаться?

0

14

Что это вообще будет, показометр всех датчиков?

0

15

Tankor написал(а):

Уйдя от таймера2, как просыпаться?

С низким потреблением, никак (Idle - это далеко не низкое потребление), разве-что кнопка на INT0, но включенное прерывание INT0 кушает ~ 50 мкА

Отредактировано sasha_1973 (2015-09-14 13:30:55)

0

16

sasha_1973 написал(а):

И что там делать, Вы больше времени тратите на писанину здесь!

Lcd лучше брать (chip on glas), например RDX0154  - потребление без подсветки < 20 мкА

Для меня использование меги32 не критично. Занимаюсь этим только после работы вечером. Днём работа и по возможности ответы на появившиеся вопросы.

Отредактировано Tankor (2015-09-14 13:36:50)

0

17

sasha_1973 написал(а):

Что это вообще будет, показометр всех датчиков?

Предполагается, что это будет микрометеостанция, часы, будильники. Запись показаний в архив и показ графиков тренда. Вечером сфотографирую выложу.

0

18

Подытожу. Использовать таймер2 с изменяющимся прескалером. Использовать powersave. Жаль, но даташит говорит, что нельзя использовать powerdown.

0

19

Вы сначала опишите все датчики, которые будете использовать, а потом занимайтесь потреблением.

Стесняюсь спросить, а зачем будильники?

0

20

Tankor написал(а):

Жаль, но даташит говорит, что нельзя использовать powerdown.

Почему нельзя, если очень хочется, то можно.

Watchdog - сможет вывести из powerdown, через те-же <-1-2-4-8-16-(32-64-128-256 - если программно понизить частоту, доступно в МК новых ревизий)сек, но вырастет потребление в 5 раз

в 5 раз - понятие относительное, т.е., TIMER2 ~ 1 мкА, Watchdog ~5 мкА

0

21

sasha_1973 написал(а):

Стесняюсь спросить, а зачем будильники?

Ну, раз время есть, то почему бы и будильнику не быть.

0

22

sasha_1973 написал(а):

Вы сначала опишите все датчики, которые будете использовать, а потом занимайтесь потреблением.

По выложенному архиву же понятно какие датчики. В режиме сна датчики будут отключаться.

0

23

Tankor написал(а):

Ну, раз время есть, то почему бы и будильнику не быть.

Исходя из личного опыта, да и не только личного, никто этими будильниками не будет пользоваться. Почему-то народ предпочитает механические или буд. в мобилках.

0

24

Tankor написал(а):

По выложенному архиву же понятно какие датчики. В режиме сна датчики будут отключаться.

Честно говоря, у Вас там так всё наворочено, что кроме Вас, никто не разберётся.

0

25

sasha_1973 написал(а):

Честно говоря, у Вас там так всё наворочено, что кроме Вас, никто не разберётся.

По подключенным к проекту библиотекам не ясно?

0

26

DHT22, BMP180, HMC5883, RTC DS3231

0

27

sasha_1973 написал(а):

Исходя из личного опыта, да и не только личного, никто этими будильниками не будет пользоваться. Почему-то народ предпочитает механические или буд. в мобилках.

Не спорю. Реализация-то не хитрая и места много не съела.

0

28

Tankor написал(а):

Не спорю. Реализация-то не хитрая и места много не съела.

Это только опрос, а установка, да ещё и с индикацией процесса.

Tankor написал(а):

DHT22, BMP180, HMC5883, RTC DS3231

А зачем Вам в метеостанции компас?

0

29

Tankor написал(а):

DHT22, BMP180

Возмите BME280  -  влажность, давление и градусы в одном флаконе.

Отредактировано sasha_1973 (2015-09-14 14:24:36)

0

30

sasha_1973 написал(а):

Возмите BMP280  -  влажность, давление и градусы в одном флаконе.

Что было под руками.

0