SHARE
TWEET

AD_DA_prevodnik_zakladni_program

a guest Jan 24th, 2020 115 in 149 days
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.  
  13.  
  14.   //////////KONFIGURACE DA/AD PŘEVODNÍKU//////////
  15.  
  16.  
  17. void setup() {
  18.  
  19.   delay(100);
  20.  
  21.   //nastavení RESET/SS - typ - vstup/výstup
  22.  
  23.   pinMode(PIN_RESET, OUTPUT);
  24.   pinMode(PIN_SS, OUTPUT);
  25.  
  26.   //RESET nastaven na 1 - nyní zapisuj do paměti (při RESETu 0 se převodníku vymaže konfigurace
  27.  
  28.   digitalWrite(PIN_RESET, HIGH);
  29.  
  30.   //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
  31.  
  32.   digitalWrite(PIN_SS, HIGH);
  33.  
  34.   //Zapnutí sériové komunikace  
  35.  
  36.   Serial.begin(9600);
  37.  
  38.   //Začátek SPI komunikace - určení parametrů a rychlosti
  39.  
  40.   SPI.begin();
  41.   SPI.beginTransaction(SPISettings(10000, MSBFIRST, SPI_MODE0));
  42.  
  43.  
  44.  
  45.   ////////// NASTAVENÍ POWER DOWN MÓDU  - VNITŘNÍCH REFERENCÍ AD/DA PŘEVODNÍKU//////////
  46.  
  47.  
  48.   //začátek komunikace s převodníkem
  49.  
  50.   digitalWrite(PIN_SS, LOW);
  51.  
  52.   //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
  53.   //**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
  54.   SPI.transfer(0b01011000);
  55.  
  56.   //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
  57.   //**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
  58.   SPI.transfer(0b00000000);
  59.  
  60.     //konec komunikace s převodníkem
  61.  
  62.   digitalWrite(PIN_SS, HIGH);
  63.  
  64.  
  65.  
  66.   ////////// NASTAVENÍ PINŮ JAKO DA PŘEVODNÍK //////////
  67.  
  68.  
  69.   //začátek komunikace s převodníkem
  70.  
  71.   digitalWrite(PIN_SS, LOW);
  72.  
  73.   //0 - MSB, 0101 - DAC pin configuration, 000 - D10-D8 reserved, set these bits to 0
  74.   //**0 - nejdůležitější bit, 0101 - nastavení pinu jako DA převodník, 000 - rezervované bity**//
  75.   SPI.transfer(0b00101000);
  76.  
  77.   // 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
  78.   //**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
  79.   SPI.transfer(0b00000001);
  80.  
  81.   //konec komunikace s převodníkem
  82.  
  83.   digitalWrite(PIN_SS, HIGH);
  84.  
  85.  
  86.   ////////// NASTAVENÍ PINŮ JAKO AD PŘEVODNÍK //////////
  87.  
  88.  
  89.   //začátek komunikace s převodníkem
  90.  
  91.   digitalWrite(PIN_SS, LOW);
  92.  
  93.   //0 - MSB, 0100 - ADC pin configuration, 000 - D10-D8 reserved, set these bits to 0
  94.   //**0 - nejdůležitější bit, 0100 - nastavení pinu jako AD převodník, 000 - rezervované bity
  95.   SPI.transfer(0b00100000);
  96.  
  97.   // 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
  98.   //**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
  99.   SPI.transfer(0b00000010);
  100.  
  101.   //konec komunikace s převodníkem
  102.  
  103.   digitalWrite(PIN_SS, HIGH);
  104.  
  105.  
  106.  
  107.   ////////// NASTAVENÍ VLASTNOSTÍ AD/DA PŘEVODNÍKŮ //////////
  108.  
  109.  
  110.   //začátek komunikace s převodníkem
  111.  
  112.   digitalWrite(PIN_SS, LOW);
  113.  
  114.   //0 - MSB, 0011 - general purpose control register, 0 - reserved D10, 1 - ADC buffer is precharged, 1 - ADC buffer is enabled
  115.   //**0 - nejdůležitější bit, 0011 - hlavní ovládací registr, 0 - rezervované bity
  116.   SPI.transfer(0b00011001);
  117.  
  118.   //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
  119.   //**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
  120.   SPI.transfer(0b00000000);
  121.  
  122.   //konec komunikace s převodníkem
  123.  
  124.   digitalWrite(PIN_SS, HIGH);
  125.  
  126.  
  127.   }
  128.  
  129.  
  130.   //////////KONEC KONFIGURACE DA/AD PŘEVODNÍKU//////////
  131.  
  132.  
  133.  //////////FUNKCE PRO NASTAVENÍ NAPĚTÍ NA DA PŘEVODNÍKU//////////
  134.  
  135.  
  136. void nastavnapeti(){
  137.  
  138.   //začátek komunikace s převodníkem
  139.  
  140.   digitalWrite(PIN_SS, LOW);
  141.  
  142.   //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)
  143.   //**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)
  144.   SPI.transfer(0b10001111);
  145.  
  146.   //11111111 continuing 12-bit DAC setting status (8-bits)
  147.   //**11111111 pokračování zprávy pro požadované napětí
  148.   SPI.transfer(0b11111111);
  149.  
  150.   //konec komunikace s převodníkem
  151.  
  152.   digitalWrite(PIN_SS, HIGH);
  153.  
  154. }
  155.  
  156.  
  157.   //////////FUNKCE PRO ZMĚŘENÍ NAPĚTÍ NA AD PŘEVODNÍKU//////////
  158.  
  159.  
  160. void zmernapeti(){
  161.  
  162.   //začátek komunikace s převodníkem
  163.  
  164.   digitalWrite(PIN_SS, LOW);
  165.  
  166.   //0 - MSB, 0010 - ADC sequence register, 0 - D10 reserved, 0 - sequence repetition disabled, 0 - disable temperature indicator readback
  167.   //**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
  168.   SPI.transfer(0b00010000);
  169.  
  170.   //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
  171.   //**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
  172.   SPI.transfer(0b00000010);
  173.  
  174.   //konec komunikace s převodníkem
  175.  
  176.   digitalWrite(PIN_SS, HIGH);
  177.  
  178.   //začátek komunikace s převodníkem
  179.  
  180.   digitalWrite(PIN_SS, LOW);
  181.  
  182.   //výsledek měření část 1.
  183.  
  184.   result1 = SPI.transfer(0x00);
  185.  
  186.   //výsledek měření část 2.
  187.  
  188.   result2 = SPI.transfer(0x00);
  189.  
  190.   //konec komunikace s převodníkem
  191.  
  192.   digitalWrite(PIN_SS, HIGH);
  193.  
  194.   //vypiš na sériovou linku výsledek měření část 1.
  195.  
  196.   Serial.print(result1);
  197.  
  198.   //vypiš na sériovou linku výsledek měření část 2.
  199.  
  200.   Serial.println(result2);
  201. }
  202.  
  203.  
  204.  
  205.   //////////HLAVNÍ SMYČKA PROGRAMU//////////
  206.  
  207.  
  208. void loop() {
  209.  
  210.    //////////FUNKCE PRO NASTAVENÍ NAPĚTÍ NA DA PŘEVODNÍKU//////////
  211.  
  212.   nastavnapeti();
  213.  
  214.  
  215.   //////////ZAPNI FUNKCI PRO ZMĚŘENÍ NAPĚTÍ NA AD PŘEVODNÍKU//////////
  216.  
  217.  
  218.   zmernapeti();
  219.  
  220.  
  221.   //////////POČKEJ PŘED DALŠÍM MĚŘENÍ/ZÁPISEM//////////
  222.  
  223.   delay(600);
  224.  
  225. }
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