Skip to main content

Hacking Nokia 2760 caller ID LCD with MSP430

      For quite a long time, I had my Mom’s Nokia 2760 lying idle. So, when I thought of putting it into a good use, the LCDs caught my attention.Nokia 2760 caller ID screen is a 96x65 Monochrome LCD with a blue backlight. Here, I have written the driver code omitting graphic options like drawing line, chars, shapes etc. Just the pixel level access of the display is implemented in MSP430 microcontroller. A PC side program written in C++ is used to stream a 96x65 Monochrome bitmap image to the display through UART.


   Any monochrome image of size 96x65 can be streamed from PC through serial port to the msp430. The source image processing in host side is done using OpenCV library. The pixels are offset,concatenated and mapped to LCD’s byte. Then the bytes are transferred through COM port at Baudrate of 9600. The following diagram shows the architecture of host side application.


    Since the MSP430 Launchpad supports a maximum baud rate of 9600bps, the data stream is received by MSP430 microcontroller at the maximum baudrate (9600) and is packetized. The column wise bits(since each pixel is monochrome) are extracted and are bit banged to the LCD using software SPI. The firmware layout of MSP430 is shown below.


   The host side application when combined with microcontroller side firmware through the serial interface, we can stream any monochrome image from pc using C++ application and view it on the tiny NOKIA LCD. The overall functional diagram is shown below.


    The schematic of the caller ID LCD of nokia 2760 is shown below.


        Here a depiction of pixel addressing of LCD is shown : (click on the images to view with full clarity)

      Now let us take a look at the zoomed version of the first region. ie. Column=0x10, Row=0xB0 (Shown with 16 sub regions 0x00 to 0x0F)

   To display the above simple pattern, the access command sequences will be:

                   Spicmd(0xB0); // Select Row 0xB0
                   Spicmd(0x10); //Select Column 0x10
                   Spicmd(0x07) ; //Select sub-Column 0x07
                   Spidata(0x00); // All 8 pixels black

   So any pattern can be drawn by modifying the addresses and data to be written in the above mentioned command sequences.The LCD's initialisation command sequence is obtained from rossum's webpage on nokia lcds.


   A troll image is streamed from PC to NOKIA LCD through COM port. This firmware for MSP430 can be ported to any platform by tweaking the macros and minimal modification of functions.


Popular posts from this blog

Shell Scripting to Display Bar Graphs in Linux Terminal

 This week was quite hectic for me with course assignments and their merciless deadlines. One such assignment in Advanced Computer Architecture  was simulation of various benchmarks in alpha architecture in simplescalar , a well-known computer architecture simulator. I was supposed to run a total of 4 benchmarks with different configurations of cache memory, instruction issue widths, commit widths, in-order execution modes, etc and I had to plot the required performance parameters for every benchmark. A conservative estimate would be around 40 plots!  Since the simulation platform was Linux, I could breathe a sigh of relief since most things can be automated using a powerful tool called shell. Scripting made my life easier here since I can automate a bunch of simulations without having to keep an eye on each and every simulation which would take anywhere from 20 minutes to 20 hours.  The problem arose when it came to plotting the performance results. Because, each simulation

Programming STM32 ARM microcontrollers in Arch Linux

Once upon a time, not so long ago, the 8-bit microcontrollers were ruling the hobbyist embedded world. But today, the 32-bit ARM Cortex Microcontrollers are so inexpensive and power efficient that there is no good reason to ignore them. Here, let us see how to program a STM32 ARM cortex Microcontroller in Linux environment. The specific microcontroller used here is an STM32F103C8 (ARM cortex M3) programmed in Arch linux. Components Generic STM32F103 board (blue pill) STLINK-V2 (STM32 programmer) Female-Female connectors All the above components can be bought from ebay for less than $10 total. The STLINK-V2 is optional since you can use any of USB-SERIAL converters like FT232, CP2102, PL2303, CH340 and the built-in UART bootloader of STM32 chip to program. So if you already have any of the above serial converters, you don't really need STLINK to program the STM32F103 microcontroller. But STLINK helps if you plan to use in circuit debugging functionalities. Software The

JTAG - Test Access Port (TAP)Controller based Xilinx FPGA configuration using Raspberry Pi

JTAG - Joint Test Action Group is an IEEE 1149.1 standard used in many silicon devices for programming and debugging purposes. Xilinx FPGAs support this JTAG protocol for their configuration. Here I have designed a JTAG FPGA bitstream programmer using Raspberry Pi which programs the bit file into FPGA in fraction of seconds!  JTAG physical bus has four lines: TMS (Test Mode Select) TDI (Test Data In) TDO (Test Data Out) TCK (Test Clock) Components Used:  Raspberry-Pi Xilinx Spartan 3E FPGA (XC3S250E in Papilio One) Jumper wires BLOCK DIAGRAM: TAP CONTROLLER: The TAP(Test Access Port) controller is a state machine inside the FPGA which changes it's state based on TMS input. For instance, let us assume that the state machine is in " Test-Logic-Reset " state. Now if I drive the TMS pin low and toggle the TCK pin, the state machine will go to " Run-Test/ Idle " state. This is how we move to different states.  Note