реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Опять Мега48PA, нюансы программирования, Изменение поведения после циклирования питания
GeorgyBey
сообщение Jan 31 2016, 16:22
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 21-12-04
Из: Киев
Пользователь №: 1 593



Устройство ВНЕШНИМ дифференциальным мультиплексором опрашивает цепочку ячеек, циклически.
Мега48 выдает на порты В и С нужные сочетания сигналов.
Для устаканивания процесса переключения делается задержка на счетчике (любом).
Программируем через ISP - все исправно моргает. RESET срабатывает штатно.
Отключаю питание, через несколько секунд включаю - моргание учащается раз в 10! Счетчик ВХОДИТ в сон (IDLE) {если убрать команду Sleep моргает еще быстрее}.
Предделитель - пофигу, как и счетчик 0й, 1й или 2й. Впечатление, что счетчик входит в процесс, по Sleep-у останавливается счетчик команд, потом нечто прерывает задержку и цикл опроса продолжается....
Все, что не относится к данному процессу (АЦП и его предустановки, подпрограммы обслуживания других цепей) закомментировано.
Попутно : Знает ли история факты "порчи" контроллера ИЗНУТРИ?
В смысле НЕ сожженый Порт, а, к примеру, ячейки FLASH умершие до состояния ОЗУ ?
А то получается, что ЧАСТЬ ПРАВИЛЬНО распиханного по регистрам, после снятия питания пропадает.
Или, "где сАбака зарылась"? wacko.gif


--------------------
На "нет" и "нах" :)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 31 2016, 17:23
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Чудес не бывает. Прочитайте программатором содержимое флеши, сравните с исходным. Содержимое регистров после снятия питания пропадает, да.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
GeorgyBey
сообщение Jan 31 2016, 19:25
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 21-12-04
Из: Киев
Пользователь №: 1 593



Спасибо за ответ! Потому и пишу, что не могу "разоблачить чудо" crying.gif Уже третий день...
Содержимое флэша сверил - соответствует.
Можете сформулировать - чем отличается состояние контроллера сразу после программирования, от включенного потом?
Ресет на ситуацию НЕ влияет - сразу после заливки перезапуск восстанавливает правильную работу.
После выкл-вкл питания восстанавливает НЕправильную работу.
Похоже "собака зарылась" где-то "сбоку" и не связана ни с программой ни с её заливкой, а влияет на работу при снятии/подаче напряжения на какие-то выводы.
Осталось перепаять эту TQFP-32...


--------------------
На "нет" и "нах" :)
Go to the top of the page
 
+Quote Post
RabidRabbit
сообщение Jan 31 2016, 19:35
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 397
Регистрация: 3-12-09
Из: Россия, Москва
Пользователь №: 54 040



watchdog???
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 1 2016, 00:04
Сообщение #5


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Использование в программе неинициализированных переменных?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
GeorgyBey
сообщение Feb 1 2016, 09:15
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 21-12-04
Из: Киев
Пользователь №: 1 593



Цитата(Сергей Борщ @ Feb 1 2016, 04:04) *
Использование в программе неинициализированных переменных?

1111493779.gif 1111493779.gif 1111493779.gif
Господин Борщ - респект и уважуха!
Это надо крупными буквами где-то в началах AVR-ов писать!
Я "попался", судя по всему, на новых технологиях микропитания контроллеров (суффикс "Р" после номера модели).
Раньше получалось присвоить r26 значение, а потом сделать посылку регистру ST X,..... забыв про старший байт этого Х-са.
Теперь не проходит - при микропотреблениях на него ловится неизвестно какая хрень и посылка "ST X" посылает данные ХЗ куда.
Причем, если Студия чистит забытые пользователем старшие байты, то после пропадания питания фокус вылазит, причем непрогнозируемо и не обязательно!
СПАСИБО.


--------------------
На "нет" и "нах" :)
Go to the top of the page
 
+Quote Post
rx3apf
сообщение Feb 1 2016, 10:47
Сообщение #7


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



После сброса по питанию регистры сами по себе не инициализируются, и это никак не связано с "микротехнологиями" (так у всего семейства AVR).
Go to the top of the page
 
+Quote Post
GeorgyBey
сообщение Feb 2 2016, 14:28
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 21-12-04
Из: Киев
Пользователь №: 1 593



Убрал все кроме таймера (в спящем режиме), при переполнении меняющего, в конце концов, включение одного из линейки светодиодов (все оставшееся - порты работают нормально). Меняю предделитель таймера, заливаю - меняется скорость переключения светодиодов. Отключаю питание, включаю питание - задержки НЕТ (писал выше). Вписал очистку старшего байта Х-пары, проблема ушла!
Откуда и восторженный вопль (выше). Как оказалось -рановато smile3046.gif
Начинаю включать АЦП по окончании задержки - срыв установок таймера, как и при перетыке питания ! Доизгалялся с установками АЦП - выяснилось, что установка маски прерывания АЦП (ADIE) кошмарит таймер! Идиотизм.
Заменил контроллер - идиотизм исчез. Выходит кристалл подпорченный был! Это, плюс моё нубство прилично напрягают.
Хотя способствуют углубленному изучению предмета sm.gif
Сейчас вот пытаюсь заставить работать АЦП - даташит Меги в соседнем окне, с английским практически без проблем, а проблема опять на уровне идиотизма - либо не запускается, либо виснет. И с ручным запуском (ADSC), и с переполнением счетчика (ADATE+ADTS) ... biggrin.gif cranky.gif


--------------------
На "нет" и "нах" :)
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Feb 2 2016, 15:05
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(GeorgyBey @ Feb 2 2016, 17:28) *
Вписал очистку старшего байта Х-пары, проблема ушла!...
Сейчас вот пытаюсь заставить работать АЦП...
проблема опять на уровне идиотизма - либо не запускается, либо виснет...


Попробуйте начать писать под эти AVRки на С, если конечно не стоит задача написать всё на ассемблере. Оставьте работу с регистрами компилятору, а сами займитесь программой.
Ни Вы, ни кто-либо другой не оценит в будущем то время, которое было затрачено на написание полурабочего непереносимого ассемблерного кода.
IAR, WinAVR, Code Vision - доступные "бесплатные" компиляторы Вам в помощь. А также масса примеров с форума и интернета, написанные по большей части на С.
Go to the top of the page
 
+Quote Post
GeorgyBey
сообщение Feb 8 2016, 09:09
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 21-12-04
Из: Киев
Пользователь №: 1 593



Спасибо за внимание, НО, я еще и удовольствие и понимание получаю (в смысле ассемблера), а план "не жмет".
Кстати. текущий идиотизм был побежден и достоин записи в анналы. Формулирую :
Вызвав режим SLEEP, нужно не забывать его выключать в возникшем прерывании twak.gif

Теперь прошу помощи в следующем (идиотизме sm.gif ) : Поскольку работаю с батареей, присвоил регистрам r1...r8 имена "Cell_1", "Cell_2" .. и т.п. Просканировал-обмерил ячейки, записал в соответствующие регистры, полез Dragon-ом через Debag-wire посмотрел - blink.gif - померяно правильно (величина), но вот записано в регистры на единицу бОльшие!
Т.е. Cell_1 в r2, Cell_2 в r3 ... Cell_7 в r8? а Cell_8 х.з. куда...
ЧТО не так?! Кто знает?

PS результат (8-бит) считываю во временный регистр (r22), корректирую "по факту" (inc... или dec...) и копирую "mov r1,r22",
а пишет в r2 вместо r1.


--------------------
На "нет" и "нах" :)
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Feb 8 2016, 09:31
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(GeorgyBey @ Feb 8 2016, 11:09) *
НО, я еще и удовольствие и понимание получаю (в смысле ассемблера), а план "не жмет".
Неужто господин Шепелев из ru.embedded? Имя и подход совпадают, правда тот был из Харькова...

Цитата(GeorgyBey @ Feb 8 2016, 11:09) *
но вот записано в регистры на единицу бОльшие!
Т.е. Cell_1 в r2, Cell_2 в r3 ... Cell_7 в r8? а Cell_8 х.з. куда...
ЧТО не так?! Кто знает?
Вероятно, телепаты, способные мысленно представить ваш код и найти в нем ошибку.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
GeorgyBey
сообщение Feb 8 2016, 09:54
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 21-12-04
Из: Киев
Пользователь №: 1 593



НЕ! sm.gif Меня зовут Георгий Владимирович. Когда-то турки в Стамбуле, где работал лет 5 дали кликуху, пользуемую как ник.
Я везде и давно уже GBey, только тут у вас "старым" остался.
Какой там "код"!? biggrin.gif
1. rcall CCell_1 - подпрограмма выставляющая порты (2) для подключения к ячейке внешнего "силового" мультиплексора.

2. rcall Time - подпрограмма временной задержки для устаканивания (IDLE сон, счетчик считает до переполнения, забыл выключать сон и получил предыдущий идиотизм sm.gif )
3. rcall IzM - измерение значения
(
IzM:
clr r27 сон для АЦП
ldi TM,$03
ldi r26,0x53
ST X,TM
ldi r26,$7A ВКЛ АЦП
ldi TM,$CC
ST X,TM

Sleep
nop
ret ) Результат в TM7 (r22. Он же используется И под другим именем в других местах)

Меряет правильно, но дифф. усилитель нелинеен, поэтому
Корректирую измеренный
inc TM7
inc TM7
inc TM7
inc TM7
inc TM7
inc TM7
mov Cell_1,TM7 Результат оказывается в r2.
В самом начале :
.DEF Cell_1=r1 ;|
.DEF Cell_2=r2 ;|
.DEF Cell_3=r3 ;|Напряжение Ячейки
.DEF Cell_4=r4 ;|
.DEF Cell_5=r5 ;|
.DEF Cell_6=r6 ;|
.DEF Cell_7=r7 ;|
.DEF Cell_8=r8 ;|
ОТАКЭ laughing.gif


--------------------
На "нет" и "нах" :)
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Feb 9 2016, 17:04
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Код
inc TM7
    inc TM7
    inc TM7
    inc TM7
    inc TM7
    inc TM7
==
Код
subi TM7,-6


И это все .def какие есть в программе или ещё где-то


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
GeorgyBey
сообщение Feb 10 2016, 15:51
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 205
Регистрация: 21-12-04
Из: Киев
Пользователь №: 1 593



.DEF Cell_1=r1 ;|
.DEF Cell_2=r2 ;|
.DEF Cell_3=r3 ;|Напряжение Ячейки
.DEF Cell_4=r4 ;|
.DEF Cell_5=r5 ;|
.DEF Cell_6=r6 ;|
.DEF Cell_7=r7 ;|
.DEF Cell_8=r8 ;|
;-------------------------------------------------
.DEF Midl=r9 ;|Среднее напряжение ячеек
;-------------------------------------------------
;-------------------------------------------------
.DEF TM=r16
:В разных местах удобней пользоваться разными именами
.DEF TMB=r17
.DEF TMC=r18
.DEF TM2=r17
.DEF TM3=r18

.DEF MinB=r19
.DEF MinC=r20
.DEF TM4=r19
.DEF TM5=r20

.DEF MaxB=r21
.DEF MaxC=r22
.DEF TM6=r21
.DEF TM7=r22
Больше .DEF-ов нет.
По 48й меге вопросов больше не будет - была сделана идеологическая ошибка,
буду ВСЕ переделывать, теперь уже KITовым (модульным) Аурдинообразным образом на общей системной плате.
И мегу возьму 16ю или 8535 и хрен с ней - избыточностью. Ужимать буду потом.
Хотя по сдвигу нумерации регистров вопрос открыт.
sm.gif https://www.youtube.com/watch?v=TIIEZ2HarRw


--------------------
На "нет" и "нах" :)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 22:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01471 секунд с 7
ELECTRONIX ©2004-2016