Banks 0 19 апреля, 2014 Опубликовано 19 апреля, 2014 (изменено) · Жалоба Здравствуйте. Такая проблема. Есть очень простая схема счетчика появления фазы в сети 220В. Схему прикрепил. На PA0 подается напряжение с 5-ти вольтового адаптера от мобилы(с помощью этого адаптера определяется появилась ли фаза). Питает микроконтроллер другой адаптер от мобилы, на этот адаптер постоянно напряжение подается 220В. PA1 - висит в воздухе. Выводы PB0-PB7 и PD0-PD6 зажигают светодиоды, отображают счетчик появления фазы в двоичном виде. Все бы хорошо, но почему-то иногда при очередном появлении фазы, счетчик например должен показать "5", а вместо этого микроконтроллер похоже сбрасывается, и счетчик показывает "1". Редко это случается, ловил такую ситуацию только вначале, где то после того как микроконтроллер проработал минуту, но возможно и потом сбрасывается, не знаю точно. Код для мк тоже приведу, я в этой области любитель, поэтому код возможно покажется уродским .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: ;====================================================================== В чем может быть проблема? Изменено 19 апреля, 2014 пользователем IgorKossak [codebox] для длинного кода, [code] - для короткого!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 5 19 апреля, 2014 Опубликовано 19 апреля, 2014 · Жалоба Есть очень простая схема счетчика появления фазы в сети 220В. ... В чем может быть проблема? 1. Питающий схему зарядник и питаемый зарядник импульсный или трансформаторный ? 2. Если на заряднике написано, что он выдает 5В, то это совсем не обязательно так и есть. При малых нагрузках они обычно выдают гораздо больше. 7В - вполне реальная величина. 3. А когда нет фазы, МК от чего питается ? Или в таком случае он вообще не питается ? 4. Покажите часть схемы, подающую питание на второй зарядник. 5. Висящий в воздухе PA.1 настройте на вывод лог.0 ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Banks 0 19 апреля, 2014 Опубликовано 19 апреля, 2014 · Жалоба 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 5 20 апреля, 2014 Опубликовано 20 апреля, 2014 · Жалоба 1.Какие адаптеры импульсные или трансформаторные не могу сказать, завтра сфоткаю, но они оригинальные зарядные устройства для мобил. 2.Напряжение на выходе обоих адаптеров смотрел, было 4.5в-5.5в. 4.Второй зарядник(выход которого идет на PA0) тупо включается в сетевой фильтр, фаза пропадает за счет выключения кнопки на сетевом фильтре. 5.Принципиально PA1 на вывод лог.0? он вобще в программе не используется... 1. Выясните, это очень важно. Важен именно тип зарядника, а не его происхождение. Еще очень советую задействовать имеющийся в вашем МК супервизор (BOD). 2. А с пульсациями как дела обстоят ? 5. Да, в программе настройте эту ножку на вывод лог. нуля. Кстати, при пропадании основного питания возможна запитка МК от второго зарядника через защитный диод линии PA.1. Вы в своей схеме это как-то учитываете ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pavel-pervomaysk 0 22 апреля, 2014 Опубликовано 22 апреля, 2014 · Жалоба Для начала нужно инициализировать векторы прерываний. Пример: .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, и немного переписать программу, если надо, помогу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 121 23 апреля, 2014 Опубликовано 23 апреля, 2014 · Жалоба Для начала нужно инициализировать векторы прерываний.Зачем? Если прерывание не разрешено - его обработчик никогда не вызовется и он не нужен. Если вызывается прерывание, обработчик которого не написан - это ошибка в программе и она должна быть устранена. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RabidRabbit 0 23 апреля, 2014 Опубликовано 23 апреля, 2014 · Жалоба 5.Принципиально PA1 на вывод лог.0? он вобще в программе не используется... Не используется - можно про неё забыть, если Вы не заботитесь о сверхнизком потреблении Вашего устройства. А если заботитесь - можно установить ногу на вход и включить внутренний подтягивающий резистор. Настраивать на выход я бы не стал - наличие активного уровня на неподключенной ноге лично мне не нравится. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Banks 0 26 апреля, 2014 Опубликовано 26 апреля, 2014 · Жалоба Просили выложить зарядные устройства: 1. Используемое для питания: 2. Используемое для определения фазы: 3. Осциллограммы при появлении фазы Голубой график - это напряжение на ноге сброса. Красный - напряжение на ноге PA0. Все четко. Один фиг сбрасывается контроллер. А не может быть что WDT сбрасывает? Что может сбросить контроллер вобще? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
muravei 3 26 апреля, 2014 Опубликовано 26 апреля, 2014 · Жалоба 1. Используемое для питания: Когда все не понятно, лучше взять батарейки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 5 26 апреля, 2014 Опубликовано 26 апреля, 2014 · Жалоба Когда все не понятно, лучше взять батарейки. Подозреваю, что у человека там совсем не 5.1 и не 5.2В, а больше, особенно в моменты включения и выключения, а также при скачках нагрузки. Попадавшиеся мне китайские зарядники могли выдать гораздо больше, чем на них было написано. Посему присоединяюсь к совету - вместо каждого из зарядников по очереди (или одновременно) использовать обычные батарейки ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 26 апреля, 2014 Опубликовано 26 апреля, 2014 · Жалоба 1. Попробуйте выход контролируемого БП подключить к PA0 через оптрон и полностью развяжите земли. 2. Электролит по питанию мк добавьте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MaxiMuz 0 28 апреля, 2014 Опубликовано 28 апреля, 2014 · Жалоба Здравствуйте. Такая проблема. Есть очень простая схема счетчика появления фазы в сети 220В. Схему прикрепил. На 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в. И смотрите что у вас получиться Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Banks 0 28 апреля, 2014 Опубликовано 28 апреля, 2014 · Жалоба При беглом просмотре программки, сделал вывод что при каждом появлении 1 на PA0 у вас включается программный счетчик и считает пока эта 1 не пропадет. Соответственно единица пропала - сколько там насчитал счетчик неизвестно! Проверьте алгоритм , подтяните вывод резистором к нулю чтобы при отсутствии напряжения на нем гарантированно был "0" и к примеру кнопкой подавайте на него питание +5в. И смотрите что у вас получиться Все там нормально считается, посмотрите еще раз программу. Буду заменять адаптеры чем-нибудь и смотреть что получится. Спасибо всем за ответы ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MaxiMuz 0 29 апреля, 2014 Опубликовано 29 апреля, 2014 · Жалоба Все там нормально считается, посмотрите еще раз программу. Да действительно , программа тут не причем. Еще порекомендую по питанию и по входу поставить кроме электролитов керамические кондеры 0,1-0,01мкФ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 29 апреля, 2014 Опубликовано 29 апреля, 2014 (изменено) · Жалоба Просто удалил всё лишнее .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: Изменено 29 апреля, 2014 пользователем ILYAUL [codebox] для длинного кода, [code] - для короткого!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться