Страница 5 из 8
Добавлено: Пт ноя 27, 2009 02:21:44
ibiza11
насчет источника питания, посмотрите последний вариант
вот здесь (на емкостном делителе), мне он всегда нравился своей стабильностью и высоким КПД. охлаждения не требуется.
я не критикую, просто советую свой вариант
Добавлено: Пт ноя 27, 2009 09:04:59
GP1
в AVR182 написано что при подключении через 1МОм диапазон принимаемых значений будет +-1000В, просто делай как там написано прерывание по спаду напряжения на входе, должно работать.
Добавлено: Пт ноя 27, 2009 11:18:48
aleks_bmw528
GP1 если не трудно глянь, продолжаю свои эксперементы со спадом написал тестовую программу , грубо говоря если импульс на INT0 есть то лампа должна загоратся и тухнуть , стали творится чудеса , например если использовать резюк 10ком на +5В и минус при прикосновении к минусу лампа загорится сразу ну и через 10-15сек
потухнет и не загорится ,если я повторно прикоснусь то загорится не сразу 10-15сек потом потухнет
1. Не пойму почему при первом прикосновении сразу срабатывает таймер а при повторном как и должен через 10-15сек ???
2. При подключении через резистор 1Мом опять таймер сработал сразу ,чудеса в том что если отключить резистор 1мом таймер будет
будет сам продолжать работать ,т е INT0 каким то образом само
запускает таймер без наличия сигнала, и еше если включить в сеть без подключения 1мом то лампа загорается наглуха и не тухнет???
Не могу найти обьяснения ???
Код: Выделить всё
.include "tn2313def.inc"
.def tmp = r16
.def tmp1 = r17
.equ power0 = 65535
.equ OutPort = PORTB
.equ OutCntr = DDRB
.equ OutPin = PB0
.equ T1_off = 0b00000000
.equ T1_on = 0b00000100
.CSEG
.org 0
reset: rjmp start ; 00 Reset Handler
; ***** INTERRUPT VECTORS ************************************************
.org INT0addr ;= 0x0001 External Interrupt Request 0
rjmp int_0
;.equ INT1addr = 0x0002 ; External Interrupt Request 1
;.equ ICP1addr = 0x0003 ; Timer/Counter1 Capture Event
; .org OC1Aaddr ;= 0x0004 Timer/Counter1 Compare Match A
; rjmp comp1a
;.equ OC1addr = 0x0004 ; For compatibility
.org OVF1addr ;= 0x0005 ; Timer/Counter1 Overflow
rjmp T1_OVF
;.equ OVF0addr = 0x0006 ; Timer/Counter0 Overflow
;.equ URXCaddr = 0x0007 ; USART, Rx Complete
;.equ URXC0addr = 0x0007 ; For compatibility
;.equ UDREaddr = 0x0008 ; USART Data Register Empty
;.equ UDRE0addr = 0x0008 ; For compatibility
;.equ UTXCaddr = 0x0009 ; USART, Tx Complete
;.equ UTXC0addr = 0x0009 ; For compatibility
;.equ ACIaddr = 0x000a ; Analog Comparator
;.equ PCIaddr = 0x000b ;
; .org OC1Baddr ;= 0x000c
; rjmp comp1b
; .org OC0Aaddr ;= 0x000d
; rjmp comp0a
;.equ OC0Baddr = 0x000e ;
;.equ USI_STARTaddr = 0x000f ; USI Start Condition
;.equ USI_OVFaddr = 0x0010 ; USI Overflow
;.equ ERDYaddr = 0x0011 ;
;.equ WDTaddr = 0x0012 ; Watchdog Timer Overflow
;=================
start:
ldi tmp,low(ramend) ;stack init SP=0xdf
out spl,tmp
sbi ACSR,ACD ;Analog comparator off
ser tmp
out OutCntr,tmp
clr tmp
out OutPort,tmp
clr tmp
out ddrd,tmp
ldi tmp,0b01111011
out portd,tmp
ldi tmp,(0<<ISC01)|(1<<ISC00) ; это так для порядка - сначала ст.бит, затем мл.бит
out MCUCR,tmp ;INT0
ldi tmp,(1<<INT0)
out GIMSK,tmp
; установки для Т1
; тактовая Fo, режим работы - сброс по совпадению
clr tmp ; таймер отключен от выводов порта
out TCCR1A,tmp
ldi tmp,0b00000000 ; режим работы NORMAL, таймер остановлен!!!
out TCCR1B,tmp
; вот здесь загружаем начальное значение для power, таймер остановлен
ldi tmp,low(power0)
ldi tmp1,high(power0)
out TCNT1H,tmp1 ; загрузка стартового значения мощности
out TCNT1L,tmp
; установка разрешений прерываний от таймеров
clr tmp
ldi tmp,(1<<TOV1)
out TIMSK,tmp
; здесь размещают тело основной программы.
sei
next:
rjmp next
;=================
; Обработчики прерываний
;=================
int_0:
in tmp,sreg
push tmp
; запускаем Т1
ldi tmp,T1_on
out TCCR1B,tmp
pop tmp
out sreg,tmp
reti
T1_OVF:
in tmp,sreg
push tmp
brts t1_001
sbi OutPort,(1<<OutPin)
pop tmp
out sreg,tmp
set rjmp t1_exit
t1_001:
ldi tmp,T1_off
out TCCR1B,tmp
cbi OutPort,(1<<OutPin) ; получается 2,5 мкс
pop tmp
out sreg,tmp
clt
t1_exit:
reti
Добавлено: Пт ноя 27, 2009 13:06:10
aleks_bmw528
перепутал
ldi tmp,(0<<ISC01)|(1<<ISC00)
по спаду так
но один черт при включении без подачи чего либа на вход INT0 pd2
само по себе срабатывает INT0 и запускает таймер!!!!
Кто нибуть может обяснить в чем дело

?????
Добавлено: Пт ноя 27, 2009 16:32:42
GP1
что-то я сегодня на работе затр...ся, завтра посмотрю.
Добавлено: Сб ноя 28, 2009 13:56:23
aleks_bmw528
GP1 с чудесами разобрался ,в программе напортачил теперь таймер срабатывает не сразу ,как раньше !!!!
по спаду резистор 10 ком +5в на минус все работает !!!
просто через резистор 1мом не очень хочется без гальванической развязки , к тому же придется подключать фаза ноль !!!
нет случайно какой нибуть мысли по ловле 0 через оптопару ,или еще чего нибуть????
Добавлено: Вт дек 01, 2009 02:19:36
aleks_bmw528
Сделал гальванику через оптопару 4N33 по спаду, прошил увеличил время управляющего импульса заработало, возникли следующие проблемы при мощности 99% лампа горит на 50% и при этом мерцает ,
буду разбираться в коде !!!!!
Добавлено: Вт дек 01, 2009 08:35:50
GP1
HI, aleks_bmw528!
дело скорее всего не в коде, а в работе входного оптрона.
нарисуй схемку.
зы: конец года, что-то куча дел навалилась, но по мере возможности буду принимать участие.
Добавлено: Вт дек 01, 2009 11:13:44
aleks_bmw528
GP1 Приветствую !!!!
Схема достаточно известная у буржуев ,100% рабочая
поминалы
R1A,R1B 27ком 1ватт
D1 1N4007
R3 10ком
4N33
Добавлено: Вт дек 01, 2009 11:28:06
aleks_bmw528
Слушай GP1 может чего с фузами не так ,такое ощущение не так тактируется, вроде выставлял под внешний кварц ,но я особо не
силен в фузах
Добавлено: Вт дек 01, 2009 11:54:05
GP1
в твоей программе галка - это единица?
Добавлено: Ср дек 02, 2009 00:46:46
aleks_bmw528
Галка это 1
включенный FUSE - это FUSE без галочки!
во втором варианте лампа горит ярче при 99% и мерцает поменьше
Добавлено: Ср дек 02, 2009 09:03:31
GP1
у тебя fuse выставлены на 8МГц внутр.генератор и вкл делитель на 8, т.е. реально у тебя мк работает на частоте 1МГц
замени на такое:
СKSEL3:0 = 0b1110 - внешний кварц >3МГц
и CKDIV8=1
АХТУНГ если поставишь RSTDISBL = 0 - кердык последовательно программировать не сможешь
Добавлено: Ср дек 02, 2009 10:20:22
aleks_bmw528
HI GP1 обьясни дураку СKSEL3:0 = 0b1110
1 - это значит без галочки т.е установлен???
0 - с галочкой сброшен
или на оборот???
это я так понял по fuse2
у тебя fuse выставлены на 8МГц внутр.генератор и вкл делитель на 8, т.е. реально у тебя мк работает на частоте 1МГц
Добавлено: Ср дек 02, 2009 10:31:58
aleks_bmw528
Help поставил вообще не работает !!!

Добавлено: Ср дек 02, 2009 11:39:04
GP1
готов!
я ж предупреждал!
RSTDISBL=0
все, теперь только параллельным программатором можно оживить!
ты же сам писал
Галка это 1
включенный FUSE - это FUSE без галочки!
т.е. 1=галка, 0=нет галки.
Добавлено: Ср дек 02, 2009 11:54:57
aleks_bmw528
GP1 ты меня напугал RSTDISBL=0 это я просто не прочитал поэтому там 0
слушай сейчас эксперементировал походу работает только на внутреннем генераторе ставил cksel1 галку остальные 0 моргает медленнее я так понимаю вн частота 4мгц потом пробывал галку
ckdiv вообще не запускается ???
вопрос :может быть что с установкой portd ??? у меня такое ощущение что не работает внешний RC только что перепаял кварц и С 22 пф
все равно ZERRO
Добавлено: Ср дек 02, 2009 11:56:31
GP1
ёу!
посмотрел еще раз на твою картинку, твоя прога что позволяет отдельные байты программировать?
тогда проверь генерацию на кварце.
Добавлено: Ср дек 02, 2009 11:57:48
GP1
какие конденсаторы блокировочные на кварце стоят?
Добавлено: Ср дек 02, 2009 12:00:43
aleks_bmw528
22 пф