microcontroller part 2
TRANSCRIPT
https://www.facebook.com/groups/embedded.system.KS/
Embedded System
PART 2ENG.KEROLES SHENOUDA
1
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Index (1) GPIO/DIO/IO Module
Atmel-8155-8-bit-Microcontroller-AVR-ATmega32A_Datasheet
DIO_LAB1
DIO_LAB2
DIO_Project1:LED Matrix 8*8
quiz1: 7- segment “assembly Code”
DIO_LAB3:Two- digital Display Module DIO_Project2Seven Segment Digital Clock
GPIO Driver
References
2
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
What will get on Embedded System
AVR Microcontroller
AVR Interfacing
ARM SOC
ARM Tiva C
3
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Get Started With Eclipse and AVR
Install AVR-GCC and AVR Dude
https://sourceforge.net/projects/winavr/files/
4
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
install the avr-eclipse plugin.5
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
install the avr-eclipse plugin.
This opens the screen to specify the plug-in to install.
Here you just enter the update URL of AVR-Eclipse
(http://avr-eclipse.sourceforge.net/updatesite/), press
enter and select the AVR Eclipse Plugin:
After you click Next you will be asked a lot of question, if you
accept licenses or if you trust unsigned software – to install
answer them all with yes. When the installation is finished Eclipse
wants to restart, you should do it.
6
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Create the first Project7
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Create the first Project 8
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
install GNU Win32 project
http://gnuwin32.sourceforge.net/packages/make.htm
9
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
A quick change of PATH demonstrated this would allow a
successful compile from the command line and so I made the equivalent change in Eclipse:
1) Go to Window->Preferences and then to the AVR->Paths section. Here select the entry for GNU make
10
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Click Edit… and then Browse… and navigate to the path to the newly
installed make.exe
11
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Build Done12
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Open Proteus13
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Open Design then point to AMIT KIT14
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
We will work on ATmega Evaluation KIT REV5
Modeled on Proteus15
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
16
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Enable the Led0,1,2 17
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Simulate18
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Debug 19
https://www.facebook.com/groups/embedded.system.KS/
GPIO/DIO/IO
20
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
GPIO / DIO / IO
GPIO is a digital Module, responsible on control all the PINS on the SOC
It is called
GPIO : General Purpose Input/Output
DIO : Directive input/Output
IO : input/Output
I will describe the GPIO on a General Concept and general Capabilities And Features.Then will read the Atmega32 GPIO.And on the future you will read the TivaC GPIO by yourself
21
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
CPU
RAM
ROM
Interrupt Controller
UART
CAN
ADC
GPIO
Uart_TX
CAN_TX
Analog_ip
Registers
Controller MUX
Externalinterrupt
IRQ = specific NumberAccording to the SOC Specs
Irq number
PORT
PIN
22
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
CPU
RAM
ROM
Interrupt Controller
UART
CAN
ADC
GPIO
Uart_TX
CAN_TX
Analog_ip
Registers
Controller MUX
Externalinterrupt
IRQ = specific NumberAccording to the SOC Specs
Irq number
PIN
Each PINCan be configured as
Alternative Signal GPIO SignalLike in this example
UART_TXCAN_TXAnlog_ip
23
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
CPU
RAM
ROM
Interrupt Controller
UART
CAN
ADC
GPIO
Uart_TX
CAN_TX
Analog_ip
Registers
Controller MUX
Externalinterrupt
IRQ = specific NumberAccording to the SOC Specs
Irq number
PIN = UART_TX
Each PINCan be configured as
Alternative Signal GPIO SignalLike in this example
UART_TXCAN_TXAnlog_ip
You Can Configure PIN to be alternative Signal
Then Write on the MUX register to choose the
UART_TX
24
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
CPU
RAM
ROM
Interrupt Controller
UART
CAN
ADC
GPIO
Uart_TX
CAN_TX
Analog_ip
Registers
Controller MUX
Externalinterrupt
IRQ = specific NumberAccording to the SOC Specs
Irq number
PIN = CAN_TX
Each PINCan be configured as
Alternative Signal GPIO SignalLike in this example
UART_TXCAN_TXAnlog_ip
You Can Configure PIN to be alternative Signal
Then Write on the MUX register to choose the
CAN_TX
25
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
CPU
RAM
ROM
Interrupt Controller
UART
CAN
ADC
GPIO
Uart_TX
CAN_TX
Analog_ip
Registers
Controller MUX
Externalinterrupt
IRQ = specific NumberAccording to the SOC Specs
Irq number
PIN = Anlog_ip
Each PINCan be configured as
Alternative Signal GPIO SignalLike in this example
UART_TXCAN_TXAnlog_ip
You Can Configure PIN to be alternative Signal
Then Write on the MUX register to choose the
Anlog_ip
26
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
CPU
RAM
ROM
Interrupt Controller
UART
CAN
ADC
GPIO
Uart_TX
CAN_TX
Analog_ip
Registers
Controller MUX
Externalinterrupt
IRQ = specific NumberAccording to the SOC Specs
Irq number
PIN
Each PINCan be configured as
Alternative Signal GPIO Signal
InputOutput
Normal Input
External Interrupt
GPIO Signal
Externalinterrupt
27
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
CPU
RAM
ROM
Interrupt Controller
UART
CAN
ADC
GPIO
Uart_TX
CAN_TX
Analog_ip
Registers
Controller MUX
Externalinterrupt
IRQ = specific NumberAccording to the SOC Specs
Irq number
PIN = Externalinterrupt
Each PINCan be configured as
Alternative Signal GPIO Signal
InputOutput
Normal Input
External Interrupt
GPIO Signal
Externalinterrupt
You Can Configure PIN to be GPIO Signal, Input and
External interrupt
28
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
CPU
RAM
ROM
Interrupt Controller
UART
CAN
ADC
GPIO
Uart_TX
CAN_TX
Analog_ip
Registers
Controller MUX
Externalinterrupt
IRQ = specific NumberAccording to the SOC Specs
Irq number
PIN = INPUT
Each PINCan be configured as
Alternative Signal GPIO Signal
InputOutput
Normal Input
External Interrupt
GPIO Signal
Externalinterrupt
You Can Configure PIN to be GPIO Signal, Normal InputThe CPU will read the GPIO
Data Register
29
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
CPU
RAM
ROM
Interrupt Controller
UART
CAN
ADC
GPIO
Uart_TX
CAN_TX
Analog_ip
Registers
Controller MUX
Externalinterrupt
IRQ = specific NumberAccording to the SOC Specs
Irq number
PIN = OUTPUT
Each PINCan be configured as
Alternative Signal GPIO Signal
InputOutput
Normal Input
External Interrupt
GPIO Signal
Externalinterrupt
You Can Configure PIN to be GPIO Signal, Output
The CPU will write the GPIO Data Register
30
https://www.facebook.com/groups/embedded.system.KS/
GPIO/DIO/IOFOR ATMEGA32
31
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
ATMega32 Pin out & Descriptions
These pins are used to connect
external crystal or RC oscillator
Provides supply voltage to the
chip. It should be connected to +5
Supply voltage for ADC and portA.
Connect it to VCC
Clears all the registers and
restart the execution of
program
Reference voltage for ADC
Port APort B
Port DPort C
32
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
ATMega32 Pin out & DescriptionsMega32/Mega16
(XCK/T0) PB0
(T1) PB1
(INT2/AIN0) PB2
(OC0/AIN1) PB3
(SS) PB4
(MOSI) PB5
(MISO) PB6
(SCK) PB7
RESET
VCC
XTAL2
GND
XTAL1
(RXD) PD0
(TXD) PD1
(INT0) PD2
(INT1) PD3
(OC1B) PD4
(OC1A) PD5
(ICP) PD6
PA0 (ADC0)
PA1 (ADC1)
PA2 (ADC2)
PA3 (ADC3)
PA4 (ADC4)
PA5 (ADC5)
PA6 (ADC6)
PA7 (ADC7)
AREF
AGND
PC7 (TOSC2)
AVCC
PC6 (TOSC1)
PC5 (TDI)
PC4 (TDO)
PC3 (TMS)
PC2 (TCK)
PC1 (SDA)
PC0 (SCL)
PD7 (OC2)
DDRAPORTA
PINA
DD
RB
PIN
B
PO
RT
B
DDRCPORTC
PINC
33
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
ATMega32 Pin out & Descriptions34
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Atmel-8155-8-bit-Microcontroller-
AVR-ATmega32A_Datasheet
35
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Atmel-8155-8-bit-Microcontroller-
AVR-ATmega32A_Datasheet
36
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Atmel-8155-8-bit-Microcontroller-
AVR-ATmega32A_Datasheet
37
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Atmel-8155-8-bit-Microcontroller-
AVR-ATmega32A_Datasheet
38
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Atmel-8155-8-bit-Microcontroller-
AVR-ATmega32A_Datasheet
39
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Atmel-8155-8-bit-Microcontroller-
AVR-ATmega32A_Datasheet
40
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Atmel-8155-8-bit-Microcontroller-
AVR-ATmega32A_Datasheet
41
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
HAND
WRITING
42
https://www.facebook.com/groups/embedded.system.KS/
HAND WRITING
43
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
ATMega32 Elementary I/O: LEDs
• LEDs must be connected the correct way round,the diagram may be labeled a or + for anode andk or - for cathode (yes, it really is k, not c, forcathode!). The cathode is the short lead andthere may be a slight flat on the body of roundLEDs. If you can see inside the LED the cathode isthe larger electrode (but this is not an officialidentification method).
• LEDs can be damaged by heat when soldering,but the risk is small unless you are very slow. Nospecial precautions are needed for solderingmost LEDs.
• LEDs are available in red, orange, amber, yellow,green, blue and white. Blue and white LEDs aremuch more expensive than the other colors. Thecolor of an LED is determined by thesemiconductor material, not by the coloring ofthe 'package' (the plastic body).
An LED is a semiconductor device that converts electrical energy directly into adiscrete color of light
44
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
ATMega32 Elementary I/O: LEDs• Never connect an LED directly to a battery or power supply! It will be
destroyed almost instantly because too much current will pass through andburn it out.
• LEDs must have a resistor in series to limit the current to a safe value, for quicktesting purposes a 1k resistor is suitable for most LEDs if your supply voltage is12V or less.
• The resistor value, R is given by:
• Estimate 1.5 - 2 V voltage drop (VL)
• Typically draws 10-20 mA (I)
Unless you know what are you doing!
45
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
ATMega32 Elementary I/O: LEDs
+5VR
output pin1
+3.2V
No current
Currentlight
Estimate R =voltagecurrent
=5 – 1.8 – 0.4
13 x 10 -3 = 215 Ω ~ 220 Ωeasier to get
LED
no light+5V
+5VR
output pin0
LED
+0.4V
Turning on an LED
Setting the pin to high will not turn ON the LED
Setting the pin to low will turn ON the LED
46
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
DIO_LAB1
Write A embedded C Code
To toggle 3 Led on sequential way
Then start a tick(pulse) by Buzzer then
Rerun again
Port D pin 5,6,7 as output (LED)Port D pin 4 (Buzzer)
step1
step2
step3
step4avr/io.h and util/delay.h
47
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
DIO_LAB1 Solution: Create
ATMEGA32_registers.h to be independent on
avr/io.h
48
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
DIO_LAB1 Solution:
write the Code 49
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
DIO_LAB1 Solution:
write the Code 50
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
It will be helpful if you learned to
Create the ATMEGA32_Registers.h
for All Atmega32 Registers
51
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
DIO_Project1:
LED Matrix 8*8
52
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
DIO_Project1
Seven Segment Digital Clock Write a program for a 2-D Led array
(1*2 LCD) using all GPIO pins in Atmeg32, that acts like a real screen. The Screen is divided into two (8*8) frames (characters), and write a two functions that takes a character and print it for each frame. And simulate the project using proteus. the following figure shows one frame
53
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
DIO_Project1
Seven Segment Digital Clock Say if we want to turn on LED D10 in
the matrix, we need to power the PIN14 of module and ground the PIN3 on module. With this the D10 will turn ON. This is shown in the figure below. This should be first check for MATRIX to know everything in order.
54
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
DIO_Project1
Seven Segment Digital Clock Say if we want to turn on D1, we
need to power PIN9 of matrix and ground the PIN13. With that LED D1 will glow. The current direction for this case is shown in below figure.
55
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
DIO_Project1
Seven Segment Digital Clock Now for the tricky part, consider we
want to turn on both D1 and D10 at a time. So we power both PIN9, PIN14 and ground both PIN13, PIN3. With that we will have D2 and D9 ON along with D1 and D10. It’s because they share common terminals. So if we want to turn LEDs along the diagonal, we will be forced to turn ON all the LEDs along the way. This is shown in below figure.
56
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
DIO_Project1
Seven Segment Digital Clock So to eliminate this problem we will turn only one led on at a
time. Say at t=0m SEC, LED D1 is tuned ON. At t = 1m SEC, LED D1 is tuned OFF and LED D2 is turned ON. Again at t=2 m SEC, LED D2 is turned OFF and LED D1 is turned ON. This goes on.
Now the trick is, the human eye cannot capture a frequency more than 30 HZ. That is if a LED goes ON and OFF continuously at a rate of 30HZ or more. The eye sees the LED as continuously ON. However this is not the case. The LED will be constantly turning ON and OFF. This technique is called multiplexing.
By using multiplexing, we will turn only one row at a time, and there will be cycling around the 8 rows continuously. This visualized as a completely turned ON matrix for a naked eye.
Multiplexing With very speed
To render Each row
57
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Solution For Led Matrix
Video
The Video also on https://drive.google.com/open?id=0B7kUsgpvTWFLVnNYSnJ2RWpHc0E
58
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
59
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
For Example if we want to display
character E
First we will make PORTC= 0x80 (c1=1 (0b1000 0000))
PORTC Select
PORTD = 0xff (0b1111 1111)
PO
RT
D
60
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
For Example if we want to display
character E
First we will make PORTC= 0x40 (c2=1 (0b0100 0000))
PORTC Select
PORTD = 0xff (0b1111 1111)
PO
RT
D
61
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
For Example if we want to display
character E
First we will make PORTC= 0x20 (c3=1 (0b0010 0000))
PORTC Select
PORTD = 0x0 (0b0000 0000)
PO
RT
D
62
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
For Example if we want to display
character E
First we will make PORTC= 0x10 (c4=1 (0b0001 0000))
PORTC Select
PORTD = 0x36 (0b00110110)
PO
RT
D
63
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
For Example if we want to display
character E
First we will make PORTC= 0x8 (c5=1 (0b0000 1000))
PORTC Select
PORTD = 0x36 (0b00110110)
PO
RT
D
64
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
For Example if we want to display
character E
First we will make PORTC= 0x4 (c6=1 (0b0000 0100))
PORTC Select
PORTD = 0x36 (0b00110110)
PO
RT
D
65
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
For Example if we want to display
character E
First we will make PORTC= 0x2 (c7=1 (0b0000 0010))
PORTC Select
PORTD = 0xff(0b1111 1111)
PO
RT
D
66
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
For Example if we want to display
character E
First we will make PORTC= 0x2 (c8=1 (0b0000 0010))
PORTC Select
PORTD = 0xff(0b1111 1111)
PO
RT
D
67
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
PORTC Select
Multiplexing With very speed
To render Each Column
Make your eyes see the character
Appear like this
68
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Each character have 8 valuesFor eight columns
69
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
70
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Led 2 1 0
write embedded C program “up/down binary Counter”
By three leds and two push button
01
7……
sw0sw1
DIO_Quiz1 71
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
I/O: 7-Segment Display
There are applications where you need to display a decimal
digit using a seven segment LED display.
The display could represent e.g. the number of times a
switch was pressed.
Digits 0-9 and hex A-F can be displayed by giving the
proper 7-segment codes
q g f e d c b a q g f e d c b a
0 0 1 1 1 1 1 1 8 1 1 1 1 1 1 1
1 0 0 0 0 1 1 0 9 1 1 0 0 1 1 1
2 1 0 1 1 0 1 1 A 1 1 1 0 1 1 1
3 1 0 0 1 1 1 1 b 0 0 1 1 1 1 1
4 1 1 0 0 1 1 0 C 0 1 1 1 0 0 1
5 1 1 0 1 1 0 1 d 1 0 1 1 1 1 0
6 1 1 1 1 1 0 1 E 1 1 1 1 0 0 1
7 0 0 0 0 1 1 1 F 1 1 1 0 0 0 1
72
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
I/O: 7-Segment Display
Common-anode :
requires VCC
LED ON when Output is LOW.
Common-cathode :
NO VCC ,
LED ON when Output is HIGH.
TTL and CMOS devices are
normally not used to drive the
common-cathode display directly
because of current (mA)
requirement. A buffer circuit is
used between the decoder chips
and common-cathode display
73
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
I/O: 7-Segment Display 74
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
I/O: 7-Segment Display
A 7-Segment LED could be attached as shown:
75
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
I/O: 7-Segment Display
Or:
76
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
DIO_Lab2 :
A 7-segment is connected to PORTA.
Write an assembly/embedded C Code
to Display 1 on the 7-segment.
ATmega32
8PORTC
0
1
2
3
56
4
77
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
DIO_Lab2 Solution: assembly
A 7-segment is connected to PORTA. Display 1 onthe 7-segment.
ATmega32
8PORTC
0
1
2
3
56
4
1 1 1 1 1 1 1 1
0 0 0 0 0 1 1 0
DDRC
:PORTC:
;; DIO_lab2.asm;; Author : kkhalil;; Replace with your application code
LDI R20,0x06 ;R20 = 00000110 (binary)OUT PORTC,R20 ;PORTC = R20LDI R20,0xFF ;R20 = 11111111 (binary)OUT DDRC,R20 ;DDRC = R20 ;Delay 1;cycle latency
L1: RJMP L1
78
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
DIO_Lab3 :Two- digital Display Module
7 Segment Display
DATA LINES:
- 7SEG_APORTC .4
- 7SEG_BPORTC .5
- 7SEG_CPORTC .6
- 7SEG_DPORTC .7
DECIMAL POINT:
- 7SEG_DPPORTB .0
ENABLE LINES
- 7SEG_EN1PORTC .2
- 7SEG_EN2PORTC .3
The trick is, the human eye cannot capture a frequency
more than 30 HZ. That is if a LED goes ON and OFF
continuously at a rate of 30HZ or more. The eye sees the
LED as continuously ON. However this is not the case.
The LED will be constantly turning ON and OFF. This
technique is called multiplexing.
79
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
DIO_Lab3 :Two- digital Display
Module
Write an embedded C Code to “up Counter” from 0 to 99.
80
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
DIO_Lab3 :Two- digital Display
Module
Write an embedded C Code to “up Counter” from 0 to 99.
81
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
DIO_Lab3 :Two- digital Display
Module
Write an embedded C Code to “up Counter” from 0 to 99.
82
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
DIO_Lab3 Solution: Write an embedded C Code to
“up Counter” from 0 to 99.
83
https://www.facebook.com/groups/embedded.system.KS/
How To Write Driver
For GPIO/DIO/IO
FOR ATMEGA32
84
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Create Eclipse Project
DriverCreate your own files,
Don’t depend on anything
Be Professional ;)
Write your application here
85
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Mydelay.h86
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Data_Types.h 87
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Atmega32_rgisters.hget all the registers absolute address from SPECS
88
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Atmega32_rgisters.hget all the registers absolute address from SPECS
89
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
For the GPIO Driver Create two Files GPIO.h & GPIO.c
GPIO.c
GPIO.h #include “GPIO.h”
90
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
GPIO.h91
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
GPIO.h92
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
GPIO.c93
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
GPIO.c94
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
GPIO.c95
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
GPIO.c96
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
GPIO.c97
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
GPIO.c98
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Now Write a simple application To toggle led0 which connected to
D5 Main.c
GPIO.C
ATMEGA32
GPIOD5
99
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
CPU
RAM
ROM
Interrupt Controller
UART
CAN
ADC
GPIO
Uart_TX
CAN_TX
Analog_ip
Registers
Controller MUX
Externalinterrupt
IRQ = specific NumberAccording to the SOC Specs
Irq number
D5Toggle Led
.txt(main.c/GPIO.c)
Stack/Heap/Data_Memory
100
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
main.c101
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Simulate on ISIS102
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Kindly you can find the Source code in
https://github.com/keroles/Embedded_System/tree/master/Atmega32_Drivers/ATMEGA32_Drivers
103
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
How To Debug the Code on ISIS ?
104
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
105
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
.elf image contains debug information
.hex not contain Any debug information
The compiler can generate different types of files, according to what you need. On a PC, the compiler generates an executable file with the extension ”.exe”. However, microcontrollers need a different, dedicated format. For our microcontroller we will be using HEX (extension ”.hex”) files. Other possible formats generated by the compiler are: .elf, .map, .eeprom
106
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
AVR Tool-Chain provide
AVR Libc represents the AVR library provided by Atmel. It defines all the
register names (together with their bits), as well as other useful functions.
GCC represents the GNU Compiler Collection. Together with the GNU
binutils it generates the HEX files.
AVR-GDB, AVaRICE, ISIS and SimulAVR can help simulate / debug the
behavior of your microcontroller application on a PC.
107
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
Simulator versus emulator
An emulator only mimics the observable behaviour of a target, whereas a simulator also models the internal state of the target. In this respect, emulators are faster, but they might also be prone to behaviours / errors that the original target would not manifest.
What is a debugger?
The purpose of a debugger is to allow you to see what is going on “inside” another program while it executes - or what another program was doing at the moment it crashed
108
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
How To Debug the Code on ISIS ?
First Go to eclipse project
settingsAnd enable the debug informationAs shown
109
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
How To Debug the Code on ISIS ?
First Go to eclipse project
settingsAnd enable the debug informationAs shown
110
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
How To Debug the Code on ISIS ?
Second Build
the Project
111
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
How To Debug the Code on ISIS ?
Third Copy all the Build output files and all the source code which
inside the eclipse project to the ISIS Project folder beside your
Prject.DSN
112
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
How To Debug the Code on ISIS ?
Fourth open ISIS Project
and open the Atmega32 IC and pass the elf image toProgram file
113
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
How To Debug the Code on ISIS ?
FIFTH run the simulation and press
pause then Open the AVR source code window as shown
114
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
How To Debug the Code on ISIS ? 115
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
116
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
DIO_Project2:
Seven Segment Digital Clock
117
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
DIO_Project2
Seven Segment Digital Clock Our digital clock operates as follows. When the circuit is powered up the clock
starts at "00:00:00" for "HH:MM:SS". There are two push-button switches used to set the time. Switch SW1 is for setting the minutes, when this button is pressed the minutes in increase until it reaches 59 then reset and start counting from 0. Switch SW2 is for setting the hours.
All seven segment displays are driven by the same port (PortB). The microcontroller through controls from PortC indicate which seven segment display each digit is displayed on. Note that these Seven Segment Displays are common cathode display.
118
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
DIO_Project2
Seven Segment
Digital Clock
119
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
DIO_Project2
Seven Segment Digital Clock
120
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
GPIO Project 3
Assignment
Microcontroller
sessionWrite code to make the following
functionality:
121
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
References
https://docs.google.com/viewer?a=v&pid=sites&srcid=ZmtlLnV0bS5teXxyaWR6dWFuLXMtd2Vic2l0ZXxneDo2ODU0NzlkM2JkOTg4MjRk
http://www.avrprojects.net/index.php/avr-projects/sensors/38-humidity-and-temperature-sensor-dht11?showall=&start=1
http://www.cse.wustl.edu/~lu/cse467s/slides/dsp.pdf
http://www.avr-tutorials.com/
Microprocessor: ATmega32 (SEE3223-10) http://ridzuan.fke.utm.my/microprocessor-atmega32-see3223-10
http://circuitdigest.com/article/what-is-the-difference-between-microprocessor-and-microcontroller
http://cs4hs.cs.pub.ro/wiki/roboticsisfun/chapter2/ch2_7_programming_a_microcontroller
122
https://www.facebook.com/groups/embedded.system.KS/ https://www.facebook.com/groups/embedded.system.KS/
123