Saturday, 21 September 2013

Eink displays

Eink displays are paper like displays used in e-readers. The film used in Eink displays have a Electrophoretic or electronic ink as the optical component. Eink displays have a tiny microcapsules, which are of diameter of hair. These microcapsules have a large number of positively charged white particles and negatively charged black particles. These particles are suspended in a fluid, which upon applied electric field moves to the top of the display and are then visible. These Eink displays also support a digitizer (stylus) and capacitive touch solutions as like LCDs.

How is it different from normal LCDs?

Normal LCDS have a backlight which projects through the display on to our eyes. These Eink displays doen't have a backlight. they reflect the ambient light on to readers eyes there by enabling visibility. That is why Eink displays are also called reflective displays.

Advantages of Eink displays:

  • Low power consumption there by long battery life.
  • Ease on eyes when compared to colorful displays
  • Can retain image even when power is removed where as LCD has to be self refreshed almost 30 times per second to retain display
Disadvantages of Eink displays:
  • No color displays and just used for text display. Innovations happening still to add colours.
  • Absence of ambient light reduces redability. Amazon Paperwhite providing a solution to this by mounting 4 LEDs at the bottom.
  • Inability to display videos

Devices/Processors supporting Eink displays:

  • iMX6 dual Lite Processor
  • Amazon Kindle
  • Amazon Paperwhite
  • Sony, Motorola, Samsung also using the same technology for some of their devices
Innovations in using Eink displays:

A latest research by Intel combined with other universities, showed addition of secondary display to an Android phone using NFC technology. Android phone powered a NFC-WISP (Wireless identification and sensing platform) using NFC. The WISP has a 2.7" Eink display, with a 1mAh battery, 0.5MB FRAM and a wireless power harvester. The NFC-WISP was brought near Android phone and was powered using NFC interface taking advantage of inductive coupling.

Friday, 20 September 2013

What is this Graphic RAM Technology?

For a image to be viewed without any flicker, a specific frame rate need to be maintained. It means the processor has to resend the frame continuously to the screen at that rate. The terminology that describes such an action is panel self refresh. If you take modern systems, it is the GPU which handles this other than the main processor. Transmitting frames continuously may consume some power and this plays a crucial role in the performance of battery powered systems. LG in their latest smartphone, the G2 introduced graphic RAM technology. They claim that by introducing a local cache (in display circuitry), the GPU need not communicate with display. this is possible only in the case of a static display. Imagine you reading a ebook, watching a pic on your smartphone. This helps reduce power consumption because the GPU is not stressed for sometime. LG claims that 26% reduction in energy usage can be achieved with this new technology.

Wednesday, 18 September 2013

IR Blaster

The last time when one of my Television remote was not working, i had to search a lot in the market to find a remote from the same brand. I couldn't find one but had to do with the universal remote available in the market. So, universal remote is not new to us. But have you heard of using your phone as universal remote? This is what exactly IR Blaster do. IR blaster emulates a infrared remote control that can tune your tune as normal remote do. This IR blaster is bundled into app kind of which can be used to synch your phone to TV. Using this IR blaster you can control your DVD set, TV, Cable box and Home theater system. This IR Blaster kind of thing was present in initial NOKIA phones which didn't click. But with the latest smartphones like Galaxy S4, HTC ONE, HTC ONE Mini including this app, time to use it and replace your remote.

Friday, 13 September 2013

Wireless connectivity - Bluetooth


Important Points:
  • Bluetooth is a short range wireless communication device
  • Lower power consumption helps it's usage in Tablets/Mobiles
  • IEEE 802.15.1 standard
  • Uses frequency hopping spread spectrum to hop between 2400-2480MHz, in steps of 1MHz.
  • Bluetooth is a packet based protocol
  • Range up to 100m, range varies as per receiver sensitivity and geographical conditions
  • With increase in range, speed gets reduced
  • Created by Ericsson, Bluetooth has several versions and all of them are backward compatible
  • No need of Line-of-sight is the biggest advantage
  • Piconet: 1 master can communicate with 7 slaves in a piconet, all share master clock, slave can become a master also in communication process
  • Scatternet: Connection of more than one piconets
  • Operates in ISM band (2400-2480MHz)

Sunday, 1 September 2013

IPS display

Go through the specifications of latest mobiles and smartphones, you will frequently come across a term called IPS display. Everybody knows about TFT display and have heard long back about these and most of embedded people do tend to use this display in their regular projects. TFT (Thin-Film transistor) is nothing but a LCD display which has been in use from long time. TFT LCD use Active matrix LCD and Passive matrix LCD for display. There have been several disadvantages of these displays like:

1. Slow response time
2. Low quality color reproduction
3. Can see a ripple across screen when you touch
4. Viewing angle dependence.

To overcome above disadvantages, a new version of TFT has been developed and they called it IPS display (In-Plane switching). This was developed by Hitachi in 1990's. The main difference from the previous display versions is the arrangement of liquid crystals. In IPS display, liquid crystals move in plane (parallel) with the panel plane where as in previous versions they used to move at angles. This helped improve the viewing angles from the user point of view. The previous displays used TN field effect (Twisted Nuematic) and were using only 6-bit color where as IPS displays use 8-bit color. Apple used this IPS display in their IPAD and has been a biggest marketer for these kind of displays.

Did you anytime see a fast moving video in older version of displays? Sometimes you could see a ghost image because of inability of pixels to switch color briskly. This has been addressed in IPS displays and you won't find this lag in IPS displays.

The following are the improvements in this IPS displays compared to previous display technologies:

1. Faster response times (No ghosting effects)
2. Can view comfortable from wide angles. Almost from a parallel view also.
3. Excellent color quality
4. No ripple on the screen
5. Blur-free view of fast paced videos

But why doesn't we see these kind of displays in low end mobiles/tablets? The reasons for this are clear, it's a new technology and manufacturing (inturn panel costs) costs are high. Even from the power consumption point of view IPS consumes more.

Saturday, 3 August 2013

MBlaze 3G settings for ZEN A10 ULTRATAB

I bought a ZEN A10 Ultra tab. It does not support simcard, so, had to do with either external modem (2G or 3G) or a Wi-Fi. Had to browse a bit to find the correct settings. Here i have included the procedure for your reference.

For dongle to work, you have to set Access point names.Plug-in the dongle and do the following:

Go to settings->More->Mobile networks->click on Access point names. If your dongle is already connected it automatically configures MCC and MNC. Then change other parameters as following:

APN: #777
USERNAME: internet@internet.mtsindia.in
PASSWORD: MTS
APN TYPE: Leave this blank (don't set anything here)
NAME: MTS
PROXY: Leave this blank (don't set anything here)
PORT: Leave this blank (don't set anything here)
SERVER: Leave this blank (don't set anything here)
MMSC: Leave this blank (don't set anything here)
MMS PROXY: Leave this blank (don't set anything here)
MMS PORT: Leave this blank (don't set anything here)
AUTHENTICATION TYPE: PAP or CHAP
APN PROTOCOL: IPv4/IPv6
BEARER: unspecified

I also found this video, which helps how to go to APNs and set them:
www.youtube.com/watch?v=SH4L_aPZiBg

Some points to note:
1. This supports only CDMA (TATA/RELIANCE/MTS).
2. When you plug-in a dongle, it automatically configures MNC/MCC
3. Once you are done with settings, wait for sometime until a network connectivity symbol comes up on the right corner of your tablet. Once, it comes, you can browse.

The only mistake i did was, i have set everything correctly and started browsing instantly. Never waited for network connectivity symbol and was disappointed buying this product. But once it got connected, i am feeling ZEN A10 ULTRA TAB is one of the good tablets in markets. Even battery backup seems good. They specify a power cycle and i followed it, and now i get a 2.30 hours back up even though i use it continuously.

Working startup.s file for LPC2148

Recently, i was working on LPC2148 development board and was in need of startup file. I tried to include the file which keil environment generates automatically and it never worked. Had to browse a lot to find a working file. Here i am putting in the blog for your quick reference. Hope, it helps someone there!!! Copy from the first line till end and paste it in your startup.s file.

;/*
; *  The STARTUP.S code is executed after CPU Reset. This file may be
; *  translated with the following SET symbols. In uVision these SET
; *  symbols are entered under Options - ASM - Define.
; *
; *  REMAP: when set the startup code initializes the register MEMMAP
; *  which overwrites the settings of the CPU configuration pins. The
; *  startup and interrupt vectors are remapped from:
; *     0x00000000  default setting (not remapped)
; *     0x80000000  when EXTMEM_MODE is used
; *     0x40000000  when RAM_MODE is used
; *
; *  EXTMEM_MODE: when set the device is configured for code execution
; *  from external memory starting at address 0x80000000.
; *
; *  RAM_MODE: when set the device is configured for code execution
; *  from on-chip RAM starting at address 0x40000000.
; */


; Standard definitions of Mode bits and Interrupt (I & F) flags in PSRs

Mode_USR        EQU     0x10
Mode_FIQ        EQU     0x11
Mode_IRQ        EQU     0x12
Mode_SVC        EQU     0x13
Mode_ABT        EQU     0x17
Mode_UND        EQU     0x1B
Mode_SYS        EQU     0x1F

I_Bit           EQU     0x80            ; when I bit is set, IRQ is disabled
F_Bit           EQU     0x40            ; when F bit is set, FIQ is disabled


;// <h> Stack Configuration (Stack Sizes in Bytes)
;//   <o0> Undefined Mode      <0x0-0xFFFFFFFF:8>
;//   <o1> Supervisor Mode     <0x0-0xFFFFFFFF:8>
;//   <o2> Abort Mode          <0x0-0xFFFFFFFF:8>
;//   <o3> Fast Interrupt Mode <0x0-0xFFFFFFFF:8>
;//   <o4> Interrupt Mode      <0x0-0xFFFFFFFF:8>
;//   <o5> User/System Mode    <0x0-0xFFFFFFFF:8>
;// </h>

UND_Stack_Size  EQU     0x00000000
SVC_Stack_Size  EQU     0x00000008
ABT_Stack_Size  EQU     0x00000000
FIQ_Stack_Size  EQU     0x00000000
IRQ_Stack_Size  EQU     0x00000080
USR_Stack_Size  EQU     0x00000400

Stack_Size      EQU     (UND_Stack_Size + SVC_Stack_Size + ABT_Stack_Size + \
                         FIQ_Stack_Size + IRQ_Stack_Size + USR_Stack_Size)

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size

Stack_Top       EQU     Stack_Mem + Stack_Size


;// <h> Heap Configuration
;//   <o>  Heap Size (in Bytes) <0x0-0xFFFFFFFF>
;// </h>

Heap_Size       EQU     0x00000000

                AREA    HEAP, NOINIT, READWRITE, ALIGN=3
Heap_Mem        SPACE   Heap_Size


; VPBDIV definitions
VPBDIV          EQU     0xE01FC100      ; VPBDIV Address

;// <e> VPBDIV Setup
;// <i> Peripheral Bus Clock Rate
;//   <o1.0..1>   VPBDIV: VPB Clock
;//               <0=> VPB Clock = CPU Clock / 4
;//               <1=> VPB Clock = CPU Clock
;//               <2=> VPB Clock = CPU Clock / 2
;//   <o1.4..5>   XCLKDIV: XCLK Pin
;//               <0=> XCLK Pin = CPU Clock / 4
;//               <1=> XCLK Pin = CPU Clock
;//               <2=> XCLK Pin = CPU Clock / 2
;// </e>
VPBDIV_SETUP    EQU     1
VPBDIV_Val      EQU     0x00000011


; Phase Locked Loop (PLL) definitions
PLL_BASE        EQU     0xE01FC080      ; PLL Base Address
PLLCON_OFS      EQU     0x00            ; PLL Control Offset
PLLCFG_OFS      EQU     0x04            ; PLL Configuration Offset
PLLSTAT_OFS     EQU     0x08            ; PLL Status Offset
PLLFEED_OFS     EQU     0x0C            ; PLL Feed Offset
PLLCON_PLLE     EQU     (1<<0)          ; PLL Enable
PLLCON_PLLC     EQU     (1<<1)          ; PLL Connect
PLLCFG_MSEL     EQU     (0x1F<<0)       ; PLL Multiplier
PLLCFG_PSEL     EQU     (0x03<<5)       ; PLL Divider
PLLSTAT_PLOCK   EQU     (1<<10)         ; PLL Lock Status

;// <e> PLL Setup
;//   <o1.0..4>   MSEL: PLL Multiplier Selection
;//               <1-32><#-1>
;//               <i> M Value
;//   <o1.5..6>   PSEL: PLL Divider Selection
;//               <0=> 1   <1=> 2   <2=> 4   <3=> 8
;//               <i> P Value
;// </e>
PLL_SETUP       EQU     1
PLLCFG_Val      EQU     0x00000024


; Memory Accelerator Module (MAM) definitions
MAM_BASE        EQU     0xE01FC000      ; MAM Base Address
MAMCR_OFS       EQU     0x00            ; MAM Control Offset
MAMTIM_OFS      EQU     0x04            ; MAM Timing Offset

;// <e> MAM Setup
;//   <o1.0..1>   MAM Control
;//               <0=> Disabled
;//               <1=> Partially Enabled
;//               <2=> Fully Enabled
;//               <i> Mode
;//   <o2.0..2>   MAM Timing
;//               <0=> Reserved  <1=> 1   <2=> 2   <3=> 3
;//               <4=> 4         <5=> 5   <6=> 6   <7=> 7
;//               <i> Fetch Cycles
;// </e>
MAM_SETUP       EQU     1
MAMCR_Val       EQU     0x00000002
MAMTIM_Val      EQU     0x00000004


; External Memory Controller (EMC) definitions
EMC_BASE        EQU     0xFFE00000      ; EMC Base Address
BCFG0_OFS       EQU     0x00            ; BCFG0 Offset
BCFG1_OFS       EQU     0x04            ; BCFG1 Offset
BCFG2_OFS       EQU     0x08            ; BCFG2 Offset
BCFG3_OFS       EQU     0x0C            ; BCFG3 Offset

;// <e> External Memory Controller (EMC)
EMC_SETUP       EQU     0

;//   <e> Bank Configuration 0 (BCFG0)
;//     <o1.0..3>   IDCY: Idle Cycles <0-15>
;//     <o1.5..9>   WST1: Wait States 1 <0-31>
;//     <o1.11..15> WST2: Wait States 2 <0-31>
;//     <o1.10>     RBLE: Read Byte Lane Enable
;//     <o1.26>     WP: Write Protect
;//     <o1.27>     BM: Burst ROM
;//     <o1.28..29> MW: Memory Width  <0=>  8-bit  <1=> 16-bit
;//                                   <2=> 32-bit  <3=> Reserved
;//   </e>
BCFG0_SETUP EQU         0
BCFG0_Val   EQU         0x0000FBEF

;//   <e> Bank Configuration 1 (BCFG1)
;//     <o1.0..3>   IDCY: Idle Cycles <0-15>
;//     <o1.5..9>   WST1: Wait States 1 <0-31>
;//     <o1.11..15> WST2: Wait States 2 <0-31>
;//     <o1.10>     RBLE: Read Byte Lane Enable
;//     <o1.26>     WP: Write Protect
;//     <o1.27>     BM: Burst ROM
;//     <o1.28..29> MW: Memory Width  <0=>  8-bit  <1=> 16-bit
;//                                   <2=> 32-bit  <3=> Reserved
;//   </e>
BCFG1_SETUP EQU         0
BCFG1_Val   EQU         0x0000FBEF

;//   <e> Bank Configuration 2 (BCFG2)
;//     <o1.0..3>   IDCY: Idle Cycles <0-15>
;//     <o1.5..9>   WST1: Wait States 1 <0-31>
;//     <o1.11..15> WST2: Wait States 2 <0-31>
;//     <o1.10>     RBLE: Read Byte Lane Enable
;//     <o1.26>     WP: Write Protect
;//     <o1.27>     BM: Burst ROM
;//     <o1.28..29> MW: Memory Width  <0=>  8-bit  <1=> 16-bit
;//                                   <2=> 32-bit  <3=> Reserved
;//   </e>
BCFG2_SETUP EQU         0
BCFG2_Val   EQU         0x0000FBEF

;//   <e> Bank Configuration 3 (BCFG3)
;//     <o1.0..3>   IDCY: Idle Cycles <0-15>
;//     <o1.5..9>   WST1: Wait States 1 <0-31>
;//     <o1.11..15> WST2: Wait States 2 <0-31>
;//     <o1.10>     RBLE: Read Byte Lane Enable
;//     <o1.26>     WP: Write Protect
;//     <o1.27>     BM: Burst ROM
;//     <o1.28..29> MW: Memory Width  <0=>  8-bit  <1=> 16-bit
;//                                   <2=> 32-bit  <3=> Reserved
;//   </e>
BCFG3_SETUP EQU         0
BCFG3_Val   EQU         0x0000FBEF

;// </e> End of EMC


; External Memory Pins definitions
PINSEL2         EQU     0xE002C014      ; PINSEL2 Address
PINSEL2_Val     EQU     0x0E6149E4      ; CS0..3, OE, WE, BLS0..3,
                                        ; D0..31, A2..23, JTAG Pins


                PRESERVE8
             

; Area Definition and Entry Point
;  Startup Code must be linked first at Address at which it expects to run.

                AREA    RESET, CODE, READONLY
                ARM


; Exception Vectors
;  Mapped to Address 0.
;  Absolute addressing mode must be used.
;  Dummy Handlers are implemented as infinite loops which can be modified.

Vectors         LDR     PC, Reset_Addr      
                LDR     PC, Undef_Addr
                LDR     PC, SWI_Addr
                LDR     PC, PAbt_Addr
                LDR     PC, DAbt_Addr
                NOP                            ; Reserved Vector
;               LDR     PC, IRQ_Addr
                LDR     PC, [PC, #-0x0FF0]     ; Vector from VicVectAddr
                LDR     PC, FIQ_Addr

Reset_Addr      DCD     Reset_Handler
Undef_Addr      DCD     Undef_Handler
SWI_Addr        DCD     SWI_Handler
PAbt_Addr       DCD     PAbt_Handler
DAbt_Addr       DCD     DAbt_Handler
                DCD     0                      ; Reserved Address
IRQ_Addr        DCD     IRQ_Handler
FIQ_Addr        DCD     FIQ_Handler

Undef_Handler   B       Undef_Handler
SWI_Handler     B       SWI_Handler
PAbt_Handler    B       PAbt_Handler
DAbt_Handler    B       DAbt_Handler
IRQ_Handler     B       IRQ_Handler
FIQ_Handler     B       FIQ_Handler


; Reset Handler

                EXPORT  Reset_Handler
Reset_Handler


; Setup External Memory Pins
                IF      :DEF:EXTERNAL_MODE
                LDR     R0, =PINSEL2
                LDR     R1, =PINSEL2_Val
                STR     R1, [R0]
                ENDIF


; Setup External Memory Controller
                IF      EMC_SETUP <> 0
                LDR     R0, =EMC_BASE

                IF      BCFG0_SETUP <> 0
                LDR     R1, =BCFG0_Val
                STR     R1, [R0, #BCFG0_OFS]
                ENDIF

                IF      BCFG1_SETUP <> 0
                LDR     R1, =BCFG1_Val
                STR     R1, [R0, #BCFG1_OFS]
                ENDIF

                IF      BCFG2_SETUP <> 0
                LDR     R1, =BCFG2_Val
                STR     R1, [R0, #BCFG2_OFS]
                ENDIF

                IF      BCFG3_SETUP <> 0
                LDR     R1, =BCFG3_Val
                STR     R1, [R0, #BCFG3_OFS]
                ENDIF

                ENDIF   ; EMC_SETUP


; Setup VPBDIV
                IF      VPBDIV_SETUP <> 0
                LDR     R0, =VPBDIV
                LDR     R1, =VPBDIV_Val
                STR     R1, [R0]
                ENDIF


; Setup PLL
                IF      PLL_SETUP <> 0
                LDR     R0, =PLL_BASE
                MOV     R1, #0xAA
                MOV     R2, #0x55

;  Configure and Enable PLL
                MOV     R3, #PLLCFG_Val
                STR     R3, [R0, #PLLCFG_OFS]
                MOV     R3, #PLLCON_PLLE
                STR     R3, [R0, #PLLCON_OFS]
                STR     R1, [R0, #PLLFEED_OFS]
                STR     R2, [R0, #PLLFEED_OFS]

;  Wait until PLL Locked
PLL_Loop        LDR     R3, [R0, #PLLSTAT_OFS]
                ANDS    R3, R3, #PLLSTAT_PLOCK
                BEQ     PLL_Loop

;  Switch to PLL Clock
                MOV     R3, #(PLLCON_PLLE:OR:PLLCON_PLLC)
                STR     R3, [R0, #PLLCON_OFS]
                STR     R1, [R0, #PLLFEED_OFS]
                STR     R2, [R0, #PLLFEED_OFS]
                ENDIF   ; PLL_SETUP


; Setup MAM
                IF      MAM_SETUP <> 0
                LDR     R0, =MAM_BASE
                MOV     R1, #MAMTIM_Val
                STR     R1, [R0, #MAMTIM_OFS]
                MOV     R1, #MAMCR_Val
                STR     R1, [R0, #MAMCR_OFS]
                ENDIF   ; MAM_SETUP


; Memory Mapping (when Interrupt Vectors are in RAM)
MEMMAP          EQU     0xE01FC040      ; Memory Mapping Control
                IF      :DEF:REMAP
                LDR     R0, =MEMMAP
                IF      :DEF:EXTMEM_MODE
                MOV     R1, #3
                ELIF    :DEF:RAM_MODE
                MOV     R1, #2
                ELSE
                MOV     R1, #1
                ENDIF
                STR     R1, [R0]
                ENDIF


; Initialise Interrupt System
;  ...


; Setup Stack for each mode

                LDR     R0, =Stack_Top

;  Enter Undefined Instruction Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_UND:OR:I_Bit:OR:F_Bit
                MOV     SP, R0
                SUB     R0, R0, #UND_Stack_Size

;  Enter Abort Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_ABT:OR:I_Bit:OR:F_Bit
                MOV     SP, R0
                SUB     R0, R0, #ABT_Stack_Size

;  Enter FIQ Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_FIQ:OR:I_Bit:OR:F_Bit
                MOV     SP, R0
                SUB     R0, R0, #FIQ_Stack_Size

;  Enter IRQ Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_IRQ:OR:I_Bit:OR:F_Bit
                MOV     SP, R0
                SUB     R0, R0, #IRQ_Stack_Size

;  Enter Supervisor Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_SVC:OR:I_Bit:OR:F_Bit
                MOV     SP, R0
                SUB     R0, R0, #SVC_Stack_Size

;  Enter User Mode and set its Stack Pointer
                MSR     CPSR_c, #Mode_USR
                MOV     SP, R0
                SUB     SL, SP, #USR_Stack_Size


; Enter the C code

                IMPORT  __main
                LDR     R0, =__main
                BX      R0


; User Initial Stack & Heap
                AREA    |.text|, CODE, READONLY

                IMPORT  __use_two_region_memory
                EXPORT  __user_initial_stackheap
__user_initial_stackheap

                LDR     R0, =  Heap_Mem
                LDR     R1, =(Stack_Mem + USR_Stack_Size)
                LDR     R2, = (Heap_Mem +      Heap_Size)
                LDR     R3, = Stack_Mem
                BX      LR


                END