Может резюк поставил слабый (взял из китайского тестера на 20А).
А фьюзы надо програмить? Просто у меня макетка с м16 и кварцем на 8МГц.
Код: Выделить всё
izmu:
push temp
push temp2
push temp3
ldi temp3,128 ; задаём количество измерений
push ZL
push ZH
clr ZL
clr ZH
i1:
ldi temp,0b11100010 ; настраиваем АЦП, опора-внутр
out ADMUX,temp ; выравнивание влево, вход- порт PА2
rcall delay40 ; диф вход- PА3(+) PA2(-) GAIN=10
rcall delay40 ; пауза 160 мкСек
rcall delay40 ; для установления
rcall delay40 ; режима усилителя
cli
ldi temp,0b11001110 ; включаем АЦП
out ADCSRA,temp ;
;ldi temp,0b01010000 ; задаем режим
;out MCUCR,temp ; ADC Noise Reduction
;sei
;sleep
in temp,ADCSRA ; ждем установки флага ADIF-
sbrs temp,4 ; конца преобразования
rjmp pc-2
ldi temp,0b00010000 ; останавлаваем АЦП,
out ADCSRA,temp ; сбрасываем флаг ADIF
sei
in temp,ADCH ; считываем данные из АЦП
add ZL,temp ; суммироуем измерения
adc ZH,zero ; и накапливаем в регистре Z
dec temp3
brne i1
ldi temp,7 ; делим на 128
lsr ZH
ror ZL
dec temp
brne pc-3
lds temp,0x0060 ; считываем поправку
add ZL,temp ; прибавляем её к результату
mov uouth,ZL
pop ZH
pop ZL
pop temp3
pop temp2
pop temp
sei
ret
Код: Выделить всё
ldi temp3,128 ; задаём количество измерений
...
ldi temp,7 ; делим на 128Код: Выделить всё
ldi temp3,128 ; задаём количество измерений
...
ldi temp,6 ; делим на 128
Код: Выделить всё
; lds temp,0x0060 ; считываем поправку
; add ZL,temp ; прибавляем её к результату
Всё правильно.IURY писал(а):Разбираюсь с работой устройства и хочу понять некоторые моменты.
см. Cхема_мега16.spl7 и фрагмент доработанного БП.
Правильно ли я думаю:
1. Без подачи напряжения ШИМ от контроллера на вывод 2 TL494(KA7500) всегда будет присутствовать на аноде D2 напряжение , заданное доработанным БП АТ (10V), .
2. Рост напряжения и тока на нагрузке возникнет , когда фильтрованное напряжение ШИМ с выхода управления превысит напряжение (2,5V), заданное на выводе 2 TL494(KA7500).
3. Получается, что диапазон напряжения ШИМ после фильтра на выходе управления должен быть от 2,5 до 5V.
Код: Выделить всё
;выводим сообщение " U= , В"
ldi lcd,0xC0 ; ставим курсор
rcall lcd_com ; в начало второй строки
ldi temp3,16 ; temp2- длина сообщения
ldi zl,low(mess1n*2) ; установить указатель Z
ldi zh,high(mess1n*2) ; на начало буфера mess1n
rcall output
ldi cur,10 ; курсор на
rcall l_shift ;10 позиции влево
rcall lcdu ; выводим на ЛСД напряжение
;ожидание отпускания кнопок
in temp,PIND ; ждем
andi temp,0b00010111 ; отпускания
cpi temp,0b00010111 ; кнопок
brne pc-3
Я так понимаю ATMega16-16AU это другое. А проц не мог подгореть? Был момент когда сдохла кренка и на проце было 9В после этого вроде все работает (ток не помню работал до этого или нет). И ещё хотел бы узнать про переменную kor (коридор в коментариях) это что? (просто сделал ручной режим и что-то не догнал что эта переменная делает). И по поводу err10 и err200 это будущие наброски или прошлые?Слон писал(а):Почитал ещё даташит. Согласен, JTAG нужно отключить. Извиняюсь, не досмотрел![]()
По поводу тока. У нас измеряется падение напряжения на резисторе R21. Оно усиливается внутренним ОУ,работающим в дифференциальном режиме. В этом режиме можно измерять и положительное, и отрицательное напряжение.То есть, мы измеряем и зарядный,и разрядный ток.
Коэффициент усиления этого ОУ мы выставляем=10 при токе больше 1А и =200 при токе меньше 1А. При обработке результатов измерений, это учитывается. Нужный ток разряда устанавливается с помощью ШИМ, то есть ток разряда-импульсный, что требует специального подхода к его измерению. Я сейчас собираю готовое устройство и буду дорабатывать программу. Зарядный ток-постоянный, поэтому измеряться должен гораздо точнее. Если ток не измеряется при значениях ниже 1А, то есть когда КУ=200, возможно, проблемы с МК. Были такие случаи. Поэтому, нужно брать с буквой А , т.е. ATmega16A, именно так рекомендует ATMEL.
ATMega16-16AU-старая версия микроконтроллера и не рекомендуется для новых разработок. Вместо нее нужно использоватьExecutor писал(а): Я так понимаю ATMega16-16AU это другое. А проц не мог подгореть? Был момент когда сдохла кренка и на проце было 9В после этого вроде все работает (ток не помню работал до этого или нет). И ещё хотел бы узнать про переменную kor (коридор в коментариях) это что? (просто сделал ручной режим и что-то не догнал что эта переменная делает). И по поводу err10 и err200 это будущие наброски или прошлые?
Бывает свист. Если подключить блок управления, он исчезнет. Не нужно ничего экранировать.velant77 писал(а):доделал свою силовую часть, бп нормально работает как на хх так и при нагрузке, тишина полнейшая. но при подключении шлейфа управления (просто шлейф, без платы управления) появляется свист от наводок видимо на 2 ногу TLки, кроме как лепить экранированный шлейф чот в голову ничоне пришлоникто с подобным не сталкивался?
При сборке я забыл установить диод в цепи управления и при подключении его к БП возникал свист БП, после установки диода свист пропадал и появлялся только когда я дотрагивался до провода управления.velant77 писал(а):Да с блоком управления тоже возбуд небольшой идёт, как то это напрягает, сам то бп аще тихо работает. Ещё вопрос, при нагрузке на лампу зу будет работать или токо на акб? а то пока был запрограммирован jtagen лампа сразу загоралась ))) после перепрограмирования фьюза теперь при выборе зарядки вываливается в меню (нагрузка-лампа). извеняйте если вопросы вам кажутся дурацкими но для меня это только хобби и базовое образование и специальность далеки от электроники
Просто при разных значения cor по разному управляется БП.Слон писал(а): ATMega16-16AU-старая версия микроконтроллера и не рекомендуется для новых разработок. Вместо нее нужно использовать
ATMega16A-AU
А 9В-конечно, много. Могло и подгореть. Переменные cor, err10 и err200 - для отладки.
Код: Выделить всё
ManualMode:
sbi PORTC,3 ; подключаем АКБ
set ; Т=1-стабилизация напряжения
ldi cor,0 ; коридор
ldi temp,0b00000011 ; прескалер F/64
out TCCR0, temp
ldi temp,0b00000001 ; устанавливаем прерывания
out TIMSK,temp ; по переполнению
call delay10 ; пауза для установки
call delay10 ; режима стабилизации
call delay10
call delay10
ldi temp,130
mov err10,temp
ManualT1:
; Выводим в первой строке нужное напряжение
ldi lcd,0x80 ; ставим курсор
rcall lcd_com ; в начало второй строки
ldi temp3,16 ; temp2- длина сообщения
ldi zl,low(mess1n*2) ; установить указатель Z
ldi zh,high(mess1n*2) ; на начало буфера mess1n
rcall output
ldi cur,10 ; курсор на
rcall l_shift ;10 позиции влево
mov uouth,err10
rcall lcdu ; выводим на ЛСД напряжение
rcall izmu ; измеряем напряжение
rcall izmi ; измеряем ток
set ; Т=1-стабилизация напряжения
mov stab,err10 ; устанавливаем Увых=13.0В
ldi cor,0
mov temp,urh
rcall lcdui ; выводим напряжение и ток
; Сканируем клавиатуру
s225: in temp,PIND
andi temp,0b00010111
cpi temp,0b00010011 ; кнопка > нажата?
brne s115 ; нет- переходим
in temp,PIND ; ждем
andi temp,0b00010111 ; отпускания
cpi temp,0b00010111 ; кнопок
brne pc-3
inc err10 ; увеличиваем её
s115: in temp,PIND
andi temp,0b00010111
cpi temp,0b00010101 ; кнопка < нажата?
brne ManualT1
dec err10
rcall delay40
jmp ManualT1
rjmp initВот для этого и нужна переменная cor (коридор) . Если напряжение (ток) попадает в нужный диапазон (коридор), состояние OCR не меняем. Такая задумка была.Executor писал(а):Начал разбиратся с ШИМ'ом и что-то мне кажется что несколько не правильный подход к регулированию выходного напряжения т.к. в ходе программы мы измеряем напряжение или ток и в прерывании мы их обрабатываем (прибавляем или уменьшаем состояние OCR2) и так-как прерывание выполняется намного чаще мы получаем: измерили напряжение оно равно (допустим) 10 В, а нам нужно 12 В, при попадании в прерывание мы смотрим на измеренное напряжение (10 В) и пытаемся его поднять (до 12 В) и пока у нас произойдёт следующее измерение напряжение, наше прерывание раскачигарит наш БП скажем до 14 В. И тут происходит измерение и опять начинается тоже самое, но в обратную сторону. И так (по крайней мере в моём случае) происходит постоянная беготня, то повысит напряжение то опустит. (может это только у меня).
P.S. Пока думаю как от этого избавиться.