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

Программирование 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




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

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