Sari la conținut
ELFORUM - Forumul electronistilor

BASCOM


yo9hnf

Postări Recomandate

a montat cineva un lcd alfanumeric prin un shift register (959) la mcu avr? ma intereseaza modul de legare si mai ales pin-ul enable daca il pot controla separat din mcu si cum ?orice idee ar fi binevenita...

Link spre comentariu

Salutam.

Am un cod pentru un display grafic 128x64...

Cun fac caracterele mari? in proteus le afiseaza exact ca la un display cu 1x16 caractere

Si cum as putea sa pun textul afisat intr-un chenar?

Multumesc.

 

$regfile = "m16def.dat"                  ' specify the used micro$crystal = 1000000                                          ' used crystal frequency$hwstack = 32 ' default use 32 for the hardware stack$swstack = 10 ' default use 10 for the SW stack$framesize = 40 ' default use 40 for the frame space'configure lcd screenConfig Graphlcd = 128 * 64 , Dataport = Portb , Controlport = Portd , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 5 , Fs = 6 , Mode = 6'-----------------------------------------------------------------------------------------------------------------------------------------Dim X As Byte , Y As ByteClsCursor OffWait 1DoClsLocate 1 , 1Lcd "TEST"Waitms 2LoopEnd
Link spre comentariu

Trebuie sa folosesti un anumit format de font.

Inserezi comanda :

Setfont Font16x16
iar la sfarsitul programului introduci:

$include "Font16x16.font"
Fontul trebuie sa fie in acelasi loc cu programul tau
Link spre comentariu

Imi da eroare 31 si eroare 43 la linile ce leam scris, am copiat si fontul in locul unde este scris programul si compilat..

Sau nu la-m pus cum trebuie?

$regfile = "m16def.dat"                                     ' specify the use $crystal = 1000000Config Graphlcd = 128 * 64 , Dataport = Portb , Controlport = Portd , Fs = 6 , Ce = 2 , Cd = 3 , Wr = 0 , Rd = 1 , Reset = 5 , Mode = 6Setfont Font16x16Dim Char As Byte , L As Byte , C As Byte               Cursor OffClslocate 1,1Lcd "TEST"Wait 1End$include "Font16x16.font"
Link spre comentariu

Incearca asa:

$regfile = "m8def.dat"$crystal = 12000000$hwstack = 40                                               ' default use 32 for the hardware stack$swstack = 40                                               ' default use 10 for the SW stack$framesize = 40                                             ' default use 40 for the frame space$lib "glcdKS108.lbx"Disable UrxcDisable AdccDisable UtxcDisable InterruptsConfig Graphlcd = 128 * 64sed , Dataport = Portd , Controlport = Portb , Ce = 1 , Ce2 = 0 , Cd = 3 , Rd = 4 , Reset = 2 , Enable = 5 , Fs = 1 , Mode = 6Setfont Font16x16ClsDoLcdat 1 , 1 , "Hello "Lcdat 3 , 1 , "world"Waitms 200ClsLoopEnd                                                         'end program$include "Font16x16.font"
Link spre comentariu

Folosesti comanda:

PSET X , Y, value
unde x si y sunt coordonatele pixelului, iar x valoarea acestui pixel (0 = pixel stins, 1=pixel aprins)

sau, pentru a desena o linie:

LINE(x0,y0) – (x1,y1), color
vezi explicatiile in Help-ul Bascom
Link spre comentariu

Salutare. Am facut un Volt-Amper-metru pentru o sursa, codul functioneaza foarte bine, insa am o problema la afisarea pe display 16*2, in sensul ca vreau ca temperatura afisata pe display sa fie fara virgula, vreau doar partea intreaga, si nu stiu cum sa fac. Este primul meu program scris in BASCOM, asa ca va rog..rabdare....l-am scris asa cum am stiut si cum am inteles.

Asadar, primul lucru ma intereseaza sa afisez la temperatura doar partea intreaga.

si pe urma, la "putere", pana in 10W sa imi afiseze cu virgula, si pe urma doar partea intreaga dupa ce trec de 10W. Eventual si la tensiune si curent la fel, dupa 10V/A sa raman doar cu o zecimala.

Ma puteti ajuta cu informatiile de care am nevoie? p.s. nu vreau "mura-ngura", vreau sa fac eu si sa invat.

Daca observati greseli in cod, va rog sa mi le spuneti, doar asa pot invata.:d

Codul este urmatorul:

 

$regfile = "m8def.dat"$crystal = 1000000$hwstack = 40$swstack = 16$framesize = 32'--------------------------------------------------------------Configurare LCD-----------------------------------------------------Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portd.5 , Db6 = Portb.7 , Db7 = Portb.6 , E = Portd.7 , Rs = Portb.0Dim A As ByteConfig Lcd = 16x2'--------------------------------------------------------------Configurare PWM-----------------------------------------------------Config Timer1 = Pwm , Prescale = 8 , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up'-------------------------------------------------------------Mesaj de intampinare-------------------------------------------------ClsLocate 1 , 3Lcd "Power Supply"LowerlineLocate 2 , 2Lcd "0-27V / 0-15A"Wait 1ClsCursor Off Noblink'---------------------------------------------------------------Definire Constante-------------------------------------------------Dim Volt As WordDim Curent As WordDim Th As WordDim Tensiune As SingleDim Intensitate As SingleDim Putere As SingleDim Suma As SingleDim I As ByteDim Temperatura As SingleDim Fan As SingleConst Divizor_u = 0.08415Const Const_volt = 2.59 / 1024Const Const_curent = 2.59 / 1024Const Divizor_i = 0.14814814Const Const_temp = 1                                        'Provizoriu pana fac calculele'---------------------------------------------------------------Configurare ADC----------------------------------------------------Config Adc = Single , Prescaler = Auto , Reference = Internal_2.56Start Adc'---------------------------------------------------------------Bucla infinita-----------------------------------------------------Do      '----------------------------------------------------------------Calcul Tensiune---------------------------------------------------      Suma = 0      For I = 1 To 50      Volt = Getadc(0)      Suma = Suma + Volt      Next      Tensiune = Suma / 50      Tensiune = Volt * Const_volt      Tensiune = Tensiune / Divizor_u      Locate 1 , 1      Lcd Fusing(tensiune , "##.#&") ; "V "      '-----------------------------------------------------------------Calcul Curent----------------------------------------------------      Suma = 0      For I = 1 To 50      Curent = Getadc(1)      Suma = Suma + Curent      Next      Intensitate = Suma / 50      Intensitate = Curent * Const_curent      Intensitate = Intensitate / Divizor_i      Locate 1 , 11      Lcd Fusing(intensitate , "##.#&") ; "A "      '-----------------------------------------------------------------Calcul Putere------------------------------------------------      Putere = Tensiune * Intensitate      Locate 2 , 1      Lcd Fusing(putere , "##.&") ; "W  "      '---------------------------------------------------------------Calcul Temperatura--------------------------------------------      Suma = 0      For I = 1 To 50      Th = Getadc(2)      Suma = Suma + Th      Next      Temperatura = Suma / 50      Temperatura = Th / 14.3      Locate 2 , 10      Lcd Fusing(temperatura , "##.&") ; Chr(178) ; "C"      '------------------------------------------------------------------Viteza Cooler------------------------------------------------      Temperatura = Temperatura + Intensitate      Select Case Temperatura         Case 30 To 32 : Pwm1a = 40         Case 32 To 34 : Pwm1a = 80         Case 34 To 37 : Pwm1a = 120         Case 37 To 40 : Pwm1a = 180         Case Is >= 40 : Pwm1a = 255         Case Else : Pwm1a = 0      End Select      Pwm1b = Pwm1aWaitms 500LoopEnd
Link spre comentariu

Mai jos gasesti codul modificat pentru ceea ce doresti:

$regfile = "m8def.dat"$crystal = 1000000$hwstack = 40$swstack = 16$framesize = 32'--------------------------------------------------------------Configurare LCD-----------------------------------------------------Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portd.5 , Db6 = Portb.7 , Db7 = Portb.6 , E = Portd.7 , Rs = Portb.0Dim A As ByteConfig Lcd = 16x2'--------------------------------------------------------------Configurare PWM-----------------------------------------------------Config Timer1 = Pwm , Prescale = 8 , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up'-------------------------------------------------------------Mesaj de intampinare-------------------------------------------------ClsLocate 1 , 3Lcd "Power Supply"LowerlineLocate 2 , 2Lcd "0-27V / 0-15A"Wait 1ClsCursor Off Noblink'---------------------------------------------------------------Definire Constante-------------------------------------------------Dim Volt As WordDim Curent As WordDim Th As WordDim Tensiune As SingleDim Intensitate As SingleDim Putere As SingleDim Putere_int As Word                                      ' adaugat pentru conversia single -->intregDim Suma As SingleDim I As ByteDim Temperatura As SingleDim Temperatura_int As Word                                 ' adaugat pentru conversia single -->intregDim Fan As SingleConst Divizor_u = 0.08415Const Const_volt = 2.59 / 1024Const Const_curent = 2.59 / 1024Const Divizor_i = 0.14814814Const Const_temp = 1                                        'Provizoriu pana fac calculele'---------------------------------------------------------------Configurare ADC----------------------------------------------------Config Adc = Single , Prescaler = Auto , Reference = Internal_2.56Start Adc'---------------------------------------------------------------Bucla infinita-----------------------------------------------------Do      '----------------------------------------------------------------Calcul Tensiune---------------------------------------------------      Suma = 0      For I = 1 To 50      Volt = Getadc(0)      Suma = Suma + Volt      Next      Tensiune = Suma / 50      Tensiune = Volt * Const_volt      Tensiune = Tensiune / Divizor_u      If Tensiune <= 10.0 Then      Locate 1 , 1      Lcd Fusing(tensiune , "##.#&") ; "V "      Else      Locate 1 , 1      Lcd Fusing(tensiune , "##.#") ; "V "      End If      '-----------------------------------------------------------------Calcul Curent----------------------------------------------------      Suma = 0      For I = 1 To 50      Curent = Getadc(1)      Suma = Suma + Curent      Next      Intensitate = Suma / 50      Intensitate = Curent * Const_curent      Intensitate = Intensitate / Divizor_i      If Intensitate <= 10.0 Then      Locate 1 , 11      Lcd Fusing(intensitate , "##.#&") ; "A "      Else      Locate 1 , 11      Lcd Fusing(intensitate , "##.#") ; "A "      End If      '-----------------------------------------------------------------Calcul Putere------------------------------------------------      Putere = Tensiune * Intensitate      If Putere < 10.0 Then      Locate 2 , 1      Lcd Fusing(putere , "##.#") ; "W  "      Else      Putere_int = Int(putere)      Locate 2 , 1      Lcd Putere_int ; "W  "     End If      '---------------------------------------------------------------Calcul Temperatura--------------------------------------------      Suma = 0      For I = 1 To 50      Th = Getadc(2)      Suma = Suma + Th      Next      Temperatura = Suma / 50      Temperatura = Th / 14.3      Temperatura_int = Int(temperatura)      Locate 2 , 10      Lcd Temperatura_int ; Chr(223) ; "C"      '------------------------------------------------------------------Viteza Cooler------------------------------------------------      Temperatura = Temperatura + Intensitate      Select Case Temperatura         Case 30 To 32 : Pwm1a = 40         Case 32 To 34 : Pwm1a = 80         Case 34 To 37 : Pwm1a = 120         Case 37 To 40 : Pwm1a = 180         Case Is >= 40 : Pwm1a = 255         Case Else : Pwm1a = 0      End Select      Pwm1b = Pwm1aWaitms 500LoopEnd
Link spre comentariu

Folosesti comanda:

PSET X , Y, value
unde x si y sunt coordonatele pixelului, iar x valoarea acestui pixel (0 = pixel stins, 1=pixel aprins)
Am incercat, insa la exemplul de mai sus, cand selectez un pixel sa se aprinda imi aprinde o linie intreaga,si nu gasesc eroarea, binenteles in simulare, dar tot nu are voie...
Link spre comentariu
  • 3 săptămâni mai târziu...

Salutare,

 

Am incercat sa leg un afisaj 20x4 la un atmega128-16au, si am scris codul de mai jos, insa nu imi apare nimic pe display. Ma puteti ajuta va rog unde gresesc? Am verificat pin cu pin, conexiunile sunt bine facute, am incercat si din potentiometrul de la contrast la lcd, isi face treaba, insa nu afiseaza nimic. Am incercat si cu un LCD 16x2 si tot nimic.

La compilare nu imi da eroare, folosesc un USBasp si eXtreme Burner pentru scris.

 

* un alt aspect, initial nu puteam nici sa programez atmega, insa am gasit o discutie pe un forum unde zicea ca trebuie sa conectez pinii "PDI" la "MOSI", si "PDO" la "MISO"...si asa imi functioneaza programarea. MCU este bine scris pentru ca am citit continutul dupa ce l-am repornit si este ok.

 

$regfile = "m128def.dat"$crystal = 1000000$hwstack=40$swstack=16$framesize=32Dim A As ByteConfig Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5 , E = Portd.1 , Rs = Portd.0Config Lcd = 16 * 2ClsLcd "Hello world."Wait 1LowerlineWait 1Lcd "Shift this."Wait 1For A = 1 To 10Shiftlcd RightWait 1NextFor A = 1 To 10Shiftlcd LeftWait 1NextEnd

post-18358-139829751364_thumb.jpg

Link spre comentariu

Nu cred ca vei obtine ceva cu comanda de initializare prezentata.

Incearca:

Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5 , E = Portd.1 , Rs = Portd.0Config Lcd = 20 * 4
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