Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
22.11.2006, 23:03
|
|
Частый гость
Регистрация: 25.01.2005
Сообщений: 39
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Помогите со знаковыми вычислениями
Имеем PIC18F8621
Делаем контроллер управления тех-процессом.
применяется энкодер инкрементальный.
проблема - вывод отрицательного значения на дисплей.
примерно производятся следущие операции:
1. вращение энкодера в "положительную" сторону приводит к увеличению счетчика (3-х байтового)
2. Дальше данные счетчика умножаются на фиксированный коэффициент (получаем 32 бита)
3. Полученное значение делится (подпрограмма знакового деления) на изменяемый коэффициент (32/16) получаем результат 32 бита + остаток
4. Производим BIN2BCD (подпрограмма знакового преобразования)конвертацию и выводим данные на дисплей
По такой схеме все работает.
Однако при вращении в "отрицательную" сторону, при переходе через ноль на экране вижу максимальное значение, которое постепенно уменьшается, а хотелось бы увидеть -1 и постепенное увеличение значения.
Подскажите на какой стадии необходимо в данном алгоритме применять знаковые операции (деления, умножения), или может подскажите место, где можно по доходчивому почитать на эту тему...
Спасибо.
|
|
|
|
23.11.2006, 02:44
|
|
Частый гость
Регистрация: 14.09.2005
Сообщений: 34
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Помогите со знаковыми вычислениями
Сообщение от Ilya
|
... на экране вижу максимальное значение...
|
А какое?
Хотелось бы уточнить, какие значения Вы получаете на этапах 1, 2, 3, 4?
А также, что хотели бы получить в результате.
__________
Александр
2006 11 23
|
|
|
|
23.11.2006, 09:26
|
|
Гражданин KAZUS.RU
Регистрация: 27.07.2006
Сообщений: 659
Сказал спасибо: 0
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
В счетчике,который считает приращения придется пожертвовать старшим битом,и объявить его знаковым.
Если примете что + это 1 тогда 0 у вас будет 0x800000
тогда если вы получите 0x7fffff то можете проинвертировать и прибавить1.это и будет -1.
|
|
|
|
23.11.2006, 15:07
|
|
Частый гость
Регистрация: 25.01.2005
Сообщений: 39
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
с толку меня сбил PLC митсубишевский с панелью...
там тип (знаковая, беззнаковая) переменной указывается только на выводе данных, уже в панели, т.е. после всех вычислений.
Сразу необратил внимания, но теперь понимаю, что все вычисления, и сам счетчик должны быть знаковыми.
Чтобы не париться с 24 битной знаковой подпрограммой умножения (в наличии 32 битная) увеличу разрядность счетчика до 32 бит... посмотрим что получится...
|
|
|
|
23.11.2006, 15:34
|
|
Частый гость
Регистрация: 25.01.2005
Сообщений: 39
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
все заработало
спасибо за помощь
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:15.
|
|