SLO2016 Alphanumeric Intelligent Display
Controlling an Osram/Siemens 4-Digit 5x7 Dot Matrix Alphanumeric Intelligent Display with Memory/Decoder/Driver
Download the SLO2016 datasheet.
Download the ddm 427 datasheet.
Introduction:

With this rotary-encoder you are able to control the SLO2016 completely, you can also use 3 push-buttons, but it's easier to turn a knob and scroll through the characters of the display. Suppose you want to make a tiny scroller of this display, you can do it like this: Select a character on the first display, then push and store, then let it jump to the second display, and select a character again, etc. at the 4th display, you have to let scroll the displays one position to the left after store, so that you can make complete words, when finished push e.g. twices with in 1 sec. and now it start to scroll. You can do many tricks with this tiny display!
An SLO2016 display connected to an AVR microcontroller
Pin numbers:

1 WR Write
2 A1 Digit Select
3 A0 Digit Select
4 Vcc
5 D0 Data
6 D1 Data
7 D2 Data
8 D3 Data
9 D4 Data
10 D5 Data
11 D6 Data
12 BL Display Blank
13 CLR Clear
14 GND
How to program the AVR:

Set the inputs and outputs e.g. like this:

ser temp
out DDRB, temp
clr temp
out PORTB, temp
ldi temp, 0b11111000
out DDRD, temp
ldi temp, 0b00000111
out PORTD, temp

Only PD0, 1 and 2 are inputs with internal pull-ups on, rest are outputs. The switch sequence of the encoder goes as follows:

AB: 00 10 11 01 00 -> CW
AB: 00 01 11 10 00 -> CCW

Remember this encoder has detend positions, that are the positions with the values 00 and 11. The direction depends on the sequence as shown, so from 00 to 11 with 10 passed means a clockwise turn. Don't forget the bouncing of the contacts (approx. 2 msec for this encoder), you can use a nice delayloop program called AVRdelayloop, simply fill in 0.002 sec, and you have your debounce delay routine.
The display works as follows; First choose the digit you want e.g. digit-3, this means you must set the addresses A0 and A1 hi (see datasheet), now select a character by setting the right code to PORTB, I did it like this:

ser temp
out DDRB, temp
ldi temp, 0b11111000
out DDRD, temp
sbi PORTD, A0
sbi PORTD, A1
ldi temp, 0b01000001
out PORTB, temp
sbi PORTD, CLR
cbi PORTD, WR
sbi PORTB, BL

As you can see I took character 'A', by setting the right bits (0b01000001) see code table.
Here an example (upcounter 0 - 99) Have fun !

58 and upcounting...
ASCII Character Set SLO2016
ASCII Character Set SLO2016

Using multiple SLO2016 displays
Diagram with two SLO2016 displays
Two SLO2016 displays under test
For example; Use it for displaying frequencies.




Components:

1x AT90S2313
1x 4 MHz resonator
2x SLO2016
1x 7805
2x 47uF/16V
2x 100n multilayer
1x 10k
1x 100n MKH
Connecting two SLO2016's:

The next diagram shows how to connect two SLO2016 displays to an AT90S2313 microcontroller. With this setup you can show many parameters, like a data display (byte, binairy), frequencies (MHz, kHz), audio volume (dB), or you can use it i.e. as a MIDI analizer, endless possibilities.
Connect all pins together except the WR (write) pins, connect those independent.
The sequence of writing of the characters goes as follows: First activate digit0 (lsd, works out the same way works as a databyte), make WRB (righthand display) lo, set the right data on the data pins (D0-D6), make WRB hi, now one digit is stores in the RAM buffer of the righthand display. Continue this sequence four times, now switch to display A (use WRA), when all eight digits written make BL hi, now the characters will be displayed. Here a part of ASM code:

cbi PORTD, A1 ;activate digit0
cbi PORTD, A0
cbi PORTD, WRB ;WRB must be lo
ldi data, 'z' ;character = z
out PORTB, data ;set data on portb
sbi PORTD, WRB ;write goes hi