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

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

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

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



Зависание

Сообщений 121 страница 150 из 159

121

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

Ну, теперь ясно. Благодарю. Пробовать надо.

Чего там пробовать, наливай да пей! (чай, кофе, компот)  :cool:

0

122

Очередная ревизия документации Atmega32A от 10.2015

0

123

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

Очередная ревизия документации Atmega32A от 10.2015

У меня Atmega32L

0

124

Документация Atmega32(L) от 02.2011

0

125

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

Вообще-то я имел ввиду, что замер батарейки нужен, но надо проверить аппаратное решение по замеру. Если собираетесь в поход, то включаете прибор и смотрите, как там питание. Если плохо, то меняете батарейку и заряжаете аккум. Если контроля батарейки нет, то в самый нужный момент, по закону подлости, получаете проблемы.

Ясно. Вообще, конечно странно, что контроль акума проходит нормально, т.е. утечек нет, а с батареей проблемы.

0

126

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

надо проверить аппаратное решение по замеру


Так проверяли-же уже.

!!! Проблем нет, если не обеЗточивать МК, потребление АЦП на уровне саморазряда !!!

А вот если обеЗточить МК, сразу появляется утечка!

Отредактировано sasha_1973 (2016-02-09 21:43:29)

0

127

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

Документация Atmega32(L) от 02.2011

Есть оно у меня. Мин не очень бильмим английский (смесь русского и татарского). Так на уровне-хау мач? Шутка. В любом случае приходится использовать помощник - словарь.

0

128

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

!!! Проблем не, если не обеЗточивать МК, потребление АЦП на уровне саморазряда !!!

У уход в сон это обезточивание МК? Не должно быть, он же помнит переменные и т.д.

Отредактировано Tankor (2016-02-09 21:36:57)

0

129

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

но надо проверить аппаратное решение по замеру

Уже проверено в ультра микроне. Всё работает. На укуме 70ма/ч работает месяцы.

0

130

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

У уход в сон это обезточивание МК?


Конечно нет.

0

131

Благодарю за ответы. Пока менять прошивку и схему не буду. Доработка прошивки дело наживное, всё зависит насколько "больная" фантазия автора.

0

132

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

GOSUB 1
1:
if a=0 then goto 2
return
Как сделать так, чтобы вернуть стек после goto?

Как победили данный вопрос? Столкнулся с тем что после такого перехода некоторые переменные обнуляются и не хотят изменятся.

Это не помогает:

Код:
    !ldi ZL , low(метка)
    !ldi ZH , high(метка)
    !ijmp

Так и не понял какие параметры после POP. Как пометить в стеке адрес перехода? Как узнать нужный адрес метки "Начало:"? Можете расписать как для ребенка 5ти летнего?

Пётр написал(а):

Нужно попробовать дважды вызвать команду POP перед Goto или же вместо текущего адреса возврата в стеке пометить тот куда нужно перейти и выполнить Return

0

133

Работают все методы:
1.  !POP R26
     !POP R27
     GOTO метка
2.  !ldi ZL , low(метка)
     !ldi ZH , high(метка)
     !ijmp
3.  !ldi R30 , low(метка)
     !ldi R31 , high(метка)
     !ijmp
4.  !lds R30 , {метка}
     !lds R31 , {метка+1}
     !ijmp
Пункты 2 и 4 равнозначны.
Обнуление переменных не заметил. После POP любые "рабочие" регистры (данные в этих регистрах нам не понадобятся и это делается для того чтобы сдвинуть адрес стека на метку). Адрес перехода как раз и находится в регистре Z. Зачем знать адрес метки начало для случая 2-4, мыж его и прописываем в ZL и ZH (R31,R30)?

Отредактировано Tankor (2016-02-16 08:29:05)

0

134

Дошли руки до заказа платы.  8-)
Тут

Отредактировано Tankor (2016-07-29 11:10:58)

0

135

Ога, прикольные ребята, за период времени повысилось качество силка. :cool:

0

136

И так, плата получена, спаяна и запущена. Без косяков на плате не обошлось (3 шт), но не критично.
http://sf.uploads.ru/t/aGZnU.jpg
http://s2.uploads.ru/t/B7Grp.jpg

Поскольку разработка велась на макете, где была эмуляция ключей (полевик) и т.д., реалии выявили проблему просыпания из сна. Сразу после ухода пару раз просыпается, а бывает и нет, т.е. не ясно зависание или не выходит из сна. Теперь это стал спаянный реальный макет, на котором буду допиливать. Прошу взгянуть, может где косяк, про который не знаю.

Подпрограмма счётчик засыпания:

Chek1:
   !lds r16,{Sleep_byte}                                    'If Sleep_byte = 1 Then Goto Sleep_call
   !cpi r16,1
   !brne tm101
   !ldi ZL , low(Sleep_call)                                ' Забираем адрес метки
   !ldi ZH , high(Sleep_call)                               ' Забираем адрес метки
   !ijmp                                                    ' Переход на метку без последствий для стека
Tm101:
Return

Далее уходим на метку Slee_call (это не подпрограмма):

метка Sleep_call

Sleep_call:
   Set Pwr_on1                                              'выключаем дисплей
   Set Pwr_on                                                'выключаем RTC (время)
   Stop Timer2                                              '
   Config Timer2 = Counter , Async = On , Prescale = 1024 '(переконфигурируем Timer2 на переполнение 9сек)
   Start Timer2

   Do
      Gosub Chek                                           'Обработчик прерывания
      !SBIC pina,7                                          'Проверка подключения зарядки
      !jmp k1
      !lds r16,{Ok_key}                                     'Просыпаемся от нажатия комбинации клавишь (up_key и ok_key)
      !lds r17,{Up_key}                                      'Кнопки завязаны с INT0 и INT1
      !cpi r16,0
      !brne s1
      !cpi r17,0
      !brne s1
      K1:
         Gosub Wake_up                                       'Подпрограмма просыпания
         !ldi r16,1
         !sts {ok_key},r16
         !sts {up_key},r16
         !jmp Main                                                 ' УХОД В ГЛАВНОЕ, НАЧАЛЬНОЕ ОКНО ПРОГРАММЫ (НАЧАЛО)
      S1:                                                   'End If
         !ldi r16,1
         !sts {ok_key},r16
         !sts {up_key},r16
         Power Powersave
         Loop

Ну, и далее подпрограмма просыпания

Подпрограмма просыпания Wake_up

Wake_up:                                                    'Тут мы просыпаемся
   Waitms 1
   Reset Pwr_on1                                            'Включаем питание дисплея
   Reset Pwr_on                                             'Включаем питание RTC
   Waitms 1
   Config Graphlcd = Custom , Cols = 128 , Rows = 64 , Lcdname = "SSD1306"
   Lcd_auto = 0
   Initlcd                                                  'Инициализируем LCD
   Waitms 300
    Stop Timer2
    Config Timer2 = Timer , Async = On , Prescale = 64 '(переконфигурируем Timer2 на переполнение 0.5сек)
    Start Timer2
Return

Где-то сидит засада, а понять не могу. Не стабильное просыпание. Прошу помощи.

Отредактировано Tankor (2016-09-02 07:56:09)

0

137

нафига писать на асме, если всё можно сделать через команды бэйсика
если у вас проблемы с спячкой, значит не изучили до конца весь процесс использования (рано начали делать плату)

Отредактировано RDW (2016-09-02 11:32:02)

0

138

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

нафига писать на асме, если всё можно сделать через команды бэйсика
если у вас проблемы с спячкой, значит не изучили до конца весь процесс использования (рано начали делать плату)

Отредактировано RDW (Сегодня 11:32:02)

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

0

139

На чем же у вас это "нормально" проходило в эмуляции?
А на вопроса не будет ответа, т.к. нужна ещё как минимум схема и нормальный ВЕСЬ код (в котором кто-то захочет ковыряться).

0

140

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

На чем же у вас это "нормально" проходило в эмуляции?

на светодиодах

0

141

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

ВЕСЬ код (в котором кто-то захочет ковыряться).

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

0

142

Здесь телепатов нет, откуда знать, какая логика у вас заложена и какая схема используется или вы предлагаете смотреть заведомо неправильные данные, в которых будет сразу видно ошибку, т.к. алгоритм сна всегда и везде одинаковые (без кучи алгоритмов).

0

143

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

прошивка под завязку

Впаяйте mega644x и будет "лишних" 32 КБ. :)  По выводам они вроде совместимы, т. е. вероятно понадобится только сменить тип МК и перекомпилировать программу. :)

0

144

Пётр написал(а):

Впаяйте mega644x и будет "лишних" 32 КБ.   По выводам они вроде совместимы, т. е. вероятно понадобится только сменить тип МК и перекомпилировать программу.

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

0

145

Проект и схема

0

146

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

Поскольку разработка велась на макете, где была эмуляция ключей (полевик) и т.д., реалии выявили проблему просыпания из сна. Сразу после ухода пару раз просыпается, а бывает и нет, т.е. не ясно зависание или не выходит из сна. Теперь это стал спаянный реальный макет, на котором буду допиливать. Прошу взгянуть, может где косяк, про который не знаю.


1). Ёмкости на кварце есть ? У меня был случай, из двух ёмкостей, одна была битая, сменил и всё заработало.

2). Вы уверены, что после переконфигурации TIMER2, генерация успевает запуститься, после запуска, а переконфигурация - это перезапуск, надо ждать 1 сек ? Зачем полная настройка, играйтесь Prescale.

3). ! Обязательно !, перед PoweSave проверяйте регистры (TCN2UB, OCR2UB, TCR2UB ), пока не "0", спать не идите, пока генератор не запустится или ядро что-то делает с TIMER2, в регистрах будет "1" !

! Помните, что 32кГц это очень медленно, по сравнению с частотой работы ядра процессора !


Удачи !

Отредактировано sasha_1973 (2016-09-05 06:49:53)

0

147

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

1). Ёмкости на кварце есть ? У меня был случай, из двух ёмкостей, одна была битая, сменил и всё заработало.

Нет, по datasheet их не требуется.

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

2). Вы уверены, что после переконфигурации TIMER2, генерация успевает запуститься, после запуска, а переконфигурация - это перезапуск, надо ждать 1 сек ? Зачем полная настройка, играйтесь Prescale.

Не уверен, поэтому расставлял wait. По Prescale благодарю.

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

3). ! Обязательно !, перед PoweSave проверяйте регистры (TCN2UB, OCR2UB, TCR2UB ), пока не "0", спать не идите, пока генератор не запустится или ядро что-то делает с TIMER2, в регистрах будет "1" !

Выполню.

0

148

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

Нет, по datasheet их не требуется.


Доверяй, но проверяй !

Специально экспериментировал, из 10 кварцев, 8 без ёмкостей не запускались, а те, что запускались, давали всё, что угодно, кроме синусоиды !

0

149

Стесняюсь спросить, где брали Ds3231 M  ?

Разряд аккумулятора через АЦП Вас не смущает ?

0

150

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

Стесняюсь спросить, где брали Ds3231 M  ?

Разряд аккумулятора через АЦП Вас не смущает ?

DS3231M брал тут https://alitems.com/g/1e8d114494d0557aa28116525dc3e8/?ulp=https://ru.aliexpress.com/item/DS3231MZ-SOP8-DS3231M-5ppm-I2C-Real-Time-Clock-Battery-Backup-for-Continuous-Timekeeping-new-and-Original/32460402003.html

Разряда не будет. АЦП активирую только на момент замера, плюс резистор делителя, который на минусе, подключает МК.

0