The original Hitachi datasheet specifies 1.52ms for the HOME command and 37us for data and that's likely where the 1500/50 comes from.
The original Hitachi datasheet specifies 1.52ms for the HOME command and 37us for data and that's likely where the 1500/50 comes from.
I don't remember exactly, but if not mistaken, the fastest display with HD44780 interface I tested with PBP was VFD module from Noritake - 1500 was reduced to 300 without any issues.
Found another bug/issue.
Here's simple code:
It should display 0123456789ABCDEF on LCD screen. It does, but there's an issue.Code:topline var byte [16] 'top part of the screen array botline var byte [16] 'bottom part of screen arraywrite topline,["0123456789ABCDEF"] arraywrite botline,["0123456789ABCDEF"] FOR X=0 TO 30 step 2 'READ ARRAY INTO VARIABLE, ARRAY MEMBER CHAR=EEPROM OFFSET if X<=15 then Y=(botline[x]-48)*8 Z=(botline[x+1]-48)*8 'READ INTO VARIABLE AS TWINS endif FOR I=0 TO 7 'HELPER LOOP FOR CHARACTER READING LCDOUT $FE,$80+c+i 'UPDATE Y POSITION LCDOUT $FE,$80+x/2 'UPDATE X POSITION READ Y+I,A 'READ EEPROM BYTES INTO VAR READ Z+I,B if topline[x]=32 or botline[x]=32 then a=0 if topline[x+1]=32 or botline[x+1]=32 then b=0 'blanker if atrib=1 and X<16 then a=A^%11111111 b=b^%11111111 endif if a=$FE then a=0 if b=$fe then b=0 LCDOUT a LCDOUT b 'WRITE TO SCREEN NEXT I NEXT X
If reading text from 1st declared array (topline), then it is displayed correctly. However, if reading from 2nd declared array (botline), one of characters will be randomly missing in displayed text. This is not issue of my code, because if I do not declare "topline" array, then "botline" reading works fine.
So what this means, 18F45K80 can't handle two 16 byte arrays at same time?
Your arrays are declared as 'var byte[16]'
That means a valid array index is from 0-15Code:topline var byte [16] botline var byte [16]
This code here will fail when x=15
Z will try and access botline[x+1] = botline[16], which is invalidCode:if X<=15 then Y=(botline[x]-48)*8 Z=(botline[x+1]-48)*8 'READ INTO VARIABLE AS TWINS
X is being incremented in steps of 2, so it will never be 15.
I even modified code so that X will never exceed 14 - issue is still here, but there is some logic in it.
I tried to add code in loop and look at output.
it changes in the following way based on loop step:
012345 789ABCDEF
0123456789 BCDEF
012345678 ABCDEF
01234567 9ABCDE
Did a test with various size of arrays.
If both arrays do not exceed 24 bytes total, then everything is fine. As they exceed 24 bytes, issues start to appear.
Fair enough, but what about this when x >= 16
Code:if topline[x]=32 or botline[x]=32 then a=0 if topline[x+1]=32 or botline[x+1]=32 then b=0 'blanker
I don't see any relation
I modified code and X now changes from 0 to 14 - still same issue.
Bookmarks