Cilibiu Postat Iunie 23, 2011 Partajează Postat Iunie 23, 2011 In primul rand imi cer scuze moderatorilor ca am deschis un subiect cu titlu asemanator! Vreau sa fac un voltmetru folosind porturile ADC de la un atmega8. Codul bineinteles scris in BASCOM! De conectat LCD la atmega stiu sa fac, sa scriu codul pentru a afisa ceva pe LCD stiu! Ce nu stiu eu este functia ADC, deoarece nu am folosito deloc pana acum, si am cam 1-1,5 ani de folosit bascom si atmega in multe aplicati! PORTC.0 este intrarea care o folosesc Cam atat stiu sa fac: $regfile = "m8def.dat"$crystal = 8000000$hwstack = 32$swstack = 10$framesize = 40Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Portc.7 , Rs = Portc.6Config Lcd = 16 * 2Config Adc = Single , Prescaler = Auto <<<<>>>>>>End Link spre comentariu
iulian2010 Postat Iunie 24, 2011 Partajează Postat Iunie 24, 2011 Volt_div = 0.152519 se foloseste pentru afisarea pana la 30V cu divizor R1=100K si R2=18K. '$sim$regfile = "m8def.dat"$crystal = 8000000Config Lcdpin = Pin , Rs = Portb.2 , E = Portb.3 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7Config Lcd = 16 * 2Cursor Off NoblinkClsDim Adcv As Word , Volt As SingleConst Dif = 5 / 1024Const Volt_div = 0.152519Config Adc = Single , Prescaler = Auto , Reference = AvccStart AdcDo Adcv = Getadc(0) ' 0 = ADC0 Waitms 50 'Calcul Volt = Adcv * Dif Volt = Volt / Volt_div Locate 1 , 1 Lcd "Tensiune= " Locate 1 , 11 Lcd Fusing(volt , "##.##") ; " V"LoopEnd Link spre comentariu
Cilibiu Postat Iunie 24, 2011 Autor Partajează Postat Iunie 24, 2011 Am facut simularea si functioneaza!Acum vreau sa inteleg ce face fiecare comanda.1.Dim Adcv As Word , Volt As SingleMai exact ce defineste voltul ca "single" ce face acest "single"?2.Const Dif = 5 / 1024Este o valoare fixa? sau merge modificata in functie de imi trebuie? ce sunt numerele respective? "5" si "1024"?3.Const Volt_div = 0.152519De unde tia rezultat valoarea asta? si mai exact ce face?4.Volt = Adcv * DifCe valori se inmulteste mai exact?Adcv ce valoare are? Dif ce valoare are?5.Volt = Volt / Volt_divAi la fel ca mai sus, ce reprezinta fiecare?6.Lcd Fusing(volt , "##.##") ; " V"Mai exact ce este in parantez ce specifica si pe ce se bazeaza?Daca esti dispus sa ma ajuti e OK, daca nu vrei nu este nici o problema.Mie imi place sa inteleg si cum functioneaza si pe ce se bazeaza, nu numa sa mi se dea sa folosesc si eu sa nu am habar de ce face comenzile!Mersi mutl inca o data! Link spre comentariu
iulian2010 Postat Iunie 24, 2011 Partajează Postat Iunie 24, 2011 Pot sa te ajut in limita timpului disponibil. Cele mai bune explicatii se gasesc in helpul Bascomului, de unde am luat cateva citate. 1.Dim Adcv As Word , Volt As SingleMai exact ce defineste voltul ca "single" ce face acest "single"? "Every variable in BASCOM has a data type that determines what can be stored in the variable. The next section summarizes the elementary data types. Elementary Data Types Bit (1/8 byte). A bit can hold only the value 0 or 1. A group of 8 bits is called a byte. Byte (1 byte). Bytes are stores as unsigned 8-bit binary numbers ranging in value from 0 to 255. Integer (two bytes). Integers are stored as signed sixteen-bit binary numbers ranging in value from -32,768 to +32,767. Word (two bytes). Words are stored as unsigned sixteen-bit binary numbers ranging in value from 0 to 65535. Long (four bytes). Longs are stored as signed 32-bit binary numbers ranging in value from -2147483648 to 2147483647. Single. Singles are stored as signed 32 bit binary numbers. Ranging in value from 1.5 x 10^–45 to 3.4 x 10^38 Double. Doubles are stored as signed 64 bit binary numbers. Ranging in value from 5.0 x 10^–324 to 1.7 x 10^308 String (up to 254 bytes). Strings are stored as bytes and are terminated with a 0-byte. A string dimensioned with a length of 10 bytes will occupy 11 bytes etc." 2.Const Dif = 5 / 1024Este o valoare fixa? sau merge modificata in functie de imi trebuie? ce sunt numerele respective? "5" si "1024"? Dif definit ca si constanta are valoare fixa, adica 5/1024 = 0.0048828125, deci Dif = 0.0048828125. Portul analog controlerului functioneaza cu tensiune continua pana la maxim 5V. 5 reprezinta valoarea maxima a tensiunii analogice si 1024 este valoarea returnata pe 10 biti. 3.Const Volt_div = 0.152519De unde tia rezultat valoarea asta? si mai exact ce face? In functie de ce vrei sa faci poti folosi si alte valori. Constantei Volt_div i se atribuie numarul 0.152519. Este valoare fixa si este folosita in calcul. In loc de numarul "0.152519" poti scrie "Volt_div". 4.Volt = Adcv * DifCe valori se inmulteste mai exact? Adcv ce valoare are? Dif ce valoare are? 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. Bascomul executa intr-o linie doar o operatie de ex: Prima operatie: Volt = Adcv * Dif Variabila Volt = valoarea returnata pe 10 biti inmultita cu 0.0048828125. 5.Volt = Volt / Volt_divAi la fel ca mai sus, ce reprezinta fiecare? A doua operatie: Volt = Volt / Volt_div Variabila Volt = Volt( adica rezultatul inmultirii dintre Adcv si Dif) impartit la 0.152519. 6.Lcd Fusing(volt , "##.##") ; " V"Mai exact ce este in parantez ce specifica si pe ce se bazeaza? Poti cauta cu search in helpul Bascomului functia Fusing. Volt reprezinta valoarea finala rezultata la a doua operatie. Link spre comentariu
Cilibiu Postat Iunie 24, 2011 Autor Partajează Postat Iunie 24, 2011 Mersi foarte mult, am experimentat intre timp aceste valori, si miam dat seama la ce ajuta, acum ca miai zis mai explicit, am inteles si mai bine.in loc de valoarea 0.1525..... am pus 0.1, asta am vazut ca ajuta la 1V sau 0,1V sau 0,01V, bineinteles ca fara rezistente, cu rezistente este valoarea zisa de tine.Mam prins de idee si imi este de mare folos!Mersi foarte mult inca o data! Link spre comentariu
iulian2010 Postat Iunie 24, 2011 Partajează Postat Iunie 24, 2011 Uite alt exemplu cu valoarea returnata de ADC0 cu intrare maxima de 5V. '$sim$regfile = "m8def.dat"$crystal = 8000000Deflcdchar 0 , 32 , 32 , 31 , 31 , 31 , 31 , 32 , 32 ' replace ? with number (0-7)'Deflcdchar 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 ' replace ? with number (0-7)Deflcdchar 2 , 16 , 16 , 16 , 16 , 16 , 16 , 16 , 16 ' replace ? with number (0-7)Deflcdchar 3 , 16 , 16 , 31 , 31 , 31 , 31 , 16 , 16 ' replace ? with number (0-7)Deflcdchar 4 , 1 , 1 , 31 , 31 , 31 , 31 , 1 , 1 ' replace ? with number (0-7)Config Lcdpin = Pin , Rs = Portb.2 , E = Portb.3 , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7Config Lcd = 20 * 4Cursor Off NoblinkClsConfig Adc = Single , Prescaler = Auto , Reference = Avcc 'config ADCStart AdcDim W As Word , P As Word , V As Word , I As Byte , Cols As ByteDim Ps As String * 3ClsCursor OffLocate 3 , 1Lcd "0"Locate 3 , 5Lcd "25"Locate 3 , 10Lcd "50"Locate 3 , 15Lcd "75"Do W = Getadc(0) V = W / 20 P = W / 10 Ps = Str(p) Locate 1 , 1 Lcd "ADC(0):" ; W ; " " Locate 1 , 13 Lcd P ; "% " Cols = P / 5 Locate 2 , 1 For I = 1 To Cols Select Case I Case 1 : Lcd Chr(3) Case 5 : Lcd Chr(4) Case 10 : Lcd Chr(4) Case 15 : Lcd Chr(4) Case 20 : Lcd Chr(4) Case Else : Lcd Chr(0) End Select Next I Cols = Cols + 1 For I = Cols To 20 Select Case I Case 1 : Lcd Chr(2) Case 5 : Lcd Chr(1) Case 10 : Lcd Chr(1) Case 15 : Lcd Chr(1) Case 20 : Lcd Chr(1) Case Else : Lcd Chr(32) End Select Next I Waitms 100 LoopEnd Display-ul este 20x4. Link spre comentariu
Cilibiu Postat Iunie 25, 2011 Autor Partajează Postat Iunie 25, 2011 Sincer e mai simplu primul cod! Link spre comentariu
costyy86 Postat Februarie 17, 2013 Partajează Postat Februarie 17, 2013 Am sinumlat si eu coduriel puse aici, am simulat si inca un volt-ampermetru, insa nu imi afiseaza nimic pe display in proteus, am versiunea 7.7, oare sa fie problema cu programu? sau nu e ceva bun in cod? Link spre comentariu
Cilibiu Postat Februarie 17, 2013 Autor Partajează Postat Februarie 17, 2013 Pune schema din proteus sa vedem daca ai gresit conexiunea cu LCD-ul.Diferenta dintre voltmetru si ampermetru nu difera deloc. Doar calculul este un pic diferit. Link spre comentariu
costyy86 Postat Februarie 17, 2013 Partajează Postat Februarie 17, 2013 Pun PDF-ul si mai jos arhiva completa daca este nevoie voltmetru.PDF Link spre comentariu
Cilibiu Postat Februarie 17, 2013 Autor Partajează Postat Februarie 17, 2013 Greselile sau gasit.In primul rand.LCD-ul in proteus este alimentat gresit.Doi la mana pinul AVCC de la MCU trebuie conectat la 5V.Iar la LCD pinul RW trebuie conectat la masa.Revin cu schema.L.E uite si schema .Nu pot simula proiectul tau in proteus 7.5. Am repordus schema si am introdus programul tau.Prima data nu rula nici la mine, dar cu modificarile aferente , functioneaza. Link spre comentariu
costyy86 Postat Februarie 17, 2013 Partajează Postat Februarie 17, 2013 Da, ai dreptate functioneaza okMultumesc.. Link spre comentariu
costyy86 Postat Februarie 17, 2013 Partajează Postat Februarie 17, 2013 Daca nu sunt prea sacaitor, cum pot calcula rezistentele pentru ampermetru? sa spunem ca am nevoie pana la 5A Link spre comentariu
Cilibiu Postat Februarie 17, 2013 Autor Partajează Postat Februarie 17, 2013 La o rezistenta de 0.1ohm la 5A ai 500mV cadere pe ea. Deci din cateva calcule faci ca atunci cand ai 500mV pe rezistenta tie pe LCD sa iti apara 5.De ex:Legi intrarea ADC direct la rezistenta (presupun ca sti cum).Calcul.volt_dif =1Volt=volt*0.01Lcd voltLa 500mV iti va afisa 5 pe LCD. 500mV reprezetand curentul de 5A care trece prin rezistenta de 0.1 ohm. Link spre comentariu
costyy86 Postat Februarie 17, 2013 Partajează Postat Februarie 17, 2013 Da stiu cum sa leg, direct pe iesirea de la rezistenta de 5W catre consumator, dar nu am reusit sa scriu codul nu imi calculeaza corect, sau nu stiu eu sa il scriu....eu vreau sa fac dual-bolt-ampermetru penru o sursa stabilizata, am facut vollmetrele insa nu imi iese pentru ampermetruVoltmetrele vor fi afisate pe linia de sus si ampermetrele pe cea de jos.... 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