Sari la conținut
ELFORUM - Forumul electronistilor

Voltmetru cu ATMEGA8 cod bascom si LCD!


Postări Recomandate

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
  • Răspunsuri 24
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Top autori în acest subiect

Imagini postate

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

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

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
  • 3 ani mai târziu...

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 de peace
Link spre comentariu

@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 de Elison
Link spre comentariu
  • 1 lună mai târziu...

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări