Помогите кто чем может (ни как не получается сделать 400 Гц)
Помогите кто чем может (ни как не получается сделать 400 Гц)
Люди добрые помогите ршить задачу. Есть готовая программа из журнала Схемотехника статья про преобразователь напряжения с синусом на выходеи частотой 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
Люди помогите разобраться с задачей нужно 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
- Реклама
- Stkarapuz
- Вымогатель припоя
- Сообщения: 521
- Зарегистрирован: Пн фев 27, 2006 02:02:12
- Откуда: Россия, Санкт-Петербург
- Контактная информация:
Вы знаете, во-первых есть на форуме тег Code, и правила форматирования кода
А по делу, у вас прескалер таймера устновлен как 1 к 1, программно помочь можно лишь глубже копаясь в программе, а аппаратно: если скажем у вас внешний кварц на 2 МГц, то поставив на 16 получите нужный синус
Ну или 1 и 8, мысль я думаю ясна...
/upd Да вот еще, многие не убирают фьюз CKDIV8 установленный по умолчанию, в вашем случае убрав его получите ускорение как раз в восемь раз
А по делу, у вас прескалер таймера устновлен как 1 к 1, программно помочь можно лишь глубже копаясь в программе, а аппаратно: если скажем у вас внешний кварц на 2 МГц, то поставив на 16 получите нужный синус
/upd Да вот еще, многие не убирают фьюз CKDIV8 установленный по умолчанию, в вашем случае убрав его получите ускорение как раз в восемь раз
Указывайте на ошибки других прямо, а не косвенно.
Уважаемые коты, СДАЛ и ЗДЕСЬ пишутся именно так
Унижая другого, унижаешь себя.
Уважаемые коты, СДАЛ и ЗДЕСЬ пишутся именно так
Унижая другого, унижаешь себя.
- Реклама
Спасибо откликнувшимся. Деление на 8 уже убранно, 50 Гц формируется на частоте кварца 10 МГц можно увеличить частоту в двое поставив 20 МГц но это меня не спасет. Может все-таки кто нибудь влезет в глубь программы по подробнее или подскажит как сформировать требуемый ШИМ на встроенных таймерах?
Спасибо.
Спасибо.
- Stkarapuz
- Вымогатель припоя
- Сообщения: 521
- Зарегистрирован: Пн фев 27, 2006 02:02:12
- Откуда: Россия, Санкт-Петербург
- Контактная информация:
Хорошо, ставьте 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
Указывайте на ошибки других прямо, а не косвенно.
Уважаемые коты, СДАЛ и ЗДЕСЬ пишутся именно так
Унижая другого, унижаешь себя.
Уважаемые коты, СДАЛ и ЗДЕСЬ пишутся именно так
Унижая другого, унижаешь себя.
Здравствуйте. Прогнал код в студии и получил формирование сигнала
частотой 100Гц (10'000'000/(256*196*2)=99,6Гц.
Если сократить таблицу синуса в 4 раза, то можно получить требуемые 400Гц при тактировании 10МГц
(10'000'000/(256*49*2)=398,6Гц
Написал фигню и удалил. Извините.
частотой 100Гц (10'000'000/(256*196*2)=99,6Гц.
Если сократить таблицу синуса в 4 раза, то можно получить требуемые 400Гц при тактировании 10МГц
(10'000'000/(256*49*2)=398,6Гц
Написал фигню и удалил. Извините.
Последний раз редактировалось akl Сб окт 31, 2009 06:44:05, всего редактировалось 1 раз.
Спасибо всем кто откликнулся на мой вопрос.
Можно ли по подробнее изложить ваш ответ я с не давнего времени столкнулся с программированием AVR и ассемблером, конечно не надо набирать весь код программы но чуточку подробнее что и как сделать чтобы получить 400 Гц на 10 МГц.
Поясните пожалуйста а что такое COMP_A и COMP_B
Спасибо.
Можно ли по подробнее изложить ваш ответ я с не давнего времени столкнулся с программированием AVR и ассемблером, конечно не надо набирать весь код программы но чуточку подробнее что и как сделать чтобы получить 400 Гц на 10 МГц.
Поясните пожалуйста а что такое COMP_A и COMP_B
Спасибо.
Написал фигню и удалил. Извините.
Эта программа выдает синус с периодом 2500*256=0.64 сек.
Эта программа выдает синус с периодом 2500*256=0.64 сек.
Последний раз редактировалось akl Сб окт 31, 2009 06:54:34, всего редактировалось 2 раза.


