реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> генератор с дробным коэфициентом, на ATtiny2313
sKWO
сообщение Jul 26 2007, 12:07
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Добрый день всем!
Возникла необходимость создания генератора прямоугольных импульсов на микроконтроллере ATtiny2313 на частоту от 307 до 320 килогерц. Кварц на 16 мегагерц.
Может кто знает быстрый алгоритм создания дробного коэфициента генератора?! help.gif
Мой в обработчике прерывания не успевает! А на асме пока не охота писать.
Пример програмной реализации прикрепляю....
Прикрепленные файлы
Прикрепленный файл  interrupt.zip ( 35.64 килобайт ) Кол-во скачиваний: 96
 


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
_artem_
сообщение Jul 26 2007, 12:48
Сообщение #2


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



по листингу смотрели сколько регистров в стек кладет ?
Если ИАР ипользуете м то здесь добрые люди подсказали использовать __raw в перед названием функции прерывания - стек не будет использоваться . Второе выделите регистры под переменные - будет быстрее . Можете индивидуально назначать их.
Затем можете поднять кварц то 20 МГц некоторые делают до 24 МГц на 2313 .

Удачи .


i eto posmotrite :
http://www.myplace.nu/avr/minidds/index.htm


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 26 2007, 15:42
Сообщение #3


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(sKWO @ Jul 26 2007, 11:07) *
Возникла необходимость создания генератора прямоугольных импульсов на микроконтроллере ATtiny2313 на частоту от 307 до 320 килогерц. А на асме пока не охота писать

Идея вашего метода хороша, но на практике плохо реализуема, поскольку в регистре OCR1A будет число 25, то вы можете получить максимум 25 градаций между 600 и 640 кГц.

Вам artem дал хорошую ссылку, абсолютно ваш случай, даже ещё лучше. Дженсен тратит 9 тактов на выдачу одной выборки, а вы можете снизить до 6 тактов, даже не напрягаясь, но на асме.

Код
loop: add      r28,r24     ; 1
      adc      r29,r25     ; 1
      adc      r30,r26     ; 1
      out      portb,r30   ; 1 - bit 7 is а meandre output
      rjmp     loop        ; 2, so 6 cycles in total


Это даст 2666 кГц частоты выдачи выборок, или 4.3 выборки на период для требуемых 620 кГц.

Чуть-чуть напрягшись (опять же на асме!) можете снизить основной цикл до 5 тактов или 5.2 выборки на период для 620 кГц.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
sKWO
сообщение Jul 28 2007, 16:46
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Цитата(_artem_ @ Jul 26 2007, 15:48) *
по листингу смотрели сколько регистров в стек кладет ?
Если ИАР ипользуете м то здесь добрые люди подсказали использовать __raw в перед названием функции прерывания - стек не будет использоваться . Второе выделите регистры под переменные - будет быстрее . Можете индивидуально назначать их.
Затем можете поднять кварц то 20 МГц некоторые делают до 24 МГц на 2313 .

Удачи .
i eto posmotrite :
http://www.myplace.nu/avr/minidds/index.htm

Спасибо всем!
Артём, посмотрел ссылочку и понял -- жаль раньше ёё не видел, класс.
Я плату развёл и спаял и от своего метода пока постараюсь не отказоваться.
С формированием частоты через порт ... борьба с "нопами" и только ассемблер , чуть накладно. А использовать
ком порт для управления генератором наверное сильно круто особенно в моём положении. Я делаю управление с
кнопок, значения на ЖКИ. Возможно попытаюсь подхватить идею Дженсена и переделать без ком порта.
Помогли написать программу в кодэ визионе а я подправил под ИАР. Можна написать и оптимальнее, но
я там написал для наглядности, правда на ассемблерных вставках.
Чуточку изменил режим работы таймера1 Fast PWM top=OCR1A.
OCR1A -- значение периода частоты по которому работает алгоритм --- количество циклов в
обработчике прерывания возросло !
Выход --- OC1B output: Non-Inv -- полпериода выходной частоты. Правда запись в регистр сравнения OC1B
пока не написал но это аналогично.
кому интересно...прикрепляю
Извините, но у меня вопрос конечно касающийся с тонкостями работы в ИАРе и несовсем по теме:
в кодэ визионе есть переменная величина типа бит в ИАРе нигде не встречал. Неужели нужно создавать битовое поле
для битовых переменных? если да то через структуру или дефайн (так на форуме ПРОТОСС советует)?
и просьба может кто поможет с простыми функциями преобразования шестнацеричного числа в
десятичное и наоборот
Заранее благодарен!!
Прикрепленные файлы
Прикрепленный файл  genkospas.zip ( 65.78 килобайт ) Кол-во скачиваний: 87
 


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
sKWO
сообщение Jul 28 2007, 17:49
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Цитата(=GM= @ Jul 26 2007, 18:42) *
Идея вашего метода хороша, но на практике плохо реализуема, поскольку в регистре OCR1A будет число 25, то вы можете получить максимум 25 градаций между 600 и 640 кГц.

Извините но не совсем Вас понял.
Маленький комментарий программе (алгоритму)
РЕЖИМ Fast PWM top=OCR1A
ВЫХОД OC1B output: Non-Inv
ЧАСТОТА 307 ... 320 Килогерц
ПРЕРЫВАНИЕ по периоду выходной частоты (достигается записью в OCR1A )
ПОЛУПЕРИОД изменение значения OCR1B
МИНУСА узкополосность (хотя можно усложнить алгоритм), джеттер, дребезжание *фазы*
КВАРЦ допустим 24 Мегагерца (за период 320Килогерц 75тактов в обработчике)

работа построена по следующему принципу:
переменная полупериода -- четыре регистра (long int)
старшие два -- реальная часть переменной long int
младшие два -- мнимая часть переменной long int

Вот мнимая часть, старший из младших регистров
0х80 | 0x40 | 0x20 | 0x10 | 0x08 | 0x04 | 0x02 | 0x01
| | | | | | | |
0,5 0,25 0,125 0,0625 0,03125 0,015625 0,0078125 0,00390625


#pragma vector = TIMER1_COMPA_vect
__interrupt void irqHandler(void)
Обнуление старших двух регистров PPperiodTmpH = 0;(правильная работа по цыклу)
суммирование мнимой части (младшие два) а также перезапись старших (старшие два)
запись старших двух регистров в OCR1A
Tmp = OCR1A - OCR1B ;
OCR1B = Tmp;
ВЫХОД

если мнимая часть переполняется (adc суммирование с переносом)--- младший из
старших регистров увеличивается

Так, если седьмой бит в старшем из младших установлен регистров(0х80) то дробный коэфициент равен 0,5
ну и соответственно так дальше.... Думаю не плохо..


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
_artem_
сообщение Jul 28 2007, 21:32
Сообщение #6


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



для десятичной конвертации у атмела есть ассемблерные функции:
http://www.atmel.com/dyn/resources/prod_do...nts/doc0938.pdf
http://www.atmel.com/dyn/resources/prod_documents/AVR204.zip


А битовая переменная это дело вкуса , может ошибаюсь но иар вроде бы ее нет, можете использовать бит филд или байт , вобшем дело вкуса .


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
Alex_Pol
сообщение Jul 29 2007, 17:53
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 192
Регистрация: 23-03-05
Из: Украина. Днепропетровск
Пользователь №: 3 626



Цитата(sKWO @ Jul 28 2007, 19:46) *
Спасибо всем!
Я делаю управление с
кнопок, значения на ЖКИ. Возможно попытаюсь подхватить идею Дженсена и переделать без ком порта.
Хотите с кнопками - запросто. Посмотрите здесь. http://sevzirfo.narod.ru/sin.htm
Автор поклонник алгоритм - билдера, исходники у него в этом странном формате. Первую прошивку я в своё время перевёл в более вменяемую форму. Исходник - в аттаче.
Прикрепленные файлы
Прикрепленный файл  Sin.rar ( 1.07 килобайт ) Кол-во скачиваний: 60
 
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 30 2007, 09:06
Сообщение #8


Ambidexter
*****

Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282



Цитата(sKWO @ Jul 28 2007, 16:49) *
Извините но не совсем Вас понял

Да и я вас не понимаю. Ну получили вы частоту ШИМ=16000/26=615 кГц, ну изменили скважность шима, ну и что? Частота 615 кГц никуда не делась, надо её фильтровать от требуемой частоты, скажем, 620. А как? Это будет фильтрец размером со стол.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
sKWO
сообщение Jul 31 2007, 11:44
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Цитата(_artem_ @ Jul 26 2007, 15:48) *
Если ИАР ипользуете м то здесь добрые люди подсказали использовать __raw в перед названием

Артём простите но......
Кстати про __raw есть только в пдф на мср, на авр нет!
Там оно называется или __task или __C_task
__raw
Спасибо всем!!


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
_artem_
сообщение Jul 31 2007, 12:16
Сообщение #10


учащийся
*****

Группа: Свой
Сообщений: 1 065
Регистрация: 29-10-05
Из: города контрастов
Пользователь №: 10 249



Я тоже raw не нашел, но работает вроде бы . Сравните ассемблерный выход - тогда увидите разницу.


--------------------
Зачем лаять на караван , когда на него можно плюнуть?

Go to the top of the page
 
+Quote Post
sKWO
сообщение Aug 10 2007, 10:29
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 355
Регистрация: 27-03-07
Из: Україна, Чуднів
Пользователь №: 26 530



Цитата(_artem_ @ Jul 31 2007, 15:16) *
Я тоже raw не нашел, но работает вроде бы . Сравните ассемблерный выход - тогда увидите разницу.

Согласен. Но на версии 3.10 выдаёт ошибку. 4.30А нормально но описания и там нету.
С уважением


--------------------
нельзя недооценивать предсказуемость глупости
Go to the top of the page
 
+Quote Post
Igor26
сообщение Aug 10 2007, 10:46
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544



http://electronix.ru/forum/lofiversion/index.php/t10786.html
Посмотрите, здесь это обсуждалось.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 09:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01494 секунд с 7
ELECTRONIX ©2004-2016