Wednesday, 24 April 2013

Panelolu2 for RAMPS and Printrboard

Panelolu2 LCD display and control solution working with RAMPS 1.3 and Printrboard.

Finally they are here, the much requested adapter boards that allow the Panelolu2 to interface with RAMPS 1.3 and Printrboard. For details on the background of the Panelolu2, along with more details on how to set it up, how the print the enclosure etc, please see the previous post.

RAMPS 1.3 Adapter

The first point to note is that due to physical differences between RAMPS 1.3. and 1.4, this adapter is sized for RAMPS 1.3 and will not fit on RAMPS 1.4. 

[Update: Panelolu2 with RAMPS 1.4 adapter is also now available from our webstore]




In a similar way to the Melzi and Sanguinololu adapters, the RAMPS 1.3 adapter has two MOSFETs that can be used to switch fans or other small loads. This allows the RAMPS 1.3 with Panelolu2 to control two extruders each with their own software controlled fan.

The schematic and annotated diagram below shows the RAMPS pins used and the connections.



View from the bottom


View from the top showing the purpose of each connector


Transistor 1 is connected to Arduino digital pin 45 which can be controlled by PWM, Transistor 2 is connected to Arduino digital pin 49, a straight on/off pin. The transistors switch the 12V supplied through the input - this must be connected in order to get any output from the transistors.

The additional expansion header breaks out all the pins not used by Panelolu2 along with the I2C pins if you want to add more devices to the bus.

Printrboard Adapter

Update 06 Oct 2014 - check out Colin Bell's blog post about getting this to work with the latest printrbots and board.


This is tested on Printrboard Rev D & E only as I do not have an earlier revision boards to test with.



For the Printrboard Adapter I decided to go for a minimalist approach. There are no additional MOSFETs - it is simply a physical adapter. The reason for this is twofold; firstly the Printrboard already has an onboard MOSFET to switch a fan and secondly, with the default fuse settings, there are no spare pins on the EXP 1 header.



As can be seen from the Schematic above the only pins left unused (and broken out to header SV1) are TDI, TDO,TMS and TCK. These are set as JTAG pins by default although they can be configured for use as I/O, this process is detailed in this blog post. I could have gone with an adapter board that connected to both EXP 1 and EXP 2 on the Printrboard but decided that small was best in this case.



Marlin Firmware Setup

The T3P3 branch of Marlin, available from github, has been updated to include support for the Panelolu2 on Printrboard and RAMPS. Every printer configuration is slightly different but the generic workflow for updating your firmware to support the Panelolu2 is as follows:



  1. If you are not already using it get the standard version of Arduino-0023 from the Arduino website, note that this version of Marlin has not been tested with Arduino 1.0 or higher.
  2. Get T3P3 Marlin from github.
  3.  For Printrboard follow the reprap wiki advice to get up and running with firmware, Lincomatic's blog post is also useful. For RAMPS, support for the Arduino Mega 2560 is built into standard arduino
  4. Get LiquidTWI2 as mentioned in my Panelolu2 blog post, note that configuration changes are no longer required in the latest version of LiquidTWI2.
  5. Modify the configuration.h of the Marlin to fit your printer setup (setting like controller board, axis dimensions, thermistors, etc). Update: This blog post should help.
  6. Confirm Marlin compiles and uploads with //#define PANELOLU2 still commented out in configuration.h.
  7. Then uncomment #define PANELOLU2 , along with #define EEPROM_SETTINGS and #define EEPROM_CHITCHAT and confirm it compiles and uploads. Note that with the #define PANELOLU2 uncommented, you must have the Panelolu2 connected or Marlin will hang and not finish initialising.
  8. Check the printer operation and calibration to ensure you have edited the Marlin configuration.h properly.


Getting one

As always the hardware is open source so the design files are available on Github:
https://github.com/T3P3/Panelolu2.

Update: Now available on eMakershop and Ebay.




Saturday, 6 April 2013

Rostock build


Rostock build

After much delay due to other projects I finally got a chance to put together a Rostock delta printer. My build log is below, I have made a few minor changes compared with the original design in order to use 3mm filament and incorporate a few good ideas I saw on thingiverse and various blogs. Here is a bit of video to give an overview of the printer in action - printing the first print, a dual spiral lightbulb.



As you can see from the video I now need to work on the speed and retract settings to improve the quality and reduce the stringing.

Adaptations

I initially printed the standard Rostock parts from thingiverse, but a common suggestion is to change to fibreglass or carbon fibre rods so I decided to change to carbon fibre rods with the Traxxas rod ends. Half way through the build I switched to 0xPIT's version of the end effector platform which is designed specifically to mount a J Head hotend with minimal issues that works well with Traxxas rod ends.

I used nophead's version of the Wades extruder rather than the Rostock standard extruder as I am familiar with these extruders and I want to use 3mm filament. In the future I
 may look at changing the gear ratio to balance speed and torque as shown on Billy D's blog, which is an excellent source of Rostock printer tips.

Build log

I used 10mm plywood and marked out the drill holes using measurements from this thing and checked them with the printable jig. After drilling I painted the top and bottom boards before mounting the motor and idler ends.

Other than for the inner motor mount fixings I used wood screws through the plywood into the plastic parts which cut their own thread into the plastic.

Added all the securing fasteners and then the rods with the LM8UU linear bearings already fitted:

The rods were cut to the same length and aligned at the bottom of the motor ends and top of the idler ends but precise alignment is not critical as the endstops are adjusted during calibration.

At the idler end I used 2x624 bearings with various washers (similar to the X and Y axis idlers on the Mendel90).These are mounted on an M4 bolt - the one in the picture is a little long, however M4x40mm should work well.

I adapted the idea from Frank Neon's blog pictures to use zipties to hold and tension the belt. The adaptation keeps the zip tied section short to avoid fouling on the stepper drive gear even when the carriage is at its lowest point.

Ziptie prior to applying tension:

After tension applied and excess cut off:

Before tightening the pulley's grub screw, move the carriage to the bottom of the axis to aligh the pulley to the belt.

To help stiffen the frame two wooden sides are added. I used the printed Mendel90 fixings to secure these.

The complete frame showing the fixings:

The Traxxas rod ends have an ID of approximately 3.5mm which I drilled out to 4mm to fit the 4mm carbon fibre rods. As suggested in a number of places I used a wooden jig to ensure all the rods were the same length.

The ends of the carbon fibre rods needed to be lightly sand papered to fit into the 4mm holes, a thin layer of super glue holds them in place. Below is a picture comparing the carbon rods with Traxxas ends to the original printed rods.

Next I fitted the rods to the carriages and the end effector platform. After wiring the motors and endstops up as per the wiki page, I attached a Dial Test indicator for calibration.

Using the calibration guide here to level the end effector platform to the bed, It took a number of iterations but by the end there is less than 0.05mm difference between the Z "0" position in front of the three axes and the center of the bed.

I then replaced the DTI with a JHead hotend and connected the PTFE bowden tube (4mm ID, 6mm OD). The long nut shown below threaded the tube and grips well but I will probably replace this with a push fit connector at each end.

The JHead is wired up as standard with the wiring wrapped around the bowden tube.

To hold the PTFE tube at the other end I used the Bowden Clamp for Rostock. Zipties did not appear strong enough so I replaced them with a Jubilee Clip.


I mounted the extruder drive a little over half way up the frame through one of the wooden boards with enough slack in the bowden tube that the entire print envelope can be reached without excessively small diameter bends of the PTFE:

After calibrating the E steps per mm I started the first print. Overall the build time was a little over 8 hours work (spread over a few days), including taking pictures and searching for information. One of the advantages of the Rostock is the reduced part count and simpler assembly in comparison to the Prusa Mendel.

To do

  • Experiment with retraction and speed settings to improve print quality.
  • Confirm dimensional accuracy across the build area.
  • Mount a fan for extruder cooling to print PLA.
  • Replace the current bowden cable ends with push fittings.
  • Experiment with various extruder mounting locations.
  • Print something really big!
  • Multiple hot ends for multiple colour printing.


Tuesday, 12 March 2013

Panelolu2 for Melzi

Panelolu2 LCD display and control solution working with Melzi Electronics.

The previous post outlined the functionality of the Panelolu2 - broadly similar to the Panelolu but with a reduced pin count allowing it to interface with more controllers. In order to simplify adding the Panelolu2 to your printer the design includes adapter boards and the second adapter board we have produced is for the Melzi controller:



This runs Marlin firmware which has been specifically adapted to support an I2C controller, a number of people are working to incorporate the I2C LCD control code into the standard Marlin build.

The adapter board schematic is below:


The adapter boards will be supplied fully assembled by default:




As the picture above shows they can do more than just provide an interface between the Melzi electronics and the Panelolu2. There are two FETs mounted which can be used to switch a 12V supply, useful for adding additional fans to you printer. Unlike the Sanguinololu the Melzi does not provide 12V on the expansion header so an additional 12V input is needed (The easiest way to do this is to use a short lead to provide the 12V supply from the 12V input to the Melzi board).

The expansion header allows access to the I2C pins so additional devices can be added to the bus, along with the two pins connected to the FETs and the click encoder pins. In normal use the click encoder pins are used for the encoder and cannot be used for anything else. However, as explained in the previous post, running the encoder over I2C may be supported in software in the future which would free these pins up to be used elsewhere. The board has solder jumpers to select between these two modes of operation, with the default being the normal, directly connected mode.




Using the additional FETs

The additional FETs are connected to pins A3 and A4 which map as arduino pin numbers 27 and 28. Pin 27 is the LED pin - setting that pin high turns on the FET and the LED at the same time.

Currently these FETS are not directly controlled in firmware (there is no menu command to turn them on and off) but that is in the pipeline. In the meantime they can be controlled in GCODE by using the M42 command (for example in your startup and shutdown code). Once I get a chance to wire it in I plan to use this in the end of print gcode to drive a fan that will cool the heated bed rapidly (originally Nophead's idea and incorporated into the Mendel90 design)

M42 S255 P27 ;turn on the fan on Transistor 2
G4 S240 ; wait for 4 minutes
M42 S0 P27 ;turn off the fan on Transistor 2

The other FET could be used to drive a fan to cool the stepper drivers or not used at all and the pin used on the expansion header on the adapter board for some other function.

SD Card

The firmware with the P2 changes is setup to use the P2 SD card slot rather than the built in SD card slot on the Melzi. The difference is in the definition of the SDSS pin in pins.h in Marlin. The specific line in pins.h is:

#define SDSS 30 //to use the SD card reader on the Panelolu2 rather than the melzi board

Comment this line out to us the SD card on the melzi board instead. It is not currently possible to use both and select between them after the firmware is compiled.

Summary

Update, added this section to summarise the process of getting the Panelolu2 working on a Melzi where the Melzi was previously running a "non standard" version of Marlin such as Nophead's version for M90 or RepRapPro's version of Huxley/Mendel. Please note that if you are using RepRapPro's Multicolour Mendel you need to use their custom variation of Marlin to control the multiple extruders and at this time the Panelolu2 is not compatible with this setup.


  1. If you are not already using it get the standard version of Arduino-0023 from the Arduino website, note that the T3P3 version of Marlin has not been tested with Arduino 1.0 or higher.
  2. Update the avrdude.conf file in the standard Arduino-0023 to include a definition of the atmega 1284p, I have used this one for a year now. Be sure to put it in arduino-0023\hardware\tools\avr\etc\ and rename or overwrite the old one. More detail in my first blog post
  3. Get T3P3 Marlin from github.
  4. Add the "Marlin\ArduinoAddons\Arduino_0.xx\Sanguino" directory to "arduino-0023\Hardware\" directory. This provides the Sanguino extensions required for Sanguinol and Melzi.
  5. Get LiquidTWI2 as mentioned in my Panelolu2 blog post, note that configuration changes are no longer required in the latest version of LiquidTWI2.
  6. Modify the configuration.h of the Marlin to fit your printer setup (setting like controller board, axis dimensions, thermistors, etc). Its best to copy these from the configuration.h of your custom firmware. Update: This blog post should help.
  7. Confirm Marlin compiles and uploads with //#define PANELOLU2 still commented out in configuration.h.
  8. Then uncomment #define PANELOLU2 , along with #define EEPROM_SETTINGS and #define EEPROM_CHITCHAT and confirm it compiles and uploads. Note that with the #define PANELOLU2 uncommented, you must have the Panelolu2 connected or Marlin will hang and not finish initialising.
  9. Check the printer operation and calibration to ensure you have edited the Marlin configuration.h properly.


Availability

Update: Now available on our webstore as well as eMakershop and eBay

Friday, 15 February 2013

Panelolu2

Panelolu2 - An I2C control solution for Sanguinololu, Melzi and more

The original Panelolu was designed to provide a simple user interface for a 3d printer controlled by a Sanguinololu and similar electronics - enabled by the Ultipanel code within the Marlin firmware. By connecting to the right pinouts it also works with Printrboard and RAMPS.

I have developed a new version which uses an I2C port expander to drive the LCD screen and adds a piezo buzzer and indication LEDs. This version uses less pins, making it compatible with the Melzi electronics and even leaves enough spare pins to drive a couple more outputs (such as an additional extractor fan and stepper driver cooling fan).


Panelolu2 Front View
  
In the photo above the grid covers the piezo buzzer and the H,E and F LEDs indicate that the Heated bed, Extruder and Fan (or second extruder) are on. It would be relatively simple to change the firmware to have these LEDs turn on for another reason. The R for reset and the encoder wheel are the same as in the original Panelolu although I have made the encoder wheel about 1/3 smaller to fit better. 

Circuit board

The Panelolu2 design simplifies the assembly by mounting all components on one circuit board that can be soldered directly to an LCD screen. The standard way to connect it to the screen is with a single row of 2.54mm headers as shown below. This row of headers could be replaced by wires (ribbon cable would be best) - enabling a variey of case designs, such as Printbit's Panelolu Box for Mendel Max.


This simplification also extends to the wiring which is now a 2x6 IDC plug on both ends of a ribbon cable. The circuit uses a combination of through hole and surface mount components; the other side of the prototype circuit board is shown below. The brightness and contrast pots are now on the back of the board and can be adjusted through the rear of the case.



I have tidied up the Schematic: the components are the MCP23017 port expander, the SD card circuitry, buzzer, click encoder and LEDS.

 

Of course the whole project is Open Source Hardware and the eagle files are available on github.

Case design

As mentioned above, the circuit board and LCD allow for multiple case designs. I have made a simple case with a back leg allowing the Panelolu2 to sit on the bench alongside the printer.
 
Panelolu2 Side View 

The case design is all done in OpenSCAD with both .scad and .stl versions of the files, available on Thingiverse. One of the great things I have found about Thingiverse is it allows you to embed the Thingiviews of the STL files, so here are the front and back case views:

Front
 
 
Back
 



The OpenSCAD file also allows the back leg to be generated to support the case at your chosen angle. For the rotary encoder I adapted Miserybot's "Spinner Knob" design to make it about 1/3 smaller and a lot thinner - the .stl is on Thingiverse and I will upload the OpenSCAD code once it is cleaned up.


Adapter Boards

One of the aims of the Panelolu2 was to reduce the complexity involved in wiring it up. I have designed adapter boards to allow compatibility of the Panelolu2 with various electronics. The picture below shows the adapter board connected to a Sanguinololu.



Update added the Sanguinololu and Melzi adapter schematics:



As can be seen from the schematic the two mosfets for driving additional light loads such as fans are on the PWM and A3 pins on the Sanguinololu. These pins can be accessed as Arduino digital pins 4 for the pin labelled PWM and 28 for the pin labelled A3. In Marlin firmware to turn on the fan connected to Transistor 1:

M42 S255 P4

And transistor 2

M42 S255 P28

In overview the picture below shows the inputs and outputs from the prototype Melzi adapter board.


The Schematic for the Melzi adapter board is:



The same logic as described the solder jumper operations on the Sanguinololu adapter board applies to the Melzi board. For the two additional outputs they are on pin A4 and A3 which are digital pins 27 and 28 respectively.In Marlin firmware to turn on the fan connected to Transistor 1:

M42 S255 P28

And transistor 2

M42 S255 P27

For basic operation the ISP and expansion header plug into the Melzi and the Panelolu plugs into its 2x6 connector. If desired FETs can be mounted to switch a 12V supply, for example to drive external fans.

As an alternative to the adapter board, standard female housings with crimp connectors could be used. I intend to design boards for Printrboard and RAMPS in the near future.
(update: done, see this blog post)

I2C encoder option 

Instead of linking the encoder and switch directly to pins on the Sanguinololu, Melzi or other electronics, the hardware has the option to run the encoder and switch over I2C. This would free up a couple more pins but the option is not yet supported by firmware. The Panelolu2 circuit board and adapter boards have solder jumpers, shown below on the back of the Melzi adapter board



Currently the firmware does not support routing the encoder signals over I2C so by default these jumpers will be set for normal operation.


Firmware 


The Panelolu2 only runs on Marlin firmware at the moment. Excellent work was done by Daid in the Marlin code to split the LCD screen hardware from the user interface. This made it straightforward to implement the Panelolu2 code. As mentioned in previous posts LiquidTWI2 by Lincomatic is required; download it from github, rename the directory from "LiquidTWI2-master" to "LiquidTWI2 and put it in the

arduno-0023/libraries/

sub-folder.

UPDATE: - This step is no longer required in the latest version of LiquidTWI2 (1.2.4) the library will work out the box with no configuration changes required.

By default the Panelolu2 is disabled in LiquidTWI2, after saving the directory, edit LiquidTWI2.h to remove the comments on line 10:

 //  #define PANELOLU2 //only possible....


To

    #define PANELOLU2 //only possible....
 

Continue following the instructions from here:

Then download the T3P3 fork of Marlin, make the changes you need to configuration.h to suit your printer and ensure :

#define EEPROM_SETTINGS
and

#define PANELOLU2

are uncommented within configuration.h then upload as normal. The compiled Marlin is ~100k, a very similar size to Marlin compiled for the original Panelolu, so the electronics board will need enough space (a 1284P is fine, a 644P does not have enough space).


Summary

Update, added this section to summarise the process of getting the Panelolu2 working Sanguinololu.


  1. If you are not already using it get the standard version of Arduino-0023 from the Arduino website, note that the T3P3 version of Marlin has not been tested with Arduino 1.0 or higher.
  2. If you are not already using a Sanguinololu with 1284P then update the avrdude.conf file in the standard Arduino-0023 to include a definition of the atmega 1284p, I have used this one for a year now. Be sure to put it in arduino-0023\hardware\tools\avr\etc\ and rename or overwrite the old one. More detail in my first blog post.
  3. Get T3P3 Marlin from github.
  4. If you are not already using a Sanguinololu with 1284P add the "Marlin\ArduinoAddons\Arduino_0.xx\Sanguino" directory to "arduino-0023\Hardware\" directory. This provides the Sanguino extensions required for Sanguinol and Melzi.
  5. Get LiquidTWI2 as mentioned above, note that configuration changes are no longer required in the latest version of LiquidTWI2.
  6. Modify the configuration.h of the Marlin to fit your printer setup (setting like controller board, axis dimensions, thermistors, etc). Its best to copy these from the configuration.h of your existing firmware. Update: This blog post should help.
  7. Confirm Marlin compiles and uploads with //#define PANELOLU2 still commented out in configuration.h.
  8. Then uncomment #define PANELOLU2 , along with #define EEPROM_SETTINGS and #define EEPROM_CHITCHAT and confirm it compiles and uploads. Note that with the #define PANELOLU2 uncommented, you must have the Panelolu2 connected or Marlin will hang and not finish initialising.
  9. Check the printer operation and calibration to ensure you have edited the Marlin configuration.h properly.

Availability

As always the hardware is open source so the design files are available on Github: https://github.com/T3P3/Panelolu2.

Update: Now available on our webstore and on eMakershop and eBay 

Tuesday, 5 February 2013

OpenSCAD Bitmap Font

An (almost) 32 bit font for OpenSCAD.

I have used Tony Buser's bitmap OpenSCAD font to add 3D letters to various objects. I recently wanted to to get higher resolution than 8 bits but did not want the more complicated workflow (of which there are a number of examples 1 2 ) of creating the letters outside of OpenSCAD as a DXF, then importing them and linear extruding to get the desired 3D objects.

The solution was to use "The Dot Factory" which is designed for creating bitmaps for graphics LCDs. It allows you to import a system font (I used Lucida Console at 24pts) and export that as a text file with each character mapped to a number of bytes representing the bitmap. For example the letter "a"

    0b00000000, 0b00000000, //               
    0b00000000, 0b00000000, //               
    0b00000000, 0b00000000, //               
    0b00000000, 0b00000000, //               
    0b00000000, 0b00000000, //               
    0b00000000, 0b00000000, //               
    0b00000000, 0b00000000, //               
    0b00000000, 0b00000000, //               
    0b00011111, 0b11000000, //    #######    
    0b01111111, 0b11110000, //  ###########  
    0b01100000, 0b01111000, //  ##      #### 
    0b00000000, 0b00111000, //           ### 
    0b00000000, 0b00111000, //           ### 
    0b00000000, 0b00111000, //           ### 
    0b00000000, 0b00111000, //           ### 
    0b00001111, 0b11111000, //     ######### 
    0b00111111, 0b11111000, //   ########### 
    0b01111000, 0b00111000, //  ####     ### 
    0b11110000, 0b00111000, // ####      ### 
    0b11100000, 0b00111000, // ###       ### 
    0b11100000, 0b00111000, // ###       ### 
    0b11100000, 0b00111000, // ###       ### 
    0b11110000, 0b11111000, // ####    ##### 
    0b01111111, 0b10011111, //  ########  #####
    0b00011111, 0b00001111, //    #####    ####
    0b00000000, 0b00000000, //               
    0b00000000, 0b00000000, //               
    0b00000000, 0b00000000, //               
    0b00000000, 0b00000000, //               
    0b00000000, 0b00000000, //               
    0b00000000, 0b00000000, //


 
With some text manipulation (in my case using notepad++, which is excellent) this is converted into:
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,
    0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,
    0,0,1,1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,
    0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,
    0,1,1,1,1,1,1,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,
    0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,
    1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,
    1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,
    1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,
    1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,
    0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
    0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,0,0,0,0,0,0,
    0,0,0,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0



The matrix above is the format that Tony Buser's open scad bitmap drawer uses, define the number of bits per row and you are away:

Still a bit chunky but less so than the original 8 bit version:
The full list of characters created are:


ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
0123456789

 !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~


Depending on the character the bitmaps are 8,16,24 or 32 bits wide and the bitmaps are all 31 bits high.

If you render them all at once they can use quite a bit of processing power, best to leave extensive 3d lettering until the rest of the object is designed.

The OpenSCAD script is available on github.
 
Update: Inkscape has a plug-in to export direct to OpenSCAD so this may make that method easier - one to check next time!