Sunday, December 23, 2012 - A cool indian electronics webstore

These guys are my new choice for electronic components and parts of all kinds.
Online Total Project Solutions,or OnlineTPS. 

They have an okay website,a good spread of components and hardware,speedy delivery and most important,a prompt and friendly customer service :)

Image credit

I ordered a Nokia 6610 LCD breakout board for a reasonable 65.Its something I have found on no other webshop.(double thumbsup to OnlineTPS!)

I'm eager to try this out with the LCD I bought sometime ago.I expect to receive it by Christmas day.

Monday, October 22, 2012

Crazy schedules!

This long period of inactivity is due to my really hectic academic schedule and other exciting projects I'm working on with faculty members at my university in a lot of diverse areas.Microelectronics,Wireless sensor network,internet connected smart devices and the usual tinkering and hobby electronics are what I've been doing these past few months.

I promise I'll try and get back to posting soon :)

Friday, September 21, 2012

Playing with a Nokia LCD

I bagged this Nokia LCD off the local mobile repair street,for just Rs.80.Its an old style 84x48 monochrome display with the PCD8544 controller( I think..).

I'll etch a breakout board and update this thread with my progress.Here are some pics till then:

3.5x2.5cm of graphic goodness!
These are going to be tricky to solder . . .

ENC28J60 - PSoC3 - Part 5 ICMP(ping)

So now that we know how packets will be actually sent(and received) with the ENC28J60,all we need to do now is build code on top of that,which creates and processes the packets to send(or receive).

We looked at ARP last time,so its Ping for this post.
The ping is the second most basic routine for any network device.You could say,that if a device replies to a Ping request,then its active.I wont go into the history and such,and will skip directly to the need-to-know stuff of things with implementing this.

So,why is Ping important to us,in this case? Well,its not really essential to our basic goal of an embedded webserver(or webclient).But,if youre building a network connected device,its convention that it should be able to answer to Pings(technically speaking,ICMP Echo Requests.) and ARP requests etc.Ping gives us an easy way to test if our chip is active on the network.

Our main focus then is to reply to ping requests.So,heres what a Ping Request might look like.

The layout of a ICMP packet

It will have an  Ethernet header(like ARP did.),then an IP(Internet protocol) header and the actual ICMP header part,(shown in pink above).

Heres what those structs look like for us.

Note that the IPhdr has an eth header inside it,so we'll use the '->' to access that level in the struct,since we'll be dealing with pointers to the structs.

We'll look into what we need to do to reply to a ping.So,when pinged from the connected computer(or any network equipment) our ENC28J60 should reply back.

What that means for us,is basically we'll get a packet in the ENC's buffer,in the above format.All we'll need to do is edit some fields,and we have a reply ready :-) So we dont really create the packet here,we just edit it.

So heres what we can start with,in our PingReply function

Swapping the MAC addresses is the first thing we need to do.We'll swap the IP Address fields in the IP header next.

The next important bit,is the checksum.I'll explain a little on how that works.Its basically a sum of the IP header taken in chunks of 16bits,and complemented.So,a series of 16 bit words,added up,and complemented(1s compliment) in the end.This is a very common function,and theres tons of documentation around this.I suggest you google that up.

With the checksum calculated,its ready to be sent :-)

So,when pinged,the PSoC will edit the packet it receives,and send it right back as a reply.Simple enough? It is.
Here, is our ENC28J60,and is my laptop.I know the ping times are high,but this isnt a bare ping application.Its doing a lot of other stuff,and clocked at only 24Mhz,so delay is expected.

Hooray! Its alive :-)

As usual,all the code is available on my github repo.Thats all for this post.