Summer Internship Report On: Embedded System Developer Virtual Internship
Summer Internship Report On: Embedded System Developer Virtual Internship
Submitted by
(Accredited by NAAC with 'A' Grade; Recognised by UGC under sections2 (f)&12 (B))
(2022-2026)
SRINIVASA INSTITUTE OF ENGINEERING AND TECHNOLOGY
(UGC – Autonomous Institution)
( Approved by AICTE, permanently affiliated to JNTUK, Kakinada, ISO 9001: 2015 certified Institution)
(Accredited by NAAC with 'A' Grade; Recognised by UGC under sections2 (f)&12 (B))
CERTIFICATE
Certificate ID :f0d90639f5bc98b55475482ca83cfec9
Student ID :STU66a27b96d3cbf1721924502 B
ACKNOWLEDGEMENT
I would be thankful to Mr. K.V.V.BAPIRAJU, M.Tech, (Ph.D), Assistant professor and Head
of the Department Electrical and Electronics Engineering for her technical guidance who has been
an excellent guide and also a great source of inspiration to my work.
I am grateful to our principal Dr. K.SURESH BABU, M.Tech, Ph.D., Srinivasa Institute of
Engineering and Technology, who most able to run the institution and his constant encouragement
and support in carrying out my seminar report at college.
I would like to express my heart-felt gratitude to my parents without whom I would not have been
privileged to achieve and fulfill my dreams.
The satisfaction and euphoria that accompany the successful completion of the task would be great
but incomplete without the mention of the people who made it possible with their constant
guidance and encouragement crowns all the efforts with success. In this context, I would like thank
all the other staff members, both teaching and nonteaching, which have extended their timely help
and eased my task.
1
INDEX
14. Conclusion 30
1
ABSTRACT
Embedded systems play a crucial role in shaping the modern technological landscape,
powering an array of devices that surround us in our daily lives. This abstract explores the
fundamental concepts, applications, and challenges of embedded systems, underscoring their
pervasive influence on various industries and the potential for future advancements.Embedded
systems are specialized computing systems designed to perform dedicated functions within
larger devices or machines. They are integrated into a wide spectrum of products, ranging from
household appliances, consumer electronics, and automobiles to industrial machinery, medical
devices, and aerospace systems. This integration enables these devices to carry out complex
tasks efficiently, often without the need for user intervention.The success of embedded systems
can be attributed to their unique characteristics. They are typically resource-constrained, with
limited processing power, memory, and energy supply, demanding efficient algorithms and
tailored hardware designs. Real-time responsiveness is often a critical requirement, as many
embedded applications involve safety-critical tasks that demand timely and precise execution.
This tutorial provides basic understanding of Embedded systems and its implementation using
Keil software and Proteus Software.
1
INTERNSHIP ACTIVITIES
WEEK-1
INTRODUCTION TO EMBEDDED SYSTEMS
An embedded system is a special purpose system that is used to perform one or few dedicated
functions. Simply, we can call any electronic device that has a computer system embedded
inside it an embedded system.The microprocessor is the core of computer systems. Many
communications, digital entertainment, portable devices, are controlled by them.
Baseline
Baseline PIC microcontrollers utilize a 12-bit instruction word and provide the right number
of features and options to minimize expenses and get the job done right.
Simple 33 (12-bit wide) instruction set for ease of use and quick development.
144 bytes RAM (max).
2-level hardware stack.
1
Mid-Range
Mid-Range PIC microcontrollers are the next tier in performance and have features from the
Baseline PIC microcontrollers.
35 (14-bit wide) easy instructions to learn.
The Mid-Range family can be recognized by their part number structure: 10Fxxx, 12Fxxx,
and 16Fxxx.
Enhanced Mid-Range
The newest family is the Enhanced Mid-Range core which builds upon the best elements of
the Mid-Range core and provides additional performance while maintaining compatibility with
Mid-Range PIC MCUs for true product migration. These devices have the latest features and
the lowest power in the 8-bit core.
49 (14-bit wide) assembly commands
32 K word (56 KB) addressable program memory
4 KB RAM (max)
16-level hardware stack
High-End
These parts have their own prefix namely, PIC18. This family combines the maximum level of
performance and integration with the ease of use of an 8-bit architecture. With up to 16 MIPS
of processing power, PIC18 microcontrollers feature advanced peripherals, such as CAN, USB,
Ethernet, LCD, and Charge Time Measurement Unit (CTMU). They offer the largest pin count
and memory size in the 8-bit family of parts. The architecture is optimized for C programming.
83 (16-bit wide) assembly instructions.
Up to 2 MB addressable program memory.
4 KB RAM (max).
32-level hardware stack
One (8-bit) file select register.
Integrated 8x8 hardware multiply.
1
WEEK-2
INTRODUCTION TO MPLAB X IDE
MPLAB X IDE is an integrated development environment (IDE) specifically designed for
programming and developing applications for Microchip microcontrollers and digital signal
controllers (DSCs). It's a powerful tool that provides a comprehensive set of features to
streamline the entire embedded software development process.
Cross-Platform Compatibility
MPLAB X IDE is designed to be cross-platform, which means it runs on multiple operating
systems, including Windows, macOS, and Linux, making it accessible to a wide range of
developers.
Project Management
Developers can create and manage projects within MPLAB X IDE. Projects help organize code
files, configuration settings, and build options.
Device Configuration
MPLAB X IDE offers a device configuration tool that simplifies the process of setting up and
configuring peripherals, pins, and clock settings for the target microcontroller.
Plugin Support
MPLAB X IDE supports plugins, which extend its functionality. Developers can create custom
plugins or use existing ones to enhance the IDE's capabilities.
Integrated Programmer
MPLAB X IDE includes support for Microchip's programmers and debuggers, making it easy
to program your microcontroller with the compiled code directly from the IDE.
1
WEEK-3
GETTING STARTED WITH PIC16F1XXX MCUS USING MCC
AND STATE MACHINES
Getting started with PIC16F1xxx microcontrollers (MCUs) using the MPLAB Code
Configurator (MCC) and state machines is a great way to quickly develop embedded
applications. This approach simplifies the configuration of peripherals and the creation of state
- based applications. Here are the steps to get started:
Hardware Setup
Start by setting up your hardware. This includes connecting the PIC16F1xxxMCU to your
development board and ensuring you have a suitable power supply.
MPLAB X IDE and MCC Installation
If you haven't already, download and install MPLAB X IDE from the Microchip website.
Ensure that you also install MPLAB Code Configurator (MCC), which is a plugin for MPLAB
X IDE.
Configure Peripherals
Use MCC to configure the peripheral modules you plan to use in your project. This might
include GPIO pins, timers, UART, or other peripherals.
Code Generation
After configuring your peripherals and creating state machines, generate code using MCC.
MCC will generate initialization code for your peripherals and state machine code based on
your configurations.
1
WEEK-4
INTRODUCTION TO EMBEDDED C
C programming language is known for its simplicity and power. It consists of various syntax
rules and structures that govern how programs are written. Here's an overview of some key
syntax and structures in C:
Comments
Comments in C are used to add explanatory notes within the code. Single-line comments start
with //, and multi-line comments are enclosed in /**/.
Preprocessor Directives
Preprocessor directives begin with a # symbol and are used to include header files, define
macros, and perform other preprocessing tasks.
Main Function
Every C program must have a main function where program execution begins. The main
function returns an integer value that represents the program's exit status.
Variables
Variables are used to store data. They must be declared before use, specifying their data type.
Variable names can include letters, digits, and underscores but must start with a letter or
underscore.
Data Types
C supports basic data types such as int, float, char, and more. You can also create user-defined
data types using structures and enumerations.
Operators
C includes various operators for performing operations on variables and values, including
arithmetic, comparison, logical, and assignment operators.
Control Structures
C provides control structures like if, else, while, for, and switch for decision- making and
looping.
Pointers
Pointers are variables that store memory addresses. They are used for dynamic memory
allocation and accessing data indirectly.These are some of the fundamental syntax and
structures in the C programming language. Understanding and mastering these concepts is
essential for writing Cprograms effectively. C is a versatile language, and it allows for low-
level memory manipulation, making it suitable for systems programming and embedded
development.
1
ADVANCED C PROGRAMMING
Advanced C programming delves into more complex and nuanced aspects of the Clanguage,
enabling developers to write efficient and sophisticated code. Here are some topics and
concepts that are considered advanced in C programming:
Data Structures
Implementing and working with complex data structures like linked lists, trees, graphs, and
hash tables. This involves memory management and pointer manipulation.
File Handling
Advanced file I/O operations, binary file handling, and handling complex file formats.
Understanding f seek, f tells, and how to read and write binary data is important.
Error Handling
Creating robust error-handling mechanisms using error codes, err no, and custom error
reporting.
Preprocessor Directives
Advanced use of preprocessor directives for conditional compilation, macro tricks, and code
generation.
1
WEEK-5
C PROGRAMMING: LINKED LIST DATA STRUCTURES
In C programming, linked lists are a fundamental data structure used to store and manage
collections of data dynamically. A linked list consists of a sequence of nodes, where each node
contains two parts: a data element and a reference (or pointer) to the next node in the sequence.
Linked lists come in various forms, including singly linked lists, doubly linked lists, and
circular linked lists. Here's an overview of implementing singly linked lists in C:
Example:
struct Node *head = NULL; // Initialize an empty linked list
Inserting Nodes
To insert a node at the beginning of the linked list, you allocate memory for the new node, set
its data and next pointer, and update the head to point to the new node.
Example:
struct Node *new Node = (struct Node *) malloc (size of (struct Node));
new Node->data = 42;
new Node->next = head;
To insert a node at a specific position or at the end of the list, you traverse the list until you
reach the desired position or the end, then update the pointers accordingly.
Deleting Nodes
To delete a node, you update the pointers of the previous node toby pass the node you want to
remove, then free the memory of the deleted.
1
Advantages of Linked Lists
Dynamic Size
Linked lists can grow or shrink dynamically, making them suitable for situations where the
size is not known in advance
Memory Efficiency
Linked lists can be more memory-efficient than arrays because they allocate memory for each
element only when needed.
Memory Overhead
Linked lists require extra memory for the next pointer, which can lead to higher memory
consumption compared to arrays.
Linked lists are a fundamental building block in C programming and are widely used in various
applications, including implementing data structures like stacks, queues, and hash tables.
Understanding linked lists and their operations is crucial for C programmers.
Applications
Linked lists are used in various applications, including:
Implementing other data structures like stacks, queues, and hash tables.
1
WEEK-6
C PROGRAMMING CALLBACKS
In C programming, callbacks are a powerful and flexible way to implement functions that can
be passed as arguments to other functions. Callbacks allow you to define custom behavior for
functions, making your code more modular and adaptable. Callbacks are often used in event-
driven programming, asynchronous operations, and in scenarios where you need to customize
the behavior of a function without modifying its code.
Here's how callbacks work in C programming:
Function Pointers
Callbacks are implemented using function pointers. A function pointer is a variable that stores
the address of a function instead of its value. Function pointers have a specific function
signature, meaning they point to functions with a specific set of parameters and return type.
Example:
// Declare a function pointer type
typedef void (*Callback Function)
(int);
// Define a function that takes a callback function as an
argument void do Something (int value, Callback Function
callback) {
// Perform some operation
callback(value); // Call the callback function
}
// Define a callback function
void my Callback (int
value)
{
Print ("Callback invoked with value: %d\n", value);
}
int main ()
{
do Something (42, my Callback); // Pass the callback function as an argument
return0;
}
In this example, do Something is a function that takes an integer value and a callback function
as arguments. When called, it performs some operation and then invokes the provided callback
function with the given value.
Using Callbacks for Custom Behavior
Callbacks are often used when you want to customize the behavior of a function without
modifying its code. This allows for greater flexibility and reusability of code.
Example:
// Another callback function
void double Callback (int
value)
{
print ("Double Callback: %d\n", value * 2);
}
int main ()
{
do Something (42, my Callback); // Pass one callback
do Something (10, double Callback); // Pass another
callback return 0;
}
Callbacks are a powerful tool in C programming that allows you to create flexible and reusable
code by separating functionality from behavior. They are commonly used in libraries,
frameworks, and event-driven systems to enable customization and extensibility.
Applications of Callbacks:
Event Handling: Responding to user actions (e.g., button clicks, key presses) in GUI
applications.
Custom Sorting and Filtering: Providing custom logic for sorting or filtering data
structures.Asynchronous Operations: Handling tasks that complete at a later time (e.g., network
requests, file I/O).
WEEK-7
ADVANCED EMBEDDED C TIPS, TRICKS AND CAUTIONS
Advanced embedded C programming involves working with microcontrollers and embedded
systems, where resource constraints and real-time considerations are critical. Here are some
tips, tricks, and cautions to keep in mind:
Memory Management
Carefully manage memory, especially in systems with limited RAM. Use dynamic memory
allocation sparingly and consider implementing memory pools or fixed-size buffers.
Interrupt Handling
Understand interrupt priorities and use efficient interrupt handlers. Minimize the time spent in
interrupts to avoid disrupting the system's real-time behavior.
Clock Management
Be aware of clock sources and settings. Accurate timing is critical in embedded systems. Pay
attention to clock initialization and configuration.
Power Management
Implement power-saving modes when appropriate to reduce energy consumption.
Understand the power-down and sleep modes of the microcontroller.
Watchdog Timers
Use watchdog timers to recover from system crashes or lock-ups. Ensure that your code
periodically resets the watchdog timer.
Optimize Code
Write efficient code. Profile your code to identify bottle necks and optimize critical sections.
Employ compiler optimization flags.
Modular Design
Use modular and structured code design. Divide your code into manageable functions and
modules. Avoid long, complex functions.
Real-Time Requirements
Ensure that your code meets real-time deadlines. Understand and minimize interrupt latency.
Floating-Point Arithmetic
Be cautious when using floating-point arithmetic, as it can be slow and may not be supported
on all microcontrollers.
Global Variables
Minimize the use of global variables, as they can lead to maintenance challenges and make
debugging difficult.
Concurrency Issues
Be aware of concurrency issues in multi-threaded or multi-tasking systems. Use proper
synchronization mechanisms to prevent data corruption.
Hardware Abstraction
Implement hardware abstraction layers (HALs) to isolate hardware-specific code. This makes
porting to different microcontrollers easier.
Memory Alignment
Pay attention to memory alignment requirements, especially when working with peripherals
that require specific data alignments.
Error Handling
Implement robust error handling and recovery mechanisms. Understand how to handle and
report errors gracefully.
Security
Consider security vulnerabilities, especially in connected embedded systems. Protect against
unauthorized access and data breaches.
Cautions
Always be mindful that embedded C is hardware-dependent, and mistakes can have
consequences for the system’s physical behavior.
WEEK-8
DESIGN CONSIDERATIONS FOR YOUR FIRST IOT PROJECT
Designing your first IoT (Internet of Things) project involves several important considerations
to ensure the success and functionality of our project. Here are key design considerations for
your first IoT project:
Choose a suitable IoT platform or framework to build upon. Platforms like Arduino, Raspberry
Pi, or cloud-based platforms like AWS IoT, Azure IoT, or Google Cloud IoT can simplify
development.
Hardware Selection
Determine how your IoT device will connect to the internet or other devices. This could
involve Wi-Fi, Ethernet, cellular, or LPWAN (Low-Power Wide Area Network) technologies.
Security:
Prioritize security in your design. Implement encryption, authentication, and access control
mechanisms to protect data and devices from unauthorized access and attacks.
Choose the appropriate sensors to collect relevant data for your project. Consider factors like
accuracy, precision, and calibration.
Data Processing and Analytics
Decide how and where data will be processed and analyzed. It can be on the device itself, at
the edge, or in the cloud. Determine the necessary processing power and storage capacity.
User Interface
Design a user interface if your project requires user interaction. This could be a web or mobile
app, a dashboard, or even voice commands through virtual assistants.
Regulatory Compliance
Power Efficiency
Optimize power consumption to extend the device's battery life and reduce operational costs.
Firmware Updates and Maintenance
Plan for remote firmware updates to fix bugs, add features, and enhance security. Ensure that
updates can be deployed seamlessly.
Address data privacy concerns and comply with data protection regulations, such as GDPR or
HIPAA, if applicable.
Testing and Validation
Perform rigorous testing, including unit testing, integration testing, and field testing, to ensure
the reliability and functionality of your IoT device.
Create comprehensive documentation for users, developers, and maintainers. Provide customer
support channels for troubleshooting and inquiries.
Cost Analysis
Calculate the total cost of ownership (TCO) for your IoT project, including hardware, software
development, maintenance, and operational costs.
Environmental Impact
Consider the environmental impact of your IoT project, including the disposal of electronic waste
and energy efficiency.
Address security from the start: Incorporate security measures into your design from the
beginning, as it’s a major consideration for any IoT project.
WEEK-9
EXPLORING BLUETOOTH LOW ENERGY (BLE) FROM
FIRST STEPS TO FINAL APPLICATION
Exploring Bluetooth Low Energy (BLE) from first steps to a final application involves
understanding the technology, developing the necessary skills, and following a systematic
approach to building your project. Here's a step-by-step guide:
Implement Security
Ensure data security by implementing encryption, authentication, and authorization
mechanisms as required by your application.
Select Hardware
Choose a microcontroller or single-board computer (SBC) that is compatible with Azure IoT
Central. Common options include Raspberry Pi, Arduino, or specialized IoT development
boards with built-in connectivity.
Assemble Hardware
Assemble your hardware components, including the microcontroller, sensors (e.g.,
temperature, humidity, light), power supply, and any necessary peripherals.
Interface Sensors
Connect and interface your sensors with the microcontroller. Read data from the sensors using
appropriate libraries or code.
Implement Communication
Choose a communication method to send sensor data to Azure IoT Central. Common options
include Wi-Fi, Ethernet, or cellular connectivity. Ensure your hardware supports the method
Azure IoT Central Setup
Sign in to the Azure IoT Central portal (https://apps.azureiotcentral.com/). Create a new
application or use an existing one. Define a device template that describes the capabilities and
properties of your sensor node.
Device Provisioning
Implement device provisioning on your sensor node. Azure IoT Central supports various
methods, such as symmetric key authentication or X.509 certificates.
Develop Firmware
Write firmware for your sensor node that collects sensor data and sends it to Azure IoT Central.
Use the Azure IoT SDK for your chosen platform.
Security Implementation
Ensure that your firmware includes secure communication practices, such as using TLS/SSL
for data encryption and proper authentication mechanisms.
Device Integration
Register your sensor node with Azure IoT Central by providing device-specific information
and credentials.
Data Visualization
Define dashboards and visualizations in Azure IoT Central to display the data sent by your
sensor node.
Monitor in IoT Central: Return to your device page in the Azure IoT Central application.
View telemetry: You can see the real-time sensor data on the Overview dashboard.
Explore raw data: The Raw Data tab will show the telemetry messages as they are received.
Create rules and jobs: You can set up rules to trigger actions, like sending an email alert if
the temperature exceeds a certain threshold.
i
WEEK-10
MOTOR CONTROL WORKSHOP USING DS PIC DIGITAL
SIGNAL CONTROLLERS (DSC) DUAL CORE DEVICES
A Motor Control Workshop using ds PIC Digital Signal Controllers (DSC) with Dual-Core
Devices is an excellent opportunity to learn about embedded systems and motor control. These
dual-core devices combine a Digital Signal Processor (DSP) core with a microcontroller core
making them suitable for demanding control applications like motor control. Below is a
structured outline for conducting such a workshop:
Workshop Title: Motor Control Workshop using ds PIC Dual-Core DSC Devices.
Workshop Duration
Typically, a full-day or multi-day workshop, depending on the depth of the content and hands-
on activities.
Workshop Goals
Introduce Dual-Core ds PIC DSCs
Provide an overview of the ds PIC dual-core architecture and its advantages in motor control
applications.
Combination starter:
The most common type, including components like circuit breakers, contactors, and overload
relays.
ii
Advanced Topics
Explore advanced motor control concepts, such as sensor less control, field-oriented control
(FOC), and position control.
Real-World Applications
Discuss real-world applications of motor control in robotics, automotive, industrial
automation, and more.
Workshop
Outline Session 1
Introduction to ds PIC Dual-Core DSCs (1-2 hours)
Overview of ds PIC DSCs and their dual-core
architecture. Features and benefits of ds PIC DSCs for
motor control.
Introduction to the development environment (MPLAB X IDE).
Session 2
Motor Control Basics (1-2 hours)
Types of motors and their
characteristics. Open-loop vs. closed-
loop control.
Introduction to pulse-width modulation (PWM) and motor drive circuits.
Session 3
Motor Control Hardware (2-3 hours)- Overview of motor control hardware components (sensors,
drivers, encoders).
Assessment can also include quizzes or written assignments to test their understanding of
motor control concepts.
iii
RESULTS & DISCUSSIONS
Results
This section presents the objective outcomes of the work you have done. It includes performance
metrics, test results, and other key findings.
System Overview: Briefly describe the final system that was developed (hardware,
software, communication protocols, etc.).For example, "The system was successfully
integrated using an STM32 microcontroller with a real-time operating system (RTOS) to
control a robotic arm."
Example: "The system operates at a clock speed of 100 MHz and consume 350 mW during
full a load operation."
Functional Validation: Show whether the system met its functional requirements.
Include screenshots, tables, graphs, or logs to back up the results.
Example: "The system was able to maintain a ±1% accuracy in temperature regulation over a
24-hour testing period."
Discussions:In the discussion section, interpret the results, explain their implications, and
provide critical insights.
Interpretation of Results: Explain what the results mean in the context of your project.
Did the system meet its design goals.
Example: "The system's power consumption was 10% lower than anticipated, likely due to more
efficient task scheduling in the RTOS."
Successes: Highlight the successful aspects of your embedded system development. Did the
final product meet all the intended objectives? If so, how?
Example: "The system successfully maintained real-time performance, handling multiple tasks
concurrently without noticeable lag."
iv
CONCLUSION
I hereby conclude, my internship as an embedded system developer has been a valuable and
enriching experience. Over the course of this internship, I have had the opportunity to work on
real-world projects, collaborate with a talented team, and expand my technical skills
significantly. This internship has reaffirmed my passion for embedded systems development
and has equipped me with the knowledge and skills needed to excel in this field. I am grateful
for the guidance and mentorship I have received throughout this journey.Embedded systems
are the indispensable, specialized computer systems within larger devices, powering everyday
life by enabling specific functions with high reliability, efficiency, and often, real-time
performance. As technological advancements like AI, IoT, and 5G converge with embedded
systems, they are set to become even more intelligent, secure, and interconnected, driving
innovation in areas from autonomous vehicles and smart cities to advanced healthcare and
industrial automation, ultimately shaping a more integrated and efficient future. Embedded
systems are the silent, yet fundamental, enablers of modern technology. Their ongoing
evolution, driven by innovations in AI, IoT, and connectivity, ensures they will continue to
revolutionize how we live, work, and interact with the world, leading to smarter, more efficient,
and more connected systems in the future. An embedded system is a special-purpose computer
system designed to perform one or few dedicated functions, often with real-time computing
constraints. It is usually embedded as part of a complete device including hardware and
mechanical parts. In contrast a general-purpose computer, such as a personal computer, can do
many different tasks depending on programming. Embedded system controls many of the
common devices in use today. If asked to define, it is hard to define. It is found to be embedded
within electronic devices.The key characteristic, however, is being dedicated to handle a
particular task. Since the embedded system is dedicated to specific tasks, design engineers can
optimize it to reduce the size and cost of the product and increase the reliability and
performance. Some embedded systems are mass-produced, benefiting from economies of scale.
Hence to conclude with, embedded systems has a wide future in the forthcoming technological
developments.
v
LIST OF COMPLETION CERTIFICATES
vi
vii
viii
Appendix-B: Details of the Organization
Embedded systems and IoT companies: Companies like Qualcomm, Arm, and Intel
may collaborate with platforms like Edu Skills to offer training on embedded systems
development, IoT applications, and related technologies.
Educational Institutions: Universities and colleges may also collaborate with online
platforms to offer joint training programs or provide acc ess to their courses and resource.