Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SPI.h>
- //nastavení RESET/SS pinu
- #define PIN_RESET 22
- #define PIN_SS 53
- //prirazeni pameti pro promenne
- byte result1;
- byte result2;
- byte result3;
- byte result4;
- //////////KONFIGURACE DA/AD PŘEVODNÍKU//////////
- void setup() {
- delay(100);
- //nastavení RESET/SS - typ - vstup/výstup
- pinMode(PIN_RESET, OUTPUT);
- pinMode(PIN_SS, OUTPUT);
- //RESET nastaven na 1 - nyní zapisuj do paměti (při RESETu 0 se převodníku vymaže konfigurace
- digitalWrite(PIN_RESET, HIGH);
- //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
- digitalWrite(PIN_SS, HIGH);
- //Zapnutí sériové komunikace
- Serial.begin(9600);
- //Začátek SPI komunikace - určení parametrů a rychlosti
- SPI.begin();
- SPI.beginTransaction(SPISettings(100000, MSBFIRST, SPI_MODE0));
- //Reset převodníku do továrního nastavení
- //začátek komunikace s převodníkem
- digitalWrite(PIN_SS, LOW);
- SPI.transfer(0b01111101);
- SPI.transfer(0b10101100);
- //konec komunikace s převodníkem
- digitalWrite(PIN_SS, HIGH);
- delay(100);
- ////////// NASTAVENÍ POWER DOWN MÓDU - VNITŘNÍCH REFERENCÍ AD/DA PŘEVODNÍKU//////////
- //začátek komunikace s převodníkem
- digitalWrite(PIN_SS, LOW);
- //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
- //**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
- SPI.transfer(0b01011000);
- //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
- //**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
- SPI.transfer(0b00000000);
- //konec komunikace s převodníkem
- digitalWrite(PIN_SS, HIGH);
- ////////// NASTAVENÍ PINŮ JAKO DA PŘEVODNÍK //////////
- //začátek komunikace s převodníkem
- digitalWrite(PIN_SS, LOW);
- //0 - MSB, 0101 - DAC pin configuration, 000 - D10-D8 reserved, set these bits to 0
- //**0 - nejdůležitější bit, 0101 - nastavení pinu jako DA převodník, 000 - rezervované bity**//
- SPI.transfer(0b00101000);
- // 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
- //**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
- SPI.transfer(0b00000001);
- //konec komunikace s převodníkem
- digitalWrite(PIN_SS, HIGH);
- ////////// NASTAVENÍ PINŮ JAKO AD PŘEVODNÍK //////////
- //začátek komunikace s převodníkem
- digitalWrite(PIN_SS, LOW);
- //0 - MSB, 0100 - ADC pin configuration, 000 - D10-D8 reserved, set these bits to 0
- //**0 - nejdůležitější bit, 0100 - nastavení pinu jako AD převodník, 000 - rezervované bity
- SPI.transfer(0b00100000);
- // 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
- //**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
- SPI.transfer(0b00000010);
- //konec komunikace s převodníkem
- digitalWrite(PIN_SS, HIGH);
- ////////// NASTAVENÍ VLASTNOSTÍ AD/DA PŘEVODNÍKŮ //////////
- //začátek komunikace s převodníkem
- digitalWrite(PIN_SS, LOW);
- //0 - MSB, 0011 - general purpose control register, 0 - reserved D10, 1 - ADC buffer is precharged, 1 - ADC buffer is enabled
- //**0 - nejdůležitější bit, 0011 - hlavní ovládací registr, 0 - rezervované bity
- SPI.transfer(0b00011001);
- //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
- //**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
- SPI.transfer(0b00000000);
- //konec komunikace s převodníkem
- digitalWrite(PIN_SS, HIGH);
- }
- //////////KONEC KONFIGURACE DA/AD PŘEVODNÍKU//////////
- //////////FUNKCE PRO NASTAVENÍ NAPĚTÍ NA DA PŘEVODNÍKU//////////
- void nastavnapeti(){
- //začátek komunikace s převodníkem
- digitalWrite(PIN_SS, LOW);
- //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)
- //**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)
- SPI.transfer(0b10000000);
- //11111111 continuing 12-bit DAC setting status (8-bits)
- //**11111111 pokračování zprávy pro požadované napětí
- SPI.transfer(0b00111111);
- //konec komunikace s převodníkem
- digitalWrite(PIN_SS, HIGH);
- delay(10);
- }
- //////////FUNKCE PRO ZMĚŘENÍ NAPĚTÍ NA AD PŘEVODNÍKU//////////
- void zmernapeti(){
- //začátek komunikace s převodníkem
- digitalWrite(PIN_SS, LOW);
- //0 - MSB, 0010 - ADC sequence register, 0 - D10 reserved, 0 - sequence repetition disabled, 0 - disable temperature indicator readback
- //**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
- SPI.transfer(0b00010000);
- //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
- //**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
- SPI.transfer(0b00000010);
- //konec komunikace s převodníkem
- digitalWrite(PIN_SS, HIGH);
- //začátek komunikace s převodníkem
- digitalWrite(PIN_SS, LOW);
- //výsledek měření část 1.
- result1 = SPI.transfer(0x00);
- //výsledek měření část 2.
- result2 = SPI.transfer(0x00);
- //konec komunikace s převodníkem
- digitalWrite(PIN_SS, HIGH);
- //vypiš na sériovou linku výsledek měření část 1.
- Serial.print(result1);
- //vypiš na sériovou linku výsledek měření část 2.
- Serial.println(result2);
- delay(10);
- //TEST vypis AD v2
- //konec komunikace s převodníkem
- digitalWrite(PIN_SS, HIGH);
- //výsledek měření část 1.
- result3 = SPI.transfer(0x00);
- //výsledek měření část 2.
- result4 = SPI.transfer(0x00);
- //začátek komunikace s převodníkem
- digitalWrite(PIN_SS, LOW);
- //vypiš na sériovou linku výsledek měření část 1.
- Serial.print(result3);
- //vypiš na sériovou linku výsledek měření část 2.
- Serial.println(result4);
- //konec komunikace s převodníkem
- digitalWrite(PIN_SS, HIGH);
- delay(10);
- }
- //////////HLAVNÍ SMYČKA PROGRAMU//////////
- void loop() {
- //////////FUNKCE PRO NASTAVENÍ NAPĚTÍ NA DA PŘEVODNÍKU//////////
- nastavnapeti();
- //////////ZAPNI FUNKCI PRO ZMĚŘENÍ NAPĚTÍ NA AD PŘEVODNÍKU//////////
- zmernapeti();
- //////////POČKEJ PŘED DALŠÍM MĚŘENÍ/ZÁPISEM//////////
- delay(600);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement