Download Font 8-pin Matrix

0 views
Skip to first unread message

Martha Vanschaick

unread,
Aug 5, 2024, 6:54:09 AM8/5/24
to inmyespotal
Yourcode is mixing FastLED and Adafruit. You can't just copy/paste without giving the result a sanity check. You are trying to fit an 18 point font onto an 8 point matrix. The "Hello" you saw was only the first part of "Hello, World!" The dashes you saw were the bottom parts of characters that are each 3x bigger than your display, probably just the bottom pixels of "Wo"

I don't spell you like that. And no, giving advice isn't being condescending. The condescending and disparaging parts are where you tell people their code is copied and pasted without thought, make assumptions that people haven't put any work in, or told people that their code is a mess. Or you make assumptions about what people are seeing. Don't you think I would have recognised if the bottom of two letters had been displayed? Or you change the "Hello World!" text to say "Follow instructions next time. \0" All of that stuff is called being a prick, never mind that you haven't used a different font..


Here is what you get:

You need to concentrate on your project and advice toward solutions, follow instructions, accept criticism, and show some effort. If you feel the need to start something, that's your problem.


Dude, there are many things you have written here that did not happen. Thanks for your suggestions, and yeah it's great you've helped others. Keep up the good stuff. Sorry for my initial, slightly flippant comment, I did use your search terms and found I had already read that material, but it was a bit snotty of me, you are right on that. I will try to improve. We all should.


In the 1980's, few people could afford laser printers and other page printers (e.g. inkjets) were not yet affordable. Most had inexpensive dot matrix printers with tractor feeds, such as my own Star Gemini SG-10. These printed text in Portrait mode a line at a time from a small onboard buffer.


It was targeted mostly towards spreadsheets (at least that's how I saw it most used). As I recall it essentially rendered the text output in to a graphic that was rotated 90 degrees, and then printed.


That being said, the most common solution was probably to stick with a standard (non-wide, portrait mode) printer, and just pick a narrower font on the printer's control panel. On my Star LC-10, "Elite Condensed" would print 20 characters per inch, giving 160 characters per line in portrait mode.


For businesses that needed wide printouts, it was common to buy a wide carriage (tabulator type) printer. For example, Epson not only sold the MX-80, but also the MX-100 with a wider carriage able to handle up to 15 inch paper, allowing up to 256 characters per line (using a condensed font).


For a printer to turn this on its own into landscape, it would need to store the whole output for a page first and then turn it into a bitmap. This would require a buffer at least large enough to store like 4+ KiB of text plus whatever control characters are needed (all just for ASCII, no graphic borders). So more likely 8 KiB. In addition at least some bitmap line buffer must be present. Consider that the MX-100 had just 256 bytes total buffer. And that was a printer with a price tag close to 800 USD in 1981.


Nonetheless, some applications did support a few (mainstream) printers during the mid 1980s. But it was a case-by-case issue finding the right combination of program (and fitting computer) and printer. So the average user didn't - and professional users with a certain need simply spent money on wide carriage printers.


For major packages like Visicalc or Lotus, application-specific extensions were offered. Examples for somewhat generic solutions are the "sideway option" for Borland Sidekick, or the Printer-Boss package from Connecticut Software. They hooked the BIOS printer calls, emulating a certain printer (usually Epson MX-80). Data was collected until einter a 'page' was filled or the buffer overflowed, and then printed. The buffer overflow condition happened usually quite fast, so anything wider than 2-3 pages was at risk of failing.


It was again an advantage for Apple that the driver structure for MacOS was better placed. Already with the Lisa it was possible to print in either orientation, as printers were only operated as bitmap anyway.


It's also useful to keep in mind that early (and somewhat affordable) laser printers also didn't have the memory to hold a full page of bitmap. There several third-party companies built add-ons to allow full page graphics.


I remember at the time, I had a wide-carriage (14") dot matrix printer. I would keep two boxes of continuous feed perforated paper, and change paper as I needed for doing letter size portrait, or "computer paper". "Computer paper", also known as green-bar paper, was called that as it was made for mainframe printers, and each sheet was 11" by 14" wide (after tractor-feed perforations were torn off. So, the answer for me was to change paper to get "landscape".


Hello, i'm playing with led matrix.

I've bought some small 5x7 matrix and want to display some char on it with the espruino pico

i do not use any hardware driver because i just need 12pins to solder on the board with small resistor to limit current... i did it on an arduino (with a different display but the same pb)



I would like to use the powerfull of js to generate text.


On the Arduino i've used a lib (sevensegment) to declare pin as cathode and anode to drive the display.

Is there something similar to declare a list of pins to connect to a graphicArray? (hope i'm understandable)


Take a look at Driving LED matrix with shift registers such as 74HC595. The shift register was intentionally used to use the least GPIO pins as possible. Instead of calculating and shifting out the bits, you calculate the bits in an integer and output it to an array of GPI pins in CharliePlexed fashion (see digitalWrite()).


I like the pics you added while I was working on this post... Give me some more time to get something going for you... When you want to use the graphics buffer and Graphics object in Espruino, you declare a black and white (2 colors 7x5 matrix) and then read it out and process it row for row. With that you can use the built in or available fonts. If you go the direct mode as above, you have to get the font bit mapping yourself.


In an earlier version i was ligthting On dot by dot on the first line and it was working.

but it seems to light on the led but i'm not sure the out is a line...

with this one i'm a bit confuse how a graphic buffer and uint8Array work together!

if i drawString("H") in my arrayBuffer, it should look like this


Unfortunately, they are not red, were affordable, and working nicely: Retro Bubble Displays driven with 74HC595. Driving those directly - not using shift register - would be quite a number of GPIO pins to burn: 19 or 20 - exactly. PICO as 21... so it still would work.


ohhh i've tried to read the post on shift register and each time i try to read your code, i fall on my butt and have a headache (i am so far to be able to produce that, i am a 5years old kid in algorithmic...) respect


I do not know how the dots are arranged in the buffer bytes... but it can be found out... You also may face the 'reverse' issue... but that's easy: you just put out a filled rectangle in 'white' and write in 'black'.


To figure out arrangements of bits in buffer, I create a 5(cols) x 7(rows) x 1(color) Graphics object and put a buffer over it which takes 8 bytes with last 5 bits unused. The drawings are rectangles of height 1, width 1, 2, 3 and 5 in rows 0 and 1. For each drawings the buffer is printed in the log.


We see that the 1st row - row 0 - uses the first five (5) LSB bits in first byte - byte 0. We also see that 2nd row - row 1 - straddles the first and second byte - byte 0 and 1 - with first three (3) bits in byte 0 and the remaining two (2) bits in byte 1.


With this bit arrangement in the buffer it is difficult to write an algorithm that puts out the bits nicely... yes, we can do some 'streaming' to make sure we always - 7 times - have 5 bits per row to put out - with a lot of pushing and shoving around bits (shift, mask, shift, etc...).


The Graphics class though allows us a vertical vs the horizontal bit arrangement... and we do not even really loose space: still 5 bytes, one for each column. Since we care about only one text row, it becomes very simple...


A separate algorithm just pushes the buffer out with a refresh rate defined by an interval. After all columns are put out, column selector has to be disabled to have not the last one be lit for the whole time between the refresh interval.


I have a very simple 5x7 (actually only 5x3) RED LED matrix with row anodes and column cathodes from end 70's/early 80's that I used to demo and explain CharliePlexing... and I will use it again here - in the next post. LEDs were still a cost factor - at least for a student budget - dim lit, and some colors were not even on the market yet... ;-) see History of LED.


As @allObjects points out above it looks like you're better off using a Graphics instance that's 8 pixels high (with vertical byte). While it 'wastes' one pixel per column (which isn't much for 5 columns!) it means it's way easier to access the Graphics ArrayBuffer's data!


well i do not understand the interest to display in col vs in row! except to have a smaller ArrayBuffer.

is it really faster?

how to read each bit of col?

I need to select each row and extract the bit from each byte stored in the buffer!!!

i should missed something in the process... i'm lost


Graphics 'packs' pixels as close together as they will go, so if you have a width of 5 then each row will get spread over your b array. If you have a width of 8 pixels then every element of b will represent a row, which is what you want.


i have no predefined solution to switch on led on the matrix.

i just want to solve my prob who is that i have a graphic arrayBuffer with a font drawing and want to HIGH or LOW the pin of the espruino to display the content of the buffer on the matrix.

As i see in the datasheet of the matrix, it seems easier to pilot the display by line. but i haven't a good enough tech background to be sure of that. Your (@Gordon and @allObjects) attempts to explain are futile since I do not know how to switch from an arrayBuffer to a properly lit matrix with some digitalWrite()

3a8082e126
Reply all
Reply to author
Forward
0 new messages