Форум программистов, компьютерный форум, киберфорум
Наши страницы
Измерительная техника
Войти
Регистрация
Восстановить пароль
 
USERPC01
-33 / 0 / 0
Регистрация: 29.06.2018
Сообщений: 461
1

Модель АЦП на AM2504 и AD7541A

06.06.2019, 00:23. Просмотров 122. Ответов 1
Метки нет (Все метки)

Модель на Си++ АЦП на AM2504 и AD7541A с поразрядным уравновешиванием

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#include <iostream>
#include <stdint.h>
#include <math.h>
 
using namespace std;
 
uint16_t Reg=0x0FFF;
uint16_t Reg1=0;
 
uint8_t Comp=0;
 
uint8_t Compare(double xninv, double xinv)
{
if(xinv<xninv) { return 1 ;} else { return 0 ; } 
return 0;
}
 
 
double DAC(uint16_t DI, double Vref)
{
//model of  AD7541A
double  dout=0;
DI= DI&0X0FFF;  //12 bit data
 
 
 
 dout=(double) DI;  // 
 //for (int i=0; i<=11; i++) { dout+=(double) ( (uint16_t) DI & ( 1<<i))  *pow(2.0,(double)i) ; }
/*
dout=0
dout+=D[i]*pow(2,i) 
or  type conversion (only in the program ,for type mismatch problem  fixing in the
for (int i=0; i<=11; i++) { dout+=(double)(DI &(1<<i))*pow(2,(double)i) ;}
 
)
 
*/
 
double uout=Vref* (double) dout/( (double)0x0FFF);  // scale for Vref and  12 bit DAC   
 
cout<<"\nDAC  OUT="<<  uout <<" Reg1="<< (int) DI <<" "   ;
 
return uout;
}
 
 
 
double Uref=8 ;
 
 
uint16_t GetADC(double Uinp)
{
uint8_t CC,D , S;
int n; 
double DACout;
 n=12; 
 
 
S=1;
 
Reg=0x0FFF ;  //0x07FF<<1 | 0x01
 
//for (n=12; n>=0; n--)
while(S==1)
{
 
 // model of AM2504
 
 /*
                    12 11    10  9   8   7     6   5   4   3   2   1    0  
tn  D    S  E  DO  Q11 Q10   Q9  Q8  Q7  Q6    Q5  Q4  Q3  Q2  Q1  Q0   CC
 
0   x    L  L  x    x    x    x   x   x   x    x   x   x   x   x   x    x   
1   D11  H  L  x    L    H    H   H   H   H    H   H   H   H   H   H    H  reg=0x0FFF  
2   D10  H  L  D11  D11  L    H   H   H   H    H   H   H   H   H   H    H  reg&=~(1<<n-1), reg|=(D<<n), n=12
3   D9   H  L  D10  D11  D10  L   H   H   H    H   H   H   H   H   H    H  reg&=~(1<<n-1), reg|=(D<<n), n=11
4   D8   H  L  D9   D11  D10 D9   L   H   H    H   H   H   H   H   H    H  reg&=~(1<<n-1), reg|=(D<<n), n=10 
5   D7   H  L  D8   D11  D10 D9   D8  L   H    H   H   H   H   H   H    H  reg&=~(1<<n-1), reg|=(D<<n), n=9 
6   D6   H  L  D7   D11  D10 D9   D8  D7  L    H   H   H   H   H   H    H  reg&=~(1<<n-1), reg|=(D<<n), n=8 
7   D5   H  L  D6   D11  D10 D9   D8  D7  D6   L   H   H   H   H   H    H  reg&=~(1<<n-1), reg|=(D<<n), n=7 
8   D4   H  L  D5   D11  D10 D9   D8  D7  D6   D5  L   H   H   H   H    H  reg&=~(1<<n-1), reg|=(D<<n), n=6 
9   D3   H  L  D4   D11  D10 D9   D8  D7  D6   D5  D4  L   H   H   H    H  reg&=~(1<<n-1), reg|=(D<<n), n=5 
10  D2   H  L  D3   D11  D10 D9   D8  D7  D6   D5  D4  D3  L   H   H    H  reg&=~(1<<n-1), reg|=(D<<n), n=4 
11  D1   H  L  D2   D11  D10 D9   D8  D7  D6   D5  D4  D3  D2  L   H    H  reg&=~(1<<n-1), reg|=(D<<n), n=3  
12  D0   H  L  D1   D11  D10 D9   D8  D7  D6   D5  D4  D3  D2  D1  L    H  reg&=~(1<<n-1), reg|=(D<<n), n=2 
13  x    H  L  D0   D11  D10 D9   D8  D7  D6   D5  D4  D3  D2  D1  D0   L  reg&=~(1<<n-1), reg|=(D<<n), n=1
14  x    x  L  x    D11  D10 D9   D8  D7  D6   D5  D4  D3  D2  D1  D0   L  reg&=~(1<<n-1), reg|=(D<<n), n=0   on CC=0 stop 
15  x    x  H  x    H    NCh NCh  NCh NCh NCh  NCh NCh NCh NCh NCh NCh NCh
 
 
 
 */
 
   cout<<"\n n="<<n;
   DACout= DAC((Reg>>1), Uref); // virtual DAC
 
  Comp= Compare(DACout,  Uinp);  //  if(xinv<xninv) { return 1 ;} else { return 0 ; } 
 
  D= (uint8_t)    !Comp;  //    preparing  Comparator data  
  
  
  
  
  
  
  Reg &= ~(1<<n-1) ; // shift stop bit right , keep other data 
  Reg|=(D<<n);       // append new  bit from D , keep other bits  
  
  CC=(uint8_t) Reg&0x01;  //extract CC  bit from bit 0 
  S = CC;                 // assign S=CC (by circuit)
  
  n--;  //go to  next  bit  (From D12 to D0)
  
 
 
 
 
 
 
 
 
cout<<"\nS="<< (int) S    <<" Reg="<<(int)Reg   <<" Comp="<< (int) Comp<<"  ";
}
Reg1=( Reg>>1); // extract data from registry array 
return (double)Reg1;
}
 
 
 
int main ( )
{
    double Uin;
    label1:
cout << "\n Input Uin  "; 
cin>>Uin;
uint16_t y=GetADC(Uin);
cout<<"\n y=" << y*Uref/( (double) 0x0FFF) <<"\n"; //scale the data
 
cin.get();
goto label1;
return 1;
}
0
Вложения
Тип файла: pdf AD7541A.pdf (258.8 Кб, 0 просмотров)
Тип файла: pdf am2502dc.pdf (478.1 Кб, 0 просмотров)
Тип файла: pdf an17f.pdf (625.9 Кб, 0 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2019, 00:23
Ответы с готовыми решениями:

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

Как связать таймер с АЦП и АЦП с DMA?
Вообщем стоит такая задача: через определенные интервалы времени периодически запускать...

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

Алгоритм работы с ацп АЦП STM32F103
Здравствуйте, уважаемые форумчане. Подскажите пожалуйста алгоритм работы с ацп. Допустим мне надо...

АЦП замена АЦП в AVR
Перешёл с AVR на STM32. И вот столкнулся с проблемой. Как подключить датчики с выходом 0-5В на АЦП...

1
USERPC01
-33 / 0 / 0
Регистрация: 29.06.2018
Сообщений: 461
06.06.2019, 00:42  [ТС] 2
Для смены полярности входного сигнала переделать


C++
1
2
3
  Comp= Compare(DACout,  Uinp);  //  if(xinv<xninv) { return 1 ;} else { return 0 ; } 
 
  D= (uint8_t)    !Comp;  //    preparing  Comparator data
и оптимизировать расстановку переменных и знаков в
C++
1
Compare(DACout,  Uinp)
, добавить балансировку . Пример даташита на компаратор :
0
Вложения
Тип файла: pdf 521sa3.pdf (503.6 Кб, 0 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.06.2019, 00:42

Как заставить двигатся по ландшафту модель (модель и ландшафт формата .fbx)
Доброго времени суток. Уделите минутку. Извините, что отнимаю ваше время, но есть один вопрос,...

Как описать модель данных, если модель построена в режиме database first?
Например: public class PersonFindExtended { public string FAM {...

Программа на C++, которая переводит цветовую модель RGB в модель HSV
Всем привет! Я - начинающий программист. Мне нужна ваша помощь. Мне нужно сделать программу на C++,...


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

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

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