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

ATtiny 2313A почему то сбрасывается иногда.

Здравствуйте. Такая проблема. Есть очень простая схема счетчика появления фазы в сети 220В. Схему прикрепил.

post-60610-1397886439_thumb.jpg

На PA0 подается напряжение с 5-ти вольтового адаптера от мобилы(с помощью этого адаптера определяется появилась ли фаза). Питает микроконтроллер другой адаптер от мобилы, на этот адаптер постоянно напряжение подается 220В. PA1 - висит в воздухе. Выводы PB0-PB7 и PD0-PD6 зажигают светодиоды, отображают счетчик появления фазы в двоичном виде. Все бы хорошо, но почему-то иногда при очередном появлении фазы, счетчик например должен показать "5", а вместо этого микроконтроллер похоже сбрасывается, и счетчик показывает "1". Редко это случается, ловил такую ситуацию только вначале, где то после того как микроконтроллер проработал минуту, но возможно и потом сбрасывается, не знаю точно. Код для мк тоже приведу, я в этой области любитель, поэтому код возможно покажется уродским :biggrin:

 .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:
;======================================================================

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

Изменено пользователем IgorKossak
[codebox] для длинного кода, [code] - для короткого!!!

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


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

Есть очень простая схема счетчика появления фазы в сети 220В.

...

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

1. Питающий схему зарядник и питаемый зарядник импульсный или трансформаторный ?

2. Если на заряднике написано, что он выдает 5В, то это совсем не обязательно так и есть. При малых нагрузках они обычно выдают гораздо больше. 7В - вполне реальная величина.

3. А когда нет фазы, МК от чего питается ? Или в таком случае он вообще не питается ?

4. Покажите часть схемы, подающую питание на второй зарядник.

5. Висящий в воздухе PA.1 настройте на вывод лог.0 ...

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


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

1. Питающий схему зарядник и питаемый зарядник импульсный или трансформаторный ?

2. Если на заряднике написано, что он выдает 5В, то это совсем не обязательно так и есть. При малых нагрузках они обычно выдают гораздо больше. 7В - вполне реальная величина.

3. А когда нет фазы, МК от чего питается ? Или в таком случае он вообще не питается ?

4. Покажите часть схемы, подающую питание на второй зарядник.

5. Висящий в воздухе PA.1 настройте на вывод лог.0 ...

3.На мою схему идут выходы 2-х зарядных устройств, у одного зарядного устройства фаза никогда не пропадает, он является питанием для моей схемы. У другого фаза периодически пропадает, выход(+) его идет на PA0, минус на общий.

1.Какие адаптеры импульсные или трансформаторные не могу сказать, завтра сфоткаю, но они оригинальные зарядные устройства для мобил. 2.Напряжение на выходе обоих адаптеров смотрел, было 4.5в-5.5в.

4.Второй зарядник(выход которого идет на PA0) тупо включается в сетевой фильтр, фаза пропадает за счет выключения кнопки на сетевом фильтре.

5.Принципиально PA1 на вывод лог.0? он вобще в программе не используется...

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


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

1.Какие адаптеры импульсные или трансформаторные не могу сказать, завтра сфоткаю, но они оригинальные зарядные устройства для мобил. 2.Напряжение на выходе обоих адаптеров смотрел, было 4.5в-5.5в.

4.Второй зарядник(выход которого идет на PA0) тупо включается в сетевой фильтр, фаза пропадает за счет выключения кнопки на сетевом фильтре.

5.Принципиально PA1 на вывод лог.0? он вобще в программе не используется...

1. Выясните, это очень важно. Важен именно тип зарядника, а не его происхождение. Еще очень советую задействовать имеющийся в вашем МК супервизор (BOD).

2. А с пульсациями как дела обстоят ?

5. Да, в программе настройте эту ножку на вывод лог. нуля. Кстати, при пропадании основного питания возможна запитка МК от второго зарядника через защитный диод линии PA.1. Вы в своей схеме это как-то учитываете ?

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


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

Для начала нужно инициализировать векторы прерываний.

Пример:

 

.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, и немного переписать программу, если надо, помогу. 

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


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

Для начала нужно инициализировать векторы прерываний.
Зачем? Если прерывание не разрешено - его обработчик никогда не вызовется и он не нужен. Если вызывается прерывание, обработчик которого не написан - это ошибка в программе и она должна быть устранена.

 

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


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

5.Принципиально PA1 на вывод лог.0? он вобще в программе не используется...

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

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


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

Просили выложить зарядные устройства:

1. Используемое для питания:

post-60610-1398505279_thumb.jpg

 

2. Используемое для определения фазы:

post-60610-1398505287_thumb.jpg

 

3. Осциллограммы при появлении фазы

post-60610-1398505295_thumb.jpg

Голубой график - это напряжение на ноге сброса. Красный - напряжение на ноге PA0. Все четко.

Один фиг сбрасывается контроллер. А не может быть что WDT сбрасывает? Что может сбросить контроллер вобще?

 

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


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

Когда все не понятно, лучше взять батарейки.

Подозреваю, что у человека там совсем не 5.1 и не 5.2В, а больше, особенно в моменты включения и выключения, а также при скачках нагрузки. Попадавшиеся мне китайские зарядники могли выдать гораздо больше, чем на них было написано. Посему присоединяюсь к совету - вместо каждого из зарядников по очереди (или одновременно) использовать обычные батарейки ...

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


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

1. Попробуйте выход контролируемого БП подключить к PA0 через оптрон и полностью развяжите земли.

2. Электролит по питанию мк добавьте.

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


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

Здравствуйте. Такая проблема. Есть очень простая схема счетчика появления фазы в сети 220В. Схему прикрепил.

post-60610-1397886439_thumb.jpg

На PA0 подается напряжение с 5-ти вольтового адаптера от мобилы(с помощью этого адаптера определяется появилась ли фаза). Питает микроконтроллер другой адаптер от мобилы, на этот адаптер постоянно напряжение подается 220В. PA1 - висит в воздухе. Выводы PB0-PB7 и PD0-PD6 зажигают светодиоды, отображают счетчик появления фазы в двоичном виде.

 .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в. И смотрите что у вас получиться

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


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

При беглом просмотре программки, сделал вывод что при каждом появлении 1 на PA0 у вас включается программный счетчик и считает пока эта 1 не пропадет. Соответственно единица пропала - сколько там насчитал счетчик неизвестно! Проверьте алгоритм , подтяните вывод резистором к нулю чтобы при отсутствии напряжения на нем гарантированно был "0" и к примеру кнопкой подавайте на него питание +5в. И смотрите что у вас получиться

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

 

 

Буду заменять адаптеры чем-нибудь и смотреть что получится. Спасибо всем за ответы ;)

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


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

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

Да действительно , программа тут не причем.

Еще порекомендую по питанию и по входу поставить кроме электролитов керамические кондеры 0,1-0,01мкФ

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


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

Просто удалил всё лишнее

.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:

Изменено пользователем ILYAUL
[codebox] для длинного кода, [code] - для короткого!!!

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


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

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

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

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

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

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

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

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

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

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