alin85 Postat Ianuarie 5, 2014 Partajează Postat Ianuarie 5, 2014 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
nico_2010 Postat Ianuarie 5, 2014 Partajează Postat Ianuarie 5, 2014 Inspira-te de aici: http://www.electronics-lab.com/projects/mcu/015/ Link spre comentariu
costyy86 Postat Ianuarie 11, 2014 Partajează Postat Ianuarie 11, 2014 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
nico_2010 Postat Ianuarie 11, 2014 Partajează Postat Ianuarie 11, 2014 Trebuie sa folosesti un anumit format de font. Inserezi comanda : Setfont Font16x16iar la sfarsitul programului introduci: $include "Font16x16.font"Fontul trebuie sa fie in acelasi loc cu programul tau Link spre comentariu
costyy86 Postat Ianuarie 11, 2014 Partajează Postat Ianuarie 11, 2014 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
nico_2010 Postat Ianuarie 12, 2014 Partajează Postat Ianuarie 12, 2014 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
costyy86 Postat Ianuarie 12, 2014 Partajează Postat Ianuarie 12, 2014 Multumesc, intradevar functioneaza,problema era ca mi-ai dat font12x16 si deaceea nu se compila softul...Dar ca sa pun acel text intr-un chenar cum trebuie scrisa comanda? Link spre comentariu
nico_2010 Postat Ianuarie 13, 2014 Partajează Postat Ianuarie 13, 2014 Folosesti comanda: PSET X , Y, valueunde 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), colorvezi explicatiile in Help-ul Bascom Link spre comentariu
dragutzu_marius Postat Ianuarie 14, 2014 Partajează Postat Ianuarie 14, 2014 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. 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
nico_2010 Postat Ianuarie 15, 2014 Partajează Postat Ianuarie 15, 2014 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
dragutzu_marius Postat Ianuarie 15, 2014 Partajează Postat Ianuarie 15, 2014 Multumesc nico_2010 de ajutor, este exact cum imi doream. Link spre comentariu
costyy86 Postat Ianuarie 15, 2014 Partajează Postat Ianuarie 15, 2014 Folosesti comanda: PSET X , Y, valueunde 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
nico_2010 Postat Ianuarie 16, 2014 Partajează Postat Ianuarie 16, 2014 @costyy86: Lasa simularea in pace. Testeaza-l pe viu si va functiona. Link spre comentariu
dragutzu_marius Postat Februarie 3, 2014 Partajează Postat Februarie 3, 2014 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 Link spre comentariu
nico_2010 Postat Februarie 3, 2014 Partajează Postat Februarie 3, 2014 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
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