Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
idchrom
1 / 1 / 1
Регистрация: 26.09.2015
Сообщений: 74
1

Результат ацп

05.11.2016, 22:10. Просмотров 457. Ответов 14
Метки нет (Все метки)

Здравствуйте. Подскажите пожалуйста, если ацп записывает результат в виде 1 байта в регистр, как из этого числа выделить целую и десятую часть? Чтобы быдо например 3,5
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.11.2016, 22:10
Ответы с готовыми решениями:

Расширение АЦП микроконтроллера и подключение к АЦП датчиков
Здравствуйте. У меня встала задача сделать устройство для элеватора, для контроля температуры в 864...

Mega16 и неиспользуемый АЦП (питание ацп?)
Если я не использую АЦП контроллера нужно ли подавать на АЦП питание? Если нет, то просто оставить...

АЦП
Привет всем. Помогите решить задачу. Нужно через АЦП получить 3 разных сигнала. Снимать показания...

АЦП
Недавно начал изучать мк AVR. Написал программу для работы с АЦП. Ее работу проверяю в протеусе....

Atmega8 АЦП
Подключены к портам PC0-PC5 шесть потенциометров. С портов PC0-PC2 приходит нормальная информация...

14
ValeryS
Модератор
7944 / 5915 / 783
Регистрация: 14.02.2011
Сообщений: 20,357
Завершенные тесты: 1
05.11.2016, 22:16 2
Цитата Сообщение от idchrom Посмотреть сообщение
как из этого числа выделить целую и десятую часть? Чтобы быдо например 3,5
никак
АЦП не записывает вольты, он записывает уровни дискретизации
соответственно уровень дискретизации равен опорному напряжению деленному на количество
поскольку результат в байте значит 8 бит количество 256
чтобы узнать напряжение нужно сделать такой расчет
U =n*Uоп/256

Добавлено через 49 секунд
какое отношение это имеет к AVR?
1
idchrom
1 / 1 / 1
Регистрация: 26.09.2015
Сообщений: 74
05.11.2016, 22:19  [ТС] 3
В какой лучше раздел писать тогда?
А как потом выделить целую и десятичную часть?
0
ValeryS
Модератор
7944 / 5915 / 783
Регистрация: 14.02.2011
Сообщений: 20,357
Завершенные тесты: 1
05.11.2016, 22:28 4
Цитата Сообщение от idchrom Посмотреть сообщение
В какой лучше раздел писать тогда?
вот я и хочу узнать
писать никуда не надо я сам перенесу тему
но мне нужно знать что за контроллер? что за АЦП? встроенное или нет?
Цитата Сообщение от idchrom Посмотреть сообщение
А как потом выделить целую и десятичную часть?
во первых вычислительная техника работает с двоичными числами а не с десятичными
во вторых нужно узнать уровень
допустим опорное напряжение 2.56 вольта
натикало 110
уровень 2.56/256=0.01 или 10 мВ
значит напряжение на входе 110*10=1100 мВ в вольты сам перевести сможешь?
0
05.11.2016, 22:28
idchrom
1 / 1 / 1
Регистрация: 26.09.2015
Сообщений: 74
05.11.2016, 22:32  [ТС] 5
Микроконтроллер atmega 128, встроенный ацп
Мне нужно померить напряжение, от 0 до 5 В.
Если допустим 1,2 В результат, надо первое число 1 в первый 7-сегментный индикатор, а второе 2 во второй
0
ValeryS
Модератор
7944 / 5915 / 783
Регистрация: 14.02.2011
Сообщений: 20,357
Завершенные тесты: 1
05.11.2016, 22:35 6
Цитата Сообщение от idchrom Посмотреть сообщение
Микроконтроллер atmega 128, встроенный ацп
тогда пускай здесь остается
Цитата Сообщение от idchrom Посмотреть сообщение
Если допустим 1,2 В результат,
откуда узнал?
я так и не увидел расчетов
Чему равно опорное? чему равен шаг дискретизации:
0
idchrom
1 / 1 / 1
Регистрация: 26.09.2015
Сообщений: 74
05.11.2016, 22:43  [ТС] 7
Опорное 5В, шаг дискретизации я не знаю что такое
Допустим показания 2В, следовательно в результат регистр запишет 2*256/5= 102
Так?
0
Jman
87 / 75 / 38
Регистрация: 11.10.2015
Сообщений: 809
Завершенные тесты: 5
07.11.2016, 12:14 8
Если опорное равно 5В -> VCC:
Для LCD я делал так;
C
1
2
3
4
5
6
char string[10];        // глобальная переменная;
 
voltage = (float) data*0.0048828;              // Переводим в вольты 
sprintf(string, "V:%1.2f", voltage );             // форматируем
lcd_gotoxy(0,1);                        // Выставляем курсор
lcd_puts(string);                       // Выводим значение
Можно и так перевести:
C
1
voltage = (float) data*5.00/1024.00;
Добавлено через 5 минут
Для 8 битного режима, замените 1024 на 256;
2
Jman
87 / 75 / 38
Регистрация: 11.10.2015
Сообщений: 809
Завершенные тесты: 5
07.11.2016, 12:22 9
Вот пример на CodeVision
1
Вложения
Тип файла: rar 7seg-CodeVision.rar (48.6 Кб, 2 просмотров)
idchrom
1 / 1 / 1
Регистрация: 26.09.2015
Сообщений: 74
07.11.2016, 15:47  [ТС] 10
А кода для avr studio нет? я просто не понимаю языка который вы скинули
0
Jman
87 / 75 / 38
Регистрация: 11.10.2015
Сообщений: 809
Завершенные тесты: 5
07.11.2016, 15:49 11
Цитата Сообщение от idchrom Посмотреть сообщение
не понимаю языка который вы скинули
Это написано на языке Си. Вам на каком нужно?
0
idchrom
1 / 1 / 1
Регистрация: 26.09.2015
Сообщений: 74
07.11.2016, 15:51  [ТС] 12
В avr studio 4 я пишу
0
Витальич
1277 / 1183 / 175
Регистрация: 02.12.2013
Сообщений: 4,886
07.11.2016, 15:54 13
Цитата Сообщение от Jman Посмотреть сообщение
Это написано на языке Си
Цитата Сообщение от Jman Посмотреть сообщение
Вот пример на CodeVision
1. Диалект СИ в CodeVision далёк от стандарта
2. В CodeVision до хрена своих не стандартных макросов.
0
Jman
87 / 75 / 38
Регистрация: 11.10.2015
Сообщений: 809
Завершенные тесты: 5
07.11.2016, 16:00 14
Цитата Сообщение от Витальич Посмотреть сообщение
1. Диалект СИ в CodeVision далёк от стандарта
2. В CodeVision до хрена своих не стандартных макросов.
Я ж не знаю =) Может человек на Bascom пишет, или в Algorithm Builder, FlowCode, а может на ассемблере. Языка avr studio 4 нет. Вот и уточняю. Предполагаю если это Си, то да, работа портов в CVAVR не совсем "Сишная". ТС - вот линк, там все разжеванно плюс архивы для разных IDE, вам нужно будет портировать WinAvr. Или самому просто переписать со странички Пашгана. http://chipenable.ru/index.php/progr...ntrollere.html
1
EfesXZC
2 / 2 / 2
Регистрация: 07.08.2015
Сообщений: 72
12.11.2016, 18:25 15
Для вывода на семисегментный индикатор я делал так:
C
1
2
3
4
5
6
7
        lefvU = (char) U;
    rigvU = (char) (100 * (U - (char)U));
    
    U0 =  (lefvU/10)%10;
    U1 =  lefvU%10;
    U2 =  (rigvU/10)%10;
    U3 =   rigvU%10;
U - измеренное значение; lefvU, rigvU - целая и сотая доли числа соответственно; U0...3 - цифры соответствующие разрядам индикатора.
0
12.11.2016, 18:25
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.11.2016, 18:25

Мультиплексирование АЦП
На днях по розьбе моего товарища собрал измерительный комплекс. Фишка в том что он имеет 4 канала...

АЦП и прерывание
Доброго времени суток. Взываю о help'е. Микроконтроллер mega2560 не выходит из прерывания по АЦП....

АЦП ATmega8
Доброго времени суток. Написал программу, в которой при выходе из обработчика прерывания по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.