powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Нестандартный 2's complement
14 сообщений из 14, страница 1 из 1
Нестандартный 2's complement
    #39940525
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня ADC меряет положительные и отрицательные напряжения. Резолюция 18 бит.
В случае положительного напряжения все просто - полученное значение умножить на вес бита
volt = adc_value * bit_weight.
В случае отрицательного напряжения нужно сначала сделать 2's complement. Но если в обычном int 31-й бит = 1 отрицательное значение то у меня 17-й бит = 1 отрицательное значение.
Что нужно делать в моем случае? Шифт влево а потом шифт вправо?
...
Рейтинг: 0 / 0
Нестандартный 2's complement
    #39940562
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сделал так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
private void buttonCalc_Click(object sender, EventArgs e)
{
    int conv_val;
   
    //negative value?
    if ((adc_val & (1 << 17)) > 0)
    {
          adc_val |= 0xfffc0000;
    }
}



С# ругается - Error CS0266 Cannot implicitly convert type 'uint' to 'int'. An explicit conversion exists (are you missing a cast?)

причем adc_val |= (int)0xfffc0000; не помогает
...
Рейтинг: 0 / 0
Нестандартный 2's complement
    #39940565
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7,

Зачем сдвиги? Для любого числа бит делается одинаково.
Если надо получить абсолютное значение то просто делается XOR + 1.
x = (x ^ 0x3FFFF) + 1 // 0x3FFFF это 18 младших единичных бит

ну и обратно аналогично.
...
Рейтинг: 0 / 0
Нестандартный 2's complement
    #39940568
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или имелось в виду что надо расширить до 32-битного? (Судя по попыткам в последующем посте)
...
Рейтинг: 0 / 0
Нестандартный 2's complement
    #39940572
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7
С# ругается - Error CS0266 Cannot implicitly convert type 'uint' to 'int'. An explicit conversion exists (are you missing a cast?)

причем adc_val |= (int)0xfffc0000; не помогает

Код: sql
1.
adc_val = (int)(adc_val | 0xfffc0000);
...
Рейтинг: 0 / 0
Нестандартный 2's complement
    #39940577
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky
jenya7
С# ругается - Error CS0266 Cannot implicitly convert type 'uint' to 'int'. An explicit conversion exists (are you missing a cast?)

причем adc_val |= (int)0xfffc0000; не помогает

Код: sql
1.
adc_val = (int)(adc_val | 0xfffc0000);


спасибо.
...
Рейтинг: 0 / 0
Нестандартный 2's complement
    #39940579
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7, проверь точное-ли значение?

В ЦУ и контроллерах есть как минимум 3 разные формы представления отрицательных чисел. И не факт что битовые
операции которые тебе посоветовали дают правильное значение.

С тебя - модульный тест который доказывает что все верно. Твою железяку все равно никто здесь не знает
и соответствено советовать тебе шифт-вправо шифт-влево в таких условиях невозможно. Ты сам должен
сказать какое значение expected.
...
Рейтинг: 0 / 0
Нестандартный 2's complement
    #39940583
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
jenya7, проверь точное-ли значение?

В ЦУ и контроллерах есть как минимум 3 разные формы представления отрицательных чисел. И не факт что битовые
операции которые тебе посоветовали дают правильное значение.

С тебя - модульный тест который доказывает что все верно. Твою железяку все равно никто здесь не знает
и соответствено советовать тебе шифт-вправо шифт-влево в таких условиях невозможно. Ты сам должен
сказать какое значение expected.

ну так я дополню до 32 бит
adc_val = (int)(adc_val | 0xfffc0000);
должно работать по идее.
...
Рейтинг: 0 / 0
Нестандартный 2's complement
    #39940596
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю. Почитай про дополнителный код https://ru.wikipedia.org/wiki/Дополнительный_код

помимо этого кода еще есть прямой код и обратный. Мы не знаем какой из вариантов твоя железка юзает.

и 99% твоих ответов - в докуменатции на железку.
...
Рейтинг: 0 / 0
Нестандартный 2's complement
    #39940599
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot jenya7#22105115]
mayton
jenya7, проверь точное-ли значение?
ну так я дополню до 32 бит
adc_val = (int)(adc_val | 0xfffc0000);
должно работать по идее.


не работает :(
...
Рейтинг: 0 / 0
Нестандартный 2's complement
    #39940600
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky
jenya7,

Зачем сдвиги? Для любого числа бит делается одинаково.
Если надо получить абсолютное значение то просто делается XOR + 1.
x = (x ^ 0x3FFFF) + 1 // 0x3FFFF это 18 младших единичных бит

ну и обратно аналогично.

а как обратно?
...
Рейтинг: 0 / 0
Нестандартный 2's complement
    #39940607
Aleksandr Sharahov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jenya7,

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

val |= - (val & 0x00020000);
...
Рейтинг: 0 / 0
Нестандартный 2's complement
    #39940611
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot jenya7#22105138]
jenya7
пропущено...


не работает :(

хотя...по моему нормально. доску забрали на доработку так я виртуально тестирую. похоже у меня косяк.
...
Рейтинг: 0 / 0
Нестандартный 2's complement
    #39940631
jenya7
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot jenya7#22105153]
jenya7
пропущено...

хотя...по моему нормально. доску забрали на доработку так я виртуально тестирую. похоже у меня косяк.


проверил на реальном железе. работает.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Нестандартный 2's complement
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]