BASCOM AVR в вопросах и ответах
-
vanyap1
- Электрический кот
- Сообщения: 1048
- Зарегистрирован: Пт июл 30, 2010 11:49:03
- Откуда: Украина
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Как в коде сообразить такое приравнивание: например есть переменное значение 1 - 1024, то как например выделить из него диапазон от 500 до 755 и выдать в процентах (0-100)?
Значение можно просто поделить на 2,55 и видать результат, но как извлечь этот диапазон?
Значение можно просто поделить на 2,55 и видать результат, но как извлечь этот диапазон?
Re: BASCOM AVR в вопросах и ответах
можно попробовать из исходной переменной отнять 12, далее сдвинуть вправо на 1 разряд и выделить младший байт. получится однобайтовая переменная от 0 до 255 находящаяся в этом диапазане
.....
U = U_r - 12
Shift U , right , 1
Us = low(u)
.....
.....
U = U_r - 12
Shift U , right , 1
Us = low(u)
.....
-
BerZerK-ku
- Мучитель микросхем
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Re: BASCOM AVR в вопросах и ответах
Я ничего не понял
Что за результат?Или попробуем наоборот:
Что это?
Если быстродействие и размер кода не важны, можно хотя бы в лоб (если я правильно задачу понял
)
Что за результат?
Код: Выделить всё
u = 100;
u - 12 = 88
u >> 1 = 44
low(u) = 44Код: Выделить всё
u = 1;
u << 1 = 2;
u + 12 = 13Если быстродействие и размер кода не важны, можно хотя бы в лоб (если я правильно задачу понял
) Код: Выделить всё
u16 a;
if ( (a > 499) && (a < 756) )
{
a = a - 500;
a = a / 2.55F;
}
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
День добрый.
Можно просто проверить через Select Case:
Такой вариант еще удобен тем, что можно в любой момент добавить проверку значения (например Case 50:). Или добавить исполнение кода при иных значениях (Case Else:).
Можно просто проверить через Select Case:
Код: Выделить всё
Select Case Temp ' проверяем значение переменной Temp
Case 500 To 755: ' если значение находится в указанном диапазоне
' тут нужные расчеты
End Select ' конец проверки
Такой вариант еще удобен тем, что можно в любой момент добавить проверку значения (например Case 50:). Или добавить исполнение кода при иных значениях (Case Else:).
Последний раз редактировалось edm2007 Чт дек 15, 2011 11:36:14, всего редактировалось 1 раз.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Re: BASCOM AVR в вопросах и ответах
BerZerK-ku писал(а):Я ничего не понял![]()
Что за результат?Или попробуем наоборот:Код: Выделить всё
u = 100;
u - 12 = 88
u >> 1 = 44
low(u) = 44Что это?Код: Выделить всё
u = 1;
u << 1 = 2;
u + 12 = 13
[/code]
вопрошающему нужен результат в процентах от 500 до 755, а получившийся байт делим на 2,55 и получаем результат в процентах в заданном диапазоне, ну несомненно это вычисление нужно поставить в условие выполнения, иначе игнорируем
-
vanyap1
- Электрический кот
- Сообщения: 1048
- Зарегистрирован: Пт июл 30, 2010 11:49:03
- Откуда: Украина
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
BerZerK-ku писал(а):Я ничего не понял![]()
Что за результат?Или попробуем наоборот:Код: Выделить всё
u = 100;
u - 12 = 88
u >> 1 = 44
low(u) = 44Что это?Код: Выделить всё
u = 1;
u << 1 = 2;
u + 12 = 13
Если быстродействие и размер кода не важны, можно хотя бы в лоб (если я правильно задачу понял)
Код: Выделить всё
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 в вопросах и ответах
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 и
так далее
.....
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 и
так далее
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
raf65, вроде как можно проще и понятнее:
Код: Выделить всё
Select Case Temp
Case 500 To 755:
Percent = Temp - 500
Percent = Percent / 2,55
End Select
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
-
vanyap1
- Электрический кот
- Сообщения: 1048
- Зарегистрирован: Пт июл 30, 2010 11:49:03
- Откуда: Украина
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Спасибо, буду экспериментировать..
Re: BASCOM AVR в вопросах и ответах
edm2007 писал(а):raf65, вроде как можно проще и понятнее:
ну да
-
BerZerK-ku
- Мучитель микросхем
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Re: BASCOM AVR в вопросах и ответах
Код: Выделить всё
Case 500 to 755А можно еще подробнее? Вот допустим берем число 500. 500 - 12 = 488 -> 488 >> 1 = 244 -> 244 / 2.55 ну ни как не 0. В чем подвох?raf65 писал(а):вопрошающему нужен результат в процентах от 500 до 755, а получившийся байт делим на 2,55 и получаем результат в процентах в заданном диапазоне, ну несомненно это вычисление нужно поставить в условие выполнения, иначе игнорируем
Re: BASCOM AVR в вопросах и ответах
каюсь ошибки бывают
Select Case E
Case 500 To 755:
U = E + 12
P = Low(u)
A = P / 2.55
End Select
нужно было прибавить и сдвигать не нужно, младший байт и так остается младшим
Select Case E
Case 500 To 755:
U = E + 12
P = Low(u)
A = P / 2.55
End Select
нужно было прибавить и сдвигать не нужно, младший байт и так остается младшим
Re: BASCOM AVR в вопросах и ответах
Доброе время суток.
Народ подскажите что я неправильно делаю, надо чтоб с частотой 62500 происходило прерывание и вызов подпрограммы обработки, но что то не пашет.
Может я неправильно конфигурирую таймер?
Народ подскажите что я неправильно делаю, надо чтоб с частотой 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 в вопросах и ответах
Погоди-ка, включаешь прерывание Compare1a, а разрешаешь Compare2??? Это как понимать?
Цапу крутить надо!!! Ку или не ку?
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
А Вас не смущает тот факт, что Вы конфигурируете Таймер 2, а записываете регистр сравнения таймера 1?
Последний раз редактировалось edm2007 Пт дек 16, 2011 19:39:49, всего редактировалось 1 раз.
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
- edm2007
- Поставщик валерьянки для Кота
- Сообщения: 2255
- Зарегистрирован: Вт апр 21, 2009 22:24:10
- Откуда: Иркутск
- Контактная информация:
Re: BASCOM AVR в вопросах и ответах
Да-да. Опередил.
Конфигурируется таймер 2, пишется регистр сравнения таймера 1, присваивается метка опять же по сравнению таймера 1, а разрешается и запускается таймер 2. 
"Слишком много людей ломаются, даже не подозревая о том, насколько близки к успеху они были в тот момент, когда упали духом". Томас Алва Эдисон
Re: BASCOM AVR в вопросах и ответах
Да не заметил, но как сконфигурировать второй таймер на срабатывание по произвольной частоте. Баском недаёт присвоит значение OC2.
Всё нашол OCR2
Код: Выделить всё
$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 в вопросах и ответах
А даташит почитать слабо? Там регистры все описаны!
Цапу крутить надо!!! Ку или не ку?
Re: BASCOM AVR в вопросах и ответах
Igor_67 Я уже в предыдущем сообщении написал что нашол.
Возник ещё один вопрос. Как привести значения выдаваемые АЦП к нормальным десятичным значениям?
Возник ещё один вопрос. Как привести значения выдаваемые АЦП к нормальным десятичным значениям?
Только абсолютная пустота бездны принесёт мне покой.