Showing posts with label 8051. Show all posts
Showing posts with label 8051. Show all posts

Tuesday, April 21, 2015

Placement oriented Embedded System Design course for freshers - BE/ME/MCA

Announcing first batch in 2015 of Placement-oriented Advanced Embedded Systems Design course (C, Embedded C, ARM, Embedded Networking & RTOS) for BE/ME/MCA graduates looking for embedded systems jobs. Batches will be held in our Chennai institute.
This course is designed for those who want to learn Embedded Systems from basics and then learn advanced topics like ARM microcontorller, Embedded Networking and Real-time Operating Systems (RTOS), which are in great demand from the recruiters in Embedded Systems domain.
Course covers basic and advanced C, Data structures, Embedded C, 8051 & ARM microcontrollers, Embedded Networking and RTOS.
Classes start in a week's time. Please contact us for more details, including fees. Email - info@nxnvision.com or call +91-98407-84107.


 Embedded Systems Design Course - ARM, Embedded C, Embedded Networking and RTOS



Syllabus                                                                                                    

Total duration                                                                                                                          

150 hours of lectures and practicals/hands-on. This will be completed in approximately 3 months. Several mini-project will be undertaken by the trainee based on the learnings of this course. The trainee would be encouraged to design the projects before implementing.

This training will make you eligible for placement in Embedded System domain companies as Software/Firmware Developer. Placement opportunities will be provided for those who complete this course successfully. 


Course Instructor                                                                                                                  

Rupam Das. Ex-IITian and having total professional experience of over 16 years in Software Development and Training. For more details on trainer, visit http://www.rupamdas.com and http://www.linkedin.com/in/rupamdas

Contact                                                                                                                                   

Email: info@nxnvision.com, info@rupamdas.com

Mobile: +91 98407 84107, Landline: + 91-44-4204-5217

Introduction                                                                                                                            

This training program has been designed to provide a thorough understanding of Embedded Systems basics and principles using 8051 based 8-bit microcontrollers and then teach advanced Embedded Systems using ARM Microcontrollers. This course also covers Embedded Networking protocols (like SPI, CAN, I2C and USB) and RTOS. It tackles all the basic components of Embedded Systems in isolation and also creates an understanding on how to integrate these components, to design, program and develop a complete system. The knowledge imparted in this training will help you in getting a job in Embedded Systems domain. 

This training contains coverage of technical knowledge that would provide a definite edge in core sector job interviews. The level of C programming taught in this course is at par with what fresh engineers work on, after joining their first job.

All the modules have ample hands-on and lab sessions, with more tutorials provided for further study. Each topic in this course will be matched with real-time experiments on the hardware kits. The course will end with a project that would be conceptualized, designed, implemented and tested by the trainees, with full guidance and support from the faculty.

Target audience for the program                                                                                           

This program is targeted at BE/ME/MCA freshers who have finished in 2015 or earlier and interested in making a career in Embedded Systems domain, a very in-demand and well paying domain.

Prerequisites/Knowledge required to attend this program

- Exposure to programming, in any language
- C programming - basic level 
- Basics of Digital Electronics
- Excellent analytical skils


Areas to be covered in this program                                                                                    

Stage I
- C Foundations - Refresher
- Introduction to Embedded Systems
- 8051 Architecture and C51 Assembly Language Programming
- NXP P89V51RD2 microcontroller and its advanced features w.r.t. normal 8051 microcontroller
- Embedded C for 8051
- Design of Embedded Systems using 8051 

Stage 2
- C Programming - Advance level
- ARM Cortex M3 - Architecture and Assembly Language Introduction
- NXP LPC1768 microcontroller based on ARM Cortex M3
- Embedded C for NXP LPC1768   
- Design of Embedded Systems using NXP LPC1768  
- Embedded Communication and Networking protocols - I2C, SPI, CAN, USB
- Operating Systems & Real-Time Operating Systems - Linux, FreeRTOS


Stage 1 - Content                                                                                                                    

C Foundations - Refresher
Foundations of C programming - Header files, Libraries, Compilers
Types, declarations and expressions
Control Flow, Functions and program structure
Arrays, pointers, structures and unions
Input and output handling

Introduction to Embedded Systems
What is Embedded System?
Standard component of Embedded Systems - Processor, Memory, I/O, Peripherals, Software, Algorithms
Processor types - Microcontrollers, Microprocessors, DSP, FPGA
Memory types - RAM, SRAM, DRAM, DDRAM, EPROM, EEPROM, OTP
Peripherals - Parallel and Serial Ports, UART, Timers, Real time clocks, I2C bus, DMA controllers
Analogue Interfaces - A-D and D-A conversion, CODECs
Interrupts and Interrupt handling
Real-Time Operating Systems (RTOS) - Introduction and basics

8051 Architecture and C51 Assembly Language Programming
8051 Architecture - Oscillator, Clock, Internal memory and RAM, SFRs, Internal ROM, I/O pins and ports
External memory, Counters and Timers, Serial Data I/O, Interrupts
Assembly language instructions
Data operations, logical operations, arithemetic operations, Program control
Configuration and programming of 8051 Ports, Timers and Interrupts
Interfacing 8051 with LEDs and 7-Segment Display and programming
Interfacing with LCD and programming
Serial Data Communication programming

Embedded C
Embedded Software development using C
Porting 8051 Assembly code to C
Cross compilation, Downloading, Testing, Debugging

Design of Embedded Systems
Problem definition, requirements and specifications
Software planning - Hardware design and software design
Design of sensor-based robots, PWM control of motors, Digital Thermometer
Project ideas and discussion

Stage 2 - Content                                                                                                                     

Advanced C (GCC C Compiler on Windows)
Pointers refresher
Dynamic memory management
Pointers to structures and unions
Design of data structures
Function pointers and arrays
Look-up tables, Hash tables
Stack, queue, list

ARM Cortex M3/M4 microcontroller (Architecture, Assembly and Embedded C)"
ARM Architecture - 16-bit (Thumb mode) and 32-bit (ARM mode), core registers
ARM Assembly Instructions
Keil MDK - IDE, features, 
NXP LPC1768   - System initialization, booting, internal peripherals
Developing device drivers for NXP LPC1768 peripherals and also external peripherals
Writing Embedded applications for NXP LPC1768  
JTAG and debugging applications using JTAG

Embedded Communication & Networking Protocols/Standards
Requirement of communication and communication protocols
Serial and parallel communication
Introduction to RS-232, SPI, I2C and USB protocols, including packet/frame formats & message protocols
Design and Implementation of I2C and SPI driver and applications
Design and Implementation of USB Device. Ex. Mouse, Keyboard, Mass storage

Operating Systems and Real-Time Operating Systems
Operating Systems - Basics and concepts
Linux Systems Programming - An introduction
Introduction to Real-Time Operating Systems
FreeRTOS - Basics, features, writing Real-Time applications using FreeRTOS
Porting FreeRTOS to  NXP LPC1768 

Friday, June 13, 2014

Next batch of Robotics and Embedded System Design course

Next weekend batch of Foundations of Robotics and Embedded System Design (FRESD) training course is scheduled to start on 14th June 2014.

WEEKEND ONLY CLASSES.

Every participant gets a FREE 8051 Microcontroller based hardware kit worth Rs. 2000.

Details of the hardware kit - https://www.facebook.com/photo.php?fbid=132852420257620&set=pb.132826486926880.-2207520000.1392640434.&type=3&theater

Syllabus link - http://rupamdas.com/EmbeddedSystems-8051-2013.htm

Contact us for more details on fees and registration @ +91-98407-84107. You can also email us at info@nxnvision.com.

Hurry up as classes start on 14th June.



Monday, February 17, 2014

Announcing next batch for Foundations of Embedded System Design course

I am starting a new batch for Embedded Systems Design training. It will start in March 2014. This is going to be weekend-only batch.


The syllabus includes C refresher, 8051 microcontroller architecture, Assembly programming and Embedded C programming. Interfacing 8051 with LEDs, 7-segment LEDs, LCD, DC Motor, and ADC will be covered. The program ends with a mini-project that will be designed and implemented completely by the trainees with my guidance. Stress in the entire training would be on the trainees learning to do everything on their own, instead of running existing codes.

Course fees is Rs. 15000/person, inclusive of a 8051 Microcontroller based development board worth Rs. 2000. Details of the hardware kit

Training content and syllabus is available - http://rupamdas.com/docs/EmbeddedSystems-8051-2011.pdf

More details can be found on my webpage, http://rupamdas.com/student-training.html

Follow us on Facebook @NxNVision Solutions

Friday, July 5, 2013

Mini Project: ZigBee based Wireless Temperature Sensor + Data Logger


Posting after a long long time. Hopefully this time the gaps will be lesser.

I had to give a guest lecture to 3rd and final year students of EEE stream in MNM Jain Engineering College on July 3, 2013. Normally I just give a lecture and share my thoughts about Embedded Systems. This time I wanted to show them a demo of a project that evolves from a simple idea to a standalone product, or even a system. 

So I decided to take the example of Digital Thermometer based on 8051, which is a simple project for beginners to Embedded System development.

A small project on converting a simple digital thermometer into a wireless temperature sensor node. The temperature sensor is converted into a wireless node by interfacing the MCU's UART to a ZigBee node. The companion ZigBee node is connected to an ARM Cortex M3 based board's UART that receives the temperature data and sends it to the data logger (the laptop here) through another UART port

Here's the demo video of the Wireless Temperature Sensor


This is just a proof of concept. Adding more wireless nodes with additional features can convert this into a wireless network to manage a building or factory or such large areas.

Slides of my lecture on the project prototype are here:

















If you have any questions or queries, do contact me on my email.

Friday, May 18, 2012

Summer Trainings - Embedded Systems and Linux

I am planning to offer summer training on the following topics in June-July 2012. 

Each training program will end with a mini-project and best projects in a given batch will be showcased in my website.

Certificate of participation will be provided to all those who complete the training successfully

Placement assistance would be provided to those who do exceptionally well in the training and mini-project.

Foundation of Embedded Systems 
Topics - C refresher, Embedded Systems, 8051 Architecture, Assembly and Embedded C, Design of Embedded Systems (50 hours)
Pre-requisites - Any programming language and Digital Design basics

Advanced Embedded Systems
Topics - Basic and advanced C, Embedded Systems, OS & RTOS basics, ARM7 Assembly and Embedded C, FreeRTOS (90 hours)
Pre-requisites - C, Embedded System Basics, Data structures and Digital Design basics

Linux Systems Programming
Topics -  Linux basics, Shell programming, C application development on Linux, System programming, Socket programming (120 hours)
Pre-requisites - C, Data structures and Digital Design basics

Multiple batches will be there, so you can prefer for morning or evening classes.
Small batches for a better learning and understanding for everyone. 

Limited persons per batch so register soon. Call: +91 98402 61709. Email: mailrupam@gmail.com.

Friday, September 23, 2011

Embedded Systems - How to learn?

This is a very common question that I am asked every time I speak to engineering college students. It is a valid question because there is too much confusion regarding what is Embedded Systems.

From what I understand of Embedded Systems, it is an area of application of principles and learning from several disciplines across multiple streams of engineering disciplines. There are disciplines from Computer Science and Engineering, Electrical Engineering, Electronics & Communication Engineering and Mechanical Engineering. But the thing to remember is that it is mostly an "application" of knowledge from multiple streams. See the figure below.



Fig. 1

If you are writing an application for your desktop/laptop/hand-held/server, mostly you would worry about interfacing your application with the OS running on the target system and then design and development. That would entail good knowledge of algorithms, data structures and programming languages. In case its a UI-based application, then knowledge of front-end/UI design and development is needed. Again this has got more to do with knowledge of programming languages, data structures, algorithms and SDKs.

Now, if you were designing a stand-alone device using a microcontroller, you would need to know hardware design in addition to software design. You would need to understand the architecture of the microcontroller and various features it has. How much power it needs (voltage and current), what interfaces it provides, how to connect it to other peripherals, how to access the connected peripherals and many more questions like these. Only when all these hardware design questions have been resolved, then only one can think of the software design.

In fact, a lot of effort goes into decision making about hardware and software depending on the application of the device being developed. If you want to make a line-following robot, then you have to know how to sense where the line is and how to move the wheels of the robot. Definitely the software would decide on the logic based on which the line will be sensed and accordingly how to move the wheels. But you need to know "how to sense" the line and how to control the speed and rotation of the wheels of the robot. Wheels would need motors to move them, so what motor would be used? Depending on what type of motor, you would need the control system for the motor. Only when you have the controlling system of the motor in place, you can think of writing the logic to control the motors and implement it.

Similarly, the "line sensing" would be implemented using some sensor. If its a sensor that gives digital output, then interfacing should not be an issue. But if its a analog sensor, then it has to be connected to an ADC which then would be connected to the microcontroller. So, now the software application has to read data from the sensor through the ADC. This means that your application should be capable of configuring and then reading from the ADC at regular intervals. Also the sampled data from the ADC now has to be converted into actual data using some correlation logic.

If a peripheral connected to the microcontroller is on a standard protocol, then knowledge of that protocol is also necessary. Standard protocols RS232, SPI, I2C, CAN, Ethernet, Bluetooth, ZigBee and WiFi are quite popular. This means that Communication and Networking protocols knowledge is required for design and developing such devices.

Different kind of devices would need different kind of knowledge. Here's a brief list of some devices and the domain knowledge that would be required to design and develop such devices:

Portable Media player - Audio/Video/Image processing algorithms, CODECs, ADC/DAC, Sound/Image/Video formats (MPEG1, MPEG4, AAC, WAV, JPEG, GIF, TIFF and more), File storage protocols

Robots - Control systems (feedback systems), ADC/DAC, DC and Servo Motor control, Audio/Video/Image processing algorithms, Sensors and Transducers

Automotive systems - Control systems (feedback systems), ADC/DAC, DC and Servo Motor control, Sensors and Transducers

The above list is just for illustration. The actual devices can be much more complicated and hence may require more knowledge that what I have mentioned here. For example, a self-driving car's system would be much more complicated than a normal passenger driven car. In fact, a self-driven car would be a mix of robotics and automotive systems.

To conclude do note that Embedded Systems are highly application centric. Each application and its required solution will decide how powerful or feature loaded the final result is. There is no single and generic solution for all problems in Embedded Systems.

Thursday, January 7, 2010

My very own Linux ISP Programmer software!!

Last evening I was successful in flash programming a NXP P89V51RD2 microcontroller using an ISP Download software that I have written in C. It runs over a standard Serial port, without any extra hardware in between. It is very basic, like it erases only 1st two sectors of the block 0 of the flash and sometimes it gets stuck after getting into the ISP mode. But it WORKS (mostly)!!!

This was a result of about 5 days of serious but part-time programming effort. Having worked on Flash programming tools long back, it was much easier that what I had imagined it to be. In fact, the first assignment (at my first job) in Midas, I had to fix bugs in a software that created various formats of HEX files, like Intel and Motorola S formats. Incidentally Keil generate Intel HEX format. So, familiarity breeds quicker software development.

My primary motivation behind doing this software was to enable a student trainee of mine to work on Linux desktop for compilation and downloading of HEX files into the 8051 hardware kit she has to work on. She has a PIII system and its not too friendly with Windows XP (not sure why and didn't debug it too much). I decided that she should not spend any money (and big money) to buy a new PC only because FlashMagic is not available in Linux version.

But now I realize that this could also help lots of other 8051 learners and programmers who have only Linux PCs or wish that if the entire 8051 development cycle could be done on Linux desktops.

Today, we have the ASEM-51 Macro Assembler for assembling MCS-51 assembly code, an Open Source initiative. We also have Small Device C Compiler project that provides Open Source C cross compilers for several microcontroller architectures, including 8051, PIC 14 and PIC16. We also have MCU 8051 IDE, an integrated development enviroment for microcontrollers based on 8051, that supports assembly and C programming. So, the only software missing in the chain of fully Linux based software development (at least for NXP P89V51Rx2 series) was the ISP Download software. So, I decided to take up this as a personal initiative to provide this link in the chain. I am still wondering how the world missed out on creating such a product for Linux based developers.

My project will be open sourced soon. It still needs some work to convert into a generic and bug-free software. Also I need to add some features like reading the Device ID and Manufacturer ID. I have to try with the other microcontrollers in the P89V51 series. Add some standard timeouts to terminate the programming in case of failed ACKs. First release should be console based as I do not know any GUI programming at this point of time. Who knows maybe this work may lead me to learn GUI development. Maybe someone will design the GUI for this based on my work. Maybe others will add more microcontroller architectures to this software. There are no limits in Open Source!

Say, in about 2 months I should be releasing the initial version on SourceForge. I have enough (other) work on my hand at present and this initiative will remain as a part-time initiative.

www.rupamdas.com

Tuesday, August 25, 2009

Embedded Systems - What is it?



Some of the most frequently asked questions these days are:

. How do I learn Embedded Systems?

. If I learn Embedded Systems, will I be assured of a job?

. I know 8051 and C programming. Can I learn Embedded Systems?

. What is an Embedded System?

The last question is in fact one of the most frequently asked questions by students in Engineering colleges and even those who are finishing or have completed graduation. So, let me attempt to answer that first.

I feel that although Embedded Systems 'appears' to be a real hot thing to learn and work on, its either not taught well or not understood well by most educational institutes. I do agree that my definition of Embedded Systems would be different than someone else's. Its like describing an elephant. Elephant has certain features that are present in other animals too. But the set of all the features of an elephant would be an unique set because barring mammoths, we've not known anything else to resemble elephants. So, a set of descriptions can also fully describe something that doesn't have a one line definition.

So, here are my definition(s) of Embedded Systems:

. A combination of hardware components and logic that has been designed to perform some specific task(s). Yes, there can be Embedded Systems that may not have any software component at all. Think of implementing an embedded product using only TTL logic gates or an IC and some more passive components. Desktop calculators for instance.

. A combination of hardware and software components and logic that has been designed to perform some specific task(s). These are the more popular class of Embedded Systems that have some programmable components like Microcontrollers, Microprocessors, DSPs and FPGAs. Think of mobile phones, PDAs, MP3 players.

When I say 'specific tasks' it means that the work to be done by the system is not general purpose. By general purpose (GP) systems we mostly refer to desktop computers, laptops, servers and super computers which can do a lot of general purpose work. For instance run Internet browsers, edit files, show movies, play and record songs, compile and run applications, run IDEs and debuggers. In doing all these we have a GP system that runs an GP Operating System (OS) that allows us to load/install these above applications and then run them. We also have the option of unloading the programs from the system (delete/uninstall applications).

Compare this to a mobile phone that has specific tasks. So, most mobile phones of today can:
- Make and receive GSM calls
- Send and receive text SMS
- Play/record songs in different formats
- Save phone numbers and names and more information in an addressbook
- Show calendar and take/display reminders
- Alarm clock, reminders
- Browse web (using GPRS/WiFi)
- Take/replay pictures/video
- Play FM/AM radio channels
- Run JAVA applications

So, as we can see the list is definitely long but quite small compared to what a GP system can do. In fact the mobile phone of these days look like an assimilation of several other Embedded products like still and video camera, music player, voice recorder, FM/AM receiver and of course a simple GSM/CDMA phone.

So, what we observe that what makes a system qualified as Embedded are the limitations of the functions that we can implement on the system. But then the next question pops up is 'why' should we have limitations at all? What are the limitations imposed on Embedded Systems?

Just compare the size of the largest mobile handset that you have seen with an ordinary desktop PC or for that matter even an laptop. What do you see? For one thing that the laptop or desktop PC is about 20-40 times the size of the mobile in your hand. How about the weight? Mobile handsets would be generally 60-200 gm whereas a laptop is atleast 1.5 kg (the lightest ones). How about power consumption? Your handset will have typically a 3.7V Lithium-ion battery compared to a heavy battery in your laptop. Desktop PCs have external power and they consume about 200-400W of power. A 600VA UPS will be able to power up a desktop for about 20-25 minutes, a laptop battery can at most give 8-10 hours power (the best ones in the market). Now think about your handset. How often you charge it? Once in 2 days, or 3 days or sometimes even 4 days with some good handsets.

So, if you read the previous paragraph three things come to one's mind regarding what typically makes Embedded Systems as they are. They are size, weight and power consumption (
Reminder: This is my way of looking at Embedded Systems. May not match your view always). So just go through the list we saw before: still and video camera, music player, voice recorder, FM/AM receiver and of course a simple GSM/CDMA phone. All are typically compact, light-weight and not that power hungry.

So, what makes them small? For one, the embedded controllers and processors, that are at the heart of such devices, are much smaller compared to desktop/laptop processors. Take the RAM that is used as the main memory in all these products. A single SODIMM RAM card in a desktop is about 5-6 inches long (approx.) and these days easily has 512 MB/1 GB/ 2 GB of memory. Compare this to a mobile phone which will have some thing like 16-256 MB RAM (say) that will fit into few small ICs. Non-volatile storage? Desktops have Hard-disks and typically embedded products have Flash memory which are way smaller compared to Hard-disks. SMPS (Switched Mode Power Supply) that supplies power to the motherboard and peripherals in desktop PCs don't really exist in Embedded systems. The entire power supply circuit of a embedded product would take a few tiny components and fit into few square cm. No fans on processors, at best the embedded processor may have a heat-sink. No CD/DVD player or floppy drives (mostly). Instead of a 15-19" monitors, you have a 2-4 inches LCD panel on a mobile phone. These and more such factors also contribute to low weight and power consumption of the embedded systems as much lesser things are packed into Embedded Systems.
One thing I would like to mention here is that when I compare features or size or weight of various products, I am using generic or general stuff. Please do not take them for granted. It may differ to large extent in some systems that I have not mentioned here.

So, we have kind of covered the Embedded systems that are 'obvious' to us. Things that are complete products and they are small, portable and power efficient. So, how about some more things like intelligent washing machines and microwave ovens that can 'feel' the fabric or 'talk' to the user or handle some other nice function. Those are neither small, nor light or power efficient. But still we mention that they 'have' Embedded Systems. That is because the Embedded part of such systems is only the one that contains the 'intelligence' and 'control' of the appliance. You could add DVD players, car audio systems, TVs, bar code scanners to this list. What you should observe that these systems have much more than the embedded 'intelligence' and 'control' components that make it large and heavy.

A TV would have a CRT/LCD/Plasma/LED screen that one always desires to be large, and hence it is large and heavy and also draws more power. But in that if you consider the size of the embedded component that handles the RF signals from the cable or video input from DVD player, the video and sound output and remote control handler, would not be too big, heavy or power hungry. Same thing for washing machines that have the stepper motor, water heating coils, the cabinet and the washing drum that add to the weight.

So much for this post. Its become much longer that what I initially had in mind. But its still not complete. I will continue in my next post to cover the same topic.


Next post: How to Learn Embedded Systems?