Страница 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
Я ничего не понял
Что за результат?
Код: Выделить всё
u = 100;
u - 12 = 88
u >> 1 = 44
low(u) = 44
Или попробуем наоборот:
Что это?
Если быстродействие и размер кода не важны, можно хотя бы в лоб (если я правильно задачу понял

)
Код: Выделить всё
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 писал(а):Я ничего не понял
Что за результат?
Код: Выделить всё
u = 100;
u - 12 = 88
u >> 1 = 44
low(u) = 44
Или попробуем наоборот:
Что это?
[/code]
вопрошающему нужен результат в процентах от 500 до 755, а получившийся байт делим на 2,55 и получаем результат в процентах в заданном диапазоне, ну несомненно это вычисление нужно поставить в условие выполнения, иначе игнорируем
Re: BASCOM AVR в вопросах и ответах
Добавлено: Чт дек 15, 2011 11:43:31
vanyap1
BerZerK-ku писал(а):Я ничего не понял
Что за результат?
Код: Выделить всё
u = 100;
u - 12 = 88
u >> 1 = 44
low(u) = 44
Или попробуем наоборот:
Что это?
Если быстродействие и размер кода не важны, можно хотя бы в лоб (если я правильно задачу понял

)
Код: Выделить всё
u16 a;
if ( (a > 499) && (a < 756) )
{
a = a - 500;
a = a / 2.55F;
}
А в баскоме как написать этот код правильно -
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
Хочу такое же в Си (.
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 Я уже в предыдущем сообщении написал что нашол.
Возник ещё один вопрос. Как привести значения выдаваемые АЦП к нормальным десятичным значениям?