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

 
 
> Вычисления на ATmega88
koluna
сообщение Dec 2 2008, 14:00
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Здравствуйте!

Использую WinAVR, ATmega88, сигнал синхронизации - внтутренняя RC-цепь (частота 8 МГц).
Необходимо как можно быстрее вычислить значение следующего выражения:

C = Y * C' / 255.
Причём:
C, Y, C' - unsigned char, т. е., действительные числа мне не нужны...

В данный момент вычисления производятся приблизительно за 92 мкс (в программе три выражения подряд).

Можно, конечно, кварц поставить на большую частоту, но хотелось бы пока без него smile.gif

Фрагмент программы:

Код
...
OCR0A = n_red * dmx[0] / 255;
OCR0B = n_green * dmx[0]  / 255;
OCR2B = n_blue * dmx[0] / 255;
...



Спасибо заранее!


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ae_
сообщение Dec 14 2008, 11:51
Сообщение #2


Участник
***

Группа: Свой
Сообщений: 462
Регистрация: 2-04-07
Из: Иркутск
Пользователь №: 26 695



Так, что бы во всём диапазоне 0...255 / 10 выполнялось с округлением правильно:
Код
0....4 / 10 = 0
5...14 / 10 = 1
15...24 / 10 = 2
25...34 / 10 = 3
35...44 / 10 = 4
45...54 / 10 = 5
55...64 / 10 = 6
65...74 / 10 = 7
75...84 / 10 = 8
85...94 / 10 = 9
95..104 / 10 = 10
105..114 / 10 = 11
115..124 / 10 = 12
125..134 / 10 = 13
135..144 / 10 = 14
145..154 / 10 = 15
155..164 / 10 = 16
165..174 / 10 = 17
175..184 / 10 = 18
185..194 / 10 = 19
195..204 / 10 = 20
205..214 / 10 = 21
215..224 / 10 = 22
225..234 / 10 = 23
235..244 / 10 = 24
245..254 / 10 = 25
     255 / 10 = 26

У меня получилось только с множителем >= 205 по формуле (1+(x*205)>>10)>>1

Тоже самое на асме:
Код
     ldi R16, 205
     mul DATA, R16
     lsr R1
     lsr R1
     inc R1
     lsr R1
     mov DATA, R1
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- n_bogoyavlensky   Вычисления на ATmega88   Dec 2 2008, 14:00
- - Непомнящий Евгений   а если поделить на 256? Компилер должен превратить...   Dec 2 2008, 14:12
- - Арк К   А надо делить именно на 255? не на 256? тогда было...   Dec 2 2008, 14:16
|- - Непомнящий Евгений   Цитата(Арк К @ Dec 2 2008, 17:16) Критичн...   Dec 2 2008, 14:24
|- - n_bogoyavlensky   Цитата(Арк К @ Dec 2 2008, 18:16) А надо ...   Dec 3 2008, 08:26
|- - _Pasha   Цитата(n_bogoyavlensky @ Dec 3 2008, 12:2...   Dec 3 2008, 08:55
|- - n_bogoyavlensky   ЦитатаВ догонку. Деление на 255 в данном случае мо...   Dec 3 2008, 09:46
- - _Pasha   Цитата(n_bogoyavlensky @ Dec 2 2008, 18:0...   Dec 2 2008, 14:24
|- - Непомнящий Евгений   Цитата(_Pasha @ Dec 2 2008, 17:24) Исполь...   Dec 2 2008, 15:14
|- - _Pasha   Цитата(Непомнящий Евгений @ Dec 2 2008, 19...   Dec 2 2008, 15:20
|- - =GM=   Цитата(Непомнящий Евгений @ Dec 2 2008, 15...   Dec 2 2008, 16:53
|- - Непомнящий Евгений   Цитата(=GM= @ Dec 2 2008, 19:53) Вот здес...   Dec 3 2008, 05:26
|- - =GM=   Цитата(Непомнящий Евгений @ Dec 3 2008, 05...   Dec 3 2008, 11:00
- - =GM=   Цитата(n_bogoyavlensky @ Dec 2 2008, 14:0...   Dec 2 2008, 14:52
|- - Непомнящий Евгений   Цитата(=GM= @ Dec 2 2008, 17:52) C=(Y*C1*...   Dec 2 2008, 15:00
|- - =GM=   Цитата(Непомнящий Евгений @ Dec 2 2008, 15...   Dec 2 2008, 15:05
- - LordVader   Вот что нагуглилось: http://www.sharpthinking.net/...   Dec 2 2008, 16:48
- - VDG   Человек скорее всего управляет RGB-светодиодом, а ...   Dec 2 2008, 22:02
- - n_bogoyavlensky   Вот ещё одна задача. Как аналогичным образом целоч...   Dec 12 2008, 20:39
|- - Александр Куличок   Цитата(n_bogoyavlensky @ Dec 12 2008, 22...   Dec 12 2008, 23:29
|- - n_bogoyavlensky   ЦитатаДля диапазона A=[0..255): (unsigned char)(...   Dec 13 2008, 11:33
|- - singlskv   Цитата(n_bogoyavlensky @ Dec 13 2008, 14...   Dec 13 2008, 12:06
|- - n_bogoyavlensky   Цитата(singlskv @ Dec 13 2008, 16:06) Име...   Dec 13 2008, 12:16
|- - xemul   Цитата(n_bogoyavlensky @ Dec 13 2008, 15...   Dec 13 2008, 12:56
||- - n_bogoyavlensky   Цитата(xemul @ Dec 13 2008, 16:56) x/10 ~...   Dec 13 2008, 18:34
||- - xemul   Цитата(n_bogoyavlensky @ Dec 13 2008, 21...   Dec 13 2008, 20:41
||- - singlskv   Цитата(xemul @ Dec 13 2008, 23:41) Спасиб...   Dec 13 2008, 21:33
||- - xemul   Цитата(singlskv @ Dec 14 2008, 00:33) на ...   Dec 13 2008, 22:41
||- - Александр Куличок   Цитата(singlskv @ Dec 13 2008, 23:33) -ит...   Dec 13 2008, 23:35
|- - SSerge   Цитата(n_bogoyavlensky @ Dec 13 2008, 18...   Dec 13 2008, 13:00
- - singlskv   Дык все точно так же, умножте на 26(~256/10) или н...   Dec 12 2008, 21:13
- - ae_   x/10 = x*(1/10) = x*(205/2048) = (x*205)>>11...   Dec 13 2008, 12:56
- - n_bogoyavlensky   Кстати, а что за метод в 11 посте? Там логика друг...   Dec 15 2008, 09:59
- - SSerge   Цитата(n_bogoyavlensky @ Dec 15 2008, 15...   Dec 15 2008, 11:33


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

 


RSS Текстовая версия Сейчас: 19th August 2025 - 23:05
Рейтинг@Mail.ru


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