roboforum.ru

Технический форум по робототехнике.
Текущее время: 01 мар 2025, 23:39

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Непонятки с арифметикой
СообщениеДобавлено: 24 июн 2012, 16:48 
Не в сети

Зарегистрирован: 25 янв 2009, 00:08
Сообщения: 41
Откуда: Великий Новгород
прог. языки: PHP
Есть код - берет 2 цифры из УАРТА (вывожу проценты 00-99) потом преобразую их для ряда ШИМа.
Подаю в УАРТ цифру 50, а результат pwm = 0x006A, хотя меняю переменную procent на число 0x50 и выводит pwm = 0х216 т.е. правильно !
Проверил зажигая на мониторе символы.
Код:
     
     unsigned char p_text1,p_text2;
     unsigned int pwm,procent;

Код:
       p_text1 = getchar();
       p_text2 = getchar();
       lcd_gotoxy(6,1);
       lcd_putchar(p_text1);
       lcd_gotoxy(7,1);
       lcd_putchar(p_text2);
       lcd_gotoxy(8,1);
       lcd_putchar(0x25);
       procent = (p_text1 << 4)|(0b00001111 & p_text2); //50
       procent = (unsigned char) (procent & 0x0ff);

       
       pwm = (procent*0x3ff)/0x099; //преобразую   
       
       if (pwm == 0x6a) { //зажигается
        lcd_gotoxy(3,1);
        lcd_putchar(0xff);       
       }   
       if (procent == 0x50) {//зажигается
        lcd_gotoxy(2,1);
        lcd_putchar(0xff);       
       }


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Непонятки с арифметикой
СообщениеДобавлено: 24 июн 2012, 18:08 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
1. Смешал в кучу десятичные и 16-ричные
2. Вот здесь переполнение: procent*0x3ff

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Непонятки с арифметикой
СообщениеДобавлено: 24 июн 2012, 18:36 
Не в сети

Зарегистрирован: 25 янв 2009, 00:08
Сообщения: 41
Откуда: Великий Новгород
прог. языки: PHP
blindman писал(а):
1. Смешал в кучу десятичные и 16-ричные
2. Вот здесь переполнение: procent*0x3ff

но я проверяю значение procent оно равно 0х50
Код:
if (procent == 0x50) {
        lcd_gotoxy(2,1);
        lcd_putchar(0xff); //символ высвечивается а значит условие истина     
       }

и если подставить вместо procent число 0x50 то все считается и не переполняется.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Непонятки с арифметикой
СообщениеДобавлено: 24 июн 2012, 18:45 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
0x50 * 0x3FF = 0x13FB0; 0x13FB0 & 0xFFFF = 0x3FB0; 0x3FB0 / 0x99 = 0x6A

Если шлешь десятичное число, то и не делай из 50 80

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Непонятки с арифметикой
СообщениеДобавлено: 24 июн 2012, 18:55 
Не в сети

Зарегистрирован: 25 янв 2009, 00:08
Сообщения: 41
Откуда: Великий Новгород
прог. языки: PHP
blindman писал(а):
0x13FB0 & 0xFFFF = 0x3FB0;

получается если я возьму pwm как long int то все должно проходить, а оно не проходит :(
Цитата:
Если шлешь десятичное число, то и не делай из 50 80

а я и не делаю...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Непонятки с арифметикой
СообщениеДобавлено: 24 июн 2012, 19:04 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Отправляешь 50 десятичное?
В чем смысл вот этого ? procent = (p_text1 << 4)|(0b00001111 & p_text2);

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Непонятки с арифметикой
СообщениеДобавлено: 24 июн 2012, 19:40 
Не в сети

Зарегистрирован: 25 янв 2009, 00:08
Сообщения: 41
Откуда: Великий Новгород
прог. языки: PHP
blindman писал(а):
Отправляешь 50 десятичное?
В чем смысл вот этого ? procent = (p_text1 << 4)|(0b00001111 & p_text2);

преобразует принятые из УАРТ два ASCII кода (0х35 и 0х30) в один HEX процетов (0х50).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Непонятки с арифметикой
СообщениеДобавлено: 24 июн 2012, 19:43 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Еще раз. 50 отправляешь - десятичное ? Зачем его преобразуешь в 50 16-ричное (оно же 80 десятичное) ?

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Непонятки с арифметикой
СообщениеДобавлено: 24 июн 2012, 19:55 
Не в сети

Зарегистрирован: 25 янв 2009, 00:08
Сообщения: 41
Откуда: Великий Новгород
прог. языки: PHP
blindman писал(а):
Еще раз. 50 отправляешь - десятичное ? Зачем его преобразуешь в 50 16-ричное (оно же 80 десятичное) ?

посылаю 50 десятичное, т.к. человеку удобнее ориентироваться в диапазоне десятичных...на МК оно в любом случае приходит как два шестнадцатеричных - мне показалось так будет удобнее, работать с одним HEX числом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Непонятки с арифметикой
СообщениеДобавлено: 24 июн 2012, 20:03 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Оно "приходит" на МК не как десятичное, и не как 16-ричное. Ты путаешь число и форму его записи. Пятьдесят в 10-чной записи выглядит как 50, в 16-ричной - как 32. Но это то же самое число. А вот 50 в 10-чной записи и 50 в 16-ричной - это разные числа.

Добавлено спустя 46 секунд:
И не надо цитировать предыдущее сообщение.

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Непонятки с арифметикой
СообщениеДобавлено: 24 июн 2012, 20:15 
Не в сети

Зарегистрирован: 25 янв 2009, 00:08
Сообщения: 41
Откуда: Великий Новгород
прог. языки: PHP
Ну в любом случае мне нужно получить значение от пользователя и как то его пропорционально приравнять к ряду 0-1023 , а в каких формах записи я буду это делать не сильно важно...
В вашей формуле видно что ошибка не в форме записи
Цитата:
0x50 * 0x3FF = 0x13FB0; 0x13FB0 & 0xFFFF = 0x3FB0; 0x3FB0 / 0x99 = 0x6A
а в том что выделено жирным?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Непонятки с арифметикой
СообщениеДобавлено: 24 июн 2012, 20:20 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
Да ни в каких формах ты это не делаешь. Число - оно и есть число! Ошибка в том, что ты декодируешь запись числа как будто она 16-ричная, в то время как она 10-чная

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Непонятки с арифметикой
СообщениеДобавлено: 25 июн 2012, 14:54 
Не в сети

Зарегистрирован: 25 янв 2009, 00:08
Сообщения: 41
Откуда: Великий Новгород
прог. языки: PHP
Ну хорошо, допустим я небуду преобразовывать, и допустим я захочу послать число не 50 а 99 тогда формула будет такой:
0x63 * 0x3FF = 0x18B9D; 0x18B9D & 0xFFFF = 0x8B9D; 0x8B9D / 0x63 = 0x169 - что не есть правильно !

я правильно понимаю что 0x18B9D & 0xFFFF вот это зависит от того какого типа переменная ? int - 0xffff, long int - 0xffffffff ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Непонятки с арифметикой
СообщениеДобавлено: 25 июн 2012, 14:57 
Не в сети
Аватара пользователя

Зарегистрирован: 10 ноя 2011, 12:02
Сообщения: 5691
Откуда: Turku, Finland
Skype: elmot73
прог. языки: Java и все-все=все
ФИО: Илья
Почти правильно.
unsigned int - 0xffff
unsigned long - 0xffffffff ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Непонятки с арифметикой
СообщениеДобавлено: 25 июн 2012, 16:58 
Не в сети
Аватара пользователя

Зарегистрирован: 29 апр 2008, 21:15
Сообщения: 4130
Откуда: Хабаровск
прог. языки: C,C++,Assembler,PHP,Javascript,Ruby, SPIN,Java(?)
ФИО: Андрей Юрьевич
CALLIKA писал(а):
что не есть правильно

Конечно. Из-за переполнения при вычислениях

_________________
Проект [[Open Robotics]] - универсальные модули для построения роботов
Модули Open Robotics можно приобрести в магазине shop.roboforum.ru

Day OFF? You must be pulling my leg! Stop making humor before someone sees you, fool!



Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO