Can defines be changed with port input?
Hello Again Everyone,
Is it possible to alter <h4>DEFINES</h4> by assigning an alias or variable to their value and then making them subject to port input?
I want to alter the DEFINE HSER_SPBRG and LCD lines = X defines by switching port inputs, but I get assembler errors if I try method listed below.
Thank You for your patience, and help.
Joe
DEFINE HSER_SPBRG BAUD ' FOR 20MHZ 129 = 2400, 32=9600,25 @ 4 for 2400
define BAUD Var
BAUD = 129
if PortB.3 =1 then
BAUD = 32
LCDOUT, not serout, herserout
Quote:
Originally Posted by mister_e
:eek:
The LCDOUT defines don't alter the SERIN/SEROUT... it's two different things.
Yes , that I knew already
Quote:
Originally Posted by mister_e
If you want to use the internal USART RCSTA/TXSTA/SPBRG you have to use HSEROUT/HSERIN AND the dedicated I/O.
This I am already doing and now understand how to shift baud rates . . easy
Quote:
Originally Posted by mister_e
If you want to use your favourite I/O and don't want to mess your time in calcs, use SEROUT/SEROUT2. these allow to change the baudrate on the fly without too much effort, fat free and allow to use almost every PIC i/o.
No need, serial backpack works great, tweaking to add features.
Quote:
Originally Posted by mister_e
And if you want to configure your Serial LCD... i don't know how as you never said which one you're using ;)
But for sure LCD_LINES is not the solution.
My real question was, or is : in the <h4>LCDOUT DEFINES</h4> if LCD_LINES 2 has no apparant effect to limit the LCD from displaying more, why is it even used?
With PbP You may also have to do something from your own ...
Quote:
Originally Posted by Joe S.
DEFINE LCD_LINES 2. the display seems unaffected when hooked up to a 4 line display, as it continues to correctly display 4 lines of data sent to it. SO THE QUESTION REMAINS, what good is the lines DEFINE if it doesn't limit the output to 2 lines?
JS
Hi,Joe
Those defines are written for most common types of displays ...
If using exotic displays ...you also have to verify their commands are those PbP sends when configurating the display ...
Mhhhh, now, If you DO NOT send data one after the other , but specify WHERE you want it to be written ...
Only 2 lines will be used ...
But YOU MUST Tell PbP you USE a 4 LINES Display ... PbP can't think you only WANT 2 lines ... no DEFINE for unwanted lines !!!
CQFD
Alain.
Look at the datasheet for the display
OK. I didnt know what the LCD_LINES define actually did so I took a look in PBPPIC14.LIB and located this section of code.....
Code:
if (LCD_BITS == 8)
if (LCD_LINES == 1)
movlw 30h ; 8-bit mode, 1 line, 5x7 font
else
movlw 38h ; 8-bit mode, 2+ lines, 5x7 font
endif
else
if (LCD_LINES == 1)
movlw 20h ; 4-bit mode, 1 line, 5x7 font
else
movlw 28h ; 4-bit mode, 2+ lines, 5x7 font
endif
endif
The "Function Set" register of the 44780 LCD controller chip has the following bits
D7 = 0
D6 = 0
D5 = 1
D4 = DL
D3 = N
D2 = F
D1 = -
D0 = -
where
DL = DataLength
1 = 8 bits
0 = 4 bits
N = Number of lines
1 = 2(+) lines
0 = 1 line
F = Font
1 = 5x10 dots
0 = 5x8 dots
So looking at the code in the library file, the define is acted upon but is only used to correctly configure the display driver chip for the LCD display connected to it during initialisation.
When you consider that there isnt a define for LCD_CHARS to declare how many characters are on a line then it follows that it cant do anything clever such as work out that you have reached the end of line 1 and move to the start of line 2.
PBP does an awful lot of the hard work for you but there are times when you have to take care of some things yourself.