|
|
  |
Опять Мега48PA, нюансы программирования, Изменение поведения после циклирования питания |
|
|
|
Jan 31 2016, 16:22
|
Местный
  
Группа: Свой
Сообщений: 205
Регистрация: 21-12-04
Из: Киев
Пользователь №: 1 593

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

|
Спасибо за ответ! Потому и пишу, что не могу "разоблачить чудо"  Уже третий день... Содержимое флэша сверил - соответствует. Можете сформулировать - чем отличается состояние контроллера сразу после программирования, от включенного потом? Ресет на ситуацию НЕ влияет - сразу после заливки перезапуск восстанавливает правильную работу. После выкл-вкл питания восстанавливает НЕправильную работу. Похоже "собака зарылась" где-то "сбоку" и не связана ни с программой ни с её заливкой, а влияет на работу при снятии/подаче напряжения на какие-то выводы. Осталось перепаять эту TQFP-32...
--------------------
На "нет" и "нах" :)
|
|
|
|
|
Feb 1 2016, 09:15
|
Местный
  
Группа: Свой
Сообщений: 205
Регистрация: 21-12-04
Из: Киев
Пользователь №: 1 593

|
Цитата(Сергей Борщ @ Feb 1 2016, 04:04)  Использование в программе неинициализированных переменных? Господин Борщ - респект и уважуха! Это надо крупными буквами где-то в началах AVR-ов писать! Я "попался", судя по всему, на новых технологиях микропитания контроллеров (суффикс "Р" после номера модели). Раньше получалось присвоить r26 значение, а потом сделать посылку регистру ST X,..... забыв про старший байт этого Х-са. Теперь не проходит - при микропотреблениях на него ловится неизвестно какая хрень и посылка "ST X" посылает данные ХЗ куда. Причем, если Студия чистит забытые пользователем старшие байты, то после пропадания питания фокус вылазит, причем непрогнозируемо и не обязательно! СПАСИБО.
--------------------
На "нет" и "нах" :)
|
|
|
|
|
Feb 2 2016, 14:28
|
Местный
  
Группа: Свой
Сообщений: 205
Регистрация: 21-12-04
Из: Киев
Пользователь №: 1 593

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

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

|
Цитата(GeorgyBey @ Feb 2 2016, 17:28)  Вписал очистку старшего байта Х-пары, проблема ушла!... Сейчас вот пытаюсь заставить работать АЦП... проблема опять на уровне идиотизма - либо не запускается, либо виснет... Попробуйте начать писать под эти AVRки на С, если конечно не стоит задача написать всё на ассемблере. Оставьте работу с регистрами компилятору, а сами займитесь программой. Ни Вы, ни кто-либо другой не оценит в будущем то время, которое было затрачено на написание полурабочего непереносимого ассемблерного кода. IAR, WinAVR, Code Vision - доступные "бесплатные" компиляторы Вам в помощь. А также масса примеров с форума и интернета, написанные по большей части на С.
|
|
|
|
|
Feb 8 2016, 09:09
|
Местный
  
Группа: Свой
Сообщений: 205
Регистрация: 21-12-04
Из: Киев
Пользователь №: 1 593

|
Спасибо за внимание, НО, я еще и удовольствие и понимание получаю (в смысле ассемблера), а план "не жмет". Кстати. текущий идиотизм был побежден и достоин записи в анналы. Формулирую : Вызвав режим SLEEP, нужно не забывать его выключать в возникшем прерывании Теперь прошу помощи в следующем (идиотизме  ) : Поскольку работаю с батареей, присвоил регистрам r1...r8 имена "Cell_1", "Cell_2" .. и т.п. Просканировал-обмерил ячейки, записал в соответствующие регистры, полез Dragon-ом через Debag-wire посмотрел -  - померяно правильно (величина), но вот записано в регистры на единицу бОльшие! Т.е. Cell_1 в r2, Cell_2 в r3 ... Cell_7 в r8? а Cell_8 х.з. куда... ЧТО не так?! Кто знает? PS результат (8-бит) считываю во временный регистр (r22), корректирую "по факту" (inc... или dec...) и копирую "mov r1,r22", а пишет в r2 вместо r1.
--------------------
На "нет" и "нах" :)
|
|
|
|
|
Feb 8 2016, 09:31
|

Гуру
     
Группа: Модераторы
Сообщений: 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)
|
|
|
|
|
Feb 8 2016, 09:54
|
Местный
  
Группа: Свой
Сообщений: 205
Регистрация: 21-12-04
Из: Киев
Пользователь №: 1 593

|
НЕ!  Меня зовут Георгий Владимирович. Когда-то турки в Стамбуле, где работал лет 5 дали кликуху, пользуемую как ник. Я везде и давно уже GBey, только тут у вас "старым" остался. Какой там "код"!? 1. rcall CCell_1 - подпрограмма выставляющая порты (2) для подключения к ячейке внешнего "силового" мультиплексора. 2. rcall Time - подпрограмма временной задержки для устаканивания (IDLE сон, счетчик считает до переполнения, забыл выключать сон и получил предыдущий идиотизм  ) 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 ;| ОТАКЭ
--------------------
На "нет" и "нах" :)
|
|
|
|
|
Feb 9 2016, 17:04
|

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

|
Код inc TM7 inc TM7 inc TM7 inc TM7 inc TM7 inc TM7 == Код subi TM7,-6 И это все .def какие есть в программе или ещё где-то
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
|
Feb 10 2016, 15:51
|
Местный
  
Группа: Свой
Сообщений: 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 и хрен с ней - избыточностью. Ужимать буду потом. Хотя по сдвигу нумерации регистров вопрос открыт. https://www.youtube.com/watch?v=TIIEZ2HarRw
--------------------
На "нет" и "нах" :)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|