From what I have read over some time, 3.3v CMOS to 5v TTL is a case of "almost always works". For me that would not be a statement of enough reliability, although for some hobby work it could possibly be enough, and I have used that philosophy for some of my own hobby work just not for professional stuff. For my use I would use some interface device, but I don't have time at this very moment to look up the chips.
If it does not work, then something is broken. CMOS has no difficulty producing a rail-to-rail output while meeting the TTL pull down current requirements. The TTL voltage and current levels are easily within the capability of 3.3 volt CMOS. A 3.3 volt pull-up (2.2k for TTL, 10k for TTL LS) *might* help in some cases, but should not be necessary.
TTL Input -1.6mA +40uA <0.8V >2.0V
TTL LS Input -0.4mA +20uA <0.8V >2.0V
TTL Output -16mA +400uA <0.4V >2.4V
TTL LS Output -4.0mA +200uA <0.5V >2.7V
Sure, the threshold levels are compatible, but is the 3.3V output going to tolerate having current driven into it from the TTL input? I would like to have a 74HCT buffer stage in between.
TTL and LS outputs with no loading produce about 3.4 volts, and supply practically no current at that level, so they will not overdrive a 3.3 volt CMOS input.
Hi,
Well as I mentioned, there are a lot of variables. One is the type of CMOS. Since the current is also a factor, the older CMOS may not work as well as the more modern CMOS. That's one example I can think of offhand.
The terms 'might' and 'should' spell out the question of reliability which I had been mentioning. You are right it 'should' work, but that's not how I do things except when I do my own personal stuff. It's perfectly fine if you want to do it that way, no problem here.
I guess I am coming from a background where I saw things that 'should' work but do not work because they were close to being right but not quite right. Some interesting examples too in the digital world.
One I remember was a resistor value that helped to ensure a logic level was correct. The value was just on the edge of meeting the requirement. it took several years to weed this problem out.
Another example is a case of using a synchronous counter in a circuit that should have had an asynchronous counter. The designer assume that there would always be noise somewhere in the circuit and that would keep the clock signal going. Well, one day it didn't. Took hours to find the problem. It was in a max power tracker solar project.
Those problems did not originate in a design I did, but I can't claim that it was impossible in the past for me to make such a mistake too. In a design for Pfizer Pharmaceuticals, I used a capacitor to provide a pulse to another logic circuit when a button was pressed. It was a kind of quick decision though because the project was getting close to running late. I had everyone in the office try this button, and it worked for every one of them as well as myself. The units shipped, and when the gal who had to use the thing (a precision weight scale for measuring animal organ weights) when SHE pressed the button, she pressed it in a much gentler way which meant it went down slower. The capacitor value was too small so when she pressed it not enough current was able to flow to trigger the digital input it was supposed to work with.
That meant a flight from New Jersey to Indiana to modify the design. That also meant carrying a CRT oscilloscope because there were no digital ones back then. Of course that cost the company money.