Прошивка attiny2313 + тиристор bt136

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Сообщение GP1 »

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

переключение по флагу Т
обработка в Т1_OVF

жду реакции :tea:
Вложения
power3.rar
(2.18 КБ) 178 скачиваний
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Сообщение GP1 »

забыл исправить константу ms10
должно быть так:

Код: Выделить всё

.equ   ms10 = 25535             //0x63BF
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
aleks_bmw528
Встал на лапы
Сообщения: 122
Зарегистрирован: Вт ноя 17, 2009 11:05:02

Сообщение aleks_bmw528 »

GP1 !!!!
Прошу еще разок обьснить твои методы расчета таймеров по подробней, ни как неврублюсь !!! Зарание спасибо :?

режим 1:1 Normal

мощность 99% = 0.1мс // 65535-0.1мс/0.00025мс=65135 (0хFE70)
1% = 9,9мс // 65535-9,9мс/0.00025мс=25935 (0х654F)

и что значит ???
для случаев 100% и 0% мощности - особый случай, не трубующий работы Т1


вопрос по коду ???

Код: Выделить всё

;   cli      ; обязательно иначе получиш в TCNT1 хз-что
      ; и запись нового значения в power
      ; сбросить флаг Т чтобы чтобы цикл начался правильно
      ; сбросит флаг TOV1 он мог установиться за время вычисления
      ; а начинать надо точно с началом положительной полуволны!



1. почему ;cli запрет прерываний не использовал
2. сбросить флаг Т чтобы чтобы цикл начался
3. сбросить флаг TOV1 он мог установиться за время вычисления
а начинать надо точно с началом положительной полуволны!

2. T же уже сбросили во втором проходе T1!!!


чуть доработал таймер

Код: Выделить всё

T1_OVF:
        ;вкл упр. импульс   задержка > 2мкс (2.25мкс)
        sbi     OutPort, (1<<OutPin)
        ldi     tmp, 9
delay: 
        dec     tmp
        brne    del
        cbi     OutPort,(1<<OutPin)   
        ; проверка флага Т и ветвление
   brts   t1_001      ;если второй цикл переход
   ; грузим 10мс                  
   ldi   tmp,low(ms10)               
   ldi   tmp1,high(ms10)               
   out   TCNT1H,tmp1               
   out   TCNT1L,tmp               
   ; и меняем флаг Т на 1, для второго прохода      
   set                     
   rjmp   t1_exit
t1_001:
   ; отключаем T1
   ldi   tmp,T1_off
   out   TCCR1B,tmp
   ; записываем в счетчик Т1 текушего значения power
   ldi   tmp,low(power0)
   ldi   tmp1,high(power0)
   out   TCNT1H,tmp1
   out   TCNT1L,tmp
   ; таймер стоит, ничего не считает, в TCNT1 значение power!
   ; и меняем флаг Т на 0, для нового цикла
   clt
   ; Т1 готов к новому циклу
t1_exit:
   reti
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Сообщение GP1 »

Сначало о грустном.
вчера вечером гонял в симуляторе всплыл косяк:
я из обработчика убрал сохранение sreg, но потом пришел к выводу что оно надо.
по коду можно и так, главное чтобы отклонения от заданных интервалов не выходили за рамки "приличия"

Код: Выделить всё

T1_OVF: 
                 in    tmp,sreg
                 push    tmp
        ;вкл упр. импульс   задержка > 2мкс (2.25мкс)
        sbi     OutPort, (1<<OutPin)
        ldi     tmp, 9
delay: 
        dec     tmp
        brne    del
        cbi     OutPort,(1<<OutPin)   
        ; проверка флага Т и ветвление
   brts   t1_001      ;если второй цикл переход
   ; грузим 10мс                   
   ldi   tmp,low(ms10)               
   ldi   tmp1,high(ms10)               
   out   TCNT1H,tmp1               
   out   TCNT1L,tmp               
   ; и меняем флаг Т на 1, для второго прохода       
        pop    tmp
        out     sreg,tmp
    set                     
   rjmp   t1_exit
t1_001:
   ; отключаем T1
   ldi   tmp,T1_off
   out   TCCR1B,tmp
   ; записываем в счетчик Т1 текушего значения power
   ldi   tmp,low(power0)
   ldi   tmp1,high(power0)
   out   TCNT1H,tmp1
   out   TCNT1L,tmp
   ; таймер стоит, ничего не считает, в TCNT1 значение power!
   ; и меняем флаг Т на 0, для нового цикла
        pop    tmp
        out     sreg,tmp
   clt
   ; Т1 готов к новому циклу
t1_exit:
   reti

это код с дополнением сохранения sreg

теперь по порядку:

1. семистор включается в определенный момент от точки отсчета (ТО) (перехода сетевого напряжения из - в +) чем ДАЛЬШЕ импульс включения от ТО тем менше мощности выделится на нагрузке.
полупериод волны 50Гц длится 10мс
Отсюда вывод:
чтобы получить 50% мощности нужно задержать вкл управляющего импулса на 5мс (10мс - 100%, 50% - х простая пропорция) от ТО, для 99% - задержка должна составлять 0.1мс, для 1% - 9.9мс
в свободном счете Т1 переполняется за 16384мкс, поэтому небходимо счет начинать не 0 а с некоторого числа N чтобы до переполнения таймер насчитал нужное количество тиков, при Fo=4МГц 1 тик=0.25мкс. Считаем сколько тиков пройдет за, скажем 10мс, 10мс/0.00025мс получается 40000 тиков - это и есть то число тиков, на которое надо отодвинуть начальную установку таймера от момента переполнения, т.е. 65535-40000=25535 значение которое надо записать в TCNT1. (а я ведь предлагал режим CTC)
Во завернул! :)))
Особые случаи 100% и 0% - тут вообще все просто. :wink:
при 100% МОС постоянно включен
при 0% МОС постоянно выключен

1. почему ;cli запрет прерываний не использовал
2. сбросить флаг Т чтобы чтобы цикл начался
3. сбросить флаг TOV1 он мог установиться за время вычисления
а начинать надо точно с началом положительной полуволны!

1. если обратил внимание в теле основного цикла всего пара NOP и переход на начало, попробуй в симуляторе отловить момент между sei и cli :) поэтому и закоментировал. В боевом софте они необходимы!!!

2. время выполнения осного цикла никаким боком не синхронизировано с сетевым напряжением и невозможно определить во время какой полуволны происходит обновление значения power, а как я писал работа с новыми значениями power должна начинаться с первой положительной полуволны.
3. см.п.2

Ну вроде бы все :tea:
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
aleks_bmw528
Встал на лапы
Сообщения: 122
Зарегистрирован: Вт ноя 17, 2009 11:05:02

Сообщение aleks_bmw528 »

Добрый день GP1 Огромное спасибо что ответил на мои вопросы
Теперь вроде бы все ясно !!!
прости за тупой вопрос??? как симулировать в avrstudio на INT0 сигнал никак не могу посмотреть как работают прерывания
сейчас откомпилирую код и попробую!!!
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

Сообщение pyzhman »

Хочу обратить внимание aleks. Прерывание по INT0 произойдет не именно в момент перехода сетевого напряжения через 0, т.к. вход МК имеет некоторый порог. Поэтому в реале надо будет несколько подогнать начальную задержку на включение симистора.
Аватара пользователя
aleks_bmw528
Встал на лапы
Сообщения: 122
Зарегистрирован: Вт ноя 17, 2009 11:05:02

Сообщение aleks_bmw528 »

pyzh_man
подогнать начальную задержку на включение симистора


обьясни более подробно пожалуйста :(
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Сообщение GP1 »

pyzh_man
ну все теперь ты попал на 3 страницы вопросов :))) :))) :)))

aleks_bmw528
без обид, типа шутка :beer:
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Сообщение GP1 »

тАбе пакет!

INT0 - сработает когда напряжение на входе превысит порог срабатывания, где-то около 3В, но до этого момента пройдет какое-то время от момента пересечения >0<
Вложения
pic.1.jpg
(94.45 КБ) 463 скачивания
pic.2.jpg
(90.45 КБ) 475 скачиваний
pic.3.jpg
(82.49 КБ) 556 скачиваний
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
aleks_bmw528
Встал на лапы
Сообщения: 122
Зарегистрирован: Вт ноя 17, 2009 11:05:02

Сообщение aleks_bmw528 »

[b]GP1/b] Караул только что прошил попробывал не работает :shock:
думал сначала что то напортачил с BT136 и MOC3023 !!!!

быстро написал в основном цикле
next:
nop
nop
sbi OutPort,(1<<OutPin)


; где-то здесь будеш вычислять новое значени power
; собственно вычисление power
; cli ; обязательно иначе получиш в TCNT1 хз-что
; и запись нового значения в power
; сбросить флаг Т чтобы чтобы цикл начался правильно
; сбросит флаг TOV1 он мог установиться за время вычисления
; а начинать надо точно с началом положительной полуволны!
; sei ; не забываем разрешить работу
rjmp next


попробывал лампа горит, значит там все OK !!!
Думаю в чем дело ????

220 через 1Мом 6 вывод вроде все верно
Аватара пользователя
aleks_bmw528
Встал на лапы
Сообщения: 122
Зарегистрирован: Вт ноя 17, 2009 11:05:02

Сообщение aleks_bmw528 »

Попробую в INT0

Код: Выделить всё

int_0:
   in   tmp,sreg
   push   tmp
   ; запускаем Т1
   sbi   OutPort,(1<<OutPin)   
;   ldi   tmp,T1_on
;   out   TCCR1B,tmp
   pop   tmp
   out   sreg,tmp
   reti

тем самым проверю срабатывает оно или нет ????
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Сообщение GP1 »

ошибка в коде - это раз.

Код: Выделить всё

[color=red]delay: [/color] 
        dec     tmp
        brne    [color=red]del[/color]


2. попробуй увеличить длительность упр.импульса, вероятно с лампой не хватает тока для удержания в открытом состоянии при малых напряжениях, мощность лампы должна быть рпвна мощности вентилятора.
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
aleks_bmw528
Встал на лапы
Сообщения: 122
Зарегистрирован: Вт ноя 17, 2009 11:05:02

Сообщение aleks_bmw528 »

ZERRO не срабатывает , смотрю почему :shock:
Аватара пользователя
aleks_bmw528
Встал на лапы
Сообщения: 122
Зарегистрирован: Вт ноя 17, 2009 11:05:02

Сообщение aleks_bmw528 »

я использовал код power3 там же без delay
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Сообщение GP1 »

смотрю, жди!
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Сообщение GP1 »

есть косяк!

Код: Выделить всё

   ldi   tmp,(1<<ISC01)+(1<<ISC00)   ; это так для порядка - сначала ст.бит, затем мл.бит
   out   MCUCR,tmp         ;INT0

а надо писать в PCMSK

ЗЫ: а я не обещал, что я истина в последней инстанции :) :shock:
Последний раз редактировалось GP1 Ср ноя 25, 2009 12:00:43, всего редактировалось 1 раз.
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
aleks_bmw528
Встал на лапы
Сообщения: 122
Зарегистрирован: Вт ноя 17, 2009 11:05:02

Сообщение aleks_bmw528 »

что то не понял разрешение же указывается MCUCR
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Сообщение GP1 »

для tn2313 разрешения в GIMSK, а логику сработки в PCMSK

СТОП!
что-то я сам запутался, тайм-аут! :shock:


Все разобрался, пишем MCUСR
Последний раз редактировалось GP1 Ср ноя 25, 2009 12:16:18, всего редактировалось 1 раз.
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
GP1
Поставщик валерьянки для Кота
Сообщения: 2401
Зарегистрирован: Пт май 23, 2008 19:32:22
Откуда: Россия, Волгоград
Контактная информация:

Сообщение GP1 »

тогда попробуй отключи сеть от мк и через резюк 1..10к подай +5В на вход INT0, для проверки.

чет я сегодня туплю, проверь установки портов.
Чем дальше, тем больше становлюсь занудой...
Изображение
Аватара пользователя
aleks_bmw528
Встал на лапы
Сообщения: 122
Зарегистрирован: Вт ноя 17, 2009 11:05:02

Сообщение aleks_bmw528 »

попробывал опять ZERRO сам не пойму в чем дело установки тоже смотрел все четко , не срабатывает и все тут ,буду еще смотреть
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»