|
ATtiny 2313A почему то сбрасывается иногда. |
|
|
|
Apr 19 2014, 05:50
|
Участник

Группа: Участник
Сообщений: 22
Регистрация: 2-11-10
Пользователь №: 60 610

|
Здравствуйте. Такая проблема. Есть очень простая схема счетчика появления фазы в сети 220В. Схему прикрепил.
На PA0 подается напряжение с 5-ти вольтового адаптера от мобилы(с помощью этого адаптера определяется появилась ли фаза). Питает микроконтроллер другой адаптер от мобилы, на этот адаптер постоянно напряжение подается 220В. PA1 - висит в воздухе. Выводы PB0-PB7 и PD0-PD6 зажигают светодиоды, отображают счетчик появления фазы в двоичном виде. Все бы хорошо, но почему-то иногда при очередном появлении фазы, счетчик например должен показать "5", а вместо этого микроконтроллер похоже сбрасывается, и счетчик показывает "1". Редко это случается, ловил такую ситуацию только вначале, где то после того как микроконтроллер проработал минуту, но возможно и потом сбрасывается, не знаю точно. Код для мк тоже приведу, я в этой области любитель, поэтому код возможно покажется уродским  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: ;====================================================================== В чем может быть проблема?
Сообщение отредактировал IgorKossak - Apr 19 2014, 19:24
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
|
|
|
|
|
Apr 19 2014, 13:04
|
Гуру
     
Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295

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

Группа: Участник
Сообщений: 22
Регистрация: 2-11-10
Пользователь №: 60 610

|
Цитата(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? он вобще в программе не используется...
|
|
|
|
|
Apr 20 2014, 14:59
|
Гуру
     
Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295

|
Цитата(Banks @ Apr 19 2014, 21:13)  1.Какие адаптеры импульсные или трансформаторные не могу сказать, завтра сфоткаю, но они оригинальные зарядные устройства для мобил. 2.Напряжение на выходе обоих адаптеров смотрел, было 4.5в-5.5в. 4.Второй зарядник(выход которого идет на PA0) тупо включается в сетевой фильтр, фаза пропадает за счет выключения кнопки на сетевом фильтре. 5.Принципиально PA1 на вывод лог.0? он вобще в программе не используется... 1. Выясните, это очень важно. Важен именно тип зарядника, а не его происхождение. Еще очень советую задействовать имеющийся в вашем МК супервизор (BOD). 2. А с пульсациями как дела обстоят ? 5. Да, в программе настройте эту ножку на вывод лог. нуля. Кстати, при пропадании основного питания возможна запитка МК от второго зарядника через защитный диод линии PA.1. Вы в своей схеме это как-то учитываете ?
|
|
|
|
|
Apr 22 2014, 17:41
|

Местный
  
Группа: Свой
Сообщений: 253
Регистрация: 28-12-07
Из: Украина г. Первомайск
Пользователь №: 33 716

|
Для начала нужно инициализировать векторы прерываний. Пример: 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 26 2014, 09:47
|
Участник

Группа: Участник
Сообщений: 22
Регистрация: 2-11-10
Пользователь №: 60 610

|
Просили выложить зарядные устройства: 1. Используемое для питания:
2. Используемое для определения фазы:
3. Осциллограммы при появлении фазы
Голубой график - это напряжение на ноге сброса. Красный - напряжение на ноге PA0. Все четко. Один фиг сбрасывается контроллер. А не может быть что WDT сбрасывает? Что может сбросить контроллер вобще?
|
|
|
|
|
Apr 28 2014, 10:15
|

Местный
  
Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658

|
Цитата(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в. И смотрите что у вас получиться
|
|
|
|
|
Apr 28 2014, 11:09
|
Участник

Группа: Участник
Сообщений: 22
Регистрация: 2-11-10
Пользователь №: 60 610

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

Местный
  
Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658

|
Цитата(Banks @ Apr 28 2014, 14:09)  Все там нормально считается, посмотрите еще раз программу. Да действительно , программа тут не причем. Еще порекомендую по питанию и по входу поставить кроме электролитов керамические кондеры 0,1-0,01мкФ
|
|
|
|
|
Apr 29 2014, 11:06
|

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

|
Просто удалил всё лишнее 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:
Сообщение отредактировал ILYAUL - Apr 29 2014, 11:45
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
--------------------
Закон Мерфи:
Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|