Jump to content


Photo

Voltmetru cu ATMEGA8 cod bascom si LCD!


  • Please log in to reply
24 replies to this topic

#16 OFFLINE   costyy86

costyy86

    Membru avansat

  • Membri
  • PipPipPipPip
  • 1,728 posts
  • Locatie:Resita

Posted 17 February 2013 - 08:27 PM

Gata am rezolvat, am mai bazait codul pana am reusit sa pun il fac sa functioneze ok
Cod:
Adcv = Getadc(2) ' 2 = ADC2
Waitms 50
'Calcul.
Volt = Adcv * Dif
Volt = Volt / 0.1

Multumesc.

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?

Cu_reclama

Cu_reclama
  • Membri

#17 OFFLINE   costyy86

costyy86

    Membru avansat

  • Membri
  • PipPipPipPip
  • 1,728 posts
  • Locatie:Resita

Posted 17 February 2013 - 10:23 PM

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.



#18 OFFLINE   vasile eugen

vasile eugen

    Membru avansat

  • Membri
  • PipPipPipPip
  • 2,140 posts
  • Locatie:Loc.Sarmasag Jud.Salaj

Posted 17 February 2013 - 10:29 PM

Salutare,cine doreste poate incerca urmatorul cod:
$regfile = "m8def.dat"
$crystal = 1000000
'$sim
Config Lcd = 16 * 2
Config Lcdpin = Pin , Rs = Pinb.0 , E = Pinb.1 , Db4 = Pinb.2 , Db5 = Pinb.3 , Db6 = Pinb.4 , Db7 = Pinb.5
Cls
Config Portc.0 = Input
Config Portc.1 = Input
Config Adc = Single , Prescaler = Auto , Reference = Internal
Stop Adc
Dim A As Word , J As Word , B As Word , K As Word , X As Word
Dim U As String * 10
Dim Amp As Single
Dim I As String * 4
Dim W As Single
Dim P As String * 4
Dim Volt As Single
Dim Volt2 As Single
Deflcdchar 0 , 32 , 4 , 2 , 29 , 29 , 2 , 4 , 32
Cursor Off
Cls
Lcd "Volt-amper-metru"
Lowerline
Lcd "By Onutan Vasile"
Waitms 100
Cls

Do
Start Adc
A = Getadc(4)
B = Getadc(3)


A = 0
B = 0

For J = 1 To 5
A = A + Getadc(4)
Waitms 25
Next



For K = 1 To 5
B = B + Getadc(3)
Waitms 25
Next

Stop Adc

A = A / 5
B = B / 5


Volt = A / 1024
Volt = Volt * 3.65
Volt = Volt * 10


U = Fusing(volt , "#.##")
Amp = B / 1024
Amp = Amp * 2.56
Amp = Amp * 10
I = Fusing(amp , "#.##" )
W = Volt * Amp
P = 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
'Stop
End

#19 OFFLINE   Cilibiu

Cilibiu

    Membru avansat

  • Membri
  • PipPipPipPip
  • 1,940 posts

Posted 18 February 2013 - 12:08 AM

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.

#20 OFFLINE   costyy86

costyy86

    Membru avansat

  • Membri
  • PipPipPipPip
  • 1,728 posts
  • Locatie:Resita

Posted 18 February 2013 - 12:20 AM

Am rezolvat problema,,,,,atat am cautat pe net pana am gasit...Multumesc pentru ajutorul acordat...

#21 OFFLINE   peace

peace

    EDTRO

  • Membri
  • PipPip
  • 255 posts
  • Locatie:Iasi

Posted 16 October 2016 - 08:27 AM

Salutare,cine doreste poate incerca urmatorul cod:
$regfile = "m8def.dat"
$crystal = 1000000
'$sim
Config Lcd = 16 * 2
Config Lcdpin = Pin , Rs = Pinb.0 , E = Pinb.1 , Db4 = Pinb.2 , Db5 = Pinb.3 , Db6 = Pinb.4 , Db7 = Pinb.5
Cls
Config Portc.0 = Input
Config Portc.1 = Input
Config Adc = Single , Prescaler = Auto , Reference = Internal
Stop Adc
Dim A As Word , J As Word , B As Word , K As Word , X As Word
Dim U As String * 10
Dim Amp As Single
Dim I As String * 4
Dim W As Single
Dim P As String * 4
Dim Volt As Single
Dim Volt2 As Single
Deflcdchar 0 , 32 , 4 , 2 , 29 , 29 , 2 , 4 , 32
Cursor Off
Cls
Lcd "Volt-amper-metru"
Lowerline
Lcd "By Onutan Vasile"
Waitms 100
Cls

Do
Start Adc
A = Getadc(4)
B = Getadc(3)


A = 0
B = 0

For J = 1 To 5
A = A + Getadc(4)
Waitms 25
Next



For K = 1 To 5
B = B + Getadc(3)
Waitms 25
Next

Stop Adc

A = A / 5
B = B / 5


Volt = A / 1024
Volt = Volt * 3.65
Volt = Volt * 10


U = Fusing(volt , "#.##")
Amp = B / 1024
Amp = Amp * 2.56
Amp = Amp * 10
I = Fusing(amp , "#.##" )
W = Volt * Amp
P = 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
'Stop
End

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"


Edited by peace, 16 October 2016 - 08:28 AM.


#22 OFFLINE   nickrvl

nickrvl

    Membru avansat

  • Membri
  • PipPipPipPip
  • 2,338 posts
  • Locatie:Rm Valcea

Posted 16 October 2016 - 09:28 AM

Dim dimensionează o variabilă, Geadc citește tensiunea de pe pin, asta foarte pe scurt si simplist.....

#23 OFFLINE   Elison

Elison

    Membru

  • Membri
  • PipPip
  • 171 posts
  • Locatie::

Posted 16 October 2016 - 07:24 PM

@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 compilator
Config Lcd = 16 * 2     'folosim un afisaj cu doua randuri, cu 16 caractere pe rand
Config 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 aici

Cls                     'se sterge tot ce este afisat pe display
Config Portc.0 = Input  'pinul 0 de pe portul C este intrare
Config Portc.1 = Input  'la fel si pinul 1 de pe acelasi port
Config 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 single
Stop Adc		'se opreste ADC prin taiere alimentarii
Dim 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 65535
Dim U As String * 10	'se declara U ca fiind un sir de 10 caractere
Dim 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 caractere
Dim 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 caractere
Dim 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 personalizat
Cursor Off		'nu se foloseste cursorul
Cls			'se sterge tot ce este afisat pe display, dar se mai facuse asta mai inainte
Lcd "Volt-amper-metru"	'se afiseaza pe primul rand textul Volt-amper-metru
Lowerline		'se trece pe urmatorul rand 
Lcd "By Onutan Vasile"	'si se afiseaza textul By Onutan Vasile
Waitms 100		'se ia o pauza de 100 milisecunde
Cls			'si se sterge tot ce era afisat pe display

Do			'se trece la instructiunile repetitive
Start Adc		'se porneste convertorul ADC
A = Getadc(4)		'se citeste valoarea analogica de pe intrarea 4 si se retine in variabila A
B = Getadc(3)		'se citeste valoarea analogica de pe intrarea 3 si se retine in variabila B


A = 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 zero
B = 0

For J = 1 To 5		'aici se citeste intrarea 4 de cinci ori consecutiv cu pauza de 25 ms intre citiri, iar valorile
A = A + Getadc(4)	'citite se aduna si se retin in variabila A		
Waitms 25
Next

For K = 1 To 5		'aici se citeste intrarea 3 de cinci ori consecutiv cu pauza de 25 ms intre citiri, iar valorile
B = B + Getadc(3)	'citite se aduna si se retin in variabila B	
Waitms 25
Next

Stop Adc		'se dezactiveaza convertorul ADC
A = A / 5		'se face media valorilor retinute in variabila A
B = B / 5		'se face media valorilor retinute in variabila B
Volt = A / 1024		'se imparte valoarea variabilei A(media celor cinci citiri)la 1024 si se retine in variabila Volt
Volt = Volt * 3.65	'se inmulteste valoara din Volt cu 3,65 iar valoarea obtinuta se inmulteste cu 10 in linia urmatoare
Volt = Volt * 10
U = 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 Amp
Amp = Amp * 2.56	'iar valoarea obtinuta se inmulteste cu 2,56 si se rescrie in variabila Amp
Amp = Amp * 10		'se inmulteste valoarea din Amp cu 10
I = Fusing(amp , "#.##" )	'se retine in varabila I partea intreaga si primele doua zecimale din variabila Amp
W = Volt * Amp		'valoarea retinuta in Volt se inmulteste cu valoarea retinuta in Amp
P = Fusing(w , "#.###" )'se retine in varabila P partea intreaga si primele trei zecimale din variabila W
U = Format(u , " 0000") 'se alege alege un format de patru cifre pentru afisarea variabilei U
P = Format(p , " 000")  'se alege un format de trei cifre pentru afisarea variabilei P
'Locate 1 , 1 : Lcd Spc(16)  'linie comentata, nu se executa
Locate 1 , 2 : Lcd U ; "V1"  'se afiseaza pe randul 1,pozitia 2 valoarea lui U urmata de caracterele V si 1
Locate 1 , 11 : Lcd I ; "A"  'se afiseaza pe randul 1,pozitia 11 valoarea lui I urmata de caracterul A

Lowerline : Lcd Chr(0) ; P ; "W"'se afiseaza pe randul 2 caracterul personalizat, urmat de valoarea variabilei P si                                 'caracterulW
Loop
'Stop			,linie comentata, nu se executa
End                     

Edited by Elison, 16 October 2016 - 07:29 PM.


#24 OFFLINE   peace

peace

    EDTRO

  • Membri
  • PipPip
  • 255 posts
  • Locatie:Iasi

Posted 15 December 2016 - 08:10 AM

Multumesc @Elison

Cu_reclama

Cu_reclama
  • Membri

#25 OFFLINE   vasile eugen

vasile eugen

    Membru avansat

  • Membri
  • PipPipPipPip
  • 2,140 posts
  • Locatie:Loc.Sarmasag Jud.Salaj

Posted 15 December 2016 - 10:56 AM

functiona bine acel cod






0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users