18F452 + 240x128 GLCD Uygulaması için yardım

Başlatan elektronikhobiler, 11 Temmuz 2010, 23:00:23

elektronikhobiler

Merhaba PICPROJE dosları

Öncelikle askerde olmam nedeniyle devrelerden ,projelerden biraz uzak kaldım. Kendim için bir projem var. bu projeye önce 4x20 lcd ve PBP ile başladım daha yolun başındayken baktım glcd ile daha iyi olacak bende glcd ye geçme kararı aldım, PBP ile glcd sürmek zor olacağını fark edincede protonla devam etme kararı aldım.  Fakat bazı sıkıntılarla karşılaştım bilgisi olan arkadaşlardan yardımlarını bekliyorum.

Öncelikle 240x128 Glcd ne önerirsiniz benim gibi ilk kez glcd kullanacak biri için.

Forumda bazı arkadaşların paylaştığı 128x64 glcd çalışmalarından yola çıkarak kendim bir kaç uygulama yaptım. ( yazı yazdırma , yazının font'unu değiştirmek ve çeşitli resimleri ekrana basmak vb.) 128x64 glcd ile 240x128 glcd arasında bazı farklar gördüö cs1 - cs2 gibi anladım kadarı ile 128x64 ekranı 2 bölmeden oluşuyor bu pinlerde onları seçmek için . peki ya 240x128 glcd de bu işlem nasıl olacak .

128x64 glcd için elimdeki proton kodları olurmu bilmiyorum 240x128 glcd için basıt bir resim ve yazı kodu olan arkadaşlardan yardımlarını bekliyorum.

Yardımı dokunan ve merak edip okuyan arkadaşlara teşekkürler. İyi Geceler

Maxim

bir örnek :


' Read text from a Toshiba graphic LCD
 Device = 18F452
 LCD_Type = Toshiba                   ' Use a Toshiba T6963 graphic LCD
 '
 ' LCD interface pin assignments
 '
 LCD_DTPort = PORTD                    ' LCD's Data port
 LCD_WRPin = PORTE.2                   ' LCD's WR line
 LCD_RDPin = PORTE.1                   ' LCD's RD line
 LCD_CEPin = PORTE.0                   ' LCD's CE line
 LCD_CDPin = PORTA.1                   ' LCD's CD line
 LCD_RSTPin = PORTA.0                  ' LCD's RESET line (Optional)
 '
 ' LCD characteristics
 '
 LCD_X_Res = 128                       ' LCD's X Resolution
 LCD_Y_Res = 64                        ' LCD's Y Resolution
 LCD_Font_Width = 8                    ' The width of the LCD's font

 Dim CHARPOS As Byte                   ' The X position of the read
 Dim CHAR As Byte                      ' The byte read from the LCD

 DelayMS 200                           ' Wait for things to stabilise
 All_Digital = True                    ' PORTA and PORTE to digital mode
 Cls                                   ' Clear the LCD
 Print At 0,0," THIS IS FOR COPYING"   ' Display some text on the top line of the LCD
 For CHARPOS = 0 To 20                 ' Create a loop of 21 cycles
 CHAR = LCDRead TEXT 0,CHARPOS         ' Read the top line of the LCD
 Print At 1,CHARPOS,CHAR               ' Print the byte read on the second line
 DelayMS 100                           ' A small delay so we can see things happen
 Next                                  ' Close the loop
 Stop





Maxim

başka bir örnek:


Device = 18F452
Xtal = 20
Bootloader=On
All_Digital=TRUE
Optimiser_Level=4
Dead_Code_Remove=On
'************************************************* ****************************** 
' LCD pin assignments
'************************************************* ****************************** 
LCD_Type = Toshiba ' Target a Toshiba T6963 graphic LCD
LCD_DTPort = PORTD' Data port of the LCD
LCD_WRPin = PORTE.2 ' WR line of the LCD 
LCD_RDPin = PORTE.1 ' RD line of the LCD
LCD_CEPin = PORTE.0 ' CE line of the LCD
LCD_CDPin = PORTA.1 ' CD line of the LCD
LCD_RSTPin = PORTA.0 ' RESET line of the LCD (Optional)
Dim LCD_FSPIN As PORTC.5 ' Font select pin
LCD_Text_Pages = 2 ' Choose two text pages
LCD_RAM_Size = 8192 ' Amount of RAM the LCD contains
LCD_X_Res = 240 ' LCD's X Resolution
LCD_Y_Res = 64 ' LCD's Y Resolution
LCD_Font_Width = 6 ' The width of the LCD's font
LCD_Text_Home_Address = 0 ' Ensure that text RAM starts at address 0
Dim FS6 As 1 ' high for 6 pixel font
Dim FS8 As 0 ' low for 8 pixel font
'************************************************* ********************************** 
' LCD Display Constants: -
'************************************************* ********************************** 
'Register set commands:
Symbol T_CURSOR_POINTER_SET=$21 ' Cursor Pointer Set
'Offset Register Set (CGRAM start address offset)
Symbol T_OFFSET_REG_SET = $22 
Symbol T_ADDR_POINTER_SET = $24 ' Address Pointer Set
'Control Word Set commands:
Symbol T_TEXT_HOME_SET = $40 ' Text Home Address Set
Symbol T_TEXT_AREA_SET = $41 ' Text Area Set
Symbol T_GRAPH_HOME_SET = $42 ' Graphics Home address Set
Symbol T_GRAPH_AREA_SET = $43 ' Graphics Area Set
'Mode Set commands:
Symbol T_OR_MODE = $80 ' OR mode
Symbol T_XOR_MODE = $81 ' XOR mode
Symbol T_AND_MODE = $83 ' AND mode
Symbol T_TEXT_ATTR_MODE = $84 ' Text Attribute mode
Symbol T_INT_CG_MODE = $80 ' Internal CG ROM mode
Symbol T_EXT_CG_MODE = $88 ' External CG RAM mode
'Display Mode commands (OR together required bits):
Symbol T_DISPLAY_OFF = $90 ' Display off
Symbol T_BLINK_ON = $91 ' Cursor Blink on
Symbol T_CURSOR_ON = $92 ' Cursor on
Symbol T_TEXT_ON = $94 ' Text mode on
Symbol T_GRAPHIC_ON = $98 ' Graphic mode on
Symbol T_TEXT_AND_GRAPH_ON = $9C ' Text and graphic mode on
'Cursor Pattern Select:
Symbol T_CURSOR_1LINE = $A0 ' 1 line cursor
Symbol T_CURSOR_2LINE = $A1 ' 2 line cursor
Symbol T_CURSOR_3LINE = $A2 ' 3 line cursor
Symbol T_CURSOR_4LINE = $A3 ' 4 line cursor
Symbol T_CURSOR_5LINE = $A4 ' 5 line cursor
Symbol T_CURSOR_6LINE = $A5 ' 6 line cursor
Symbol T_CURSOR_7LINE = $A6 ' 7 line cursor
Symbol T_CURSOR_8LINE = $A7 ' 8 line cursor
'Data Auto Read/Write: 
Symbol T_DATA_AUTO_WR = $B0 ' Data write with auto increment of address
Symbol T_DATA_AUTO_RD = $B1 ' Data read with auto increment of address
Symbol T_AUTO_DATA_RESET = $B2 ' Disable auto read/write
'Data Read/Write: 
Symbol T_DATA_WR_INC = $C0 ' Data write and increment address 
Symbol T_DATA_RD_INC = $C1 ' Data read and increment address
Symbol T_DATA_WR_DEC = $C2 ' Data write and decrement address
Symbol T_DATA_RD_DEC = $C3 ' Data read and decrement address
Symbol T_DATA_WR = $C4 ' Data write with no address change
Symbol T_DATA_RD = $C5 ' Data read with no address change
'Screen Peek: 
Symbol T_SCREEN_PEEK = $E0 
' Read the display
'Screen Copy:
Symbol T_SCREEN_COPY = $E8 ' Copy a line of the display
'Bit Set/Reset (OR with bit number 0-7):
Symbol T_BIT_RESET = $F0 ' Pixel clear
Symbol T_BIT_SET = $F8 ' Pixel set
'-------------------------------------------------------------------------------
Hserial_Baud = 9600 ' SET BAUD RATE TO 9600
Hserial_RCSTA = %10010000 ' ENABLE SERIAL PORT AND CONTINUOUS RECEIVE
Hserial_TXSTA = %00100100 ' ENABLE TRANSMIT AND ASYNCHRONOUS MODE 
Hserial_Clear = On ' ENABLE ERROR CLEARING ON RECEIVED CHARACTERS
'------------------------------------------------------------------------------- 
TRISA=%00000000
TRISB=%00000001
TRISC=%10000001
TRISD=%00000000
TRISE=%00000000
PORTA=0
PORTB=0
PORTC=0
PORTE=0

RC5In_Pin = PORTC.0 ' port and pin for the infrared sensor
LCD_FSPIN = FS6

Dim sec As Byte
Dim minS As Byte
Dim hour As Byte
Dim SECONDS As Byte
Dim MINUTES As Byte
Dim HOURS As Byte
Dim lowe As Byte
Dim uppe As Byte
Dim hold As Byte
Dim _LINE_DEGREE As Word
Dim _LINE_INNER_RADIUS As Byte
Dim _LINE_OUTER_RADIUS As Byte
Dim _LINE_FX As Byte
Dim _LINE_FY As Byte
Dim _LINE_TX As Byte
Dim _LINE_TY As Byte 
Dim _LINE_SHOW As Byte 
Dim _LINE_SIN_CALC As Float
Dim _LINE_COS_CALC As Float 
Dim _LINE_FLT_DEGREE As Float
Dim LOOP As Word
'-------------------------------------------------------------------------------
Symbol but=PORTB.0
Symbol led = PORTB.7
Symbol clkcontrol=%10100000
Symbol memctrl=%10100001
Declare Stack_Size=20
'-------------------------------------------------------------------------------
clrscr: Cls 
DelayMS 100 ' Clear and initialise the LCD
' ------------------------- Draw the box and line ----------------------------
Line 1,0,0,239,0 ' Top line
LineTo 1,239,63 ' Right line
LineTo 1,0,63 ' Bottom line
LineTo 1,0,0 ' Left line
'---------------------------------------------------------------------------- 
Circle 1,120,31,23 'big cicle
Circle 1,120,31,1 'small circle
Print At 0,19,"12"
Print At 7,20,"6"
Print At 4,15,"9"
Print At 4,24,"3"
For LOOP = 0 To 359 Step 30
GoSub DRAW_LINE [120,31,21,24,LOOP,1] ' Draw the dial markings
Next 
Print At 2,2,"Time:"
Print At 3,2,"-----"

'------------------------------------------------------------------------------- 
TIME:
'-----read time----------------------------------------------------------------- 
sec = HBusIn clkcontrol,2
minS = HBusIn clkcontrol,3
hour = HBusIn clkcontrol,4
Print At 1,2,Hex2 hour,":",Hex2 minS,":",Hex2 sec
DelayMS 40

'------------------------------------------------------------------------------- 
' convert bcd seconds to dec seconds
'-------------------------------------------------------------------------------
hold= sec
hold=hold << 4
hold=hold >>4 
lowe=hold
hold=sec
hold=hold >> 4
uppe=hold
SECONDS= (uppe*10)+lowe
'------------------------------------------------------------------------------- 
' convert bcd minutes decimal minutes
'------------------------------------------------------------------------------- 
hold=minS
hold=hold << 4
hold=hold >>4 
lowe=hold
hold=minS
hold=hold >> 4
uppe=hold
MINUTES= (uppe*10)+lowe 
'-------------------------------------------------------------------------------
' convert bcd hours to dec hours
'-------------------------------------------------------------------------------
hold=hour
hold=hold << 4
hold=hold >>4 
lowe=hold
hold=hour
hold=hold >> 4
uppe=hold
HOURS= (uppe*10)+lowe 


' Print At 1,2,Dec2 HOURS,":",Dec2 MINUTES,":",Dec2 SECONDS 
'-------------------------------------------------------------------------------
' print time and check button
'------------------------------------------------------------------------------- 
GoSub DRAW_LINE [120,31,2,19,seconds*6,1]
DelayMS 40
GoSub DRAW_LINE [120,31,2,15,MINUTES*6,1]
DelayMS 40
GoSub DRAW_LINE [120,31,2,10,HOURS*30,1]

DelayMS 800 

GoSub DRAW_LINE [120,31,2,19,seconds*6,0]
DelayMS 40 
GoSub DRAW_LINE [120,31,2,15,(MINUTES*6)-6,0]
DelayMS 40 
GoSub DRAW_LINE [120,31,2,10,(HOURS*30)-30,0]

If MINUTES = 0 And SECONDS=0 Then GoTo clrscr

If but=0 Then GoSub setup 

GoTo TIME 
'-------------------------------------------------------------------------------
DRAW_LINE: 
Pop _LINE_SHOW ' \
Pop _LINE_DEGREE ' \
Pop _LINE_OUTER_RADIUS ' 
Pop _LINE_INNER_RADIUS ' Pull the parameters from the stack
Pop _LINE_FY ' /
Pop _LINE_FX ' /
_LINE_FLT_DEGREE = (_LINE_DEGREE * 3.14) / 180
_LINE_SIN_CALC = Sin _LINE_FLT_DEGREE
_LINE_COS_CALC = Cos _LINE_FLT_DEGREE

_LINE_TX = Abs (_LINE_FX + _LINE_OUTER_RADIUS * _LINE_SIN_CALC)
_LINE_TY = Abs (_LINE_FY - _LINE_OUTER_RADIUS * _LINE_COS_CALC)
_LINE_FX = Abs (_LINE_FX + _LINE_INNER_RADIUS * _LINE_SIN_CALC)
_LINE_FY = Abs (_LINE_FY - _LINE_INNER_RADIUS * _LINE_COS_CALC)

Line _LINE_SHOW,_LINE_FX, _LINE_FY,_LINE_TX, _LINE_TY ' Draw the line
Return
'-------------------------------------------------------------------------------
' used to set simple time
'-------------------------------------------------------------------------------
setup:
HBusOut clkcontrol , 0,[128] 'stop the clock
DelayMS 5 
HBusOut clkcontrol , 2 , [ $00 ]
DelayMS 5
HBusOut clkcontrol , 3 , [ $33 ]
DelayMS 5
HBusOut clkcontrol , 4 , [ $14 ]
DelayMS 5

HBusOut clkcontrol , 0 ,[0] 'start the clock
DelayMS 5
Return

Mucit23

Merhabalar arkadaşlar  ben ilk defa protonda 18F serisi için program yazıcam fakat bi türlü derleyemedim işlemci olarak Device = 18F452 yazdığımda aşağıdaki hatayı veriyor
ERROR: Unrecognised PİC micro TYPE diye hata veriyor
ama işlemci yerine 16F877 yazığımda sorunsuz derleniyor program nerede hata yapıyorum acaba bana yardımcı olurmusunuz

muhittin_kaplan

normalde olmaması gerek. sendeki lite versiyon olmasın sakın.

fatihinanc

18F452.INC gibi bir dosyayı bulamıyor olabilir.
Kainat dediğimiz kitap, yazıldığı dil ve harfler öğrenilmedikçe anlaşılamaz.  (Galileo Galilei)

elektronikhobiler

Arkadaşlar hayırlı geceler sitede hiç bir arkadaşımız proton kullanarak 18f452 ile T6963 süren yokmudur?
daha önce yazan arkadaşlara yardımları için teşekkür ederim ama bana örnek bağlantı devresi ve  protonda örnek kodları olan bir uygulama verebilecek arkadaşlar vardır sanırım

Maxim

#7
.........

elektronikhobiler

Anlaşılan aranan kan bulunamadı neyse sağlık olsun :'(

muhittin_kaplan


elektronikhobiler

S.a
'Maxim arkadaşımızın verdiği kodları diyorsanız denedim ilk verdiği kodu derlerken hata verdi char kısmında ikinci kodu derlerken hata almadım ama proteusta ekranda hiçbirşey çıkmıyor

muhittin_kaplan

orada bootloader var onu iptal ettiniz mi ?

Mucit23

Alıntı yapılan: muhittin_kaplan - 20 Temmuz 2010, 17:48:17
normalde olmaması gerek. sendeki lite versiyon olmasın sakın.

merhabalar evet dediğiniz gibi proton ide lite kullanıyorum acaba hangi versiyonunu kullanamam gerek

elektronikhobiler