I'm confused, you keep alternating between wanting to talk about how these things work, to pretending you're a 'teacher' and trying to 'coach' me through this.
I have a degree in Mathematics and Computer Science, the math and programming is trivial, I did harder stuff in grade 10. So please stop trying to talk down to me. I've been nice up till now because you do have information that I find useful, but your ego is getting on my nerves.
You're assertion that 'its all in the data sheet' is incorrect (an adage you seem to like repeating). For example I have right in front of me the HD44780U datasheet printed out, and on pg 24 it has execution timings. You know what the execution time for the Clear Function is??? Nothing. Its blank, left out, omitted. Heck, even in your very own code you had a 4-page tirade about the HD44780U documentation, how it has errors, how information is left out, and how you think it should work. If the documentation is so clear and accurate, then why did you write 4 pages to 'clear it up' for yourself? The documentation isn't clear, its poorly written, missing key information, and important numbers/facts are spread throughout in a haphazard manner. Its not 'difficult' its 'poor' documentation. Compare, for example the HD44780U documentation to say, the Vulkan spec. While Vulkan is FAR more complex, its also a far easier read, more complete, and more accurate. So the issue is not a matter of complexity, but of quality.
The fact that I am unsure about the wording of a poorly worded document does not mean I am a poor mathematician or coder, and your constant insinuations otherwise are really starting to grate on my nerves.
For example:
There is no specified nor required delay between nibbles in the hd44780 spec.
You are right, there is no specification, no mention anywhere at all in fact. Does that mean I can send it as fast as I can, or is it yet another piece of information omitted? Certainly there is some physical upper limit, so the only thing I can go on (knowing there is a limit but unsure as to what it is) is what others have done. Which is why I asked these questions, of course only to get patronizing answers like 'its all in the datasheet'. And really, why must I go out of my way to stroke some guys ego simply to get the answer "we don't know, the i2c bus is too slow for it to matter"?
There is a big difference in how byte vs sequential mode works.
No there isn't. In byte mode the address pointer is not updated, in sequential it is, nothing more. Had you read what I wrote in previous replies you would realize that I do in fact understand the difference. At this point I don't think you even bothered to read anything I've written. Which leaves me wondering why you are even bothering to reply at all? Is this some sort of 'ego' thing for you? Were you surprised someone could write a 'robust' lcd library in 6 hours and felt you needed to prove 'yours was better'? Its not a competition... leave the ego at the door.
For example, you repeatedly stated my code 'should be a in library format with proper layers'. I also stated repeatedly that it was a stripped down, bare minimum example so that people on the forums didn't have to scroll through pages of boilerplate code. But this seemed to be ignored by you. Every other programming forum people always ask you to strip it down to its simplest version. You post only the bare minimum that can still cause the error. That's just standard protocol.
Using the MCP datasheet combined with the i2c bus timing based on the SCK clock speed and the number of bytes being transferred over the bus to control the output port, you have all the information needed to perform calculations for the output port update timing.
No I don't, without some way to know if there is some upper limit (something not in the spec), all those calculations are for naught.
I don't care anymore. I'm not releasing the library. Its not like any arduino user would want to use compile time polymorphism anyways, just the words alone scare 99% of people away (even though its not actually very difficult to use).
You know, I was going to add the necessary functions to support the Print interface (since I used something different) to benchmark it simply because you asked. I don't care about shaving off a few microseconds, its more than fast enough for my uses. But I thought: 'he was nice enough to help me out, I'll do as he asks'... but not anymore. I really don't care anymore.
If you want people to actually stick around on these forums, actually bother to read what they wrote if you intend to reply. Your conduct was rude and unprofessional.