GeorgyBey 0 31 января, 2016 Опубликовано 31 января, 2016 · Жалоба Устройство ВНЕШНИМ дифференциальным мультиплексором опрашивает цепочку ячеек, циклически. Мега48 выдает на порты В и С нужные сочетания сигналов. Для устаканивания процесса переключения делается задержка на счетчике (любом). Программируем через ISP - все исправно моргает. RESET срабатывает штатно. Отключаю питание, через несколько секунд включаю - моргание учащается раз в 10! Счетчик ВХОДИТ в сон (IDLE) {если убрать команду Sleep моргает еще быстрее}. Предделитель - пофигу, как и счетчик 0й, 1й или 2й. Впечатление, что счетчик входит в процесс, по Sleep-у останавливается счетчик команд, потом нечто прерывает задержку и цикл опроса продолжается.... Все, что не относится к данному процессу (АЦП и его предустановки, подпрограммы обслуживания других цепей) закомментировано. Попутно : Знает ли история факты "порчи" контроллера ИЗНУТРИ? В смысле НЕ сожженый Порт, а, к примеру, ячейки FLASH умершие до состояния ОЗУ ? А то получается, что ЧАСТЬ ПРАВИЛЬНО распиханного по регистрам, после снятия питания пропадает. Или, "где сАбака зарылась"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 31 января, 2016 Опубликовано 31 января, 2016 · Жалоба Чудес не бывает. Прочитайте программатором содержимое флеши, сравните с исходным. Содержимое регистров после снятия питания пропадает, да. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GeorgyBey 0 31 января, 2016 Опубликовано 31 января, 2016 · Жалоба Спасибо за ответ! Потому и пишу, что не могу "разоблачить чудо" :crying: Уже третий день... Содержимое флэша сверил - соответствует. Можете сформулировать - чем отличается состояние контроллера сразу после программирования, от включенного потом? Ресет на ситуацию НЕ влияет - сразу после заливки перезапуск восстанавливает правильную работу. После выкл-вкл питания восстанавливает НЕправильную работу. Похоже "собака зарылась" где-то "сбоку" и не связана ни с программой ни с её заливкой, а влияет на работу при снятии/подаче напряжения на какие-то выводы. Осталось перепаять эту TQFP-32... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RabidRabbit 0 31 января, 2016 Опубликовано 31 января, 2016 · Жалоба watchdog??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 1 февраля, 2016 Опубликовано 1 февраля, 2016 · Жалоба Использование в программе неинициализированных переменных? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GeorgyBey 0 1 февраля, 2016 Опубликовано 1 февраля, 2016 · Жалоба Использование в программе неинициализированных переменных? :1111493779: :1111493779: :1111493779: Господин Борщ - респект и уважуха! Это надо крупными буквами где-то в началах AVR-ов писать! Я "попался", судя по всему, на новых технологиях микропитания контроллеров (суффикс "Р" после номера модели). Раньше получалось присвоить r26 значение, а потом сделать посылку регистру ST X,..... забыв про старший байт этого Х-са. Теперь не проходит - при микропотреблениях на него ловится неизвестно какая хрень и посылка "ST X" посылает данные ХЗ куда. Причем, если Студия чистит забытые пользователем старшие байты, то после пропадания питания фокус вылазит, причем непрогнозируемо и не обязательно! СПАСИБО. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rx3apf 0 1 февраля, 2016 Опубликовано 1 февраля, 2016 · Жалоба После сброса по питанию регистры сами по себе не инициализируются, и это никак не связано с "микротехнологиями" (так у всего семейства AVR). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GeorgyBey 0 2 февраля, 2016 Опубликовано 2 февраля, 2016 · Жалоба Убрал все кроме таймера (в спящем режиме), при переполнении меняющего, в конце концов, включение одного из линейки светодиодов (все оставшееся - порты работают нормально). Меняю предделитель таймера, заливаю - меняется скорость переключения светодиодов. Отключаю питание, включаю питание - задержки НЕТ (писал выше). Вписал очистку старшего байта Х-пары, проблема ушла! Откуда и восторженный вопль (выше). Как оказалось -рановато :smile3046: Начинаю включать АЦП по окончании задержки - срыв установок таймера, как и при перетыке питания ! Доизгалялся с установками АЦП - выяснилось, что установка маски прерывания АЦП (ADIE) кошмарит таймер! Идиотизм. Заменил контроллер - идиотизм исчез. Выходит кристалл подпорченный был! Это, плюс моё нубство прилично напрягают. Хотя способствуют углубленному изучению предмета :) Сейчас вот пытаюсь заставить работать АЦП - даташит Меги в соседнем окне, с английским практически без проблем, а проблема опять на уровне идиотизма - либо не запускается, либо виснет. И с ручным запуском (ADSC), и с переполнением счетчика (ADATE+ADTS) ... :cranky: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mempfis_ 0 2 февраля, 2016 Опубликовано 2 февраля, 2016 · Жалоба Вписал очистку старшего байта Х-пары, проблема ушла!... Сейчас вот пытаюсь заставить работать АЦП... проблема опять на уровне идиотизма - либо не запускается, либо виснет... Попробуйте начать писать под эти AVRки на С, если конечно не стоит задача написать всё на ассемблере. Оставьте работу с регистрами компилятору, а сами займитесь программой. Ни Вы, ни кто-либо другой не оценит в будущем то время, которое было затрачено на написание полурабочего непереносимого ассемблерного кода. IAR, WinAVR, Code Vision - доступные "бесплатные" компиляторы Вам в помощь. А также масса примеров с форума и интернета, написанные по большей части на С. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GeorgyBey 0 8 февраля, 2016 Опубликовано 8 февраля, 2016 · Жалоба Спасибо за внимание, НО, я еще и удовольствие и понимание получаю (в смысле ассемблера), а план "не жмет". Кстати. текущий идиотизм был побежден и достоин записи в анналы. Формулирую : Вызвав режим SLEEP, нужно не забывать его выключать в возникшем прерывании :twak: Теперь прошу помощи в следующем (идиотизме :) ) : Поскольку работаю с батареей, присвоил регистрам r1...r8 имена "Cell_1", "Cell_2" .. и т.п. Просканировал-обмерил ячейки, записал в соответствующие регистры, полез Dragon-ом через Debag-wire посмотрел - :blink: - померяно правильно (величина), но вот записано в регистры на единицу бОльшие! Т.е. Cell_1 в r2, Cell_2 в r3 ... Cell_7 в r8? а Cell_8 х.з. куда... ЧТО не так?! Кто знает? PS результат (8-бит) считываю во временный регистр (r22), корректирую "по факту" (inc... или dec...) и копирую "mov r1,r22", а пишет в r2 вместо r1. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 8 февраля, 2016 Опубликовано 8 февраля, 2016 · Жалоба НО, я еще и удовольствие и понимание получаю (в смысле ассемблера), а план "не жмет".Неужто господин Шепелев из ru.embedded? Имя и подход совпадают, правда тот был из Харькова... но вот записано в регистры на единицу бОльшие! Т.е. Cell_1 в r2, Cell_2 в r3 ... Cell_7 в r8? а Cell_8 х.з. куда... ЧТО не так?! Кто знает? Вероятно, телепаты, способные мысленно представить ваш код и найти в нем ошибку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GeorgyBey 0 8 февраля, 2016 Опубликовано 8 февраля, 2016 · Жалоба НЕ! :) Меня зовут Георгий Владимирович. Когда-то турки в Стамбуле, где работал лет 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 ;| ОТАКЭ :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 9 февраля, 2016 Опубликовано 9 февраля, 2016 · Жалоба inc TM7 inc TM7 inc TM7 inc TM7 inc TM7 inc TM7 == subi TM7,-6 И это все .def какие есть в программе или ещё где-то Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GeorgyBey 0 10 февраля, 2016 Опубликовано 10 февраля, 2016 · Жалоба .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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться