Advertisement
Guest User

Untitled

a guest
Jan 24th, 2020
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.33 KB | None | 0 0
  1. #include <SPI.h>
  2.  
  3. //nastavení RESET/SS pinu
  4.  
  5. #define PIN_RESET 22
  6. #define PIN_SS 53
  7.  
  8. //prirazeni pameti pro promenne
  9.  
  10. byte result1;
  11. byte result2;
  12. byte result3;
  13. byte result4;
  14.  
  15.  
  16. //////////KONFIGURACE DA/AD PŘEVODNÍKU//////////
  17.  
  18.  
  19. void setup() {
  20.  
  21. delay(100);
  22.  
  23. //nastavení RESET/SS - typ - vstup/výstup
  24.  
  25. pinMode(PIN_RESET, OUTPUT);
  26. pinMode(PIN_SS, OUTPUT);
  27.  
  28. //RESET nastaven na 1 - nyní zapisuj do paměti (při RESETu 0 se převodníku vymaže konfigurace
  29.  
  30. digitalWrite(PIN_RESET, HIGH);
  31.  
  32. //Je-li SS pin HIGH, převodník nepřijímá data, jakmile je SS pin LOW, přijímá převodník 16-bitů, poté je nutno pro další zprávu přepnou SS na HIGH a znovu na LOW
  33.  
  34. digitalWrite(PIN_SS, HIGH);
  35.  
  36. //Zapnutí sériové komunikace
  37.  
  38. Serial.begin(9600);
  39.  
  40. //Začátek SPI komunikace - určení parametrů a rychlosti
  41.  
  42. SPI.begin();
  43. SPI.beginTransaction(SPISettings(100000, MSBFIRST, SPI_MODE0));
  44.  
  45. //Reset převodníku do továrního nastavení
  46.  
  47. //začátek komunikace s převodníkem
  48.  
  49. digitalWrite(PIN_SS, LOW);
  50. SPI.transfer(0b01111101);
  51. SPI.transfer(0b10101100);
  52.  
  53. //konec komunikace s převodníkem
  54.  
  55. digitalWrite(PIN_SS, HIGH);
  56.  
  57. delay(100);
  58.  
  59.  
  60. ////////// NASTAVENÍ POWER DOWN MÓDU - VNITŘNÍCH REFERENCÍ AD/DA PŘEVODNÍKU//////////
  61.  
  62.  
  63. //začátek komunikace s převodníkem
  64.  
  65. digitalWrite(PIN_SS, LOW);
  66.  
  67. //0 - MSB, 1011 - power down mode register, 0 - the reference and DACs power down states is determined by D9 and D7 to D0, 0 - disable internal reference, 0 - reserved D8
  68. //**0 - nejdůležitější bit, 1011 - power down registr, 0 - reference a power down mód DA převodníků je určen D9 a D7-D0, 0 -rezervovaný bit
  69. SPI.transfer(0b01011000);
  70.  
  71. //0 - power down DAC - channel is in normal operation mode (IO7-0, IO6-0, IO5-0, IO-40, IO3-0, IO2-0, IO1-0, IO0-1) -> all DACs are in normal operation mode
  72. //**0 - power down DA převodníku - kanál operuje v normálním módu (IO7-0, IO6-0, IO5-0, IO-40, IO3-0, IO2-0, IO1-0, IO0-1) -> všechny DA převodníky operují v normálním módu
  73. SPI.transfer(0b00000000);
  74.  
  75. //konec komunikace s převodníkem
  76.  
  77. digitalWrite(PIN_SS, HIGH);
  78.  
  79.  
  80.  
  81. ////////// NASTAVENÍ PINŮ JAKO DA PŘEVODNÍK //////////
  82.  
  83.  
  84. //začátek komunikace s převodníkem
  85.  
  86. digitalWrite(PIN_SS, LOW);
  87.  
  88. //0 - MSB, 0101 - DAC pin configuration, 000 - D10-D8 reserved, set these bits to 0
  89. //**0 - nejdůležitější bit, 0101 - nastavení pinu jako DA převodník, 000 - rezervované bity**//
  90. SPI.transfer(0b00101000);
  91.  
  92. // 0 - no function selected / 1 - set the selected I/Ox pin to the register function (IO7-0, IO6-0, IO5-0, IO-40, IO3-0, IO2-0, IO1-0, IO0-1) -> IO0 is a DAC
  93. //**0 - není zvolená funkce pinu / 1 - nastav zvolený I/Ox pin jako funkci registru (IO7-0, IO6-0, IO5-0, IO-40, IO3-0, IO2-0, IO1-0, IO0-1) -> IO0 je DA převodník
  94. SPI.transfer(0b00000001);
  95.  
  96. //konec komunikace s převodníkem
  97.  
  98. digitalWrite(PIN_SS, HIGH);
  99.  
  100.  
  101.  
  102. ////////// NASTAVENÍ PINŮ JAKO AD PŘEVODNÍK //////////
  103.  
  104.  
  105. //začátek komunikace s převodníkem
  106.  
  107. digitalWrite(PIN_SS, LOW);
  108.  
  109. //0 - MSB, 0100 - ADC pin configuration, 000 - D10-D8 reserved, set these bits to 0
  110. //**0 - nejdůležitější bit, 0100 - nastavení pinu jako AD převodník, 000 - rezervované bity
  111. SPI.transfer(0b00100000);
  112.  
  113. // 0 - no function selected / 1 - set the selected I/Ox pin to the register function (IO7-0, IO6-0, IO5-0, IO-40, IO3-0, IO2-0, IO1-1, IO0-0) -> IO1 is a ADC
  114. //**0 - není zvolená funkce pinu / 1 - nastav zvolený I/Ox pin jako funkci registru (IO7-0, IO6-0, IO5-0, IO-40, IO3-0, IO2-0, IO1-1, IO0-0) -> IO1 je AD převodník
  115. SPI.transfer(0b00000010);
  116.  
  117. //konec komunikace s převodníkem
  118.  
  119. digitalWrite(PIN_SS, HIGH);
  120.  
  121.  
  122.  
  123. ////////// NASTAVENÍ VLASTNOSTÍ AD/DA PŘEVODNÍKŮ //////////
  124.  
  125.  
  126. //začátek komunikace s převodníkem
  127.  
  128. digitalWrite(PIN_SS, LOW);
  129.  
  130. //0 - MSB, 0011 - general purpose control register, 0 - reserved D10, 1 - ADC buffer is precharged, 1 - ADC buffer is enabled
  131. //**0 - nejdůležitější bit, 0011 - hlavní ovládací registr, 0 - rezervované bity
  132. SPI.transfer(0b00011001);
  133.  
  134. //0 - lock - the contents of the I/Ox pin configuration register can be changed, 0 - DAC addres bits determine which DAC is written, 0 - ADC input range 0V to Vref, 0 - DAC output range 0V to Vref, 000 - D3-D0 reserved
  135. //**0 - uzavření - I/Ox konfigurace pinů v kontrolním registru může být změněna, 0 - DA převodník zapisuje data na určený převodník (nezapisuje na všechny najednou), 0 - AD převodník - hodnota vstupů 0V až Vref, 0 - DAC převodník - hodnota výstupů 0 až V ref, 000 - rezervované bity
  136. SPI.transfer(0b00000000);
  137.  
  138. //konec komunikace s převodníkem
  139.  
  140. digitalWrite(PIN_SS, HIGH);
  141.  
  142.  
  143. }
  144.  
  145.  
  146. //////////KONEC KONFIGURACE DA/AD PŘEVODNÍKU//////////
  147.  
  148.  
  149. //////////FUNKCE PRO NASTAVENÍ NAPĚTÍ NA DA PŘEVODNÍKU//////////
  150.  
  151.  
  152. void nastavnapeti(){
  153.  
  154. //začátek komunikace s převodníkem
  155.  
  156. digitalWrite(PIN_SS, LOW);
  157.  
  158. //1 - MSB, 000 - DAC adress, 1111 - start of 12-bit DAC setting status (4-bits) (000 - DAC0, 001 - DAC1, 010 - DAC2, 011 - DAC3, 100 - DAC4, 101 - DAC5, 110 - DAC6, 111 - DAC7)
  159. //**1 - nejdůležitější bit - 000 - adresa DA převodníku, 111 - začátek zprávy pro požadované napětí (4-bity) (zpráva je celkem 12 - bitů dlouhá) (000 - DAC0, 001 - DAC1, 010 - DAC2, 011 - DAC3, 100 - DAC4, 101 - DAC5, 110 - DAC6, 111 - DAC7)
  160. SPI.transfer(0b10000000);
  161.  
  162. //11111111 continuing 12-bit DAC setting status (8-bits)
  163. //**11111111 pokračování zprávy pro požadované napětí
  164. SPI.transfer(0b00111111);
  165.  
  166. //konec komunikace s převodníkem
  167.  
  168. digitalWrite(PIN_SS, HIGH);
  169.  
  170. delay(10);
  171.  
  172. }
  173.  
  174.  
  175. //////////FUNKCE PRO ZMĚŘENÍ NAPĚTÍ NA AD PŘEVODNÍKU//////////
  176.  
  177.  
  178. void zmernapeti(){
  179.  
  180. //začátek komunikace s převodníkem
  181.  
  182. digitalWrite(PIN_SS, LOW);
  183.  
  184. //0 - MSB, 0010 - ADC sequence register, 0 - D10 reserved, 0 - sequence repetition disabled, 0 - disable temperature indicator readback
  185. //**0 - nejdůležitější bit, 0010 - AD převodník sekvenční registr, 0 - rezervovaný bit, 0 - sekvenční opakování zakázáno, 0 - zakázáno zpětné čtení teplotního indikátoru
  186. SPI.transfer(0b00010000);
  187.  
  188. //0 - selected ADC channel is not included in the conversion sequence / 1 - selected ADC channel is included in the conversion sequence (IO7-0, IO6-0, IO5-0, IO-40, IO3-0, IO2-0, IO1-1, IO0-0) -> IO1 is included in the conversion sequence
  189. //**0 - zvolený kanál AD převodníku není zařazen do měřící sekvence / 1 - zvolený kanál AD převodníku je zařazen do měřící sekvence (IO7-0, IO6-0, IO5-0, IO-40, IO3-0, IO2-0, IO1-1, IO0-0) -> IO1 je zařazen do měřící sekvence
  190. SPI.transfer(0b00000010);
  191.  
  192. //konec komunikace s převodníkem
  193.  
  194. digitalWrite(PIN_SS, HIGH);
  195.  
  196. //začátek komunikace s převodníkem
  197.  
  198. digitalWrite(PIN_SS, LOW);
  199.  
  200. //výsledek měření část 1.
  201.  
  202. result1 = SPI.transfer(0x00);
  203.  
  204. //výsledek měření část 2.
  205.  
  206. result2 = SPI.transfer(0x00);
  207.  
  208. //konec komunikace s převodníkem
  209.  
  210. digitalWrite(PIN_SS, HIGH);
  211.  
  212. //vypiš na sériovou linku výsledek měření část 1.
  213.  
  214. Serial.print(result1);
  215.  
  216. //vypiš na sériovou linku výsledek měření část 2.
  217.  
  218. Serial.println(result2);
  219.  
  220. delay(10);
  221.  
  222. //TEST vypis AD v2
  223.  
  224. //konec komunikace s převodníkem
  225.  
  226. digitalWrite(PIN_SS, HIGH);
  227.  
  228. //výsledek měření část 1.
  229.  
  230. result3 = SPI.transfer(0x00);
  231.  
  232. //výsledek měření část 2.
  233.  
  234. result4 = SPI.transfer(0x00);
  235.  
  236. //začátek komunikace s převodníkem
  237.  
  238. digitalWrite(PIN_SS, LOW);
  239.  
  240. //vypiš na sériovou linku výsledek měření část 1.
  241.  
  242. Serial.print(result3);
  243.  
  244. //vypiš na sériovou linku výsledek měření část 2.
  245.  
  246. Serial.println(result4);
  247.  
  248. //konec komunikace s převodníkem
  249.  
  250. digitalWrite(PIN_SS, HIGH);
  251.  
  252. delay(10);
  253.  
  254. }
  255.  
  256.  
  257.  
  258. //////////HLAVNÍ SMYČKA PROGRAMU//////////
  259.  
  260.  
  261. void loop() {
  262.  
  263. //////////FUNKCE PRO NASTAVENÍ NAPĚTÍ NA DA PŘEVODNÍKU//////////
  264.  
  265. nastavnapeti();
  266.  
  267.  
  268. //////////ZAPNI FUNKCI PRO ZMĚŘENÍ NAPĚTÍ NA AD PŘEVODNÍKU//////////
  269.  
  270.  
  271. zmernapeti();
  272.  
  273.  
  274.  
  275. //////////POČKEJ PŘED DALŠÍM MĚŘENÍ/ZÁPISEM//////////
  276.  
  277. delay(600);
  278.  
  279. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement