|
|
|
|
|
AN #132 - Interfacing an external I2C EEPROM for the T6963C Graphical Display |
|
Interfacing an external I2C EEPROM for the T6963C Graphical Display
This AN was written by Jan Petersen.
BASCOM can store RLE encoded pictures into the AVR internal EEPROM. This
space is very limited and this AN shows how to use an external EEPROM so you can
store more pictures.
'******************************************************************************
' (c) Jan
Petersen
' Orevej 6
' DK
4760 Vordingborg
' jan_p@post8.tele.dk
'
'------------------------------------------------------------------------------
' Author :
Jan Petersen
' Filename :
Glcd-sample.bas
' Title :
Interfacing external I2C EEPROM for T6963 Graphic display
'
' Compiler :
Bascom AVR 1.11.7.4
' Library :
Mcs
' IDE :
Bascom
'
' Note :
'
' Date :
16.01.2004
' Current Ver. :
0.1.0
' History
'
' 0.1.0 :
'
' Need to be
' Fixed / Added :
'
' Description :
'******************************************************************************
'>>> Compiler statement
$regfile = "8515def.dat"
$crystal = 7372800
$eeprom 'Store following data in external EEP file
0:
$bgf "C:\AVR\Graphic-LCD\00.bgf" 'You graphic files here
1:
$bgf "C:\AVR\Graphic-LCD\01.bgf" 'Compile you bitmap file with
2: 'the Graphic Converter found in Tool
$bgf "C:\AVR\Graphic-LCD\02.bgf"
3: 'Remember to uncheck Uncompressed
$bgf "C:\AVR\Graphic-LCD\03.bgf" 'so the files are coded in RLE
4:
$bgf "C:\AVR\Graphic-LCD\04.bgf" 'In this example use folowing settings:
5: 'Width=16
$bgf "C:\AVR\Graphic-LCD\05.bgf" 'Hight=16
6: 'LCD-Type=240x64
$bgf "C:\AVR\Graphic-LCD\06.bgf" 'or change Config Graphlcd
7: 'and all Showpice
$bgf "C:\AVR\Graphic-LCD\07.bgf"
8: 'Program you EEPROM
$bgf "C:\AVR\Graphic-LCD\08.bgf" 'with you preferred tool.
9: 'or visit http://www.LancOS.com
$bgf "C:\AVR\Graphic-LCD\09.bgf" 'for free programmer and simple hardware guide
dot:
$bgf "C:\AVR\Graphic-LCD\dot.bgf"
$data
I2CINIT 'initializ routine for I2C
'needed for proper function of Glcd.lib
'>>> VARIABLE Declaration
<<<<<<<<<<<<<<<<<<<<<<<<
Const eeprom_address = 162 'Defines the adrress of the external EEPROM
'This is used in the library, don't change the name
'The adrress 162 is used on
'a Atmel 24LC64 with A0 @ 1 , A1 @ 0 , A2 @ 0
'>>> PORT Declaration
<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Config Scl = Portc.1 'Define you
EEPROM port pin here
Config Sda = Portc.2
Config PortC = &B11111000 'config port direction (0=input)
'Config you display as needed
Config Graphlcd = 240 * 64 , Dataport = Porta , Controlport = Portb , Ce = 1 , Cd = 2 , Wr = 3 , Rd = 4 , Reset = 0 , Fs = 5 , Mode = 8
'--- Program START
gosub _lcd_intro_1 'show some text
Cls 'clear screen
Showpice 0 , 16 , 0 'show first
picture named (0)
Showpice 16 , 16 , 1 'show second picture named (1)
Showpice 32 , 16 , 2
Showpice 48 , 16 , 3
Showpice 64 , 16 , 4
Showpice 80 , 16 , 5
Showpice 96 , 16 , 6
Showpice 112 , 16 , 7
Showpice 128 , 16 , 8
Showpice 144 , 16 , 9
Showpice 160 , 16 , dot 'show picture named (dot)
do
'endless loop
loop
_lcd_intro_1:
' Show some text on
LCD
'************************************************
Cls
Cursor Off
Locate 1 , 1 : Lcd "Hello"
Locate 2 , 1 : Lcd "Lets try to show some graphic"
Locate 3 , 1 : Lcd "stored in external I2C EEPROM"
Locate 4 , 1 : lcd "Part of Glcd.lib rewritten by"
Locate 5 , 1 : Lcd "Jan Petersen 2004"
wait 4
return
end
In order to get this functionality you need to change the graphics library
file.
| open glcd.lib with notepad |
| Find [_GetByteFromROM_EPROM] |
| Cut / past with this: |
|
[_GetByteFromROM_EPROM]
$EXTERNAL _READEEPROM , _LPMBYTE, _i2c_read, _i2c
; get a byte from code ROM or from EEPROM
;you could write code to get the data from an external EEPROM
_GetByteFromROM:
Tst R23 ; is it 0 ?
Breq _GetByteFromROM1 ; yes get from flash
Clr R26 ; point to R0
Clr R27
*BASIC: I2Cstart ;generate I2C start
*BASIC: I2Cwbyte eeprom_address ;Acces EEPROM by writing Base adrress (Const declared in main basic prg.)
mov R17, ZH ;Move adress pointer to R17 (used in _i2c_write)
call _i2c_write ;Write High address to EEPROM
mov R17, ZL
call _i2c_write ;Write High address to EEPROM
*BASIC: I2Cstart ;generate I2C start
*BASIC: Const eeprom_read = eeprom_address+1
;Incr address by one (=Read)
*BASIC: I2Cwbyte eeprom_read ;Set EEPROM in Read mode
Sec ;Set Carry bit for last byte read
call _i2c_read ;Read, result i R17
mov R0, R17 ;move R17 to R0
*BASIC: I2Cstop ;generate I2C stop
Adiw R30,1 ;Inc address pointer
ret ;Return
_GetByteFromROM1:
jmp _LpmByte ;returns data in r0
[END] |
| Save and Compile the library with the LIB manager |
As an alternative, you can copy the glcd.lib to a new library and modify that
one. Then you can refer to this new lib with $LIB "mynewglcd.lbx"
Download source code |
|
|
|
|
|
|