Перейти к содержанию
    

Опять Мега48PA, нюансы программирования

Устройство ВНЕШНИМ дифференциальным мультиплексором опрашивает цепочку ячеек, циклически.

Мега48 выдает на порты В и С нужные сочетания сигналов.

Для устаканивания процесса переключения делается задержка на счетчике (любом).

Программируем через ISP - все исправно моргает. RESET срабатывает штатно.

Отключаю питание, через несколько секунд включаю - моргание учащается раз в 10! Счетчик ВХОДИТ в сон (IDLE) {если убрать команду Sleep моргает еще быстрее}.

Предделитель - пофигу, как и счетчик 0й, 1й или 2й. Впечатление, что счетчик входит в процесс, по Sleep-у останавливается счетчик команд, потом нечто прерывает задержку и цикл опроса продолжается....

Все, что не относится к данному процессу (АЦП и его предустановки, подпрограммы обслуживания других цепей) закомментировано.

Попутно : Знает ли история факты "порчи" контроллера ИЗНУТРИ?

В смысле НЕ сожженый Порт, а, к примеру, ячейки FLASH умершие до состояния ОЗУ ?

А то получается, что ЧАСТЬ ПРАВИЛЬНО распиханного по регистрам, после снятия питания пропадает.

Или, "где сАбака зарылась"? :wacko:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за ответ! Потому и пишу, что не могу "разоблачить чудо" :crying: Уже третий день...

Содержимое флэша сверил - соответствует.

Можете сформулировать - чем отличается состояние контроллера сразу после программирования, от включенного потом?

Ресет на ситуацию НЕ влияет - сразу после заливки перезапуск восстанавливает правильную работу.

После выкл-вкл питания восстанавливает НЕправильную работу.

Похоже "собака зарылась" где-то "сбоку" и не связана ни с программой ни с её заливкой, а влияет на работу при снятии/подаче напряжения на какие-то выводы.

Осталось перепаять эту TQFP-32...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

:1111493779: :1111493779: :1111493779:

Господин Борщ - респект и уважуха!

Это надо крупными буквами где-то в началах AVR-ов писать!

Я "попался", судя по всему, на новых технологиях микропитания контроллеров (суффикс "Р" после номера модели).

Раньше получалось присвоить r26 значение, а потом сделать посылку регистру ST X,..... забыв про старший байт этого Х-са.

Теперь не проходит - при микропотреблениях на него ловится неизвестно какая хрень и посылка "ST X" посылает данные ХЗ куда.

Причем, если Студия чистит забытые пользователем старшие байты, то после пропадания питания фокус вылазит, причем непрогнозируемо и не обязательно!

СПАСИБО.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

После сброса по питанию регистры сами по себе не инициализируются, и это никак не связано с "микротехнологиями" (так у всего семейства AVR).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Убрал все кроме таймера (в спящем режиме), при переполнении меняющего, в конце концов, включение одного из линейки светодиодов (все оставшееся - порты работают нормально). Меняю предделитель таймера, заливаю - меняется скорость переключения светодиодов. Отключаю питание, включаю питание - задержки НЕТ (писал выше). Вписал очистку старшего байта Х-пары, проблема ушла!

Откуда и восторженный вопль (выше). Как оказалось -рановато :smile3046:

Начинаю включать АЦП по окончании задержки - срыв установок таймера, как и при перетыке питания ! Доизгалялся с установками АЦП - выяснилось, что установка маски прерывания АЦП (ADIE) кошмарит таймер! Идиотизм.

Заменил контроллер - идиотизм исчез. Выходит кристалл подпорченный был! Это, плюс моё нубство прилично напрягают.

Хотя способствуют углубленному изучению предмета :)

Сейчас вот пытаюсь заставить работать АЦП - даташит Меги в соседнем окне, с английским практически без проблем, а проблема опять на уровне идиотизма - либо не запускается, либо виснет. И с ручным запуском (ADSC), и с переполнением счетчика (ADATE+ADTS) ... :biggrin: :cranky:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вписал очистку старшего байта Х-пары, проблема ушла!...

Сейчас вот пытаюсь заставить работать АЦП...

проблема опять на уровне идиотизма - либо не запускается, либо виснет...

 

Попробуйте начать писать под эти AVRки на С, если конечно не стоит задача написать всё на ассемблере. Оставьте работу с регистрами компилятору, а сами займитесь программой.

Ни Вы, ни кто-либо другой не оценит в будущем то время, которое было затрачено на написание полурабочего непереносимого ассемблерного кода.

IAR, WinAVR, Code Vision - доступные "бесплатные" компиляторы Вам в помощь. А также масса примеров с форума и интернета, написанные по большей части на С.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за внимание, НО, я еще и удовольствие и понимание получаю (в смысле ассемблера), а план "не жмет".

Кстати. текущий идиотизм был побежден и достоин записи в анналы. Формулирую :

Вызвав режим 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

НО, я еще и удовольствие и понимание получаю (в смысле ассемблера), а план "не жмет".
Неужто господин Шепелев из ru.embedded? Имя и подход совпадают, правда тот был из Харькова...

 

но вот записано в регистры на единицу бОльшие!

Т.е. Cell_1 в r2, Cell_2 в r3 ... Cell_7 в r8? а Cell_8 х.з. куда...

ЧТО не так?! Кто знает?

Вероятно, телепаты, способные мысленно представить ваш код и найти в нем ошибку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

НЕ! :) Меня зовут Георгий Владимирович. Когда-то турки в Стамбуле, где работал лет 5 дали кликуху, пользуемую как ник.

Я везде и давно уже GBey, только тут у вас "старым" остался.

Какой там "код"!? :biggrin:

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:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

inc TM7
    inc TM7
    inc TM7
    inc TM7
    inc TM7
    inc TM7

==

subi TM7,-6

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

.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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...