Sari la conținut
ELFORUM - Forumul electronistilor

Lcd grafic + Pic sau atmega


boboBOBO

Postări Recomandate

De curand mi-am cumparat un lcd grafic 160x80 si vreau sa fac un proiect pe el, mai precis vreau sa fac ceva viewtopic.php?f=11&t=68602 insa nu pe lcd 2x16 ci pe acest lcd 160x80. Marea mea problema este ca sunt varza la capitolul programare. Cu exceptia unor sintaxe C++ care le-am invatat la scoala nu stiu nimic, asa ca momentan proiectul are sanse minime spre spre zero de reusita. Acum vin intrebarea mea , defapt intrebarile, cu ce sa incep ? Cum as putea sa fac conversia de la un lcd 2x16 la unul grafic ? Lcd-ul meu are controller LC7981. Ce sugerati sa merg tot pe pic sau sa merg pe atmega ? As merge pe atmega deoarece parca acolo mai stiu cum un pic de programare de la Arduino. Deci.. cu ce sa incep ?

Link spre comentariu
  • Răspunsuri 18
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • boboBOBO

    7

  • ratza

    4

  • Cilibiu

    3

  • costyy86

    2

Top autori în acest subiect

Salut ratza, da pare sa fie lcd-ul acela , ca dimensiuni e ala . Multumesc mult, acum vine partea mai grea : cu ce sa incep ? Am gasit proiectul original al acelui multimetru, codul e in MikroC deci va trebui sa folosesc tot un pic, intrebarea e daca sa folosesc tot PIC16F877 sau trebuie un PIC "mai dotat " ? Multumesc ..

Link spre comentariu

Ai nevoie de un controller cu un ADC care să te mulţumească şi destui pini ca să conectezi LCD-ul la el. Codul original nu te va ajuta prea mult :)

Link spre comentariu

Daca vrei sa folosesti atmel, iti dau eu schema tot ce vrei , hex si il pui in functiune, de modificat din 2x16 in grafic totul este in program.Pentru ce vrei tu sa faci iti trebuie un pic ce sa stie ADC, da detali pana in ce tensiuni vrei sa masori!Vrei doar voltmetru sau doar ampermetru?Sau ambele?Cum vrei sa fie afisat, mare,mic, mediu, un tip de font?

Link spre comentariu

Daca vrei sa folosesti atmel, iti dau eu schema tot ce vrei , hex si il pui in functiune, de modificat din 2x16 in grafic totul este in program.Pentru ce vrei tu sa faci iti trebuie un pic ce sa stie ADC, da detali pana in ce tensiuni vrei sa masori!Vrei doar voltmetru sau doar ampermetru?Sau ambele?Cum vrei sa fie afisat, mare,mic, mediu, un tip de font?

Salut Cilibiu, vreau sa masor maxim 35V si maxim 20A, vreau sa imi afiseze tensiunea, curentul, rezistena, puterea si temperatura pe radiator. Mai concret tot ce face si proiectul din link-ul de mai sus, dezvoltat de Geomar ( sa aiba si protectie la scurt etc ). Caracterele nu stiu , iti dai seama ca lcd-ul e 160x80 deci nu am sa pun niste caractere mici si restul sa ramana neocupat, daca tot am spatiu pe ecran sa fie cat mai multa informatie. Multumesc ratza pentru ajutor :101
Link spre comentariu

Dupa indelugi lupte seculare am reusit impreuna cu @Cilibiu sau facem softul pentru proiectul meu ( mai mult el a lucrat eu am venit doar cu ideile :jytuiyu ). Ca MCU am ales Atmega324. Schema de principiu ar fi urmatoarea :

Posted Image

 

 

Cand sursa e pornita apare urmatoare imagine :

Posted Image

 

Imaginea de afisare :

Posted Image

 

Imaginea cand se detecteaza scrust pe iesire :

Posted Image

 

Cand se detecteaza scurt pe iesire ( defapt cand consumul este mai mare de 20A se considera scurt ) se decupleaza un releu astfel sa nu mai am tensiune la bornele de iesire. Releul se va declansa automat cand se va apasa butonul Reset. Pe langa asta mai am si un buzzer care ma avertizeaza in caz de scurt circuit sau in cazul in care temperatura pe radiator depaseste 70*C.Buzzerul l-am luat dintr-un ups cred si are driver incorporat, trebuie doar alimentat la 3.3-5v banuiesc si piuie de te dor urechile :nebun: Ventilatoarele sunt alimentate in 2 faze : 1. Cand temperatura este de 40*C sunt alimentate la 5V iar cand temperatura depaseste 55*C sunt alimentate la 12V. La urmatorul Upgrade de soft voi folosi alimentare proportionala in functie de temperatura radiatorului. Cam asta e proiectul la care Cilibiu a lucrat ieri toata ziua ( pe aceasta cale ii multumesc enorm, nu credeam ca va fi gata intr-o zi ).

 

Asteptam sugestii.. critici.. opinii :limb:

Link spre comentariu

Decizia ii apartine lui bobo, eu lam ajutat pe el in privat, nu pe forum, daca este deacord sa divulge codul , il postez, sau il posteaza!Codul este scris in BASCOM!

Link spre comentariu

Asta este doar versiunea preliminara a softului, pe viitor vor fi si altele mai avansate ( vedem ce bug-uri are softul asta si le corectam ) . Asteptam opinii.. :da

 

 

$regfile = "m324pdef.DAT"$crystal = 8000000$baud = 19200$hwstack = 100$swstack = 120$framesize = 100Config Graphlcd = 128 * 64 , Dataport = Portb , Controlport = Portc , Ce = 3 , Cd = 0 , Wr = 2 , Rd = 1 , Reset = 4 , Fs = 5 , Mode = 8Declare Sub Lcdtext(byval S As String , Byval Xoffset As Byte , Byval Yoffset As Byte , Byval Fontset As Byte , Byval Inverse As Byte , Byval Rotation As Byte)Dim Adcv As Word , Volt As SingleDim Volt1 As SingleDim Volt2 As SingleDim Volt3 As SingleDim S As IntegerConfig Porta.3 = OutputConfig Porta.4 = InputConfig Porta.5 = OutputConfig Porta.6 = OutputConfig Porta.7 = OutputConst Dif = 5 / 1023Const Volt_div = 0.1Config Adc = Single , Prescaler = Auto , Reference = AvccStart AdcCursor Off NoblinkClsBoxfill(0 , 0) -(127 , 63) , 1Lcdtext "Sursa Reglabila" , 3 , 3 , 2 , 1 , 0Lcdtext "0-30V" , 0 , 15 , 1 , 1 , 0Lcdtext "0-20A" , 0 , 32 , 1 , 1 , 0Lcdtext "Brinzei Bogdan @2011" , 5 , 55 , 4 , 1 , 0Showpic 87 , 10 , VoltageWaitms 500ClsDoPorta.5 = 0DoBox(0 , 0) -(127 , 63) , 1Boxfill(0 , 0) -(127 , 13) , 1Lcdtext "Sursa Reglabila" , 4 , 3 , 2 , 1 , 0Locate 4 , 1Lcd "U="Adcv = Getadc(0)Waitms 10   Volt = Adcv * Dif   Volt = Volt / Volt_div   Volt1 = VoltLocate 4 , 3Lcd Fusing(volt1 , "#.##") ; "V"Adcv = Getadc(1)Porta.3 = 1Waitms 10   Volt = Adcv * Dif   Volt = Volt / Volt_div   Volt2 = VoltLocate 5 , 1Lcd "I="Lcd Fusing(volt2 , "#.##") ; "A"Volt3 = Volt1 * Volt2Locate 6 , 3Lcd Fusing(volt3 , "#.##") ; "W"Locate 6 , 1Lcd "P="Adcv = Getadc(2)Waitms 10   Volt = Adcv * Dif   Volt = Volt / Volt_div   Volt = Volt / 0.1Locate 7 , 1Lcd "Temp="Locate 7 , 6Lcd Fusing(volt , "#.#") ; "'C"If Volt > 40 ThenPorta.6 = 1ElsePorta.6 = 0End IfIf Volt > 55 ThenPorta.7 = 1Porta.6 = 0ElsePorta.7 = 0End IfIf Volt > 70 ThenPorta.5 = 1ElsePorta.5 = 0End IfClsLoop Until Volt2 > 20ClsBoxfill(0 , 0) -(127 , 13) , 1DoPorta.3 = 0Box(0 , 0) -(127 , 63) , 1Lcdtext "Sursa Reglabila" , 4 , 3 , 2 , 1 , 0Lcdtext "SCURT CIRCUIT" , 12 , 25 , 2 , 0 , 0Lcdtext "RESET in asteptare" , 8 , 37 , 4 , 0 , 0Porta.5 = 1Wait 1Porta.5 = 0Waitms 500Loop Until Pina.4 = 1ClsLoopEnd'=== Sub Routines ===Sub Lcdtext(byval S As String , Xoffset As Byte , Yoffset As Byte , Fontset As Byte , Inverse As Byte , Rotation As Byte)Local Tempstring As String * 1 , Temp As Byte               'Dim local the variablesLocal A As Byte , Pixels As Byte , Count As Byte , Carcount As Byte , Lus As ByteLocal Row As Byte , Byteseach As Byte , Blocksize As Byte , Dummy As ByteLocal Colums As Byte , Columcount As Byte , Rowcount As Byte , Stringsize As ByteLocal Xpos As Byte , Ypos As Byte , Pixel As Byte , Pixelcount As ByteStringsize = Len(s) - 1                                     'Size of the text string -1 because we must start with 0For Carcount = 0 To Stringsize                              'Loop for the numbers of caracters that must be displayed If Fontset = 1 Then Restore Font16x16                      'Add or remove here fontset's that you need or not, If Fontset = 2 Then Restore Font8x8                        'this is the name that you gave to the font, NOT the filename If Fontset = 3 Then Restore Font32x32                      'If you dont know the name, open the font file in wordpad, and there it is, If Fontset = 4 Then Restore Font6x8                        'right on top. Temp = Carcount + 1                                        'Cut the text string in seperate caractersTempstring = Mid(s , Temp , 1)Read Row : Read Byteseach : Read Blocksize : Read Dummy     'Read the first 4 bytes from the font fileTemp = Asc(tempstring) - 32                                 'Font files start with caracter 32For Lus = 1 To Temp                                         'Do dummie read to point to the correct line in the fontfile   For Count = 1 To Blocksize    Read Pixels   Next CountNext LusColums = Blocksize / Row                                    'Calculate the numbers of columsRow = Row * 8                                               'Row is always 8 pixels high = 1 byte, so working with row in steps of 8.Row = Row - 1                                               'Want to start with row=0 instead of 1Colums = Colums - 1                                         'Same for the columsSelect Case Rotation    Case 0                                                  '0 degrees rotation            For Rowcount = 0 To Row Step 8                  'Loop for numbers of rows                  A = Rowcount + Yoffset                  For Columcount = 0 To Colums              'Loop for numbers of Colums                      Read Pixels : If Inverse = 1 Then Toggle Pixels       'Read the byte from the file and if inverse = true then invert de byte                      Xpos = Columcount                     'Do some calculation to get the caracter on the correct Xposition                      Temp = Carcount * Byteseach                      Xpos = Xpos + Temp                      Xpos = Xpos + Xoffset                          For Pixelcount = 0 To 7           'Loop for 8 pixels to be set or not                             Ypos = A + Pixelcount          'Each pixel on his own spot                             Pixel = Pixels.0               'Set the pixel (or not)                             Pset Xpos , Ypos , Pixel       'Finaly we can set the pixel                             Shift Pixels , Right           'Shift the byte 1 bit to the right so the next pixel comes availible                          Next Pixel                  Next Columcount            Next RowcountEnd SelectNext CarcountEnd Sub'=== Includes ===$include "Font16x16.font"                                   'Includes here your font files$include "font8x8.font"$include "font32x32.font"$include "font6x8.font"Voltage:$bgf "voltage.bgf"
Link spre comentariu

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