Easyelectronics.ru

Электроника для всех
Текущее время: 01 мар 2021, 08:53

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



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Перевод числа из двоичного формата в двоично-десятичный
СообщениеДобавлено: 03 мар 2010, 16:00 
Заглядывает иногда

Зарегистрирован: 07 фев 2010, 14:58
Сообщения: 63
Откуда: Новосибирск
Решил пока вывести на экран результат работы ацп, приведенный к формату аски. Но появилась проблема, на экране показания скачут (со значительным размахом), даже когда ручку резистора не кручу. Изменяются числа от 0 до 1023, т.е. верно. Помогите разобраться.

Upd. Отлаживаю все это на драконе (мега32), используется внутренний ИОН, между выводами AREF и GND впаян кондер 0,1 мкФ.


Вложения:
Комментарий к файлу: Проект программы
LCD+ADC.ZIP [14.9 Кб]
Скачиваний: 262
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод числа из двоичного формата в двоично-десятичный
СообщениеДобавлено: 03 мар 2010, 16:13 
Старожил
Аватара пользователя

Зарегистрирован: 27 янв 2010, 12:18
Сообщения: 1259
Откуда: Moscow
Насколько скачут при неизменном положении ручки? Младшие разряды могу легко скакать. А если плохо разведена аналоговая часть - то и больше разрядов могу скакать.

На мой взгляд:
- вы не учитываете, что r20 и r21 могут поменяться в процессе перевода в аскии.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод числа из двоичного формата в двоично-десятичный
СообщениеДобавлено: 03 мар 2010, 17:18 
Заглядывает иногда

Зарегистрирован: 07 фев 2010, 14:58
Сообщения: 63
Откуда: Новосибирск
Самое если с резистора подавать сигнал на ADC0, то значений только два 0 и 1023. Разводку аналоговой части оставим на совести разработчиков дракона. Еще не понимаю, когда устанавливаю биты MUX4...0 регистра ADMUX в ноль то ацп должен считывать сигнал только со входа ADC0, но если подать сигнал на другие входы ацп, то на экране будут числа более-менее соответствующие напряжению (но все равно скачут в больших пределах).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод числа из двоичного формата в двоично-десятичный
СообщениеДобавлено: 03 мар 2010, 17:29 
Старожил
Аватара пользователя

Зарегистрирован: 27 янв 2010, 12:18
Сообщения: 1259
Откуда: Moscow
Тогда разбирайтесь с тем, что и куда у вас подключено. Мои кнопки на резистивном делителе работают без проблем и без сбоев.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод числа из двоичного формата в двоично-десятичный
СообщениеДобавлено: 03 мар 2010, 17:55 
Супермодератор
Аватара пользователя

Зарегистрирован: 27 янв 2010, 07:40
Сообщения: 5499
Откуда: Новосибирск
У нас на работе настройщики в одном из изделий выставляют опорное напряжение 4.096 вольт)

_________________
Ищу работу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод числа из двоичного формата в двоично-десятичный
СообщениеДобавлено: 20 дек 2011, 14:43 
Старожил

Зарегистрирован: 05 май 2010, 19:39
Сообщения: 736
а есть ли готовые библиотеки на Си по переводу BCD <=> Bin? если есть с распаковщиком то вообще сказка и шоколад
функции там или что-то подобное?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод числа из двоичного формата в двоично-десятичный
СообщениеДобавлено: 20 дек 2011, 15:42 
Старожил

Зарегистрирован: 05 май 2010, 19:39
Сообщения: 736
ладно не прав.
простым языком опешите что нужно сделать с байтами, чтобы получить человеческие значения с PCF8583?
а уже по описанию я сам напишу функцию


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод числа из двоичного формата в двоично-десятичный
СообщениеДобавлено: 21 дек 2011, 10:36 
Старожил
Аватара пользователя

Зарегистрирован: 03 сен 2011, 21:13
Сообщения: 13139
Откуда: г.Мариинск, Кемеровская обл. , мать Россия
BCD -это и есть человеческие - для вывода на индикатор. Если нужно перевести в двоичное - отнимаем от каждой цифры 49 и умножаем на 10 в нужной степени. потом всё складываем
Например
BCD 567 (ascii -54,55,56)
bin=(54-49)*100+(55-49)*10+(56-49)

_________________
Лишний повод не бриться: Если у меня растёт борода, значит, это зачем-то нужно? О, Господи, неужели я - философ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод числа из двоичного формата в двоично-десятичный
СообщениеДобавлено: 21 дек 2011, 11:30 
Старожил
Аватара пользователя

Зарегистрирован: 27 янв 2010, 12:18
Сообщения: 1259
Откуда: Moscow
Johnny0007 писал(а):
BCD -это и есть человеческие - для вывода на индикатор. Если нужно перевести в двоичное - отнимаем от каждой цифры 49 и умножаем на 10 в нужной степени. потом всё складываем
Например
BCD 567 (ascii -54,55,56)
bin=(54-49)*100+(55-49)*10+(56-49)


Ну... блин... Во первых 48, во вторых - это формула перевода из ascii, а не из bcd (отнимать ничего не надо)

Для двузначных чисел (десятичных) типа даты, месяца и прочих. Например дата есть 28 число:

packed bcd - один байт: 0x28
bcd - 2 байта: 0x02 0x08 (страшим вперед)
ascii - 2 байта: 0x32 0x38

"распаковка" bcd:
buffer[0] = (bcd >> 8);
buffer[1] = (bcd & 0xFF);

packed bcd -> строка:
buffer[0] = (bcd >> 8) + '0';
buffer[1] = (bcd & 0xFF) + '0';

packed bcd->bin (число):
bin = (bcd >> 8) *10 + (bcd & 0xFF);

bcd->ascii
buffer[0] += '0';
buffer[1] += '0';


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод числа из двоичного формата в двоично-десятичный
СообщениеДобавлено: 21 дек 2011, 11:41 
Старожил
Аватара пользователя

Зарегистрирован: 03 сен 2011, 21:13
Сообщения: 13139
Откуда: г.Мариинск, Кемеровская обл. , мать Россия
THE BEAST писал(а):
Johnny0007 писал(а):
BCD -это и есть человеческие - для вывода на индикатор. Если нужно перевести в двоичное - отнимаем от каждой цифры 49 и умножаем на 10 в нужной степени. потом всё складываем
Например
BCD 567 (ascii -54,55,56)
bin=(54-49)*100+(55-49)*10+(56-49)


Ну... блин... Во первых 48, во вторых - это формула перевода из ascii, а не из bcd (отнимать ничего не надо)

Да блин, точно, всё поперепутал. Надо хорошо выспаться (хотя, в таких случаях, наверно, не поможет)

_________________
Лишний повод не бриться: Если у меня растёт борода, значит, это зачем-то нужно? О, Господи, неужели я - философ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод числа из двоичного формата в двоично-десятичный
СообщениеДобавлено: 21 дек 2011, 13:21 
Старожил

Зарегистрирован: 05 май 2010, 19:39
Сообщения: 736
THE BEAST писал(а):
Johnny0007 писал(а):
BCD -это и есть человеческие - для вывода на индикатор. Если нужно перевести в двоичное - отнимаем от каждой цифры 49 и умножаем на 10 в нужной степени. потом всё складываем
Например
BCD 567 (ascii -54,55,56)
bin=(54-49)*100+(55-49)*10+(56-49)


Ну... блин... Во первых 48, во вторых - это формула перевода из ascii, а не из bcd (отнимать ничего не надо)

Для двузначных чисел (десятичных) типа даты, месяца и прочих. Например дата есть 28 число:

packed bcd - один байт: 0x28
bcd - 2 байта: 0x02 0x08 (страшим вперед)
ascii - 2 байта: 0x32 0x38

"распаковка" bcd:
buffer[0] = (bcd >> 8);
buffer[1] = (bcd & 0xFF);

packed bcd -> строка:
buffer[0] = (bcd >> 8) + '0';
buffer[1] = (bcd & 0xFF) + '0';

packed bcd->bin (число):
bin = (bcd >> 8) *10 + (bcd & 0xFF);

bcd->ascii
buffer[0] += '0';
buffer[1] += '0';

спасибо!!!!

а обратные преобразования? из анси в bcd и и из bin в bcd?


Последний раз редактировалось Arcanum 21 дек 2011, 13:27, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод числа из двоичного формата в двоично-десятичный
СообщениеДобавлено: 21 дек 2011, 13:26 
Старожил
Аватара пользователя

Зарегистрирован: 03 сен 2011, 21:13
Сообщения: 13139
Откуда: г.Мариинск, Кемеровская обл. , мать Россия
Да у атмела аппноут есть по моему
http://ru.wikipedia.org/wiki/Двоично-десятичный_код

_________________
Лишний повод не бриться: Если у меня растёт борода, значит, это зачем-то нужно? О, Господи, неужели я - философ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод числа из двоичного формата в двоично-десятичный
СообщениеДобавлено: 21 дек 2011, 23:32 
Старожил

Зарегистрирован: 05 май 2010, 19:39
Сообщения: 736
THE BEAST писал(а):
packed bcd - один байт: 0x28
bcd - 2 байта: 0x02 0x08 (страшим вперед)
ascii - 2 байта: 0x32 0x38

"распаковка" bcd:
buffer[0] = (bcd >> 8);
buffer[1] = (bcd & 0xFF);

packed bcd -> строка:
buffer[0] = (bcd >> 8) + '0';
buffer[1] = (bcd & 0xFF) + '0';

packed bcd->bin (число):
bin = (bcd >> 8) *10 + (bcd & 0xFF);

bcd->ascii
buffer[0] += '0';
buffer[1] += '0';


ой йёёёё... внимательней надо мне быть... тут же всё написано!
вот только пришёл сейчас домой сел вплотную и сел по полной:
"распаковка" bcd:
buffer[0] = (bcd >> 8);
buffer[1] = (bcd & 0xFF);
это ещё понятно - взаимодействие с битами. buffer размера делать надо 8 бит на 2 байта (мысли в слух)

packed bcd -> строка:
buffer[0] = (bcd >> 8) + '0';
buffer[1] = (bcd & 0xFF) + '0';
хотя я нуб
void BcdToAscii (unsigned char BCD)
{
BcdAnsi[0] = (BCD >> 8) + '0';
BcdAnsi[1] = (BCD & 0xFF) + '0';
}

packed bcd->bin (число):
bin = (bcd >> 8) *10 + (bcd & 0xFF); - тут сразу врубился что к чему и почему - спасибо человек!
и даже с ходу написал функцию:
unsigned char BcdToBin (unsigned char BCD)
{
return ( (BCD >> 8) *10 + (BCD & 0xFF));
}

а как обратно преобразовывать? из ascii в BCD??


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод числа из двоичного формата в двоично-десятичный
СообщениеДобавлено: 22 дек 2011, 00:30 
Старожил
Аватара пользователя

Зарегистрирован: 03 сен 2011, 21:13
Сообщения: 13139
Откуда: г.Мариинск, Кемеровская обл. , мать Россия
ascii=bcd+48

_________________
Лишний повод не бриться: Если у меня растёт борода, значит, это зачем-то нужно? О, Господи, неужели я - философ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод числа из двоичного формата в двоично-десятичный
СообщениеДобавлено: 22 дек 2011, 00:40 
Старожил

Зарегистрирован: 05 май 2010, 19:39
Сообщения: 736
Johnny0007 писал(а):
ascii=bcd+48

вот тут куда это ? 48 в каком формате?

void BcdToAscii (unsigned char BCD)
{
BcdAscii[0] = (BCD >> 8) + '0';
BcdAscii[1] = (BCD & 0xFF) + '0';
}
скоро свихнусь с этими форматами :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод числа из двоичного формата в двоично-десятичный
СообщениеДобавлено: 22 дек 2011, 00:43 
Супермодератор
Аватара пользователя

Зарегистрирован: 23 апр 2010, 12:58
Сообщения: 5892
Откуда: Москва/Саратов
'0' = 0x30 = 48 = 0b00110000
:)

_________________
http://d.64h.me/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод числа из двоичного формата в двоично-десятичный
СообщениеДобавлено: 22 дек 2011, 00:47 
Старожил
Аватара пользователя

Зарегистрирован: 27 янв 2010, 12:18
Сообщения: 1259
Откуда: Moscow
Arcanum писал(а):

void BcdToAscii (unsigned char BCD)
{
BcdAscii[0] = (BCD >> 8) + '0';
BcdAscii[1] = (BCD & 0xFF) + '0';
}


Блин, я, оказывается, тоже не выспался. Распаковка:

BcdAscii[0] = (BCD >> 4) & 0x0F + '0';
BcdAscii[1] = (BCD & 0x0F) + '0';


Arcanum писал(а):
скоро свихнусь с этими форматами :)


Пора завязывать с программированием - BCD по сравнению с остальными форматами просто проще некуда.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод числа из двоичного формата в двоично-десятичный
СообщениеДобавлено: 22 дек 2011, 00:54 
Старожил

Зарегистрирован: 05 май 2010, 19:39
Сообщения: 736
THE BEAST писал(а):


Пора завязывать с программированием - BCD по сравнению с остальными форматами просто проще некуда.


надо просто спать 8 часов минимум в сутки а не "как и сколько урву"
максимум у меня за последнюю неделю удалось поспать 6 часов
пару раз словил жестокий глюк а про провалы в памяти вообще молчу

THE BEAST писал(а):
Блин, я, оказывается, тоже не выспался. Распаковка:


я был приятно очленён получив:
0A:0Y:0V
0A:0Y:0W
0A:0Y:0X
0A:0Y:0Y
0A:0Y:0`
0A:0f:0Q
0A:0f:0Q
0A:0f:0R
0A:0f:0S

о да! мсье знает толк в извращениях!
да и новый метод выдаёт муть
1:8:7
1:8:1
1:8:3
1:8:6

точно! всем надо нам спать поболее!
ибо скобки рулят!
void BcdToAscii (unsigned char BCD)
{
BcdAscii[0] = ((BCD >> 4) & 0x0F) + '0';
BcdAscii[1] = (BCD & 0x0F) + '0';
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод числа из двоичного формата в двоично-десятичный
СообщениеДобавлено: 22 дек 2011, 10:51 
Старожил
Аватара пользователя

Зарегистрирован: 03 сен 2011, 21:13
Сообщения: 13139
Откуда: г.Мариинск, Кемеровская обл. , мать Россия
to Arcanum
если ты со своим PCF8583 - там не так просто
посмотри, например, регистр часов:
единицы - биты 0..3
десятки - 4..5
6 бит -AM|PM
7 бит - 12/24часа
т.е. тебе надо вычленить 4..5 бит (сдвинуть вправо на 4 затем and 3, затем умножить это на 10, затем прибавить значение (Регистр and 15), т.е 0..3биты
а потом уже с учётом бита 7 решать, прибавлять ли 12

состояние остальных регистров - также индивидуально, см. даташит

_________________
Лишний повод не бриться: Если у меня растёт борода, значит, это зачем-то нужно? О, Господи, неужели я - философ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод числа из двоичного формата в двоично-десятичный
СообщениеДобавлено: 22 дек 2011, 18:45 
Старожил

Зарегистрирован: 05 май 2010, 19:39
Сообщения: 736
Johnny0007 писал(а):
to Arcanum
если ты со своим PCF8583 - там не так просто
посмотри, например, регистр часов:
единицы - биты 0..3
десятки - 4..5
6 бит -AM|PM
7 бит - 12/24часа
т.е. тебе надо вычленить 4..5 бит (сдвинуть вправо на 4 затем and 3, затем умножить это на 10, затем прибавить значение (Регистр and 15), т.е 0..3биты
а потом уже с учётом бита 7 решать, прибавлять ли 12

состояние остальных регистров - также индивидуально, см. даташит

просто буду накладывать другую маску....
у меня всё равно диапазон от 0 до 12 и не критично состояния битов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Перевод числа из двоичного формата в двоично-десятичный
СообщениеДобавлено: 24 дек 2011, 02:21 
Старожил

Зарегистрирован: 05 май 2010, 19:39
Сообщения: 736
THE BEAST писал(а):
packed bcd->bin (число):
bin = (bcd >> 8) *10 + (bcd & 0xFF);


спать надо больше!

unsigned char BcdToBin (unsigned char BCD)
{
return ( ((BCD >> 4) *10) + (BCD & 0x0F));
}


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


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


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

Сейчас этот форум просматривают: wyfinger


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB