Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ATtiny 2313A почему то сбрасывается иногда.
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Banks
Здравствуйте. Такая проблема. Есть очень простая схема счетчика появления фазы в сети 220В. Схему прикрепил.
Нажмите для просмотра прикрепленного файла
На PA0 подается напряжение с 5-ти вольтового адаптера от мобилы(с помощью этого адаптера определяется появилась ли фаза). Питает микроконтроллер другой адаптер от мобилы, на этот адаптер постоянно напряжение подается 220В. PA1 - висит в воздухе. Выводы PB0-PB7 и PD0-PD6 зажигают светодиоды, отображают счетчик появления фазы в двоичном виде. Все бы хорошо, но почему-то иногда при очередном появлении фазы, счетчик например должен показать "5", а вместо этого микроконтроллер похоже сбрасывается, и счетчик показывает "1". Редко это случается, ловил такую ситуацию только вначале, где то после того как микроконтроллер проработал минуту, но возможно и потом сбрасывается, не знаю точно. Код для мк тоже приведу, я в этой области любитель, поэтому код возможно покажется уродским biggrin.gif
CODE
.device ATtiny2313A
.include "tn2313Adef.inc"
.def SlopReg=R16
.def mask=R17

;clock = 1 MHz
;=======================================================================
Start: rjmp Init;


Init:
ldi SlopReg,0b00000000;
out DDRA,SlopReg;

ldi SlopReg,0b11111111;
out DDRB,SlopReg

ldi SlopReg,0b01111111;
out DDRD,SlopReg;

ldi SlopReg,0b11111110;
out PortA,SlopReg ;

ldi SlopReg,0b00000000; Led0 - Led7
out PortB,SlopReg

ldi SlopReg,0b10000000; Led8 - Led14
out PortD,SlopReg ;

Begin: ldi mask,0b00000001; маска для работы
ldi Yh,0x00 ; счетчик
ldi Yl,0x00


; Ищем состояние 0
State0:
in SlopReg,PinA
and SlopReg,mask
brne State0

; Задержка
ldi Xh,0x7f
ldi Xl,0xff
Delay1: sbiw Xh:Xl,1
brne delay1

; Еще раз проверяем нолик ли, если нет то все сначало
State1: in SlopReg,PinA
and SlopReg,mask
brne State0


; Ищем состояние 1
State2: in SlopReg,PinA
and SlopReg,mask
breq State2

; Задержка
ldi Xh,0x7f
ldi Xl,0xff
Delay2: sbiw Xh:Xl,1
brne delay2

; Еще раз проверяем единичка ли, если нет то все сначало
State3: in SlopReg,PinA
and SlopReg,mask
breq State0


adiw Yh:Yl,1

;Вывод результата

out PortB,Yl

ldi SlopReg,0b10000000
or SlopReg,Yh
out PortD,SlopReg;out Led8 - Led14

rjmp State0

End:
;======================================================================

В чем может быть проблема?
kovigor
Цитата(Banks @ Apr 19 2014, 08:50) *
Есть очень простая схема счетчика появления фазы в сети 220В.
...
В чем может быть проблема?

1. Питающий схему зарядник и питаемый зарядник импульсный или трансформаторный ?
2. Если на заряднике написано, что он выдает 5В, то это совсем не обязательно так и есть. При малых нагрузках они обычно выдают гораздо больше. 7В - вполне реальная величина.
3. А когда нет фазы, МК от чего питается ? Или в таком случае он вообще не питается ?
4. Покажите часть схемы, подающую питание на второй зарядник.
5. Висящий в воздухе PA.1 настройте на вывод лог.0 ...
Banks
Цитата(kovigor @ Apr 19 2014, 17:04) *
1. Питающий схему зарядник и питаемый зарядник импульсный или трансформаторный ?
2. Если на заряднике написано, что он выдает 5В, то это совсем не обязательно так и есть. При малых нагрузках они обычно выдают гораздо больше. 7В - вполне реальная величина.
3. А когда нет фазы, МК от чего питается ? Или в таком случае он вообще не питается ?
4. Покажите часть схемы, подающую питание на второй зарядник.
5. Висящий в воздухе PA.1 настройте на вывод лог.0 ...

3.На мою схему идут выходы 2-х зарядных устройств, у одного зарядного устройства фаза никогда не пропадает, он является питанием для моей схемы. У другого фаза периодически пропадает, выход(+) его идет на PA0, минус на общий.
1.Какие адаптеры импульсные или трансформаторные не могу сказать, завтра сфоткаю, но они оригинальные зарядные устройства для мобил. 2.Напряжение на выходе обоих адаптеров смотрел, было 4.5в-5.5в.
4.Второй зарядник(выход которого идет на PA0) тупо включается в сетевой фильтр, фаза пропадает за счет выключения кнопки на сетевом фильтре.
5.Принципиально PA1 на вывод лог.0? он вобще в программе не используется...
kovigor
Цитата(Banks @ Apr 19 2014, 21:13) *
1.Какие адаптеры импульсные или трансформаторные не могу сказать, завтра сфоткаю, но они оригинальные зарядные устройства для мобил. 2.Напряжение на выходе обоих адаптеров смотрел, было 4.5в-5.5в.
4.Второй зарядник(выход которого идет на PA0) тупо включается в сетевой фильтр, фаза пропадает за счет выключения кнопки на сетевом фильтре.
5.Принципиально PA1 на вывод лог.0? он вобще в программе не используется...

1. Выясните, это очень важно. Важен именно тип зарядника, а не его происхождение. Еще очень советую задействовать имеющийся в вашем МК супервизор (BOD).
2. А с пульсациями как дела обстоят ?
5. Да, в программе настройте эту ножку на вывод лог. нуля. Кстати, при пропадании основного питания возможна запитка МК от второго зарядника через защитный диод линии PA.1. Вы в своей схеме это как-то учитываете ?
pavel-pervomaysk
Для начала нужно инициализировать векторы прерываний.
Пример:

CODE

.nolist ;
.include "tn2313adef.inc" ;
.list ;
.device ATtiny2313A ;


.cseg
.org 0
rjmp RESET ; Reset Handler
INT0_: ; External Interrupt0 Handler
reti
INT1_: ; External Interrupt1 Handler
reti
TIM1_CAPT: ; Timer1 Capture Handler
reti
TIM1_COMPA: ; Timer1 CompareA Handler
reti
TIM1_OVF: ; Timer1 Overflow Handler
rjmp flashing ;
TIM0_OVF: ; Timer0 Overflow Handler
reti
USART0_RXC: ; USART0 RX Complete Handler
reti
USART0_DRE: ; USART0,UDR Empty Handler
reti
USART0_TXC: ; USART0 TX Complete Handler
reti
ANA_COMP: ; Analog Comparator Handler
reti
PCINT: ; Pin Change Interrupt
reti
TIMER1_COMPB: ; Timer1 Compare B Handler
reti
TIMER0_COMPA: ; Timer0 Compare A Handler
reti
TIMER0_COMPB: ; Timer0 Compare B Handler
reti
USI_START: ; Usi Start Handler
reti
USI_OVERFLOW: ; USI Overflow Handler
reti
EE_READY: ; EEPROM Ready Handler
reti
WDT_OVERFLOW: ; Watchdog Overflow Handler
reti

; здесь я описыаю проект, на будущее
info: ; 42 bytes
.db "27.01.2014pavel-pervomaysk"
.db "7.3728MHz "
.db "V 1.02" ; Версия прошивки



RESET: ; инициализация
; STACK INIT
ldi tmp,low(ramend) ;
out spl,tmp ;


; далее вся остальная инициализация.
; опрашивать фазу лучше по прерыванию
; INT0, и немного переписать программу, если надо, помогу.
Сергей Борщ
Цитата(Павлик @ Apr 22 2014, 20:41) *
Для начала нужно инициализировать векторы прерываний.
Зачем? Если прерывание не разрешено - его обработчик никогда не вызовется и он не нужен. Если вызывается прерывание, обработчик которого не написан - это ошибка в программе и она должна быть устранена.
RabidRabbit
Цитата(Banks @ Apr 19 2014, 22:13) *
5.Принципиально PA1 на вывод лог.0? он вобще в программе не используется...

Не используется - можно про неё забыть, если Вы не заботитесь о сверхнизком потреблении Вашего устройства. А если заботитесь - можно установить ногу на вход и включить внутренний подтягивающий резистор. Настраивать на выход я бы не стал - наличие активного уровня на неподключенной ноге лично мне не нравится.
Banks
Просили выложить зарядные устройства:
1. Используемое для питания:
Нажмите для просмотра прикрепленного файла

2. Используемое для определения фазы:
Нажмите для просмотра прикрепленного файла

3. Осциллограммы при появлении фазы
Нажмите для просмотра прикрепленного файла
Голубой график - это напряжение на ноге сброса. Красный - напряжение на ноге PA0. Все четко.
Один фиг сбрасывается контроллер. А не может быть что WDT сбрасывает? Что может сбросить контроллер вобще?
muravei
Цитата(Banks @ Apr 26 2014, 13:47) *
1. Используемое для питания:

Когда все не понятно, лучше взять батарейки.
kovigor
Цитата(muravei @ Apr 26 2014, 14:52) *
Когда все не понятно, лучше взять батарейки.

Подозреваю, что у человека там совсем не 5.1 и не 5.2В, а больше, особенно в моменты включения и выключения, а также при скачках нагрузки. Попадавшиеся мне китайские зарядники могли выдать гораздо больше, чем на них было написано. Посему присоединяюсь к совету - вместо каждого из зарядников по очереди (или одновременно) использовать обычные батарейки ...
zombi
1. Попробуйте выход контролируемого БП подключить к PA0 через оптрон и полностью развяжите земли.
2. Электролит по питанию мк добавьте.
MaxiMuz
Цитата(Banks @ Apr 19 2014, 08:50) *
Здравствуйте. Такая проблема. Есть очень простая схема счетчика появления фазы в сети 220В. Схему прикрепил.
Нажмите для просмотра прикрепленного файла
На PA0 подается напряжение с 5-ти вольтового адаптера от мобилы(с помощью этого адаптера определяется появилась ли фаза). Питает микроконтроллер другой адаптер от мобилы, на этот адаптер постоянно напряжение подается 220В. PA1 - висит в воздухе. Выводы PB0-PB7 и PD0-PD6 зажигают светодиоды, отображают счетчик появления фазы в двоичном виде.
CODE
.device ATtiny2313A
.include "tn2313Adef.inc"
.def SlopReg=R16
.def mask=R17

;clock = 1 MHz
;=======================================================================
Start: rjmp Init;


Init:
ldi SlopReg,0b00000000;
out DDRA,SlopReg;

ldi SlopReg,0b11111111;
out DDRB,SlopReg

ldi SlopReg,0b01111111;
out DDRD,SlopReg;

ldi SlopReg,0b11111110;
out PortA,SlopReg ;

ldi SlopReg,0b00000000; Led0 - Led7
out PortB,SlopReg

ldi SlopReg,0b10000000; Led8 - Led14
out PortD,SlopReg ;

Begin: ldi mask,0b00000001; маска для работы
ldi Yh,0x00 ; счетчик
ldi Yl,0x00


; Ищем состояние 0
State0:
in SlopReg,PinA
and SlopReg,mask
brne State0

; Задержка
ldi Xh,0x7f
ldi Xl,0xff
Delay1: sbiw Xh:Xl,1
brne delay1

; Еще раз проверяем нолик ли, если нет то все сначало
State1: in SlopReg,PinA
and SlopReg,mask
brne State0


; Ищем состояние 1
State2: in SlopReg,PinA
and SlopReg,mask
breq State2

; Задержка
ldi Xh,0x7f
ldi Xl,0xff
Delay2: sbiw Xh:Xl,1
brne delay2

; Еще раз проверяем единичка ли, если нет то все сначало
State3: in SlopReg,PinA
and SlopReg,mask
breq State0


adiw Yh:Yl,1

;Вывод результата

out PortB,Yl

ldi SlopReg,0b10000000
or SlopReg,Yh
out PortD,SlopReg;out Led8 - Led14

rjmp State0

End:
;======================================================================

В чем может быть проблема?

При беглом просмотре программки, сделал вывод что при каждом появлении 1 на PA0 у вас включается программный счетчик и считает пока эта 1 не пропадет. Соответственно единица пропала - сколько там насчитал счетчик неизвестно! Проверьте алгоритм , подтяните вывод резистором к нулю чтобы при отсутствии напряжения на нем гарантированно был "0" и к примеру кнопкой подавайте на него питание +5в. И смотрите что у вас получиться
Banks
Цитата(MaxiMuz @ Apr 28 2014, 14:15) *
При беглом просмотре программки, сделал вывод что при каждом появлении 1 на PA0 у вас включается программный счетчик и считает пока эта 1 не пропадет. Соответственно единица пропала - сколько там насчитал счетчик неизвестно! Проверьте алгоритм , подтяните вывод резистором к нулю чтобы при отсутствии напряжения на нем гарантированно был "0" и к примеру кнопкой подавайте на него питание +5в. И смотрите что у вас получиться

Все там нормально считается, посмотрите еще раз программу.


Буду заменять адаптеры чем-нибудь и смотреть что получится. Спасибо всем за ответы wink.gif
MaxiMuz
Цитата(Banks @ Apr 28 2014, 14:09) *
Все там нормально считается, посмотрите еще раз программу.

Да действительно , программа тут не причем.
Еще порекомендую по питанию и по входу поставить кроме электролитов керамические кондеры 0,1-0,01мкФ
ILYAUL
Просто удалил всё лишнее
CODE
.device ATtiny2313A
.include "tn2313Adef.inc"
.def SlopReg=R16

;clock = 1 MHz
;=======================================================================
Start: rjmp Init;


Init:
ldi SlopReg,0b00000000;
out DDRA,SlopReg;
out PortB,SlopReg; Led0 - Led7

ldi SlopReg,0b11111111;
out DDRB,SlopReg
out DDRD,SlopReg;

ldi SlopReg,0b11111110;
out PortA,SlopReg ;


ldi SlopReg,0b10000000; Led8 - Led14
out PortD,SlopReg ;

; Ищем состояние 0
State0: sbic PINA,PA0
rjmp PC-1

; Задержка
rcall DELAY

; Еще раз проверяем нолик ли, если нет то все сначало
sbic PINA,PA0
rjmp State0


; Ищем состояние 1
sbis PINA,PA0
rjmp PC-1
; Задержка
rcall DELAY


; Еще раз проверяем единичка ли, если нет то все сначала
sbis PINA,PA0
rjmp State0


adiw Yh:Yl,1

;Вывод результата

out PortB,Yl

ldi SlopReg,0b10000000
or SlopReg,Yh
out PortD,SlopReg;out Led8 - Led14
rjmp State0
;******************************************************
DELAY:
ldi Xh,0x7f
ldi Xl,0xff
Delays: sbiw Xh:Xl,1
brne delays
ret
;*******************************************************
End:
zombi
Цитата(ILYAUL @ Apr 29 2014, 14:06) *
Просто удалил всё лишнее

Краткость - сестра таланта.
Давненько на 2313 ничего не писал. Там инит стека не нужен?
ILYAUL
По хорошему нужен , даже когда нет стэковых операций . Но в моём случае , я просто про него забыл, каюсь sad.gif(
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.