Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Опять Мега48PA, нюансы программирования
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
GeorgyBey
Устройство ВНЕШНИМ дифференциальным мультиплексором опрашивает цепочку ячеек, циклически.
Мега48 выдает на порты В и С нужные сочетания сигналов.
Для устаканивания процесса переключения делается задержка на счетчике (любом).
Программируем через ISP - все исправно моргает. RESET срабатывает штатно.
Отключаю питание, через несколько секунд включаю - моргание учащается раз в 10! Счетчик ВХОДИТ в сон (IDLE) {если убрать команду Sleep моргает еще быстрее}.
Предделитель - пофигу, как и счетчик 0й, 1й или 2й. Впечатление, что счетчик входит в процесс, по Sleep-у останавливается счетчик команд, потом нечто прерывает задержку и цикл опроса продолжается....
Все, что не относится к данному процессу (АЦП и его предустановки, подпрограммы обслуживания других цепей) закомментировано.
Попутно : Знает ли история факты "порчи" контроллера ИЗНУТРИ?
В смысле НЕ сожженый Порт, а, к примеру, ячейки FLASH умершие до состояния ОЗУ ?
А то получается, что ЧАСТЬ ПРАВИЛЬНО распиханного по регистрам, после снятия питания пропадает.
Или, "где сАбака зарылась"? wacko.gif
Сергей Борщ
Чудес не бывает. Прочитайте программатором содержимое флеши, сравните с исходным. Содержимое регистров после снятия питания пропадает, да.
GeorgyBey
Спасибо за ответ! Потому и пишу, что не могу "разоблачить чудо" crying.gif Уже третий день...
Содержимое флэша сверил - соответствует.
Можете сформулировать - чем отличается состояние контроллера сразу после программирования, от включенного потом?
Ресет на ситуацию НЕ влияет - сразу после заливки перезапуск восстанавливает правильную работу.
После выкл-вкл питания восстанавливает НЕправильную работу.
Похоже "собака зарылась" где-то "сбоку" и не связана ни с программой ни с её заливкой, а влияет на работу при снятии/подаче напряжения на какие-то выводы.
Осталось перепаять эту TQFP-32...
RabidRabbit
watchdog???
Сергей Борщ
Использование в программе неинициализированных переменных?
GeorgyBey
Цитата(Сергей Борщ @ Feb 1 2016, 04:04) *
Использование в программе неинициализированных переменных?

1111493779.gif 1111493779.gif 1111493779.gif
Господин Борщ - респект и уважуха!
Это надо крупными буквами где-то в началах AVR-ов писать!
Я "попался", судя по всему, на новых технологиях микропитания контроллеров (суффикс "Р" после номера модели).
Раньше получалось присвоить r26 значение, а потом сделать посылку регистру ST X,..... забыв про старший байт этого Х-са.
Теперь не проходит - при микропотреблениях на него ловится неизвестно какая хрень и посылка "ST X" посылает данные ХЗ куда.
Причем, если Студия чистит забытые пользователем старшие байты, то после пропадания питания фокус вылазит, причем непрогнозируемо и не обязательно!
СПАСИБО.
rx3apf
После сброса по питанию регистры сами по себе не инициализируются, и это никак не связано с "микротехнологиями" (так у всего семейства AVR).
GeorgyBey
Убрал все кроме таймера (в спящем режиме), при переполнении меняющего, в конце концов, включение одного из линейки светодиодов (все оставшееся - порты работают нормально). Меняю предделитель таймера, заливаю - меняется скорость переключения светодиодов. Отключаю питание, включаю питание - задержки НЕТ (писал выше). Вписал очистку старшего байта Х-пары, проблема ушла!
Откуда и восторженный вопль (выше). Как оказалось -рановато smile3046.gif
Начинаю включать АЦП по окончании задержки - срыв установок таймера, как и при перетыке питания ! Доизгалялся с установками АЦП - выяснилось, что установка маски прерывания АЦП (ADIE) кошмарит таймер! Идиотизм.
Заменил контроллер - идиотизм исчез. Выходит кристалл подпорченный был! Это, плюс моё нубство прилично напрягают.
Хотя способствуют углубленному изучению предмета sm.gif
Сейчас вот пытаюсь заставить работать АЦП - даташит Меги в соседнем окне, с английским практически без проблем, а проблема опять на уровне идиотизма - либо не запускается, либо виснет. И с ручным запуском (ADSC), и с переполнением счетчика (ADATE+ADTS) ... biggrin.gif cranky.gif
mempfis_
Цитата(GeorgyBey @ Feb 2 2016, 17:28) *
Вписал очистку старшего байта Х-пары, проблема ушла!...
Сейчас вот пытаюсь заставить работать АЦП...
проблема опять на уровне идиотизма - либо не запускается, либо виснет...


Попробуйте начать писать под эти AVRки на С, если конечно не стоит задача написать всё на ассемблере. Оставьте работу с регистрами компилятору, а сами займитесь программой.
Ни Вы, ни кто-либо другой не оценит в будущем то время, которое было затрачено на написание полурабочего непереносимого ассемблерного кода.
IAR, WinAVR, Code Vision - доступные "бесплатные" компиляторы Вам в помощь. А также масса примеров с форума и интернета, написанные по большей части на С.
GeorgyBey
Спасибо за внимание, НО, я еще и удовольствие и понимание получаю (в смысле ассемблера), а план "не жмет".
Кстати. текущий идиотизм был побежден и достоин записи в анналы. Формулирую :
Вызвав режим 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.
Сергей Борщ
Цитата(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 х.з. куда...
ЧТО не так?! Кто знает?
Вероятно, телепаты, способные мысленно представить ваш код и найти в нем ошибку.
GeorgyBey
НЕ! 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
ILYAUL
Код
inc TM7
    inc TM7
    inc TM7
    inc TM7
    inc TM7
    inc TM7
==
Код
subi TM7,-6


И это все .def какие есть в программе или ещё где-то
GeorgyBey
.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
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.