SHARE
TWEET

Untitled

a guest Jan 24th, 2020 87 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top