Страница 105 из 304

Re: BASCOM AVR в вопросах и ответах

Добавлено: Пн дек 12, 2011 21:30:26
vanyap1
Как в коде сообразить такое приравнивание: например есть переменное значение 1 - 1024, то как например выделить из него диапазон от 500 до 755 и выдать в процентах (0-100)?
Значение можно просто поделить на 2,55 и видать результат, но как извлечь этот диапазон?

Re: BASCOM AVR в вопросах и ответах

Добавлено: Чт дек 15, 2011 08:57:01
raf65
можно попробовать из исходной переменной отнять 12, далее сдвинуть вправо на 1 разряд и выделить младший байт. получится однобайтовая переменная от 0 до 255 находящаяся в этом диапазане


.....
U = U_r - 12
Shift U , right , 1
Us = low(u)
.....

Re: BASCOM AVR в вопросах и ответах

Добавлено: Чт дек 15, 2011 10:02:22
BerZerK-ku
Я ничего не понял :dont_know:
Что за результат?

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

u = 100;
u - 12 = 88
u >> 1 = 44
low(u) = 44
Или попробуем наоборот:

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

 u = 1;
u << 1 = 2;
u + 12 = 13
Что это?

Если быстродействие и размер кода не важны, можно хотя бы в лоб (если я правильно задачу понял :dont_know:)

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

 u16 a;
if ( (a > 499)  && (a < 756) ) 
{
    a = a - 500;
    a =  a / 2.55F;
}

Re: BASCOM AVR в вопросах и ответах

Добавлено: Чт дек 15, 2011 11:28:28
edm2007
День добрый.

Можно просто проверить через Select Case:

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

Select Case Temp         ' проверяем значение переменной Temp

Case 500 To 755:         ' если значение находится в указанном диапазоне
' тут нужные расчеты

End Select                   ' конец проверки
Такой вариант еще удобен тем, что можно в любой момент добавить проверку значения (например Case 50:). Или добавить исполнение кода при иных значениях (Case Else:).

Re: BASCOM AVR в вопросах и ответах

Добавлено: Чт дек 15, 2011 11:34:12
raf65
BerZerK-ku писал(а):Я ничего не понял :dont_know:
Что за результат?

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

u = 100;
u - 12 = 88
u >> 1 = 44
low(u) = 44
Или попробуем наоборот:

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

 u = 1;
u << 1 = 2;
u + 12 = 13
Что это?
[/code]
вопрошающему нужен результат в процентах от 500 до 755, а получившийся байт делим на 2,55 и получаем результат в процентах в заданном диапазоне, ну несомненно это вычисление нужно поставить в условие выполнения, иначе игнорируем

Re: BASCOM AVR в вопросах и ответах

Добавлено: Чт дек 15, 2011 11:43:31
vanyap1
BerZerK-ku писал(а):Я ничего не понял :dont_know:
Что за результат?

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

u = 100;
u - 12 = 88
u >> 1 = 44
low(u) = 44
Или попробуем наоборот:

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

 u = 1;
u << 1 = 2;
u + 12 = 13
Что это?

Если быстродействие и размер кода не важны, можно хотя бы в лоб (если я правильно задачу понял :dont_know:)

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

 u16 a;
if ( (a > 499)  && (a < 756) ) 
{
    a = a - 500;
    a =  a / 2.55F;
}

А в баскоме как написать этот код правильно -

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

if a > 499 > 755
a = a / 2,55
end if

Re: BASCOM AVR в вопросах и ответах

Добавлено: Чт дек 15, 2011 11:58:21
raf65
EDM2007 предложил
.....
Select Case U_r
Case 500 To 755:

U = U_r - 12
Shift U , right , 1
Us = Low(u)
...
...

End Select
.......

где U_r - исходная переменная типа wopd
Us - типа байт, из него и вычисляем проценты, т.е делим на 2.55 и
так далее

Re: BASCOM AVR в вопросах и ответах

Добавлено: Чт дек 15, 2011 12:15:48
edm2007
raf65, вроде как можно проще и понятнее:

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

Select Case Temp

Case 500 To 755:
Percent = Temp - 500
Percent = Percent / 2,55

End Select

Re: BASCOM AVR в вопросах и ответах

Добавлено: Чт дек 15, 2011 12:17:24
vanyap1
Спасибо, буду экспериментировать..

Re: BASCOM AVR в вопросах и ответах

Добавлено: Чт дек 15, 2011 12:18:40
raf65
edm2007 писал(а):raf65, вроде как можно проще и понятнее:
ну да

Re: BASCOM AVR в вопросах и ответах

Добавлено: Чт дек 15, 2011 12:26:45
BerZerK-ku

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

Case 500 to 755
Хочу такое же в Си (.
raf65 писал(а):вопрошающему нужен результат в процентах от 500 до 755, а получившийся байт делим на 2,55 и получаем результат в процентах в заданном диапазоне, ну несомненно это вычисление нужно поставить в условие выполнения, иначе игнорируем
А можно еще подробнее? Вот допустим берем число 500. 500 - 12 = 488 -> 488 >> 1 = 244 -> 244 / 2.55 ну ни как не 0. В чем подвох?

Re: BASCOM AVR в вопросах и ответах

Добавлено: Чт дек 15, 2011 14:17:08
raf65
каюсь ошибки бывают

Select Case E
Case 500 To 755:

U = E + 12
P = Low(u)
A = P / 2.55

End Select

нужно было прибавить и сдвигать не нужно, младший байт и так остается младшим

Re: BASCOM AVR в вопросах и ответах

Добавлено: Пт дек 16, 2011 19:11:06
TRIOD
Доброе время суток.

Народ подскажите что я неправильно делаю, надо чтоб с частотой 62500 происходило прерывание и вызов подпрограммы обработки, но что то не пашет.
Может я неправильно конфигурирую таймер?

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

$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 64
$swstack = 32
$framesize = 48

Config Timer2 = Timer , Prescale = 1 , Compare = Disconnect , Clear Timer = 1
Compare1a = 128                                             'частота 62500
On Compare1a Algorithm
Enable Compare2
Enable Interrupts
Start Timer2

Do
'код программы
Loop

Algorithm:

Return

Re: BASCOM AVR в вопросах и ответах

Добавлено: Пт дек 16, 2011 19:38:38
Igor_67
Погоди-ка, включаешь прерывание Compare1a, а разрешаешь Compare2??? Это как понимать?

Re: BASCOM AVR в вопросах и ответах

Добавлено: Пт дек 16, 2011 19:38:51
edm2007
А Вас не смущает тот факт, что Вы конфигурируете Таймер 2, а записываете регистр сравнения таймера 1?

Re: BASCOM AVR в вопросах и ответах

Добавлено: Пт дек 16, 2011 19:39:36
Igor_67
Во-во, и я про то же! :)))

Re: BASCOM AVR в вопросах и ответах

Добавлено: Пт дек 16, 2011 19:42:59
edm2007
Да-да. Опередил. :) Конфигурируется таймер 2, пишется регистр сравнения таймера 1, присваивается метка опять же по сравнению таймера 1, а разрешается и запускается таймер 2. :))

Re: BASCOM AVR в вопросах и ответах

Добавлено: Пт дек 16, 2011 20:14:38
TRIOD
Да не заметил, но как сконфигурировать второй таймер на срабатывание по произвольной частоте. Баском недаёт присвоит значение OC2.

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

$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 64
$swstack = 32
$framesize = 48

Config Timer2 = Timer , Prescale = 1 , Compare = Disconnect , Clear Timer = 1
On oc2 Pulse
Enable oc2
Enable Interrupts
Enable Timer2

Do

Loop
End


Pulse:
    
Return
Всё нашол OCR2

Re: BASCOM AVR в вопросах и ответах

Добавлено: Пт дек 16, 2011 20:26:26
Igor_67
А даташит почитать слабо? Там регистры все описаны!

Re: BASCOM AVR в вопросах и ответах

Добавлено: Пт дек 16, 2011 20:26:45
TRIOD
Igor_67 Я уже в предыдущем сообщении написал что нашол.

Возник ещё один вопрос. Как привести значения выдаваемые АЦП к нормальным десятичным значениям?