Tuesday, June 29, 2010

How to enable USB to SERIAL port(FT232R) in linux....


I am currently developing a robot. This robot has to be controlled using wireless module zigbee. I am using usb to serial converter chip FT232R for this purpose. It is easy to configure this device in windows based platform...you have to just download respective driver from this website..http://www.ftdichip.com/Drivers/VCP.htm but when it comes to Linux it is quite troublesome task. After going through so many website I found one easy way of doing this.


steps

1) First plug the device in usb port and type "dmesg" in terminal...u will see lot of stuff but don't worry..just dump the output in a file.. $ dmesg > out and see the out file..u will find a line like

usb 3-1.3: new full speed USB device using uhci_hcd and address 5

this means device has recognised by system.
2) "unplug" the device and type "lsusb" command... output will look like this

Bus 003 Device 003: ID 413c:8161 Dell Computer Corp.
Bus 003 Device 002: ID 0a5c:4500 Broadcom Corp. BCM2046B1 USB 2.0 Hub (part of BCM2046 Bluetooth)
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 0c45:63ee Microdia

then "plug" the device again and type "lsusb" again in terminal and see the output...u will see one additional line is there...

Bus 003 Device 003: ID 413c:8161 Dell Computer Corp.
Bus 003 Device 002: ID 0a5c:4500 Broadcom Corp. BCM2046B1 USB 2.0 Hub (part of BCM2046 Bluetooth)
Bus 003 Device 002: ID 4313:6001 FTDI 232r usb to serial....
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 004: ID 0c45:63ee Microdia

In this line 4313 is vendor id and 6001 is product id. just type following line in terminal

sudo modprobe usbserial vendor=0x4313 product=0x6001

type "dmesg" again and u will see something like this in last line of output..

usbserial_generic 3-1:3.0: generic converter detected
usb 3-1: generic converter now attached to ttyUSB0
usbcore: registered new interface driver usbserial

3) type this on terminal:- sudo gedit /etc/modules and add line "usbserial vendor=0x4313 product=0x6001" without quotes.
this will enable linux to automatically detect device...

4) Verification:
type "cd /dev" in terminal and check output...u will find ttyUSB0 there..means u r done...

cheers........

Saturday, March 13, 2010

How to restore Grub in Ubuntu

Boot up your live CD
In the desktop, open terminal (Applications -> Accessories -> Terminal).

sudo grub

This will set it to grub mode

find /boot/grub/stage1

This will locate your boot partition. If you already know the location, you can ignore this step.

root (hd0,0)

Replace the (hd0,0) by your boot partition number. If your Ubuntu is installed in the second partition, then change it to (hd0,1)

setup (hd0)
quit

Reboot your system. You should be able to access the Grub bootloader now.

Thursday, March 11, 2010

Important keywords about functional programming

Pure function:
A function is said to be pure if a function produces the same result when evaluating with same argument(s). Function result should not depend on hidden values or state that may change the result of program. We can say that a pure function depends only on its argument(s). Example Sin(x), Sizeof()...etc

Reactive Systems:
Reactive systems are systems whose role is to maintain an ongoing interaction with their environment at specified rate rather than produce some final value upon termination." Usually all embedded systems and industrial "Real time" systems are reactive in nature. The main feature of these systems are:
  • They involve concurrency.
  • They are usually deterministic.
  • They are generally made of both H/W and S/W.

Referential Transparency:
Referential transparency, a term commonly used in functional programming, means that a function/method invocation can be replaces by its return value without changing algorithm or program semantics. Ex F(x)=x +1 in this function for a given value of x say 5, it can be replaced by 6 easily. This can only be true when
  • function simply compute a value.
  • function is independent of temporal context and has no side effect.
The main advantage of referential transparency is that it makes it much easier to reason about programs, and to apply program transformations... including optimizations and partial evaluations at compile-time (since if a computation has no side-effects, then it doesn't matter whether you calculate it now or later).

Referential Opaqueness:
This concept is just opposite of referential transparent. Functions can't be replaced by their value because they depend on external things. For example if a function getinput() is reading from a file or keyboard then it's output can not be predict because file can be changed or user can enter any char/word/sentence.
Another example is
int a= 10; //global variable
func(int x)
{
return x+a;
}
ny
This function will not always add 10 to given value of x because as a is global it can be changed by other function or assignment.

Why Functional Programming is Important

Functional programming is very important aspect in programming. It is a new way of thinking. This programming style promotes modularity, reusability, and one of the more important aspect readability. Programs are small in this style of programming like for a given problem if we write a program in any imperative language (C, C++, java) then same program in functional languages( Haskell, Erlang) can be written in 1/5 LOC. Some important points are:
  • We focus on What to do rather than how to do.
  • Program looks like a mathematical expression