2

I'm not asking for a driver specifically, but how exactly it works.

I looked up the 2 chips that were in it. HD44780A00 and HD66100F to be exact. I'm assuming one is a display driver? And the other is a segment driver?

I guess I'm looking to learn how, in this most basic terms, for instance, a pixel or a character is put on the screen.

I know how to use it with libraries and such. That's simple (just follow the instructions). But I want to understand what's going on.

I looked at the instruction set here. But is that just for the HD44780A00 or HD661001F? I guess I'm confused at what this instruction set is or what is it for. I guess what I'm asking is: what exactly is the process for sending a single pixel and how exactly does that work.

It might be too complicated and if it is, that's cool. I'm just trying to figure out how it works at the low level.

stevenvh
  • 145,145
  • 21
  • 455
  • 667

3 Answers3

5

The HD44780 is a character LCD controller, which means you write ASCII codes to the LCD for the text you want to display. If you want to control pixels individually you have to go for a graphic LCD.

The HD44780 does offer the possibility to display some limited text-based graphics, though; you can define 8 custom characters, but at 5 x 7 pixels per graphic that won't allow you to display anything like an picture.

The HD66100F is an 80-segment LCD driver for e.g. a 10 digit 7-segments display.

stevenvh
  • 145,145
  • 21
  • 455
  • 667
2

LCD is basically a kind of pixels showing display. HD66100F as said is 80 segment driver. In a very short term HD44780 converts your ASCII code information into "What" & "Where". This information is then passed to HD66100F decides "How" to show that.

1

A typical character LCD controller is designed to control an LCD up to 40 characters wide and two rows high (a matrix of 200x16 dots). Wiring such a controller directly to LCD glass, however, would require that it have 216 pins connected to the glass in addition to the pins needed for power, processor connection, etc. Having that many pins on a single IC package can be a bit tricky. Consequently, what is commonly done is to have the matrix controller operate the 16 row wires and the first 40 column wires, and--for displays bigger than that--have it supply data sequentially to additional segment controller chips each of which will add another 40 (or perhaps 80) column wires.

It's interesting to note that 16x1 is a very common size of display, and 16x1 displays are often wired as an 8x2 display, but with the bottom row physically placed by the right-hand side (thus allowing use of the controller chip without any additional driver). Four-line displays of up to 20 characters across are wired as two-line displays with the right-hand side stacked below the left-hand side. Four-line displays with 24-40 characters per row are usually wired as two independent two-line displays stacked vertically.

supercat
  • 45,939
  • 2
  • 84
  • 143
  • Ok, so if it's doing the rows/columns...how does it like 'choose' which pixel within each row/column.? –  Aug 15 '12 at 02:53
  • The matrix is often arranged differently, so that you need a lot less pins, like 100 x 16 x 2 (100 + 32 pins) or 50 x 16 x 4 (50 + 64 pins, which is the lowest you can go). – stevenvh Aug 15 '12 at 05:56
  • @stevenvh: Every display controller I've ever seen which imitated the HD44780 has had precisely 16 row wires, and I would guess that such displays constitute over 99% of the market for text-only displays. While one could reduce the number of column drivers needed for a 20x4 display by using 32:1 or even 50:1 or 64:1 multiplexing, one would have to use something other than a 44780-based display to do so, since that chip has no facility for multiplexing beyond 16:1. – supercat Aug 15 '12 at 15:23
  • @Sauron: The intensity of each pixel is a function of the average of the square of the voltage between the row and the column, with a requirement that the average DC voltage on each pixel must be roughly zero (meaning positive and negative voltages must average out). For a 4:1 display, this is best done by driving the rows one at a time to one rail, while inactive rows are driven 1/3 of the way to the other rail. The columns which should be active on that row are driven fully to the other rail, while inactive ones are driven 2/3 of the way. The rails switch polarity every frame... – supercat Aug 15 '12 at 15:26
  • ...to avoid any average DC voltage. Driving things in this way, active segments on the active row receive full voltage and thus full activation, while inactive segments on the active row receive 1/3 voltage and thus 1/9 activation. Segments on the inactive row may have +1/3 or -1/3 voltage across them depending upon whether they're energized in the active row, but in either case will be 1/9 activated. Since each segment will be in the active row 1/4 of the time and in an inactive row 3/4 of the time, ... – supercat Aug 15 '12 at 15:30
  • But the HD44780 has only 80 pins, not 216. Datasheet says 16 common x 40 segments. So it doesn't do 16 x 200 either. – stevenvh Aug 15 '12 at 15:30
  • ...active segments will receive 9/9 activation 1/4 of the time and 1/9 activation the other 3/4, for a total of 12/36 (1/3). Inactive segments will receive 1/9 activation continuously. The average square of the activation voltage is thus three times as big for the active segments as the inactive ones. On displays with more than four rows, the optimal level of activation for inactive rows decreases; since the voltage on inactive columns for active rows is full voltage minus twice the inactive-row voltage, that voltage will increase. – supercat Aug 15 '12 at 15:36
  • @stevenvh: As I said in my answer, the HD44780 is designed to feed data to external driver chips to control up to 160 additional columns (segment wires); it is not designed to control any additional rows (common wires). – supercat Aug 15 '12 at 16:13