Vlad Mihai Postat Aprilie 21, 2015 Partajează Postat Aprilie 21, 2015 Salut, am o problema cu o placa arduino mega in sensul ca vreau sa citesc o tensiune analogica si sa afisez cu mai mult de 2 zecimale, aveti idee cum se face? Momentan am reusit doar cu 2 zecimale, care e si standard in compilatorul Arduino. Multumesc! Link spre comentariu
Elison Postat Aprilie 21, 2015 Partajează Postat Aprilie 21, 2015 Incearca aici :https://github.com/ElectricRCAircraftGuy/eRCaGuy_analogReadXXbit Link spre comentariu
Liviu M Postat Aprilie 21, 2015 Partajează Postat Aprilie 21, 2015 Unde vrei sa afisezi?Cum adica "e standard in compilator"? Ce functii folosesti? Link spre comentariu
Vlad Mihai Postat Aprilie 21, 2015 Autor Partajează Postat Aprilie 21, 2015 Salut, Liviu, eu citesc 4 tensiuni si 4 curenti si ii trimit in labview pe serial...dar imi apar valorile doar cu 2 zecimale dupa virgula.. si pe mine ma intereseaza 3 sau 4 zecimale... asta e codul care il folosesc: int power_on = 12;int led_power=13;int AByte = 0;int val=0;int ms=10;void setup() { Serial.begin(38400); pinMode(power_on, OUTPUT); pinMode(led_power, OUTPUT); analogReference(INTERNAL2V56); }void loop() { AByte = Serial.read(); if (AByte == 'W' ) { val=10; delay(10); } if (AByte == 'S' ) { val=5; delay(10); } if (val==10){ digitalWrite(power_on, HIGH); digitalWrite(led_power,HIGH); } if(val==5){ digitalWrite(power_on, LOW); digitalWrite(led_power,LOW); } float sensorValue1 = analogRead(A13); // 1.5Vfloat sensorValue2 = analogRead(A12); //1V0Pfloat sensorValue3 = analogRead(A11); //1.8Vfloat sensorValue4 = analogRead(A10); //3.3Vfloat sensorValue5 = analogRead(A14); // 1.5Vfloat sensorValue6 = analogRead(A15); //1V0Pfloat sensorValue7 = analogRead(A9); //1.8Vfloat sensorValue8 = analogRead(A8); //3.3VsensorValue1=0;sensorValue2=0;sensorValue3=0;sensorValue4=0;sensorValue5=0;sensorValue6=0;sensorValue7=0;sensorValue8=0; for(int i = 0; i < 5; i++) { delay(ms); sensorValue1 += analogRead(A13); }float voltage_1 = (sensorValue1/5) * (2.56 / 1024.0);for(int i = 0; i < 5; i++) { delay(ms); sensorValue6 += analogRead(A15); }float current_1 = (sensorValue6/5) * (2.56 / 1024.0)*1.9697;for(int i = 0; i < 5; i++) {delay(ms); sensorValue2 += analogRead(A12); }float voltage_2 = (sensorValue2/5) * (2.56 / 1024.0); for(int i = 0; i < 5; i++) { delay(ms); sensorValue5 += analogRead(A14); }float current_2 = (sensorValue5/5) * (2.56 / 1024.0)*1.9697; for(int i = 0; i < 5; i++) { delay(ms); sensorValue3 += analogRead(A11); }float voltage_3 = (sensorValue3/5) * (2.56 / 1024.0); for(int i = 0; i < 5; i++) { delay(ms); sensorValue7 += analogRead(A9); }float current_3 = (sensorValue7/5) * (2.56 / 1024.0)*1.9697;for(int i = 0; i < 5; i++) { delay(ms); sensorValue4 += analogRead(A10); } float voltage_4 = (sensorValue4/5) * (2.56 / 1024.0)*5.322 ;for(int i = 0; i < 5; i++) { delay(ms); sensorValue7 += analogRead(A8); }float current_4 = (sensorValue7/5) * (2.56 / 1024.0)*1.9697;Serial.print("Z"); //sync data Serial.println(voltage_2); Serial.print("n"); Serial.println(current_2); Serial.print("n"); Serial.println(voltage_1); Serial.print("n"); Serial.println(current_1); Serial.print("n"); Serial.println(voltage_3); Serial.print("n"); Serial.println(current_3); Serial.print("n"); Serial.println(voltage_4); Serial.print("n"); Serial.println(current_4); Serial.print("n");delay(50); } PS: ceva sugestii de optimizare pentru acest cod? Multumesc! Link spre comentariu
Liviu M Postat Aprilie 21, 2015 Partajează Postat Aprilie 21, 2015 Nu-s sigur ca e de la Arduino, esti sigur ca nu ai vreo limita aiurea in Labview? Oricum, acum nu pot testa nimic, eram numai nedumerit. Link spre comentariu
Vlad Mihai Postat Aprilie 21, 2015 Autor Partajează Postat Aprilie 21, 2015 Nu am o limita aiurea in Labview ca si pe serial monitor din arduino tot cu 2 zecimale imi arata... Link spre comentariu
puriu Postat Aprilie 21, 2015 Partajează Postat Aprilie 21, 2015 Rezolutia unei masuratori digitale depinde de rezolutia ADC. Cu un ADC de 10 biti (1024), obisnuit in microcontrolere, se poate face o masuratoare corecta cu 3 cifre semnificative exacte. Pentru a mari rezolutia ar trebui un ADC cu mai multi biti. O solutie pentru cresterea reala a rezolutiei este masurarea de mai multe ori si interpolarea rezultatelor. Cea mai eficienta este interpolarea liniara. Daca rezolutia intrarii ADC este de exemplu 10 biti si 5 mV, se suprapune capacitiv peste tensiunea aplicata un semnal triunghiular cu amplitudine ceva mai mare de 5 mV si se fac N conversii la cresterea tensiunii si N la scadere. Toate rezultatele se aduna, iar rezultatul se imparte la 2N. Cu N = 5 se obtin patru cifre exacte, cu N = 50 cinci, etc. Toate operatiile, generarea semnalului rampa ( cu circuit RC), insumarea rezultatelor conversiilor, impartirea rezultatului si afisarea se fac prin programarea microcontrolerului. Personal am programat un microcontroler PIC12F675 sa masoare continuu pe 14 biti si pe trei canale si sa trimita serial rezultatele la un PC. Link spre comentariu
ventzel Postat Aprilie 21, 2015 Partajează Postat Aprilie 21, 2015 (editat) Nu ma dau cu Arduino da din ce vad aici Serial.println are si format care pentru float specifica numaru de zecimale. Incearca cu Serial.println(voltage_2,4); Editat Aprilie 21, 2015 de ventzel Link spre comentariu
Vlad Mihai Postat Aprilie 21, 2015 Autor Partajează Postat Aprilie 21, 2015 ventzel, multumesc mult a mers acum! 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