Страница 1 из 1

Помогите кто чем может (ни как не получается сделать 400 Гц)

Добавлено: Чт окт 29, 2009 15:43:21
IlyaJ
Люди добрые помогите ршить задачу. Есть готовая программа из журнала Схемотехника статья про преобразователь напряжения с синусом на выходеи частотой 50 Гц. Мне необходимо получить частоту в 400 Гц. но я ни как не могу этого добиться., с ассемблером вот уже неделю разбираюсь прочитал все про таймеры в AVR ATtiny 2313V. Пришел к выводу что тем способом что использован в программе можно максимум добиться 50 Гц переключений полуволн ибо нет в этой микросхеме синтезатора частоты для увеличения скорости счета таймера 1 который работает в режиме формирования ШИМа. Вот текст программы если нужно будет то выложу и статью с журнала.

Люди помогите разобраться с задачей нужно 220 В и 400 Гц.


;ATtiny2313
.CSEG
.INCLUDE "tn2313def.inc"
.org 0
rjmp reset
.DEF Step=r30
.DEF Data=r0
.DEF SSREG=r23
.EQU Set_Tabl=16
.EQU Offset=Set_Tabl<<1
.EQU END_Tabl=Offset+196
.org OC1addr
rjmp TIM1_COMP
.org OVF1addr
rjmp TIM1_OVF
.CSEG
.org 16

SinTab:
.DB 5, 8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64
.DB 67, 71, 75, 79, 83, 86, 90, 94, 98, 101, 105, 109, 112, 116, 119, 123
.DB 126, 130, 133, 136, 140, 143, 146, 150, 153, 156, 159, 162, 165, 168, 171, 174
.DB 177, 180, 183, 185, 188, 191, 193, 196, 198, 201, 203, 206, 208, 210, 212, 214
.DB 217, 219, 221, 223, 224, 226, 228, 230, 231, 233, 234, 236, 237, 239, 240, 241
.DB 242, 243, 244, 245, 246, 247, 248, 249, 249, 250, 250, 251, 251, 252, 252, 252
.DB 252, 252, 253, 252, 252, 252, 252, 252, 251, 251, 250, 250, 249, 249, 248, 247
.DB 246, 245, 244, 243, 242, 241, 240, 239, 237, 236, 234, 233, 231, 230, 228, 226
.DB 224, 223, 221, 219, 217, 214, 212, 210, 208, 206, 203, 201, 198, 196, 193, 191
.DB 188, 185, 183, 180, 177, 174, 171, 168, 165, 162, 159, 156, 153, 150, 146, 143
.DB 140, 136, 133, 130, 126, 123, 119, 116, 112, 109, 105, 101, 98, 94, 90, 86
.DB 83, 79, 75, 71, 67, 64, 60, 56, 52, 48, 44, 40, 36, 32, 28, 24
.DB 20, 16, 12, 8, 5, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255

TIM1_COMP:
in SSREG, SREG
lpm
out OCR1AL, Data
out SREG, SSREG
reti
TIM1_OVF:
in SSREG, SREG
inc Step
out SREG, SSREG
reti
reset:
clr r31
ldi Step, Offset
ldi r20, 0xdf
out SPL, r20
ldi r20, 0xfc
out DDRB, r20
ldi r20, 0xf0
out PORTB, r20
ldi r20, 0x3f
out PORTD, r20
ldi r20, 0x00
out MCUCR, r20
LDI r20, 0x00
out GIFR, r20
ldi r20, 0x00
out OCR1AH, r20
ldi r20, 16
out OCR1AL, r20
ldi R20, 0xC0
out TIMSK, R20
ldi r20, 0xB1
out TCCR1A, r20
ldi r20, 0x04
out PORTB, r20
WDR
ldi r20,0x0D
out WDTCR, r20
ldi r20, 0x01
out TCCR1B, r20
cbi PORTD, 6
cbi PORTB, 3
sei
m1:
cpi Step, END_Tabl
breq m2
rjmp m1
m2:
cli
wdr
ldi Step, Offset
sbic PORTB, 7
rjmp m3
sbis PORTB, 7
rjmp m4
m3:
cbi PORTB, 7
sei
rjmp m1
m4:
sbi PORTB, 7
sei
rjmp m1

Добавлено: Чт окт 29, 2009 16:31:33
IlyaJ
ну что ни кто не может ничего посоветовать?

Добавлено: Чт окт 29, 2009 16:40:34
IlyaJ
я знаю что собака зарыта в настройках таймера коты помогите ее отыскать :)

Добавлено: Чт окт 29, 2009 16:57:06
pyzhman
Вся беда в том, что таймер тактируется от СК (TCCR1B= 1).

Добавлено: Чт окт 29, 2009 17:01:38
Stkarapuz
Вы знаете, во-первых есть на форуме тег Code, и правила форматирования кода :evil:
А по делу, у вас прескалер таймера устновлен как 1 к 1, программно помочь можно лишь глубже копаясь в программе, а аппаратно: если скажем у вас внешний кварц на 2 МГц, то поставив на 16 получите нужный синус :) Ну или 1 и 8, мысль я думаю ясна...

/upd Да вот еще, многие не убирают фьюз CKDIV8 установленный по умолчанию, в вашем случае убрав его получите ускорение как раз в восемь раз :))

Добавлено: Чт окт 29, 2009 20:51:15
IlyaJ
Спасибо откликнувшимся. Деление на 8 уже убранно, 50 Гц формируется на частоте кварца 10 МГц можно увеличить частоту в двое поставив 20 МГц но это меня не спасет. Может все-таки кто нибудь влезет в глубь программы по подробнее или подскажит как сформировать требуемый ШИМ на встроенных таймерах?

Спасибо.

Добавлено: Пт окт 30, 2009 03:39:44
Stkarapuz
Хорошо, ставьте 20 МГц, а таблицу значений синуса (массив ваш) сократите вчетверо.

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

SinTab: 
.DB 5, 20, 36, 52
.DB 67, 83, 98, 112
.DB 126, 140, 153, 165
.DB 177, 188, 198, 208
.DB 217, 224, 231, 237
.DB 242, 246, 249, 251
.DB 253, 252, 250, 247
.DB 244, 239, 233, 226
.DB 224, 217, 208, 198
.DB 188, 177, 165, 153
.DB 140, 126, 112, 98
.DB 83, 67, 52, 36
.DB 20, 16, 12,  5

:)) :tea:

Добавлено: Пт окт 30, 2009 08:56:38
IlyaJ
Спасибо, я тоже думал так сделать, но ведь в данном случае я получу не совсем правильный синус он будет ломанный или я ошибаюсь и то что вы посоветовали и есть выход из ситуации

Добавлено: Пт окт 30, 2009 09:19:45
Stkarapuz
У вас итак был ломаный синус :)) просто теперь промежутки излома больше... Я думаю, что все будет нормально работать, но может кто еще чего добавит... Подождем-с.. :tea:

Добавлено: Пт окт 30, 2009 11:30:02
akl
Здравствуйте. Прогнал код в студии и получил формирование сигнала
частотой 100Гц (10'000'000/(256*196*2)=99,6Гц.
Если сократить таблицу синуса в 4 раза, то можно получить требуемые 400Гц при тактировании 10МГц
(10'000'000/(256*49*2)=398,6Гц

Написал фигню и удалил. Извините.

Добавлено: Пт окт 30, 2009 14:28:30
IlyaJ
Спасибо всем кто откликнулся на мой вопрос.

Можно ли по подробнее изложить ваш ответ я с не давнего времени столкнулся с программированием AVR и ассемблером, конечно не надо набирать весь код программы но чуточку подробнее что и как сделать чтобы получить 400 Гц на 10 МГц.

Поясните пожалуйста а что такое COMP_A и COMP_B

Спасибо.

Добавлено: Пт окт 30, 2009 16:42:59
akl
Написал фигню и удалил. Извините.
Эта программа выдает синус с периодом 2500*256=0.64 сек.

Добавлено: Пт окт 30, 2009 16:51:52
IlyaJ
Спасибо вам. сейчас попробывал студия вывела ошибку

C:\Program Files\Atmel\AVR Tools\123\123.asm(40): error: Undefined symbol: SPH

Добавлено: Пт окт 30, 2009 17:16:56
AndryG
Человек код писад для меги ... а там памяти побольше, посему существует и SPH и SPL... а в тини - только SPL

Можно просто удалить эти строки. (первую и вторую после :reset)

Ну, или запускайте код по мегой

Добавлено: Пт окт 30, 2009 20:15:01
IlyaJ
понятно попробую завтра. Благодарю.

Добавлено: Сб окт 31, 2009 06:50:00
akl
Программа выдает синус периодом 0.64сек. Удалена. Извините.