View previous topic :: View next topic |
Author |
Message |
Luciano
Joined: 29 Nov 2004 Posts: 3149 Location: Italy
|
Posted: Thu Oct 25, 2007 9:21 pm Post subject: Libray for character LCD modules (Busy flag/random pins) |
|
|
Hi,
(Login first).
The attached ZIP file is a libray for character LCD modules.
(HD44780 and compatible controllers).
The LUC_lcd4busy.lib uses the LCD in 4-bit mode and can handle worst
case scenarios where each pin of the LCD is connected to a random pin
of the AVR chip. The library checks the state of the busy flag of the LCD
so the data is sent with the maximal possible speed to the LCD.
(About 15 times faster than what you get with CONFIG LCDPIN where the
code uses fixed delays and the busy flag of the LCD is not used).
The library has no impact on the other pins of the used ports.
The library works with any system clock. (0 to 20MHz).
Use this library at your own risk.
Best regards,
Luciano
Example program:
Code: | ' Author: Luciano
' 25 October 2007
'
' (For LCD modules with HD44780 controller or compatible chips).
'
' The LUC_lcd4busy.lib uses the LCD in 4-bit mode and can handle worst
' case scenarios where each pin of the LCD is connected to a random pin
' of the AVR chip. The library checks the state of the busy flag of the LCD
' so the data is sent with the maximal possible speed to the LCD.
' (About 15 times faster than what you get with CONFIG LCDPIN where the
' code uses fixed delays and the busy flag of the LCD is not used).
'
' The library LUC_lcd4busy.lib uses the assembly instructions SBI and CBI.
' These two instructions work only if the addresses of the registers of the
' used ports are smaller than 0x20. This means that the PORTF of an ATmega128
' cannot be used. Note that the new ATmega1281/2561 are not affected by this
' limitation because all the registers of the ports are below address 0x20.
'
' The library has no impact on the other pins of the used ports.
'
' The library works with any system clock. (0 to 20MHz).
'
' The Bascom AVR directive CONFIG LCDPIN is not used and it is replaced by
' the 22 constants you can see below. Below you can see an example of use
' of random pins on five different ports of an ATmega128.
'
$regfile = "m128def.dat"
$crystal = 4000000
$hwstack = 32
$swstack = 16
$framesize = 40
$lib "LUC_lcd4busy.lib"
' Example of random pins on five different ports of an ATmega128
'
' LCD AVR
' pin pin
' ============
' Db4 = PA7
' Db5 = PD0
' Db6 = PE4
' Db7 = PC4
' E = PC0
' RW = PB1 'Note that RW must be connected to a pin!
' RS = PB4
'
' These are the 22 constants for the above connections:
Const _LcdDB4_PORTx = PortA 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _LcdDB4_DDRx = DDRA 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _LcdDB4_PinNumber = 7 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
Const _LcdDB5_PORTx = PortD 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _LcdDB5_DDRx = DDRD 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _LcdDB5_PinNumber = 0 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
Const _LcdDB6_PORTx = PortE 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _LcdDB6_DDRx = DDRE 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _LcdDB6_PinNumber = 4 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
Const _LcdDB7_PORTx = PortC 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _LcdDB7_DDRx = DDRC 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _LcdDB7_PINx = PinC 'Valid values: PINA, PINB, PINC, PIND, PINE.
Const _LcdDB7_PinNumber = 4 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
Const _LcdE_PORTx = PortC 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _LcdE_DDRx = DDRC 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _LcdE_PinNumber = 0 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
Const _LcdRW_PORTx = PortB 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _LcdRW_DDRx = DDRB 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _LcdRW_PinNumber = 1 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
Const _LcdRS_PORTx = PortB 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _LcdRS_DDRx = DDRB 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _LcdRS_PinNumber = 4 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
'Define the used LCD
Config Lcd = 16 * 2
Cursor Off Noblink
Cls
Config PINC.7 = Output 'Used to measure the time with an oscilloscope. (DSO)
Waitms 1000
LCD "Hello!"
Waitms 1000
Cls
waitms 100
Set portc.7 ' Used to measure the time needed to send "1234567890" to LCD.
LCD "1234567890" ' 758 microseconds at 4MHz (0.758 milliseconds).
Reset portc.7 ' (Time measured with the original Hitachi HD44780 chip).
Do
!nop
Loop
End |
EDIT: (16 December 2007)
The attached file LUC_lcd4busy.zip is the version 2.0 of the library.
In the version 2.0 of the library the 3ms delay has been removed
from the _CLS routine. The delay is not necessary because the
library uses the busy flag.
EDIT: (13 August 2010)
At power-up, during the hardware initialization performed by the Bascom
initialization code, the data direction of the pins selected from
"Options/Compiler/LCD" is set. To avoid that, just select the radio
button "Data mode = bus". By doing that, no data direction register will
be changed by the Bascom initialization code to support the LCD so that
you will save some program space. If you go back to the Bascom internal
LCD routines, then you must remember to set "Data mode = pin".
Again, the routine _Init_LCD present in LUC_lcd4busy.lib overrides the
settings present in the Bascom "Options/Compiler/LCD" whatever they are.
EDIT: (8 September 2011)
New library LUC_lcd4busy_timeout.lib with timeout feature.
If the LCD is not connected or if the LCD controller crashes, a timeout will
occur after about 2.33 ms and the execution will go back to the main loop.
The command "Return Home" of an original HD44780 takes max. 1.52ms so with
a 2.33 ms timeout we have some margin of safety.
(At 20 MHz the timeout occurs after 2.33 ms and at 4 MHz after 5.45 ms).
The library and the sample program can be downloaded from the link below.
File LUC_lcd4busy_timeout.zip, 4580 bytes. (Login first).
Last edited by Luciano on Fri Sep 16, 2011 7:16 am; edited 12 times in total |
|
Back to top |
|
|
Frankeman
Joined: 11 Aug 2004 Posts: 948 Location: the Netherlands
|
Posted: Fri Oct 26, 2007 8:14 pm Post subject: |
|
|
Thanks Luciano it works great.
Frank. |
|
Back to top |
|
|
doc626ge
Joined: 21 Nov 2005 Posts: 66 Location: USSR
|
Posted: Tue Jul 08, 2008 11:02 am Post subject: |
|
|
Hi Luciano
I tryed your lib - works very great and fast! But i find strange LCD behavior with some symbols. I use not only latin symbols, russian symbols (in lcd font list) i use like this for example - Lcd Chr(191), Lcd Chr(187) etc. And then programming mega is done - on lcd i see proper symbols (the programmer connect to mega, AVR910 AVR Prog from Atmel), but when I disconnect programmer from board the symbols on Lcd looks like chinese... I don't know why is happened. If i use standart works with lcd (without busy flag) - lcd works properly and slowly... Why It happened? I very want use your lib...
Best regards from Russia |
|
Back to top |
|
|
Luciano
Joined: 29 Nov 2004 Posts: 3149 Location: Italy
|
Posted: Tue Jul 08, 2008 12:23 pm Post subject: |
|
|
Hi,
Probably an hardware problem.
Please post the schematic of your board + connections to the LCD.
Also need to know the used AVR chip, used clock frequency, used
VCC voltage, used Bascom version and used LCD module.
(Datasheet of the LCD module).
Best regards,
Luciano |
|
Back to top |
|
|
doc626ge
Joined: 21 Nov 2005 Posts: 66 Location: USSR
|
Posted: Wed Jul 09, 2008 12:49 pm Post subject: |
|
|
Hi
I use mega8 with crystal 8MHz, 5V VCC (7805), Bascom-1.11.9.2 Full Licensed version (same behavior with 1.11.8.8 - 1.11.9.2), try with many LCD: DataVision DV-16236, Winstar WH-1602, WH-1604, WP-1602 (PLED) and Melt MT-16s2d (made in russia), i check hardware many time, without lib (without busy flag) all LCD works well... Connect to LCD:
Code: |
Const _lcddb4_portx = Portd 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _lcddb4_ddrx = Ddrd 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _lcddb4_pinnumber = 0 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
Const _lcddb5_portx = Portd 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _lcddb5_ddrx = Ddrd 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _lcddb5_pinnumber = 1 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
Const _lcddb6_portx = Portd 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _lcddb6_ddrx = Ddrd 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _lcddb6_pinnumber = 3 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
Const _lcddb7_portx = Portd 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _lcddb7_ddrx = Ddrd 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _lcddb7_pinx = Pind 'Valid values: PINA, PINB, PINC, PIND, PINE.
Const _lcddb7_pinnumber = 4 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
Const _lcde_portx = Portb 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _lcde_ddrx = Ddrb 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _lcde_pinnumber = 2 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
Const _lcdrw_portx = Portb 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _lcdrw_ddrx = Ddrb 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _lcdrw_pinnumber = 1 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
Const _lcdrs_portx = Portb 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _lcdrs_ddrx = Ddrb 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _lcdrs_pinnumber = 0 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
'Define The Used Lcd
Config Lcd = 16 * 2
Cursor Off Noblink
Cls
|
Thanks for your help
Best regards from Russia |
|
Back to top |
|
|
Luciano
Joined: 29 Nov 2004 Posts: 3149 Location: Italy
|
|
Back to top |
|
|
doc626ge
Joined: 21 Nov 2005 Posts: 66 Location: USSR
|
Posted: Thu Jul 10, 2008 4:17 am Post subject: |
|
|
Hi
Luciano wrote: | Just buy an LCD display with the European standard font in the ROM |
All my Lcd have a standart European font in the ROM. I'll try work with lib again, maybe my mistake there... Thank U for your help
Best regards from Russia |
|
Back to top |
|
|
Luciano
Joined: 29 Nov 2004 Posts: 3149 Location: Italy
|
Posted: Thu Jul 10, 2008 7:17 am Post subject: |
|
|
Hi,
Example of LCD selector guide:
(Click to enlarge the picture).
Best regards,
Luciano |
|
Back to top |
|
|
Plons
Joined: 24 May 2005 Posts: 435 Location: Hilversum - The Netherlands
|
Posted: Thu Jul 10, 2008 2:59 pm Post subject: |
|
|
Hi folks
I had simular problems: LCD works fine with standard lib and R/W grounded, but didn't want to run with Luciano's lib.
So I took the LCD datasheet and worked all the way down through Luciano's lib. And (frankly, I expected that ) he did a perfect job. So the lib itself is fine. Uh ... more than fine ... it's fast and allows freedom in pin-choice.
What I found: if the pin-definition in Options - Compiler - LCD do not match with what is defined in Luciano's block, the LCD doesn't work. So I added Configlcd in my program, and now it's all fine. (see attached snapshot)
One more tip: since the 44780 generates its own reset, it's unknown who will be first up and running: 44780 or AVR. To prevent mis-initialisation I added 1k pull-downs on E and R/W. The value is arbitrary: 4k7 will be OK as well.
Thanks Luciano, for this fabulous library !
Nard
Code: |
....
$lib "LUC_lcd4busy.lib"
Const _lcddb4_portx = Portd 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _lcddb4_ddrx = Ddrd 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _lcddb4_pinnumber = 4 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
...
etc
..
'Leave this Config in: it overrules the setting in Options-Compiler-LCD.
'When those settings differ from what is defined in Luciano's block, the LCD won't work.
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.2 , Rs = Portd.3
Config Lcd = 20 * 2
|
_________________ Bascom AVR ver 2.0.8.6
Dragon-lair: http://www.aplomb.nl/TechStuff/Dragon/Dragon.html
"leef met vlag en wimpel, maar hou het simpel" |
|
Back to top |
|
|
Luciano
Joined: 29 Nov 2004 Posts: 3149 Location: Italy
|
Posted: Thu Jul 10, 2008 5:18 pm Post subject: |
|
|
Hi,
(While using the library LUC_lcd4busy.lib).
"Config Lcdpin" is not required and what you have in the Bascom Options - Compiler - LCD doesn’t matter.
"Config Lcd" is required because Bascom must know the internal addresses of the LCD.
The code compiled with the LIB will not work in the Bascom simulator because the LCD of the Bascom
simulator does not support the busy flag.
In the LIB there is a 40ms delay (LCD power-up delay) so a mis-initialisation of the LCD at
power-up is not possible. The LCD controller has internal MOS pull-up's on the lines RS and R/W
so even if the LCD powers-up before the AVR, the LCD will be in 8-bit mode and the lines RS and R/W
will be pulled up by the internal MOS pull-Up's. RS=1 and R/W=1 is a READ for the LCD controller and
therefore there is no problem at all.
Best regards,
Luciano |
|
Back to top |
|
|
Plons
Joined: 24 May 2005 Posts: 435 Location: Hilversum - The Netherlands
|
Posted: Thu Jul 10, 2008 8:16 pm Post subject: |
|
|
I don't agree with you Luciano. For the simple reason that with the line Code: | Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.2 , Rs = Portd.3 | my code works, and without it doesn't. Problem is the lower line, as you can see in the attached pictures.
I am not talking about compilation-problems or simulator issues: this is real life proof: compiled, programmed, target-system powered down, then powered up.
Nard _________________ Bascom AVR ver 2.0.8.6
Dragon-lair: http://www.aplomb.nl/TechStuff/Dragon/Dragon.html
"leef met vlag en wimpel, maar hou het simpel" |
|
Back to top |
|
|
Luciano
Joined: 29 Nov 2004 Posts: 3149 Location: Italy
|
Posted: Thu Jul 10, 2008 8:46 pm Post subject: |
|
|
Hi Nard,
(You are using a 2*20 LCD).
"Config Lcd = 20 * 2" must be present in the code.
* * *
Can you please post the 22 constants used by the LIB?
Which AVR chip are you using?
Best regards,
Luciano |
|
Back to top |
|
|
Plons
Joined: 24 May 2005 Posts: 435 Location: Hilversum - The Netherlands
|
Posted: Thu Jul 10, 2008 11:17 pm Post subject: |
|
|
Hi Luciano,
Code: | '19200 Baud is about as fast as it gets: optocouplers 4N35 are slow ...
Const Comm_speed = 19200
$baud = Comm_speed
$crystal = 16000000
$regfile = "m168def.dat"
'Heavily overdone .... but who cares ....
$hwstack = 64
$swstack = 40
$framesize = 40
'$PROG &HFF,&HFF,&HD4,&HF8' generated. Take care that the chip supports all fuse bytes.
Dim Status As Byte
Status_powerfail Alias Status.7
Fluffie Alias Status.6
Terminal Alias Status.5 'Set when a terminal is connected & takes command
Transpose Alias Status.4 'Set when answers from Iso's are translated to ID-Iso+6
Status_watchdog Alias Status.3
Status_brownout Alias Status.2
Status_ext_reset Alias Status.1
Status_pwr_on_reset Alias Status.0
'Since it seems to be impossible to fetch the MCUCSR-watchdog-flag, we use this:
Status = Peek(0)
$lib "LUC_lcd4busy.lib"
Const _lcddb4_portx = Portd 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _lcddb4_ddrx = Ddrd 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _lcddb4_pinnumber = 4 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
Const _lcddb5_portx = Portd 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _lcddb5_ddrx = Ddrd 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _lcddb5_pinnumber = 5 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
Const _lcddb6_portx = Portd 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _lcddb6_ddrx = Ddrd 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _lcddb6_pinnumber = 6 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
Const _lcddb7_portx = Portd 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _lcddb7_ddrx = Ddrd 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _lcddb7_pinx = Pind 'Valid values: PINA, PINB, PINC, PIND, PINE.
Const _lcddb7_pinnumber = 7 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
Const _lcde_portx = Portd 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _lcde_ddrx = Ddrd 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _lcde_pinnumber = 2 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
Const _lcdrw_portx = Portc 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _lcdrw_ddrx = Ddrc 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _lcdrw_pinnumber = 4 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
Const _lcdrs_portx = Portd 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _lcdrs_ddrx = Ddrd 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _lcdrs_pinnumber = 3 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
'/ cutout////////////////////////////////
'Leave this Config in: it overrules the setting in Options-Compiler-LCD.
'When those settings differ from what is defined in Luciano's block, the LCD won't work.
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.2 , Rs = Portd.3
Config Lcd = 20 * 2
'Timer0 is the system-counter, and the Conductor of the Communication-Orchestra
Tccr0a = &H00 'for M168
Tccr0b = &HF3 'for M168
'Tccr0 = &HF3 'for M8
Enable Ovf0
On Ovf0 Ms_int Nosave
etc ....
|
I used a Mega8 and now the M168 as AVR.
The display is a 44780 compatible OLED display.
The only thing I changed in the programs above is that I commented out the line:
Code: | Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.2 , Rs = Portd.3 | Config Lcd = 20 * 2 was in in both programs. So that *should* overrule the setting 16*1a in Options - Compiler - LCD
Screenshot attached.
Cheers
Nard _________________ Bascom AVR ver 2.0.8.6
Dragon-lair: http://www.aplomb.nl/TechStuff/Dragon/Dragon.html
"leef met vlag en wimpel, maar hou het simpel" |
|
Back to top |
|
|
Luciano
Joined: 29 Nov 2004 Posts: 3149 Location: Italy
|
Posted: Fri Jul 11, 2008 8:45 am Post subject: |
|
|
Hi Nard,
I have tested with the code below (your configuration) and it works.
As you can see "Config Lcdpin" is not present in the code.
I have also set the Bascom Options - Compiler - LCD like your
screenshot but, as expected, it doesn’t matter.
Tested with an ATmega48, STK500, 2*20 LCD and Bascom 1.11.9.2.
(This is part of the code you have posted).
Code: | '19200 Baud is about as fast as it gets: optocouplers 4N35 are slow ...
Const Comm_speed = 19200
$baud = Comm_speed
$crystal = 16000000
$regfile = "m48def.dat"
'Heavily overdone .... but who cares ....
$hwstack = 64
$swstack = 40
$framesize = 40
'$PROG &HFF,&HFF,&HD4,&HF8' generated. Take care that the chip supports all fuse bytes.
Dim Status As Byte
Status_powerfail Alias Status.7
Fluffie Alias Status.6
Terminal Alias Status.5 'Set when a terminal is connected & takes command
Transpose Alias Status.4 'Set when answers from Iso's are translated to ID-Iso+6
Status_watchdog Alias Status.3
Status_brownout Alias Status.2
Status_ext_reset Alias Status.1
Status_pwr_on_reset Alias Status.0
'Since it seems to be impossible to fetch the MCUCSR-watchdog-flag, we use this:
Status = Peek(0)
$lib "LUC_lcd4busy.lib"
Const _lcddb4_portx = Portd 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _lcddb4_ddrx = Ddrd 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _lcddb4_pinnumber = 4 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
Const _lcddb5_portx = Portd 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _lcddb5_ddrx = Ddrd 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _lcddb5_pinnumber = 5 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
Const _lcddb6_portx = Portd 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _lcddb6_ddrx = Ddrd 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _lcddb6_pinnumber = 6 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
Const _lcddb7_portx = Portd 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _lcddb7_ddrx = Ddrd 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _lcddb7_pinx = Pind 'Valid values: PINA, PINB, PINC, PIND, PINE.
Const _lcddb7_pinnumber = 7 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
Const _lcde_portx = Portd 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _lcde_ddrx = Ddrd 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _lcde_pinnumber = 2 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
Const _lcdrw_portx = Portc 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _lcdrw_ddrx = Ddrc 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _lcdrw_pinnumber = 4 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
Const _lcdrs_portx = Portd 'Valid values: PORTA, PORTB, PORTC, PORTD, PORTE.
Const _lcdrs_ddrx = Ddrd 'Valid values: DDRA, DDRB, DDRC, DDRD, DDRE.
Const _lcdrs_pinnumber = 3 'Valid values: 0, 1, 2, 3, 4, 5, 6, 7.
Config Lcd = 20 * 2
Cursor Off Noblink
Cls
LCD "Line 1 1234567890123"
Locate 2,1
LCD "Line 2 1234567890123"
Do
!NOP
Loop
End |
The result of the test with the above code:
(Click to enlarge the picture)
Best regards,
Luciano |
|
Back to top |
|
|
PaulC
Joined: 09 Jan 2008 Posts: 122 Location: Ireland
|
Posted: Fri Jul 11, 2008 11:50 am Post subject: thankyou |
|
|
thankyou Luciano
will give this a go _________________ Bascom Avr 2.0.7.3
Works for me
Last edited by PaulC on Fri Sep 09, 2011 2:12 am; edited 1 time in total |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You cannot download files in this forum
|
|