costyy86 Postat Februarie 17, 2013 Partajează Postat Februarie 17, 2013 Gata am rezolvat, am mai bazait codul pana am reusit sa pun il fac sa functioneze okCod: Adcv = Getadc(2) ' 2 = ADC2 Waitms 50 'Calcul. Volt = Adcv * Dif Volt = Volt / 0.1Multumesc.L.E. Cum caculez cele doua rezistente R1 si R2 in functie de tensiunea maxima care vreau sa mi-a afiseze? ce formula se aplica? Link spre comentariu
costyy86 Postat Februarie 17, 2013 Partajează Postat Februarie 17, 2013 Am incercat sa calculez valorile pentru o tensiune de 70v, dar nu imi iese deloc...Divizoru rezistiv am gasit cum sa il calculez Vout=Vin* R2/(R1+R2).Dar nu inteleg desi cred ca ma citit de 15 ori ce ai explicat aici si tot topicul...De unde acest rezultat? Adcv i se aloca valoarea 511 Variabilei Adcv i se aloca valoarea returnata pe 10 biti de portul controlerului ADC0, in functie de tensiunea de intrare. Daca avem la intrare 2,49V, variabilei Adcv i se aloca valoarea 511. Acesta este un calcul teoretic 5 / 1024 * 511 = 2.4951171875. Link spre comentariu
vasile eugen Postat Februarie 17, 2013 Partajează Postat Februarie 17, 2013 Salutare,cine doreste poate incerca urmatorul cod:$regfile = "m8def.dat" $crystal = 1000000'$sim Config Lcd = 16 * 2Config Lcdpin = Pin , Rs = Pinb.0 , E = Pinb.1 , Db4 = Pinb.2 , Db5 = Pinb.3 , Db6 = Pinb.4 , Db7 = Pinb.5ClsConfig Portc.0 = InputConfig Portc.1 = InputConfig Adc = Single , Prescaler = Auto , Reference = InternalStop AdcDim A As Word , J As Word , B As Word , K As Word , X As WordDim U As String * 10Dim Amp As SingleDim I As String * 4Dim W As SingleDim P As String * 4Dim Volt As SingleDim Volt2 As SingleDeflcdchar 0 , 32 , 4 , 2 , 29 , 29 , 2 , 4 , 32Cursor OffClsLcd "Volt-amper-metru"LowerlineLcd "By Onutan Vasile"Waitms 100ClsDoStart AdcA = Getadc(4)B = Getadc(3)A = 0B = 0For J = 1 To 5A = A + Getadc(4)Waitms 25NextFor K = 1 To 5B = B + Getadc(3)Waitms 25NextStop AdcA = A / 5B = B / 5Volt = A / 1024Volt = Volt * 3.65Volt = Volt * 10U = Fusing(volt , "#.##")Amp = B / 1024Amp = Amp * 2.56Amp = Amp * 10I = Fusing(amp , "#.##" )W = Volt * AmpP = Fusing(w , "#.###" )U = Format(u , " 0000")P = Format(p , " 000")'Locate 1 , 1 : Lcd Spc(16)Locate 1 , 2 : Lcd U ; "V1"Locate 1 , 11 : Lcd I ; "A"Lowerline : Lcd Chr(0) ; P ; "W"Loop'StopEnd Link spre comentariu
Cilibiu Postat Februarie 17, 2013 Autor Partajează Postat Februarie 17, 2013 Pai ca sa faci divizorul este simplu, un divizor 1:10 sau 1:100, la 1:10 folosesti o rezistenta de 10k si alta de 100k, cea de 10k o legi la masa si mediana si cealalata la mediana si +V, daca aplici 70V la mediana ai 7V, deci nu poti depasi 5v, iar aici folosesti o rezistenta de 1K in loc de cea de 10K si faci divizor 1:100, daca bagi 70V la intrare o sa ai 700mv la mediana, deci poti urca cu tensiunea pana la 500V, dar aici daca iti trebuie afisare in mV atunci trebuie sa faci un divizor 1:50, 100k sus si 2K jos la masa. Link spre comentariu
costyy86 Postat Februarie 17, 2013 Partajează Postat Februarie 17, 2013 Am rezolvat problema,,,,,atat am cautat pe net pana am gasit...Multumesc pentru ajutorul acordat... Link spre comentariu
peace Postat Octombrie 16, 2016 Partajează Postat Octombrie 16, 2016 (editat) Salutare,cine doreste poate incerca urmatorul cod:$regfile = "m8def.dat"$crystal = 1000000'$simConfig Lcd = 16 * 2Config Lcdpin = Pin , Rs = Pinb.0 , E = Pinb.1 , Db4 = Pinb.2 , Db5 = Pinb.3 , Db6 = Pinb.4 , Db7 = Pinb.5ClsConfig Portc.0 = InputConfig Portc.1 = InputConfig Adc = Single , Prescaler = Auto , Reference = InternalStop AdcDim A As Word , J As Word , B As Word , K As Word , X As WordDim U As String * 10Dim Amp As SingleDim I As String * 4Dim W As SingleDim P As String * 4Dim Volt As SingleDim Volt2 As SingleDeflcdchar 0 , 32 , 4 , 2 , 29 , 29 , 2 , 4 , 32Cursor OffClsLcd "Volt-amper-metru"LowerlineLcd "By Onutan Vasile"Waitms 100ClsDoStart AdcA = Getadc(4)B = Getadc(3)A = 0B = 0For J = 1 To 5A = A + Getadc(4)Waitms 25NextFor K = 1 To 5B = B + Getadc(3)Waitms 25NextStop AdcA = A / 5B = B / 5Volt = A / 1024Volt = Volt * 3.65Volt = Volt * 10U = Fusing(volt , "#.##")Amp = B / 1024Amp = Amp * 2.56Amp = Amp * 10I = Fusing(amp , "#.##" )W = Volt * AmpP = Fusing(w , "#.###" )U = Format(u , " 0000")P = Format(p , " 000")'Locate 1 , 1 : Lcd Spc(16)Locate 1 , 2 : Lcd U ; "V1"Locate 1 , 11 : Lcd I ; "A"Lowerline : Lcd Chr(0) ; P ; "W"Loop'StopEnd Cine imi poate explica si mie cum functioneaza acest cod. As vrea sa il fac sa afiseze doua tensiuni. Mai precis ce face "Dim" si cu "Getadc" Editat Octombrie 16, 2016 de peace Link spre comentariu
nickrvl Postat Octombrie 16, 2016 Partajează Postat Octombrie 16, 2016 Dim dimensionează o variabilă, Geadc citește tensiunea de pe pin, asta foarte pe scurt si simplist..... Link spre comentariu
Elison Postat Octombrie 16, 2016 Partajează Postat Octombrie 16, 2016 (editat) @peace $regfile = "m8def.dat" $crystal = 1000000 'se foloseste un atmega 8 la o fregventa de 10Mhz.'$sim 'aici este o linie comentata, nu e bagata in seama de compilatorConfig Lcd = 16 * 2 'folosim un afisaj cu doua randuri, cu 16 caractere pe randConfig Lcdpin = Pin , Rs = Pinb.0 , E = Pinb.1 , Db4 = Pinb.2 , Db5 = Pinb.3 , Db6 = Pinb.4 , Db7 = Pinb.5 'pinii sunt legati la portul B asa cum se declara aiciCls 'se sterge tot ce este afisat pe displayConfig Portc.0 = Input 'pinul 0 de pe portul C este intrareConfig Portc.1 = Input 'la fel si pinul 1 de pe acelasi portConfig Adc = Single , Prescaler = Auto , Reference = Internal 'se configureaza convertorul analogic-digital cu referinta interna de 5V, prescaler ales de 'compilator in functie de oscilator,si modul singleStop Adc 'se opreste ADC prin taiere alimentariiDim A As Word , J As Word , B As Word , K As Word , X As Word 'se declara variabilele A,J,B,K,X care pot avea valori intre 0 si 65535Dim U As String * 10 'se declara U ca fiind un sir de 10 caractereDim Amp As Single 'se declara variabila Amp ca variabila cu semn, pe 32 de biti Dim I As String * 4 'se declara I ca fiind un sir de patru caractereDim W As Single 'se declara variabila W ca variabila cu semn, pe 32 de biti Dim P As String * 4 'se declara P ca fiind un sir de patru caractereDim Volt As Single 'se declara variabila Volt ca variabila cu semn, pe 32 de biti Dim Volt2 As Single 'se declara variabila Volt2 ca variabila cu semn, pe 32 de biti Deflcdchar 0 , 32 , 4 , 2 , 29 , 29 , 2 , 4 , 32 'se declara un caracter personalizatCursor Off 'nu se foloseste cursorulCls 'se sterge tot ce este afisat pe display, dar se mai facuse asta mai inainteLcd "Volt-amper-metru" 'se afiseaza pe primul rand textul Volt-amper-metruLowerline 'se trece pe urmatorul rand Lcd "By Onutan Vasile" 'si se afiseaza textul By Onutan VasileWaitms 100 'se ia o pauza de 100 milisecundeCls 'si se sterge tot ce era afisat pe displayDo 'se trece la instructiunile repetitiveStart Adc 'se porneste convertorul ADCA = Getadc(4) 'se citeste valoarea analogica de pe intrarea 4 si se retine in variabila AB = Getadc(3) 'se citeste valoarea analogica de pe intrarea 3 si se retine in variabila BA = 0 'se atribuie variabilei A valoarea zero, si asta ne duce cu gandul ca cele doua instructiuni de mai 'sus s-au executat inutil,pentru ca in linia urmatoare si variabila B ia valoarea zeroB = 0For J = 1 To 5 'aici se citeste intrarea 4 de cinci ori consecutiv cu pauza de 25 ms intre citiri, iar valorileA = A + Getadc(4) 'citite se aduna si se retin in variabila A Waitms 25NextFor K = 1 To 5 'aici se citeste intrarea 3 de cinci ori consecutiv cu pauza de 25 ms intre citiri, iar valorileB = B + Getadc(3) 'citite se aduna si se retin in variabila B Waitms 25NextStop Adc 'se dezactiveaza convertorul ADCA = A / 5 'se face media valorilor retinute in variabila AB = B / 5 'se face media valorilor retinute in variabila BVolt = A / 1024 'se imparte valoarea variabilei A(media celor cinci citiri)la 1024 si se retine in variabila VoltVolt = Volt * 3.65 'se inmulteste valoara din Volt cu 3,65 iar valoarea obtinuta se inmulteste cu 10 in linia urmatoareVolt = Volt * 10U = Fusing(volt , "#.##")'se retin in varabila U partea intreaga si primele doua zecimale din variabila Volt Amp = B / 1024 'se imparte valoarea vriabilei B la 1024 si se retine in AmpAmp = Amp * 2.56 'iar valoarea obtinuta se inmulteste cu 2,56 si se rescrie in variabila AmpAmp = Amp * 10 'se inmulteste valoarea din Amp cu 10I = Fusing(amp , "#.##" ) 'se retine in varabila I partea intreaga si primele doua zecimale din variabila AmpW = Volt * Amp 'valoarea retinuta in Volt se inmulteste cu valoarea retinuta in AmpP = Fusing(w , "#.###" )'se retine in varabila P partea intreaga si primele trei zecimale din variabila WU = Format(u , " 0000") 'se alege alege un format de patru cifre pentru afisarea variabilei UP = Format(p , " 000") 'se alege un format de trei cifre pentru afisarea variabilei P'Locate 1 , 1 : Lcd Spc(16) 'linie comentata, nu se executaLocate 1 , 2 : Lcd U ; "V1" 'se afiseaza pe randul 1,pozitia 2 valoarea lui U urmata de caracterele V si 1Locate 1 , 11 : Lcd I ; "A" 'se afiseaza pe randul 1,pozitia 11 valoarea lui I urmata de caracterul ALowerline : Lcd Chr(0) ; P ; "W"'se afiseaza pe randul 2 caracterul personalizat, urmat de valoarea variabilei P si 'caracterulWLoop'Stop ,linie comentata, nu se executaEnd Editat Octombrie 16, 2016 de Elison Link spre comentariu
peace Postat Decembrie 15, 2016 Partajează Postat Decembrie 15, 2016 Multumesc @Elison Link spre comentariu
vasile eugen Postat Decembrie 15, 2016 Partajează Postat Decembrie 15, 2016 functiona bine acel cod 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