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

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
IlyaJ
Родился
Сообщения: 10
Зарегистрирован: Чт окт 29, 2009 15:29:00

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

Сообщение 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
Реклама
IlyaJ
Родился
Сообщения: 10
Зарегистрирован: Чт окт 29, 2009 15:29:00

Сообщение IlyaJ »

ну что ни кто не может ничего посоветовать?
Реклама
IlyaJ
Родился
Сообщения: 10
Зарегистрирован: Чт окт 29, 2009 15:29:00

Сообщение IlyaJ »

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

Сообщение pyzhman »

Вся беда в том, что таймер тактируется от СК (TCCR1B= 1).
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Stkarapuz
Вымогатель припоя
Сообщения: 521
Зарегистрирован: Пн фев 27, 2006 02:02:12
Откуда: Россия, Санкт-Петербург
Контактная информация:

Сообщение Stkarapuz »

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

/upd Да вот еще, многие не убирают фьюз CKDIV8 установленный по умолчанию, в вашем случае убрав его получите ускорение как раз в восемь раз :))
Указывайте на ошибки других прямо, а не косвенно.
Уважаемые коты, СДАЛ и ЗДЕСЬ пишутся именно так :)))
Унижая другого, унижаешь себя.
Реклама
IlyaJ
Родился
Сообщения: 10
Зарегистрирован: Чт окт 29, 2009 15:29:00

Сообщение IlyaJ »

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

Спасибо.
Реклама
Аватара пользователя
Stkarapuz
Вымогатель припоя
Сообщения: 521
Зарегистрирован: Пн фев 27, 2006 02:02:12
Откуда: Россия, Санкт-Петербург
Контактная информация:

Сообщение 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:
Указывайте на ошибки других прямо, а не косвенно.
Уважаемые коты, СДАЛ и ЗДЕСЬ пишутся именно так :)))
Унижая другого, унижаешь себя.
IlyaJ
Родился
Сообщения: 10
Зарегистрирован: Чт окт 29, 2009 15:29:00

Сообщение IlyaJ »

Спасибо, я тоже думал так сделать, но ведь в данном случае я получу не совсем правильный синус он будет ломанный или я ошибаюсь и то что вы посоветовали и есть выход из ситуации
Аватара пользователя
Stkarapuz
Вымогатель припоя
Сообщения: 521
Зарегистрирован: Пн фев 27, 2006 02:02:12
Откуда: Россия, Санкт-Петербург
Контактная информация:

Сообщение Stkarapuz »

У вас итак был ломаный синус :)) просто теперь промежутки излома больше... Я думаю, что все будет нормально работать, но может кто еще чего добавит... Подождем-с.. :tea:
Указывайте на ошибки других прямо, а не косвенно.
Уважаемые коты, СДАЛ и ЗДЕСЬ пишутся именно так :)))
Унижая другого, унижаешь себя.
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Здравствуйте. Прогнал код в студии и получил формирование сигнала
частотой 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 раз.
IlyaJ
Родился
Сообщения: 10
Зарегистрирован: Чт окт 29, 2009 15:29:00

Сообщение IlyaJ »

Спасибо всем кто откликнулся на мой вопрос.

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

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

Спасибо.
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Написал фигню и удалил. Извините.
Эта программа выдает синус с периодом 2500*256=0.64 сек.
Последний раз редактировалось akl Сб окт 31, 2009 06:54:34, всего редактировалось 2 раза.
IlyaJ
Родился
Сообщения: 10
Зарегистрирован: Чт окт 29, 2009 15:29:00

Сообщение IlyaJ »

Спасибо вам. сейчас попробывал студия вывела ошибку

C:\Program Files\Atmel\AVR Tools\123\123.asm(40): error: Undefined symbol: SPH
AndryG
Открыл глаза
Сообщения: 76
Зарегистрирован: Сб ноя 10, 2007 14:28:04
Откуда: UA
Контактная информация:

Сообщение AndryG »

Человек код писад для меги ... а там памяти побольше, посему существует и SPH и SPL... а в тини - только SPL

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

Ну, или запускайте код по мегой
IlyaJ
Родился
Сообщения: 10
Зарегистрирован: Чт окт 29, 2009 15:29:00

Сообщение IlyaJ »

понятно попробую завтра. Благодарю.
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Сообщение akl »

Программа выдает синус периодом 0.64сек. Удалена. Извините.
Закрыто

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