I have a LCD I'm controlling in R/W mode using shift registers ( in & out ). Everything is going smoothly so I decided to try and optimise it a little.
The situation is:
In write mode the LCD enable pin only has to be cycled to send data to the LCD. As I'm using 2 chained SIPO registers, it takes a fair bit of work to set and unset the enable pin.
My idea is:
I want to use a circuit to strobe the enable pin when the shift register pin is changed, either high or low.
Only changing the shift register to LCD enable output once will save at least 50 operations per instruction.
I have looked at a few flip-flop and multi-vibrator circuits, but am still pretty shoeless as to what I need.
I even thought about some sort of frequency doubler as a low to high or vice versa transition might output a complete single cycle.
Like the multi-vibrator circuits I looked at I will have to calculate some timing into it to ensure it cycles before the arduino sends the next instruction. ( The Arduino has to fill both output registers before the LCD pins change, so there is quite a bit of time to use I think. )
Any strange or simple ideas I could give a try?
Do you not have a spare IO pin?
The enable pin is already connected to shift registers, I wan't to teach myself more about electronics by taking some of the work off the CPU ( shift registers don't help, I know ).
Also its essentially for a 328 ( UNO ), and I intend to utilise the other pins.
At the moment I have to toggle the enable HIGH then LOW to send one instruction. I want to be able to toggle it either HIGH or LOW once per instruction and have a helper circuit do the actual HIGH -> LOW transition.
My goal is to have the display working through SPI in read/write mode, using a shift register system in the middle. This is a feature the display doesn't actually support through its own SPI interface, and I would rather use a few more components to take even one operation per frame away from the CPU, than burden the Arduino with the entire workload.
What Ideas might you have for this?
A 555 timer would do this, I can't remember now if that are negative or positive edge triggered but it doesn't really matter because you can add an inverter.
It could trigger off the latch signal. Depending on exactly when the LCD reads the data after the EN signal you may have a race condition whereby the LCD reads data before the SR has a chance to produce it on the outputs.
You could just use a slightly delayed version of the latch signal. The only LCD spec I can find gives a T(as) of 40nS. This is the time the data has to be stable before the EN pulse, so you can't just use latch directly, you have to delay it by at least 40nS (depends on the actual display being used though). The easiest way to do this is run the signal through a few inverters.
BTW, where in NQ are you?
Cheers, that idea looks great, I'll mess around with a few things when I get back from work tonight.
I have a spare 555 and a hex inverter so I can create some delays.
I'm not sure how the faster SPI timing will affect this ( using pin port mapping at the moment ), but I set the data pins and the enable HIGH at the same time then bring the enable LOW, will have to check the datasheet as to weather the 40ns is required before the enable HIGH or before its set back to LOW.