AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq
-
Upload
manicka-raja-pl -
Category
Education
-
view
191 -
download
2
Transcript of AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq
![Page 1: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/1.jpg)
Embedded SystemsBe Ready for Tomorrow…
By,
PL.Manicka Raja,Embedded & Robotics Engineer,ThinkLABS Techno Solutions Pvt Ltd,SINE, IIT-Bombay, [email protected]
![Page 2: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/2.jpg)
What is Embedded Systems?
© 2013, www.thinklabs.in 2
![Page 3: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/3.jpg)
© 2013, www.thinklabs.in 3
![Page 4: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/4.jpg)
© 2013, www.thinklabs.in 4
![Page 5: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/5.jpg)
© 2013, www.thinklabs.in 5
![Page 6: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/6.jpg)
About Microcontroller
ATmega64
AT - ???
Mega - ???
64 - ???
© 2013, www.thinklabs.in 6
![Page 7: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/7.jpg)
KEY Notes
REGISTERS…?
Types of Registers
General Purpose Registers
Special Registers
© 2013, www.thinklabs.in 7
![Page 8: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/8.jpg)
GENERAL PURPOSE – I/ODDRx …..
PORTx
PINx
Where X represents A,B,C,D….F,G.
© 2013, www.thinklabs.in 8
![Page 9: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/9.jpg)
Special PurposeUART
TIMERS
ADC
SPI
I2C
EEPROM© 2013, www.thinklabs.in 9
![Page 10: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/10.jpg)
8 - BIT REGISTER ACCESSING
7 6 5 4 3 2 1 0
MSB…… …..LSB
© 2013, www.thinklabs.in 10
![Page 11: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/11.jpg)
© 2013, www.thinklabs.in 11
![Page 12: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/12.jpg)
Output Step 1 : Configuration or Initialization
DDRx = 1 – Output, 0 – input
Step 2 : Status
PORTx = 1 – Logic High ( 5 volts) 0 – Logic Low (0 volts)
Where X represents A,B,C,D….F,G.
© 2013, www.thinklabs.in 12
![Page 13: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/13.jpg)
© 2013, www.thinklabs.in 13
![Page 14: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/14.jpg)
© 2013, www.thinklabs.in 14
![Page 15: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/15.jpg)
© 2013, www.thinklabs.in 15
![Page 16: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/16.jpg)
© 2013, www.thinklabs.in 16
![Page 17: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/17.jpg)
BLINK LED - Program#include<avr/io.h>void main(){
DDRC=OxFF; // Configuration
PORTC=OxOO; // All LEDS - ON, Active Low
PORTC=OxFF; // All LEDS - OFF,
}
© 2013, www.thinklabs.in 17
![Page 18: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/18.jpg)
BLINK LED - Program#include<avr/io.h>
void main(){
DDRC=OxFF; // Configurationwhile(1) // super loop{PORTC=OxOO; // All LEDS - ON, Active Low
PORTC=OxFF; // All LEDS - OFF,
}}
© 2013, www.thinklabs.in 18
![Page 19: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/19.jpg)
BLINK LED - Program#include<avr/io.h>#include<util/delay.h>void main(){
DDRC=OxFF; // Configurationwhile(1) // super loop{PORTC=OxOO; // All LEDS - ON, Active Low_delay_ms(1000);PORTC=OxFF; // All LEDS - OFF,_delay_ms(1000);
}}
© 2013, www.thinklabs.in 19
![Page 20: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/20.jpg)
INPUT
© 2013, www.thinklabs.in 20
![Page 21: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/21.jpg)
INPUT
© 2013, www.thinklabs.in 21
![Page 22: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/22.jpg)
INPUT
© 2013, www.thinklabs.in
Vcc
22
![Page 23: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/23.jpg)
INPUT
© 2013, www.thinklabs.in
Vcc
23
![Page 24: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/24.jpg)
INPUT
© 2013, www.thinklabs.in
Vcc
24
![Page 25: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/25.jpg)
© 2013, www.thinklabs.in 25
![Page 26: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/26.jpg)
Functions of PORTx Register in GPIO
Output Input
DDRx 1 0
PORTx
1 0 1 0
Logic High Logic Low Enable Internal Pull-Up
Disable Internal Pull-Up
5 volts 0 volts Stable state - 1 Floating state ( 0 or 1)
© 2013, www.thinklabs.in 26
![Page 27: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/27.jpg)
© 2013, www.thinklabs.in 27
![Page 28: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/28.jpg)
Input Step 1 : Configuration or Initialization
DDRx =
Step 2 : Pull – Up
PORTx =
1 – Enable Pull – UP
0 – Disable Pull – UP
Step 3 : Checking
1 – Switch is not pressed
0 – Switch is pressed
Switches are Active Low, When pressed , it gives 0.© 2013, www.thinklabs.in 28
![Page 29: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/29.jpg)
© 2013, www.thinklabs.in 29
![Page 30: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/30.jpg)
© 2013, www.thinklabs.in 30
![Page 31: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/31.jpg)
© 2013, www.thinklabs.in 31
![Page 32: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/32.jpg)
© 2013, www.thinklabs.in 32
![Page 33: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/33.jpg)
© 2013, www.thinklabs.in 33
![Page 34: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/34.jpg)
© 2013, www.thinklabs.in 34
![Page 35: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/35.jpg)
MSB……….LSB = Big Endian.
© 2013, www.thinklabs.in
•7654 3210
•1010 1010
• (1<< position )
• (1<<4)
BIT WISE OPERATIONS
35
![Page 36: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/36.jpg)
BIT WISE OPERATIONSWhy we need BITWISE operations…?
To change only our desired bit without affecting any other Bits in the REGISTER.
When Individual Accessing is required
When the port is both Input & Output.
© 2013, www.thinklabs.in 36
![Page 37: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/37.jpg)
© 2013, www.thinklabs.in 37
![Page 38: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/38.jpg)
BIT WISE OPERATIONS
SET BIT
To make the desired position as LOGIC 1 (ONE)
CLEAR BIT
To make the desired position as LOGIC 0 (ZERO)
CHECK BIT
To know whether the desired position is 0 or 1(Without affecting any other bits)
© 2013, www.thinklabs.in 38
![Page 39: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/39.jpg)
SET Bit - Explanation a = 0110 1010;
Desired Position is 4 So, OR function
0 1 1 O 1 0 1 0 is a0 0 0 1 0 0 0 0 is (1<<pos) ….(1<<4)-----------------------
0 1 1 1 1 0 1 0 is a= a|(1<<pos); x=x+5;
----------------------- a|=(1<<pos); x+=5;
Important Note : Rest of the BITS are not affected
© 2013, www.thinklabs.in 39
![Page 40: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/40.jpg)
One’s complement• 0001 0000 is (1<<4)
• One’s Complement…?
• 1110 1111 is one’s complement of (1<<4)
•~ is negation , used to produce one’s complement of a number.
• 11101111 is ~(1<<4)
© 2013, www.thinklabs.in 40
![Page 41: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/41.jpg)
CLEAR Bit - Explanation a = 0110 1010;
Desired Position is 5
So, AND function
0 1 1 0 1 0 1 0 is a
1 1 0 1 1 1 1 1 is ~(1<<pos) or ~(1<<5)
-----------------------
0 1 0 0 1 0 1 0 is a= a&~(1<<pos); x=x+5;
----------------------- a&=~(1<<pos); x+=5;
Important Note : Rest of the BITS are not affected
© 2013, www.thinklabs.in41
![Page 42: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/42.jpg)
SET BIT
REGISTER |= (1<<pos)
|= OR Equal to
© 2013, www.thinklabs.in 42
![Page 43: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/43.jpg)
CLEAR BIT
REGISTER &=~ (1<<pos)
&= ~AND equal to negation
© 2013, www.thinklabs.in 43
![Page 44: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/44.jpg)
CHECK BIT(REGISTER & (1<<pos))== ?
& AND is only for checking, not for assingning EQUAL ‘=’ is for assigning, BUT here we don’t assign
anything, Just checking the Status of the BIT
© 2013, www.thinklabs.in 44
![Page 45: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/45.jpg)
Multiple SET BITREGISTER |= ( refer below)
|= ((1<<7) | (1<<5) | (1<<2))
© 2013, www.thinklabs.in 45
![Page 46: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/46.jpg)
Multiple CLEAR BITREGISTER &=~ ( refer below)
&=~ ((1<<7) | (1<<5) | (1<<2))
© 2013, www.thinklabs.in 46
![Page 47: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/47.jpg)
Switch Program#include<avr/io.h>#include<util/delay.h>void main(){
DDRC=OxFF; // ConfigurationDDRD&=~(1<<6); // PORTD 6th pin is SW1PORTD|=(1<<6); //PULL – UP resistorwhile(1) // super loop{
if( (PIND & (1<<6)) == O ){PORTC=OxOO; // All LEDS - ON, Active Low_delay_ms(1000);}
}} © 2013, www.thinklabs.in 47
![Page 48: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/48.jpg)
Switch Program#include<avr/io.h>#include<util/delay.h>#define SW1 (PIND & (1<<6)) // macro for SW1
void main(){
DDRC=OxFF; // ConfigurationDDRD&=~(1<<PD6); // PD6 is already #defined as 6 @ avr/ io.hPORTD|=(1<<PD6); //PULL – UP resistorwhile(1) // super loop{
if( SW1 == O ){PORTC=OxOO; // All LEDS - ON, Active Low_delay_ms(1000);}
© 2013, www.thinklabs.in 48
![Page 49: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/49.jpg)
© 2013, www.thinklabs.in 49
![Page 50: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/50.jpg)
Direct OPERATION for REGISTERS 7..4 – o/p
3...0 – i/pDDRC = 0b11110000;
(or)
DDRC = 0xF0;
0 – input
1- output
© 2013, www.thinklabs.in 50
![Page 51: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/51.jpg)
Bitwise OPERATION for REGISTERS 7..4 – o/p
3...0 – i/pDDRC |=
((1<<7)|(1<<6)|(1<<5)|(1<<4));
(and also)
DDRC &=~((1<<3)|(1<<2)|(1<<1)|(1<<0));
© 2013, www.thinklabs.in 51
![Page 52: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/52.jpg)
Key Notes for An Embedded Developer
What is a Compiler?
What is a Cross–Compiler..?
Diff B/W uC & uP
CISC & RISC…?
Architecture…?
= Program memory & Data Memory
© 2013, www.thinklabs.in 52
![Page 53: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/53.jpg)
Compiler The process of converting high level language to the
machine level language
For the SAME processor.
Example : Turbo C, Dev C
Programs are compiled &
Output is viewed on the SAME System
© 2013, www.thinklabs.in 53
![Page 54: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/54.jpg)
Cross -Compiler The process of converting high level language to the
machine level language
For the TARGET processor.
Example : winAVR, KeilC, AVR Studio
Programs are compiled in a system &
Output is viewed on ANOTHER System
© 2013, www.thinklabs.in 54
![Page 55: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/55.jpg)
5 Golden Rules for Programming also called as Cross Compilation
1. Make New Separate folder for Each & Every Program
2. Only Makefile and .c (dot C) file…?
3. ‘M ‘of Makefile should be in Capital.
4. Target name in Makefile & some changes
5. Those three Switches in your uNiBoard
© 2013, www.thinklabs.in 55
![Page 56: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/56.jpg)
© 2013, www.thinklabs.in 56
![Page 57: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/57.jpg)
Tools to Remember
To Compile
Tools Make All
To Program
Tools Make Program
© 2013, www.thinklabs.in 57
![Page 58: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/58.jpg)
ReCap X= 6;
Right to Left Operation in C.
So, We are passing the value 6 to X,
Similarly,
DDRx=OxFF, and PORTx=OxFF;
So, We are (passing) Writing an 8 bit Value to REGISTER
But, in PINx , we are just only reading from it.
PINx & (1<< pos )
© 2013, www.thinklabs.in 58
![Page 59: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/59.jpg)
R/W - Registers
DDRx - Write Only
PORTx - Write Only
PINx - Read Only
© 2013, www.thinklabs.in 59
![Page 60: AVR I/O programming Atmega 64 uNiboard ThinkLABS maaniq](https://reader034.fdocuments.in/reader034/viewer/2022050802/55a6b8a51a28ab7c6b8b46a3/html5/thumbnails/60.jpg)
THANK U…
Contact
www.linkedin.com/in/maaniq
www.facebook.com/maaniq
© 2
01
3, w
ww
.thin
kla
bs.in
60