0% found this document useful (0 votes)
2 views64 pages

Microcontroller File

The document outlines assignments for a Microcontrollers course at Devi Ahilya Vishwavidyalaya, covering various programming problems and solutions in assembly language and AVR C. It includes tasks related to data handling, hardware interfacing, and timer operations. The assignments also feature detailed code examples and explanations for each problem presented.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views64 pages

Microcontroller File

The document outlines assignments for a Microcontrollers course at Devi Ahilya Vishwavidyalaya, covering various programming problems and solutions in assembly language and AVR C. It includes tasks related to data handling, hardware interfacing, and timer operations. The assignments also feature detailed code examples and explanations for each problem presented.
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

Institute of Engineering and Technology

Devi Ahilya Vishwavidyalaya, Indore


Department of Electronics & Telecommunication

MICROCONTROLLERS
(ETR5E1)
Session July-Dec 2023
Submitted To: Submitted By:
DR. Uma Bhatt Mam (21T5101)-AADARSH KURMI
(21T5111)-ANMOL JAIN
(21T5112)-ANURAG BADWAHE
(21T5118)-DEVANSH SAHU

SIGNATURE ETC-B (3RD YEAR)

1
INDEX

[Link] TOPIC SIGNATURE

Assignment-1
1. (PROBLEMS AND SOLUTIONS)

2. Assignment-2
(PROBLEMS AND SOLUTIONS)

3. Assignment-3
(PROBLEMS AND SOLUTIONS)

4. Hardware Project Description


(ALL DETAILS)

5. INSTALLATION AND INTRODUCTION TO


MICROCHIP STUDIO AND PROTEUS SOFTWARE
FOR WINDOWS.

2
ASSIGNMENT-1
(PROBLEMS AND SOLUTIONS)

Q.1) SUPPOSE A CODE MEMORY CONTAINS n NUMBER OF DATA


BYTES AT LOCATION $500 AND ONWARDS. WAP TO ADD THE DATA
BYTES UNTILL YOU FIND 00 VALUE (DATA) FROM THE CODE MEMORY.
FIND OUT THE POSITION OF 00 VALUE AND DISPLAY IT ON PORTA.
SEND THE FINAL SUM AND THE CARRY AT PORTB AND C
RESPECTIVELY.

Q.2) WAP TO BRING IN A BYTE OF DATA SERIALLY VIA PA.0 AND SAVE
IT TO LOCATION $015E OF [Link] BYTE COMES WITH THE LSB
FIRST.

Q.3) ASSUME THAT THE LOWER FOUR BITS OF PORTC ARE


CONNECTED TO FOUR SWITCHES. WAP TO CHECK WHETHER THESE
FOUR BITS OF PORTC CREATE AVALID BCD NUMBER OR NOT? IF YOU
FIND A VALID BCD THEN CONVERT IT INTO ASCII AND SEND IT TO
PORTD OTHERWISE SEND ‘E’ TO PORTD.

Q.4) WAP TO READ 100 BYTES OF DATA FROM DATA MEMORY


LOCATIONS STARTING AT $150. DISPLAY EACH OF THE DATA BYTE AT
PORTA. KEEP 1MS DELAY BETWEEN TWO CONSECUTIVE DISPLAYS.

SOLUTIONS:

3
1.) .INCLUDE"[Link]"
.ORG 0X00
RJMP MAIN
.ORG 0X100
MAIN:
LDI R16,0XFF
OUT DDRA, R16
OUT DDRB, R16
OUT DDRC, R16s
LDI R20,0X00; FOR POSITION OF 00
LDI R16,0X00; FOR SUM
LDI ZH,0X04
LDI ZL,0X99
REPEAT:
LPM R18, Z+
ADC R16, R18
INC R20
CPI R18,0X00
BREQ EXIT
RJMP REPEAT
EXIT:
OUT PORTA, R20
OUT PORTB, R16
BRCC CARRY0
LDI R21,0X01
OUT PORTC, R21
END: RJMP END
CARRY0:
LDI R21,0X00
OUT PORTC, R21 RJMP END

4
5
2.) .INCLUDE"[Link]"
.ORG 0X00
RJMP MAIN
.ORG 0X100
MAIN:
CBI DDRA,0
LDI R16,8
CLR R20
LDI R25,0X01
LDI R26,0X5E
OUT EEARH, R25
OUT EEARL, R26
AGAIN:
SBIC PINA,0
RJMP ONE
RJMP ZERO
ZERO:
WAIT1:
CLC
SBIC EECR, EEWE
RJMP WAIT1
ROR R20
OUT EEDR, R20
SBI EECR, EEMWE
SBI EECR, EEWE
DEC R16
BRNE AGAIN
RJMP END
ONE:
WAIT:

6
SEC
SBIC EECR, EEWE
RJMP WAIT
ROR R20
OUT EEDR, R20
SBI EECR, EEMWE
SBI EECR, EEWE
DEC R16
BRNE AGAIN
END: RJMP END

7
3.) .INCLUDE "[Link]"
.CSEG
.ORG 0x0000
RJMP RESET
.ORG 0X100
RESET:
LDI R16, LOW(RAMEND)
OUT SPL, R16
LDI R16, HIGH(RAMEND)
OUT SPH, R16
LDI R16, 0b00001111
OUT DDRC, R16
LDI R16, 0xFF
OUT DDRD, R16
MAIN_LOOP:
IN R16, PINC
ANDI R16, 0x0F
RCALL CHECK_BCD
BRNE NOT_VALID
ISI R16
OUT PORTD, R16
RJMP MAIN_LOOP
NOT_VALID:
LDI R16, 'E'
OUT PORTD, R16
RJMP MAIN_LOOP
CHECK_BCD:
LDI R16, 10
CPI R16, 0x09
BRSH INVALID_BCD

8
ISI R16
CPI R16, 0
BRNE CHECK_BCD
RET
INVALID_BCD:
LDI R16, 1
RET

9
4.) .INCLUDE”[Link]"
.EQU DELAY_COUNT = 250
.CSEG
.ORG 0x0000
RJMP RESET
.ORG 0x0020
RJMP INT0_ISR
.ORG 0X100
RESET:
LDI R17, LOW(RAMEND)
OUT SPL, R17
LDI R17, HIGH(RAMEND)
OUT SPH, R17
LDI R17, 0xFF
OUT DDRA, R17
LDI ZL, LOW(0x0150)
LDI ZH, HIGH(0x0150)
LDI R16, 100
READ_LOOP:
LD R17, Z+
OUT PORTA, R17
LDI R17, DELAY_COUNT
DELAY_LOOP:
DEC R17
BRNE DELAY_LOOP
DEC R16
BRNE READ_LOOP
END_LOOP:
RJMP END_LOOP
INT0_ISR: RETI

10
11
ASSIGNMENT-2
(PROBLEMS AND SOLUTIONS)
Q.1) ASSUME THAT THE INT0 AND INT1 ARE CONNECTED TO TWO
SWITCHES NAMELY S1 AND S2. WAP IN ASSEMBLY LANGUAGE IN
WHICH, WHENEVER S1 GOES LOW, THE CONTENT OF PORTA INCREASE
BY ONE, AND WHEN S2 GOES LOW THE CONTENT OF PORTB
INCREASES BY ONE. TAKE INITIAL VALUES OF PORTA AND PORTB AS
ZERO.

Q.2) WRITE AN AVR C PROGRAM TO BRING IN A BYTE OF DATA


SERIALLY VIA PA.0 AND SAVE IT INTO LOCATION $105E OF EEPROM.
THE BYTE COMES IN WITH LSB FIRST.

Q.3) ASSUME THAT THE LOWER FOUR BITS OF THE PORTC ARE
CONNECTED TO FOUR SWITCHES. WRITE AN AVR C PROGRAM TO
CHECK WHETHER THESE FOUR BITS OF PORTC CREATE A VALID BCD
NUMBER OR NOT? IF YOU FIND A VALID BCD THEN CONVERT IT INTO
ASCII AND SEND IT TO PORTD OTHERWISE SEND ‘E’ TO PORTD.

Q.4 ) BY USING TIMER0 AND TIMER1 INTERRUPTS, WAP TO PERFORM


FOLLOWING OPERATIONS:
(i) GENERATE A SQAURE WAVE (USING TIMER0 NORMAL MODE) OF
140US TIME PERIOD ON PB4.

(ii) COUNT THE CLOCK PULSES USING TIMER1 (CTC MODE). AFTER
EVERY 50 PULSES, SEND A HIGH TO LOW TRANSITION ON PC0.
SOLUTIONS:

12
1.) .INCLUDE "[Link]"
.CSEG
.ORG 0x0000
RJMP MAIN
.ORG 0x0020
RJMP INT0_ISR
.ORG 0x0024
RJMP INT1_ISR
.ORG 0X100
MAIN:
LDI R16, LOW(RAMEND)
out SPL, R16
LDI R16, HIGH(RAMEND)
OUT SPH, R16
LDI R16, 0xFF
OUT DDRA, R16
LDI R17, 0xFF
OUT DDRB, R17
LDI R16, 0x00
OUT PORTA, R16
OUT PORTB, R17
LOOP:
RJMP LOOP
INT0_ISR:
IN R16, PINA
INC R16
OUT PORTA, R16
RETI
INT1_ISR:
IN R17, PINB
INC R17
OUT PORTB, R17
RETI

13
2.) #include <avr/io.h>
#include <avr/eeprom.h>
#define F_CPU 8000000UL
#include <util/delay.h>
void serialDataToEEPROM()
{
DDRA &= ~(1 << DDA0);
uint8_t* EEPROM_ address = (uint8_t*)0x015E;
uint8_t data = 0x00;
for (int i = 0; i < 8; i++)
{
while (PINA & (1 << PA0));
_delay_ us(0.5 * 1000000 / 9600);
data |= (PINA >> PA0) << i;
_delay_ us(1.5 * 1000000 / 9600);
}
eeprom_ write_ byte (EEPROM_ address, data);

14
}

int main(void)
{
serialDataToEEPROM();
while (1)
return 0;
}

15
3.) #include <avr/io.h>
void checkAndSendBCD()
{
DDRC &= 0xF0;
DDRD = 0xFF;
while (1)
{
uint8_t input = PINC & 0x0F;
if ((input < 10) && (input % 10 <= 9))
{
PORTD = input + '0';
}
else
{
PORTD = 'E';
}
}
}
int main(void)
{
checkAndSendBCD();
return 0;
}

16
17
4.) .INCLUDE "[Link]"
.CSEG
.ORG 0x0000
RJMP MAIN
.ORG 0x0012
RJMP TIMER0_ISR
.ORG 0x002E
RJMP TIMER1_ISR
.ORG 0X100
MAIN:
CLR R27
CLR R26
LDI R26, 0xFF
OUT SPL, R26
LDI R26, HIGH(RAMEND)
OUT SPH, R26
LDI R26, 0xFF
OUT DDRB, R26
LDI R26, 0x01
OUT DDRC, R26
LDI R26, (1 << CS02) | (1 << CS00)
OUT TCCR0, R26
LDI R26, (1 << WGM12) | (1 << CS12) | (1 << CS10)
OUT TCCR1B, R26
LDI R26, 49
OUT OCR1AH, R26
LDI R26, 0

18
OUT OCR1AL, R26
LDI R26, (1 << TOIE0)
OUT TIMSK, R26
LDI R26, (1 << OCIE1A)
OUT TIMSK, R26
SEI
MAIN_LOOP:
RJMP MAIN_LOOP
TIMER0_ISR:
SBI PINB, 4
RETI
TIMER1_ISR:
INC R27
CPI R27, 50
SBI PINC, 0
LDI R26, 10
CALL DELAY
CBI PINC, 0
CLR R27
RETI
DELAY:
DEC R26
BRNE DELAY
RET

19
20
ASSIGNMENT-3
(PROBLEMS AND SOLUTIONS)
Q.1) WAP TO CONFIGURE DOUBLE SEVEN-SEGMENT DISPLAY
USING DELAY SUBROUTINE AND MAKE A 60 SECONDS (1MINUTE)
TIME COUNTER CLOCKWITH DELAY = 1 SECOND.
SOLUTION:
.INCLUDE"[Link]"

LDI R16, HIGH(RAMEND)


OUT SPH, R16
LDI R16, LOW(RAMEND)
OUT SPL, R16

LDI R17,0XFF
OUT DDRC, R17
OUT DDRD, R17
LDI R24,5
LDI R23,4
LDI R22,3
LDI R21,2
LDI R20,1
HERE:

LDI R18,0B00000110
OUT PORTC, R18 ; FOR 1

RCALL DELAY
LDI R18,0B01011011
OUT PORTC, R18 ; FOR 2

21
RCALL DELAY
LDI R18,0B01001111
OUT PORTC, R18 ;FOR 3

RCALL DELAY
LDI R18,0B01100110
OUT PORTC, R18 ; FOR 4

RCALL DELAY
LDI R18,0B01101101 ; FOR 5
OUT PORTC, R18

RCALL DELAY
LDI R18,0B01111101
OUT PORTC, R18 ; FOR 6

RCALL DELAY
LDI R18,0B00000111
OUT PORTC, R18 ; FOR7

RCALL DELAY
LDI R18,0B01111111
OUT PORTC, R18 ; FOR 8

RCALL DELAY
LDI R18,0B01101111
OUT PORTC, R18 ; FOR 9

RCALL DELAY
DEC R24

22
BREQ NEW4
DEC R23
BREQ NEW3
DEC R22
BREQ NEW2
DEC R21
BREQ NEW1
DEC R20
BREQ NEW0
BACK:

LDI R18,0B00111111
OUT PORTC, R18 ; FOR 0

RCALL DELAY
LDI R18,0XFF
OUT PORTD, R18 ; KHATAM

RJMP HERE

NEW0:
LDI R18,0B00000110
OUT PORTD, R18
RJMP BACK

NEW1:
LDI R18,0B01011011
OUT PORTD, R18
RJMP BACK

23
NEW2 :
LDI R18,0B01001111
OUT PORTD, R18
RJMP BACK

NEW3 :
LDI R18,0B01100110
OUT PORTD, R18
RJMP BACK
NEW4 :
LDI R18,0B01101101
OUT PORTD, R18
RJMP BACK

DELAY:
LDI R16,80
L1: LDI R17,100
L2: LDI R18,200
L3:
NOP
NOP
DEC R18
BRNE L3
DEC R17
BRNE L2
DEC R16
BRNE L1
RET

24
AVR OUTPUT SCREENSHOT:

25
Q.2) WAP TO MONITOR PORTB PIN 7 WHEN A SWITCH IS
CONNECTED TO IT .WHEN IT IS OFF SEND A HIGH TO LOW PULSE
TO PORT C AND WHEN IT IS ON SEND A LOW TO HIGH PULSE WITH
66% DUTY CYCLETO PORTD WITH SOME DELAY.
SOLUTION:
LDI R20 ,HIGH(RAMEND)
OUT SPH,R20
LDI R20, LOW(RAMEND)
OUT SPL,R20

CBI DDRB,7
LDI R16,0XFF
OUT DDRC,R16
OUT DDRD,R16
AMD1:
SBIC PINB,7
RJMP AMD2
LDI R16,0X55
OUT PORTC,R16
RCALL DELAY
LDI R16,0XAA
OUT PORTC,R16
RCALL DELAY
RJMP AMD1
AMD2:
LDI R16 ,0XAA
OUT PORTD,R16
RCALL DELAY
RCALL DELAY
LDI R16,0X55
RCALL DELAY

26
RJMP AMD1
DELAY:
LDI R16,80
L1:LDI R17,100
L2:LDI R18,200
L3:
NOP
NOP
DEC R18
BRNE L3
DEC R17
BRNE L2
DEC R16
BRNE L1
RET

AVR OUTPUR SCREENSHOT

27
Q.3) AASUME THAT DATA MEMEORY LOCATION 0X315 HAS VALUE
FD(HEX).WAP TO CONVERT IT INTO [Link] THE DIGITS IN
LOCATIONS 0X322,0X323,0X324 WHERE THE LEAST SIGNIFICANT DIGIT
IS IN 0X322. ALSO PERFORM SUCCESIVE DIVISION PROCESS.
SOLUTION:

.INCLUDE "[Link]"
.EQU HEX =0X315
.EQU RMND_L = 0X322
.EQU RMND_M = 0X323
.EQU RMND_H = 0X324

.DEF NUM = R20


.DEF DENOMINATOR = R21
.DEF QUOTIENT = R22

28
LDI R16, 0XFD
STS HEX, R16

LDS NUM, HEX


LDI DENOMINATOR,10

AMD1:
INC QUOTIENT
SUB NUM, DENOMINATOR;
BRCC AMD1

DEC QUOTIENT
ADD NUM, DENOMINATOR
STS RMND_L, NUM

AMD2:
INC QUOTIENT
SUB NUM, DENOMINATOR
BRCC AMD2
DEC QUOTIENT
ADD NUM, DENOMINATOR
STS RMND_M, NUM

STS RMND_H, QUOTIENT

HERE: JMP HERE

AVR OUTPUT SCREENSHOT

29
Q.4) WAP TO BURN THE WORD”MICROCONTROLLER” INTO ROM
LOCATIONS STARTING AT $500 AND PROGRAM IS BURNED INTO ROM
LOCATIONS STARTING AT $[Link] SEND ALL THE CHARCATERSTO
PORT B ONE BYTE AT A TIME IN LOOP.
30
SOLUTION:
.INCLUDE"[Link]"
.ORG $0000
LDI R16, HIGH(RAMEND)
OUT SPH, R16
LDI R16, LOW(RAMEND)
OUT SPL, R16
LDI R20,0XFF
OUT DDRB, R20
LDI ZL, LOW(AMD<<1)
LDI ZH, HIGH(AMD<<1)
LPM R20, Z
OUT PORTB, R20
INC ZL
LPM R20, Z
OUT PORTB, R20
INC ZL
LPM R20, Z
OUT PORTB, R20
INC ZL
LPM R20, Z
OUT PORTB, R20
LDI R18,15
LDI R22,0XFF
OUT DDRC, R22
LDI ZH, HIGH(AMD<<1)
LDI ZL, LOW(AMD<<1)
L1: LPM R22, Z
OUT PORTC, R22
INC ZL

31
DEC R18
BRNE L1

HERE: JMP HERE


.ORG 0X500
AMD: .DB"MICROCONTROLLER."

AVR OUTPUT SCREENSHOT

32
33
Q.5) WAP TO CONFIGURE TIMER 0 AND TIMER 1 INTERRUPTS
SIMULTANEOUSLY TO GENERATE SQUARE WAVES ON PINS PB1 AND
PB 7 RESPECTIVELY WHILE DATA IS BEING TRANSFERRED FROM
PORT C AND PORTD.
SOLUTION:
.INCLUDE"[Link]"
.ORG 0X00
JMP MAIN
.ORG 0X12
JMP T1_OV_ISR
.ORG 0X100
MAIN:
LDI R20, HIGH(RAMEND)
OUT SPH, R20
LDI R20, LOW(RAMEND)
OUT SPL, R20
SBI DDRB,1
SBI DDRB,7
LDI R20, (1<<TOIE0)|(1<<TOIE1)
OUT TIMSK, R20
SEI
LDI R20, -160
OUT TCNT0, R20
LDI R20,0X01
OUT TCCR0, R20
LDI R20, HIGH (-640)
OUT TCNT1H, R20
LDI R20, LOW (-640)
OUT TCNT1L, R20
LDI R20,0X00
OUT TCCR1A, R20

34
LDI R20,0X01
OUT TCCR1B, R20
LDI R20,0X00
OUT DDRC, R20
LDI R20,0XFF
OUT DDRD, R20

HERE:
IN R20, PINC
OUT PORTD, R20
JMP HERE

.ORG 0X200
T0_OV_ISR:
LDI R16, -160
OUT TCNT0, R16
IN R16, PORTB
LDI R17, 0X02
EOR R16, R17
OUT PORTB, R16
RETI

.ORG 0X300
T1_OV_ISR:
LDI R18, HIGH (-640)
OUT TCNT1H, R18
LDI R18, LOW (-640)
OUT TCNT1L, R18
IN R18, PORTB
LDI R19,0X80

35
EOR R18, R19
OUT PORTB, R18
RETI

AVR OUTPUT SCREENSHOT

36
Q.6) ASSUMING XTAL= 8MHZ. WAP TO GENRATE A SQUARE (HIGH TO
LOW PULSE) WAVE WITH DUTY CYCLE 25% ON PB5 USING TIMER 1
CONFIGURATION TO GENERATE A DELAY OF 1 MILLISECOND USING
OCR(OUTPUT COMPARE REGISTERS).
SOLUTION:
.INCLUDE"[Link]"
.ORG 0X00
LDI R16, HIGH(RAMEND)
OUT SPH, R16
LDI R16, LOW(RAMEND)
OUT SPL, R16

SBI DDRC,3
AMD:
SBI PORTC,3
RCALL DELAY
CBI PORTC,3
RCALL DELAY

37
RCALL DELAY
RCALL DELAY
RJMP AMD

DELAY:
LDI R20,0X00
OUT TCNT1H, R20
OUT TCNT1L, R20

LDI R20, HIGH (10000-1)


OUT OCR1AH, R20
LDI R20, LOW (10000-1)
OUT OCR1AL, R20

LDI R20,0X00
OUT TCCR1A, R20
LDI R20,0X09
OUT TCCR1B, R20

L1:
IN R20, TIFR
SBRS R20, OCF1A
RJMP L1
LDI R20,1<<OCF1A
OUT TIFR, R20
LDI R19,0X00
OUT TCCR1B, R19
OUT TCCR1A, R19
RET

AVR OUTPUT SCREENSHOT

38
39
40
Q.7) WRITE AN ALP PROGRAM INDICATING LED/FAN WHEN OUTPUT OF
LM35 CROSSES SOME THRESHOLD.
SOLUTION:
.INCLUDE "[Link]"
LDI R16,0XFF
OUT DDRD, R16
OUT DDRC, R16
LDI R16,0
OUT DDRA, R16
LDI R16,0X87
OUT ADCSRA, R16
LDI R16,0XE0
OUT ADMUX, R16
READ_ADC:
SBI ADCSRA , ADSC
KEEP_POLING:

41
SBIS ADCSRA, ADIF
RJMP KEEP_POLING
SBI ADCSRA, ADIF
IN R16, ADCH
OUT PORTC, R16
CPI R16,50
BRSH ON_FAN
RJMP OFF_FAN
RJMP READ_ADC
ON_FAN:
SBI PORTD,0
RJMP READ_ADC
OFF_FAN:
CBI PORTD,0
RJMP READ_ADC

AVR OUTPUT SCREENSHOT

42
ASSIGNMENT 4

1.) INSTALLATION AND INTRODUCTION TO MICROCHIP


STUDIO AND PROTEUS SOFTWARE FOR WINDOWS.

Preface:
Atmel ® Studio is an Integrated Development Environment (IDE) for writing
and debugging AVR®/ARM® applications in Windows® XP/Windows
Vista®/Windows 7/8 environments. Atmel Studio provides a project
management tool, source file editor, simulator, assembler, and front-end for
C/C++, programming, and on-chip debugging.
Atmel Studio supports the complete range of Atmel AVR tools. Each new
release contains the latest updates for the tools as well as support for new
AVR/ARM devices.
Installation
Supported Operating Systems
• Windows 7 Service Pack 1 or higher

43
• Windows Server 2008 R2 Service Pack 1 or higher
• Windows 8 / 8.1
• Windows Server 2012 and Windows Server 2012 R2
• Windows 10
Supported Architectures
• 32-bit (x86)
• 64-bit (x64)
INSTRUCTIONS:
INSTALLING MICROCHIP STUDIO:
1.) SEARCH “MICROSOFT STUDIO” ON GOOGLE.

2.) CLICK THE FIRST LINK AS SHOWN.

3.) CLICK ON “DOWNLOAD MICROSOFT STUDIO”.


THIS WILL DIRECT YOU TO DOWNLOAD OPTIONS.

44
4.)CLICK “DOWNLOAD” FOR WEB INSTALLER
VERSION.

5.) SOFTWARE WILL BE DOWNLOADED.

6.) NOW INSTALL THE SOFTWARE INTO YOUR PC.


• Verify the hardware and software requirements from the "System Requirements" section
• Make sure your user have local administrator privileges
• Save all your work before starting. The installation might prompt you to restart, if required.
• Disconnect all Atmel USB/Serial hardware devices
• Double click the installer executable file and follow the installation wizard
• Once finished, the installer displays an option to Start Atmel Studio after completion. If you choose
to open, then note that Atmel Studio will launch with administrative privileges, since the installer was
either launched as administrator or with elevated privileges.

45
OTHER [Link] JUST FOLLOW THE STEPS AND COMPLETE
THE PROCEDURE FOR INSTALLATION IS SIMILAR TO ANY PROCESS.

• INSTALLING PROTEUS 8.13 PROFESSIONAL


THE LINK FOR THE ABOVE SOFTWARE IS GIVEN BELOW JUST OPEN
THE DRIVE THROUGH THE LINK, DOWNLOAD AND THEN INSTALL
PROTEUS ON YOUR PC.
THE SCREENSHOT FOR THE SAME ARE ATTACHED BELOW:
1.) SEARCH “PROTEUS 8.13 SOFTWARE INSTALLATION ON
YOUTUBE.
2.) OPEN THE SHOWN VIDEO AND OPEN THE DRIVE LINK
IN HITS DESCRIPTION. AND FOLLOW THE STEPS.

46
STARTING MICROCHIP STUDIO:
1.) OPEN MICROCHIP STUDIO.
2.) CLICK ON NEW PROJECT

Figure 1
.

Figure 2

47
3.) IF THE CODE IS IN ASSEMBLY LANGUAGE USE ASSEMBLER ,ELSE
FOR
C/C++ LANGUAGE SELECT THE C/C++
(YOU CAN CHOOSE YOUR PROJECT NAME).

4.) FOR C/C++ SELECT “GCC C EXECUTABLE PROJECT”(FIG.4)


Figure 3

Figure 4

5.) SEARCH ATMEGA32 AND CHOOSE THE FIRST OPTION(FIG.5)

FIG.6 a

48
6.) DELETE THE GIVEN PROGRAM AND STARTING CODING YOUR
PROGRAM(FIG.6 a&b)

Figure 5

FIG.6 b(SAMPLE PROGRAM)

7.) AFTER CODING THE ENTIRE PROGRAM,CLICK ON DEBUG ON


THE MENU BARAND SELECT CONTINUE OR PRESS F5 KEY
WINDOW 2 WILL APPEAR FOR THE FIRST [Link] CLICK OK
AND SELECT ASSEMBLER,AND OPEN THE [Link]
[Link] AGAIN PRESS F5 KEY.(IF THERE ARE NO ERRORS
THE CODE WILL BE DEUGGED And following WINDOW WILL
APPEAR ELSE ERRORS window WILL BE SHOWN ).

49
8.) ELIMINATE THE ERROR AND DEBUGG AGAIN.
9.) NOW THE PROGRAM IS SUCESSFULLY [Link] FOR
I/O PORT (4TH POINT) ON TOOL BAR MENU TO READ THE STATUS OF
DIFFERENT PORTS.(SHOWN BELOW).

50
10.) ACCESSING HEX FILE OF THE PROGRAM.
a) FIRST STOP DEBUGGING(CTRL+SHIFT+F5 ) AND CLICK [Link]
FILE(fig.7)
b) CLICK ON THE OUTPUT FILES IN THE SOLUTION EXPLORER AND
SELECT. HEX FILE
COPY THE PATH OF THE FILE.
(THE PATH WILL BE USED TO LOAD/BURN THE HEX FILE ON THE
AVR CHIP)

51
NOTE:
THE ABOVE CODE AND DEBUGGING IS SHOWN FOR ASSEMBLY
LANGUAGE PRORAM.
FOR C/C++ THE PROCESS IS NEARLY SAME.

• STARTING PROTEUS SOFTWARE:


1.) OPEN THE PROTEUS SOFTWARE.

2.) CLICK NEW PROJECT, YOU CAN ONLY CHANGE RHE


NAME OF THE PROJECT DO NOT TRY TO CHANGE ANY
OTHER FUNCTIONS, JUST CLICK “NEXT” AND “FINISH”.

52
3.) CLICK ON THE “P” BUTTON SHOWN IN THE FIGURE AND
SEARCH
“ATMEGA32” ON THE KEYBOARD.
SELECT THE DEVICE BY DOUBLE CLICKING OR SELECTING “OK”
AS SHOWN. (YOU CAN USE MORE THAN ONE COMPONENTS JUST
SEARCH BY NAME)

53
YOU CAN GET THE GROUND AND OTHER [Link] HERE.

4.) COMPLETE THE CIRCUIT AS SHOWN AND THEN DOUBLE


CLICK THE CONTROLLER UNIT TO LOAD THE HEX FILE
CREATED FROM MICROCHIP STUDIO.

5.) CLICK ON THE “PROGRAM FILE” OPTION ALSO YOU CAN


CHANGE THE CRYSTAL FREQ. USING “CKSEL FUSES” OPTION.
(DO NOT CHANGE OTHER FUNCTIONS).

54
5.) PASTE THE PATH OF THE HEX FILLE COPIED FROM
MICROCHIP EARLIER AND SELECT THE “.HEX” FILE
AND CLICK OPEN.->

8.) AFTER THE FILE SHOWS UP CLICK “OK” AND CLICK


RUN PROGRAM BUTTON ON BOTTOM LEFT.

9.) THE PROGRAM WILL START BURNING INTO YOU PROTEUS


SOFTWARE AS SHOWN BELOW.

55
• HARDWARE PROJECT
TOPIC - GPS MODULE (uBlox NEO 6M GPS)
INTERFACING WITH ATMEGA32.
• COMPONENTS REQUIRED-
1) ATMEGA32/16.
2) GPS MODULE (uBlox NEO 6M GPS)
3) WIRE ANTENNA
4)16*2 ALPHANUMERIC LCD
5)VOLTAGE REGULATOR LM7805
6)CRYSTAL OSC, (8MHz/16MHz)
7)2*CAPACITOR (22PF) CERAMIC
8)CAPACITOR 1000uf
9)CAPACITOR 10uf
10)DC JACK AND 12V ADAPTOR
11)2*1 Kohm , 1*10 kohm , 1* 2.2 kohm resistors.(1/2 or ¼ watt)
12) 1 general led

56
13)BURG STRIPS AND JUMPER WIRES.

GPS MODULE PINOUT


Ublox Neo 6M is a serial GPS module that provides location details through
serial communication. It has four pins.

PINS DESCRIPTION
VCC 2.7-5V SUPPLY
GND GROUND
TXD TRANSMIT DATA
RXD RECEIVE DATA

GPS module is TTL compatible and its specifications is given below.


Capture time Cool start : 27s , Hot start :1s
Serial communication 9600bps , 8 data bits , 1 stop bit , no
parity and no flow control
Operating current 45mA
The GPS Module will transmit data in multiple strings at 9600 Baud Rate. If we use an
UART terminal with 9600 Baud rate, we can see the data received by GPS.

GPS module sends the Realtime tracking position data in NMEA format The National
Marine Electronics Association (NMEA). NMEA format consist several sentences, in which
four important sentences are given below.

• $GPGGA: Global Positioning System Fix Data


• $GPGSV: GPS satellites in view
• $GPGSA: GPS DOP and active satellites
• $GPRMC: Recommended minimum specific GPS/Transit data

This is the example of data received by GPS.

$GPRMC,141848.00,A,2237.63306,N,08820.86316,E,0.553,,100418,,,A*73
$GPVTG,,T,,M,0.553,N,1.024,K,A*27
$GPGGA,141848.00,2237.63306,N,08820.86316,E,1,03,2.56,1.9,M,-54.2, M,,*74
$GPGSA,A,2,06,02,05,,,,,,,,,,2.75,2.56,1.00*02
$GPGSV,1,1,04,02,59,316,30,05,43,188,25,06,44,022,23,25,03,324,*76
$GPGLL,2237.63306,N,08820.86316,E,141848.00,A,A*65

57
When we use GPS module for tracking any location, we only need coordinates and
we can find this in $GPGGA string. Only $GPGGA (Global Positioning System Fix
Data) String is mostly used in programs and other strings are ignored.

$GPGGA,[Link],LATITUDE,N,LONGITUDE,E,FQ,NOS,HDP,ALTITUDE,M
,HEIGHT,M,,CHECKSUM DATA

FQ- Fix Quantity 0= invalid data, 1= valid data, 2=DGPS fix


NOS- NO. OF SATELLITE
HDP- HORIZONTAL DILUTION OF PRECISION

CIRCUIT DIAGRAM(PROTEUS)

Whole system is powered by a 12v DC Adapter, but the circuits works on 5v so the
power supply is regulated to 5v by LM7805 voltage regulator. A 16x2 LCD is
configured in 4-bit mode and its pin connections are shown in the circuit
diagram. GPS is also powered by 5v and its tx pin is directly connected to Rx
of Atmega32 microcontroller. A 8MHz crystal oscillator is used to clock the
microcontroller.

58
Steps to Interface GPS with AVR Microcontroller
1. Set the configurations of the microcontroller which include Oscillator
configuration.
2. Set the Desired port for LCD including DDR register.
3. Connect the GPS module to the microcontroller using USART.

59
4. Initialize the system UART in ISR mode, with 9600 baud rate and LCD in 4bit
mode.
5. Take two character arrays depending on the Length of Latitude and Longitude.
6. Receive one character bit at a time and check whether it is started from $ or not.
7. If $ is received then it is a string, we need to check $GPGGA, this 6 letters
including $.
8. If it is GPGGA, then receive the complete string and set flags.
9. Then extract the latitude and longitude with directions in two arrays.
10. Finally print the latitude and longitude arrays in LCD.

SOME DIFFERENT HARDWARE THAT CAN ALSO BE USED


1.) ATMEGA16 INSTEAD ATMEGA32
2.) 4*20 LCD (INTERFACING WILL BE DIFFERENT)
HOW TO BURN HEX FILE ON HARDWARE ATMEGA32
1.) DOWNLOAD DRIVER INSTALLER NAMED “ZADIG” AND FILE
BURNER “PROGISP”.

60
2.) THE PROGISP WILL BE IN ZIPFILE SO EXTRACT THR FILES
AND YOU WILL FIND PROGISP NAMED APPLICATION.

3.) NOW CONNECT THE USBASP(DRIVER/BURNER)


TO THE ATMEGA32 WITH PROPER PIN
CONNECTIONS ,VCC AND GND.(ONLY CONNECT
MOSI((PB5),MISO(PB6),SCK(PB7),RST,VCC &GND)

4.) NOW INSERT THE USBASP TO THE PC AND OPEN ZADIG,

61
5.) SELECT OPTIONS ->LIST ALL DEVICES->SELECT
USBASP FROM THOSE DEVICES.
6.) NOW FIRST INSTALL “WinUSB (v6.1.7600.16385)” DRIVER TO
THE PC
THEN INSTALL” libusb-win32 (v1.2.7.3)” DRIVER TO THE PC.

7.) NOW OPEN PROGISP AND SELECT THE REQUIRED


CHIP.(NOTE THAT PRG-ISP MUST GLOW WHICH INDICATES
THAT THE CHIP IS CONNECTED TO PC to BURN hex files ).

62
8.) WHEN PRG-ISP GLOWS YOU CAN CLICK ON “ERASE” TO
ERASE THE CHIP,AND CLICK LOAD FLASH TO ADD THE HEX
FILE ,THEN CLICK “AUTO” TO FINALLY LOAD THE HEX FILE
TO THE CHIP(ATMEGA32).
• SOME EXTRA ERRORS:
”CHIP ERROR”-USE JUMPER(JP3) ON
USBASP.
9.) YOU WILL SE “CHIP ERASED SUCCESSFULLY” ON THE
MESSAGE TABLE BELOW THE INTERFACE.
NOTE:
DO NOT CHANGE or WRITE ANY FUSE BITS ON THE CHIP AND
PROGISP SOFTWARE.
10.)MAKE THE REQUIRED HARDWARE CIRCUIT ON THE PCB OR
BREADBOARD AND LOAD/BURN THE HEX FILE AND RUN THE
PROGRAM.

63
note : if the output files[Hex file] isn’t visible to you please click on the icon named
solution explorer.
You will find the output files window.

NOTE: to add more elements(like IR sensor ) or more into proteus software you can
import libraries corresponding to the sensor or element.
The you-tube video is shared here for the refrence kindly follow the instructions in the
video

64

You might also like