Vlad Mihai Postat Martie 26, 2015 Autor Partajează Postat Martie 26, 2015 Am modificat pinii, dar ce nu inteleg e ca atunci cand ii dau sa imi faca 0v imi tine 95mV si cand ii dau sa imi faca maxim adica 2.048 imi tine 1.95V ce masa sa aiba? hardware e ok. Link spre comentariu
Liviu M Postat Martie 26, 2015 Partajează Postat Martie 26, 2015 Acum am 1.92 la iesire. Atat trebuia sa am? Pai depinde de configuratie si de ce date ai trimis la DAC. Cu configuratia din postul 4 si cu data = 0xFFF, ar trebui sa ai valoarea maxima - VREFIN * 4095 / 4096. Din foaia de catalog si tinand cont ca VREFIN si VREFOUT sunt conectate impreuna, ai un VREFIN minim de 2.017V. Dupa socotala de mai sus, VOUT = 2.017V. Link spre comentariu
Vlad Mihai Postat Martie 26, 2015 Autor Partajează Postat Martie 26, 2015 Da, VREFIN e 2.048V. dar mai caut sa vad cum sa rezolv. Ai o idee cum pot face o incrementare a valoarii pornind de la zero utilizand un push buton? nu imi iese cum am incercat eu... Link spre comentariu
Liviu M Postat Martie 26, 2015 Partajează Postat Martie 26, 2015 Eu idei am multe , da' mai bine posteaza ce ai facut tu si incercam sa "reparam". clrPin a ramas ca in ultimul cod, adica HIGH, da? Iesirea e in aer, sau ai vreo sarcina? Link spre comentariu
Vlad Mihai Postat Martie 26, 2015 Autor Partajează Postat Martie 26, 2015 Iesire Dac-ului e legata la intrarea la un comparator, deci nu e in aer. Asta e codul pe care l-am testat ultima data: // inslude the SPI library:#include <SPI.h>const int slaveSelectPin = 8; // set pin 10 as the slave selectconst int clrPin=9; //set pin 9 for clear DAC >> optionalint max_value=4095; // max value for DACint min_value=0; //min value dor DACint value;int AByte = 0;int data = 0b111111111111; // desired DAC output -2.048Vvoid setup() { Serial.begin(9600);// set the slaveSelectPin as an output: pinMode (slaveSelectPin, OUTPUT); digitalWrite (slaveSelectPin, HIGH); pinMode (clrPin,OUTPUT); digitalWrite (clrPin, HIGH); // clear DAC // initialize SPI: SPI.begin(); SPI.setBitOrder(MSBFIRST);}void loop() { AByte = Serial.read(); if ((AByte == 'W' )&& data<max_value ) { //incrementare DAC data++;} uint8_t dataLow = data&0xFF; uint8_t dataHigh = (data >> 8) & 0x0F; setDac(dataHigh, dataLow); delay(8000);}// Function to send 2 bytes to the dacvoid setDac(uint8_t highData, uint8_t lowData) { digitalWrite(slaveSelectPin,LOW); // take the Chip Select pin low to select the DAC: SPI.transfer(highData); // send in the Primary Byte: SPI.transfer(lowData);// send in the Secondary Byte digitalWrite(slaveSelectPin,HIGH);// take the Chip Select pin high to de-select the DAC:} Link spre comentariu
Liviu M Postat Martie 26, 2015 Partajează Postat Martie 26, 2015 Ce se intampla daca incerci sa trimiti de doua ori 0xFF ?Adica in loc de uint8_t dataLow = data&0xFF; uint8_t dataHigh = (data >> 8) & 0x0F;sa faci uint8_t dataLow =0xFF; uint8_t dataHigh = 0xFF;Daca e cumva vreo problema cu ordinea bitilor, trimitand 16 de 1 ar trebui sa obtii "cap de scala".Inca o idee inainte sa plec acasa. Cu iesirea in gol l-ai masurat? Link spre comentariu
Vlad Mihai Postat Martie 26, 2015 Autor Partajează Postat Martie 26, 2015 Cu modficarea sugerata de tine tensiunea de iesire e 1.91V, deci tot un drac cum se zice..... Link spre comentariu
Mircea Postat Martie 26, 2015 Partajează Postat Martie 26, 2015 Intreb si eu, cat are pe masurate referinta ta? Nu ca ar fi raspunsul la problema ta, caci 2.048 e departe de 1.91, deci mai e si altceva. Link spre comentariu
Vlad Mihai Postat Martie 26, 2015 Autor Partajează Postat Martie 26, 2015 (editat) Referinta mea are 2.071 masurata cu un multimetru.... Atasez schema electrica. Editat Martie 26, 2015 de Vlad Mihai Link spre comentariu
Liviu M Postat Martie 26, 2015 Partajează Postat Martie 26, 2015 Sa recapitulam: - cand scrii 0 ai ~95 mV - cand scrii 0xFFF ai 1.92V Concluzia - comunicatia pare sa functioneze. Mai ramane de vazut de ce nu merge pana la capete de scala. Pana la urma ai reusit sa masori fara sarcina? Link spre comentariu
Vlad Mihai Postat Martie 26, 2015 Autor Partajează Postat Martie 26, 2015 (editat) Deci am taiat traseul si cu codul de mai jos cu iesirea in aer am 1.82V: // inslude the SPI library:#include <SPI.h>const int slaveSelectPin = 8; // set pin 10 as the slave selectconst int clrPin=9; //set pin 9 for clear DAC >> optionalint max_value=4095; // max value for DACint min_value=0; //min value dor DACint value;int AByte = 0;//int data = 0b000000000000; // desired DAC output -2.048Vvoid setup() { Serial.begin(9600);// set the slaveSelectPin as an output: pinMode (slaveSelectPin, OUTPUT); digitalWrite (slaveSelectPin, HIGH); pinMode (clrPin,OUTPUT); digitalWrite (clrPin, HIGH); // clear DAC // initialize SPI: SPI.begin(); SPI.setBitOrder(MSBFIRST);}void loop() { uint8_t dataLow = 0x0F; uint8_t dataHigh = 0x0F; setDac(dataHigh, dataLow); delay(80);}// Function to send 2 bytes to the dacvoid setDac(uint8_t highData, uint8_t lowData) { digitalWrite(slaveSelectPin,LOW); // take the Chip Select pin low to select the DAC: SPI.transfer(highData); // send in the Primary Byte: SPI.transfer(lowData);// send in the Secondary Byte digitalWrite(slaveSelectPin,HIGH);// take the Chip Select pin high to de-select the DAC:} iar daca inlocuiesc uint8_t dataLow = 0x0F;uint8_t dataHigh = 0x0F; cu uint8_t dataLow = 0xFF;uint8_t dataHigh = 0xFF; am 1.91V dar daca inlocuiesc cu: uint8_t dataLow = 0x00; uint8_t dataHigh = 0x00; am 0..5mV. teoretic e bine... Editat Martie 26, 2015 de Vlad Mihai Link spre comentariu
Liviu M Postat Martie 26, 2015 Partajează Postat Martie 26, 2015 Hm, se pare ca ai o probema cu tensiunile mari. Sursa poate? Cum arata tesiunea de alimentare cand masori cei 1.82V/1.92V? Link spre comentariu
Vlad Mihai Postat Martie 26, 2015 Autor Partajează Postat Martie 26, 2015 Sursa e ok. 5V. alimentez dintr-o sursa de laborator. Incercam o incrementare/decrementare? Link spre comentariu
Liviu M Postat Martie 26, 2015 Partajează Postat Martie 26, 2015 (editat) Pai baga-l intr-o bucla si vezi cand nu mai creste liniar. Intr-o prima faza poti folosi un increment mai mare, nu chiar 1. void loop() { AByte = Serial.read(); if ((AByte == 'W' )&& data<max_value ) { //incrementare DAC data+=50; uint8_t dataLow = data&0xFF; uint8_t dataHigh = (data >> 8) & 0x0F; setDac(dataHigh, dataLow); delay(100); }} Editat Martie 26, 2015 de Liviu M Link spre comentariu
Vlad Mihai Postat Martie 27, 2015 Autor Partajează Postat Martie 27, 2015 (editat) Neata, am incercat cu(virgula) codul de mai jos: dar nu face nimic, am 0.5mV la iesire tot timpul: // inslude the SPI library:#include <SPI.h>const int slaveSelectPin = 8; // set pin 10 as the slave selectconst int clrPin=9; //set pin 9 for clear DAC >> optionalint max_value=4095; // max value for DACint min_value=0; //min value dor DACint value;int AByte = 0;int data = 0b111111111111; // desired DAC output -2.048Vvoid setup() { Serial.begin(9600);// set the slaveSelectPin as an output: pinMode (slaveSelectPin, OUTPUT); digitalWrite (slaveSelectPin, HIGH); pinMode (clrPin,OUTPUT); digitalWrite (clrPin, HIGH); // clear DAC // initialize SPI: SPI.begin(); SPI.setBitOrder(MSBFIRST);}void loop() { AByte = Serial.read(); if ((AByte == 'W' )&& data<max_value ) { //incrementare DAC data+=50; uint8_t dataLow = data&0xFF; uint8_t dataHigh = (data >> 8) & 0x0F; setDac(dataHigh, dataLow); delay(100); }}// Function to send 2 bytes to the dacvoid setDac(uint8_t highData, uint8_t lowData) { digitalWrite(slaveSelectPin,LOW); // take the Chip Select pin low to select the DAC: SPI.transfer(highData); // send in the Primary Byte: SPI.transfer(lowData);// send in the Secondary Byte digitalWrite(slaveSelectPin,HIGH);// take the Chip Select pin high to de-select the DAC:} Editat Martie 27, 2015 de Vlad Mihai Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum