You are on page 1of 57

TUGAS TAMBAHAN

PERCOBAAN 1

RUNNING LED MENGGUNAKAN PUSH BUTTON

1. GAMBAR RANGKAIAN
U1
1
2
3
4
5
6
7
8

R1

R2

R3

R4

R5

R6

R7

R8

330R

330R

330R

330R

330R

330R

330R

330R

D1

D2

D3

D4

D5

D6

D7

D8

LED-YELLOW

LED-YELLOW

LED-YELLOW

LED-YELLOW

LED-YELLOW

LED-YELLOW

LED-YELLOW

LED-YELLOW

14
15
16
17
18
19
20
21
13
12
9

PB0/T0/XCK
PB1/T1
PB2/AIN0/INT2
PB3/AIN1/OC0
PB4/SS
PB5/MOSI
PB6/MISO
PB7/SCK
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/OC1B
PD5/OC1A
PD6/ICP1
PD7/OC2
XTAL1
XTAL2
RESET
ATMEGA8535

PUSH BUTTON

RUNNING LED MENGGUNAKAN PUSH BUTTON

EDY SOEPRAJITNO : 03.2008.1.06529

2. LISTING PROGRAM
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Evaluation
Automatic Program Generator
Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date
: 1/14/2012
Author : Edy Soeprajitno (03.2008.1.06529)
Company : Laboratorium Mikroprosessor ITATS
Comments:
Chip type
: ATmega8535
Program type
: Application
AVR Core Clock frequency: 8.000000 MHz
Memory model
: Small
External RAM size
: 0
Data Stack size
: 128
*****************************************************/
#include <mega8535.h>

PA0/ADC0
PA1/ADC1
PA2/ADC2
PA3/ADC3
PA4/ADC4
PA5/ADC5
PA6/ADC6
PA7/ADC7
PC0/SCL
PC1/SDA
PC2
PC3
PC4
PC5
PC6/TOSC1
PC7/TOSC2

AREF
AVCC

40
39
38
37
36
35
34
33
22
23
24
25
26
27
28
29

32
30

#include <delay.h>
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0xFF;
PORTC=0x00;
DDRC=0x00;
PORTD=0x01;
DDRD=0x00;
while (1)
{
while(PIND.0==0){
PORTB=0B00000001;
delay_ms(200);
PORTB=0B00000010;
delay_ms(200);
PORTB=0B00000100;
delay_ms(200);
PORTB=0B00001000;
delay_ms(200);
PORTB=0B00010000;
delay_ms(200);
PORTB=0B00100000;
delay_ms(200);
PORTB=0B01000000;
delay_ms(200);
PORTB=0B10000000;
delay_ms(200);
}
PORTB=0;
}
}

3. ANALISA

Ketika tombol push button ditekan maka maka led akan menyala dari D1 sampai
D8 secara berurutan dan berulang-ulang.

Ketika tombol push button dilepas maka led akan berhenti menyala berurutan
sampai led D8 dan led mati semuanya.

LAPORAN RESMI
PERCOBAAN 1
1. GAMBAR RANGKAIAN MINIMUM SISTEM 8031 + SRAM 2K + EPROM
8K DAN PPI-8255

U6
34
33
32
31
30
29
28
27
5
36
9
8
35
6

D0
D1
D2
D3
D4
D5
D6
D7

PA0
PA1
PA2
PA3
PA4
PA5
PA6
PA7

RD
WR
A0
A1
RESET

PB0
PB1
PB2
PB3
PB4
PB5
PB6
PB7

CS

PC0
PC1
PC2
PC3
PC4
PC5
PC6
PC7

4
3
2
1
40
39
38
37
18
19
20
21
22
23
24
25
14
15
16
17
13
12
11
10

8255A

2. PROGRAM TRAFFIC LIGHT


1.

GAMBAR RANGKAIAN

U1

R3
R2
R1
220

1
2
3
4
5
6
7
8

220
220

R4
R5
R6
220

14
15
16
17
18
19
20
21

220
220

13
12
9

PB0/T0/XCK
PB1/T1
PB2/AIN0/INT2
PB3/AIN1/OC0
PB4/SS
PB5/MOSI
PB6/MISO
PB7/SCK
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/OC1B
PD5/OC1A
PD6/ICP1
PD7/OC2
XTAL1
XTAL2
RESET

PA0/ADC0
PA1/ADC1
PA2/ADC2
PA3/ADC3
PA4/ADC4
PA5/ADC5
PA6/ADC6
PA7/ADC7
PC0/SCL
PC1/SDA
PC2
PC3
PC4
PC5
PC6/TOSC1
PC7/TOSC2

AREF
AVCC

40
39
38
37
36
35
34
33
22
23
24
25
26
27
28
29

D9

R9
R8
R7
220

D2

D1

220
220

R12
R11
R10
220
220
220

D10

D5

D8

D3

D6

D4

32
30

ATMEGA8535

D7

D12 D11

TRAFFIC LIGHT
EDY SOEPRAJITNO : 03.2008.1.06529

2. LISTING PROGRAM TRAFFIC LIGHT


/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Evaluation
Automatic Program Generator
Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :

Version :
Date
: 1/14/2012
Author : Edy Soeprajitno (03.2008.1.06529)
Company : Laboratorium Mikroprosessor ITATS
Comments:
Chip type
: ATmega8535
Program type
: Application
AVR Core Clock frequency: 8.000000 MHz
Memory model
: Small
External RAM size
: 0
Data Stack size
: 128
*****************************************************/
#include <mega8535.h>
#include <delay.h>
void main(void)
{
PORTA=0x00;
DDRA=0xFF;
PORTB=0x00;
DDRB=0xFF;
PORTC=0x00;
DDRC=0xFF;
PORTD=0x00;
DDRD=0xFF;
while (1)
{
PORTA.2=PORTB.0=PORTC.0=PORTD.1=0xFF;delay_ms(1000);
PORTA.2=PORTC.0=0x00;
PORTA.0=PORTB.0=PORTC.2=PORTD.1=0xFF;delay_
ms(1000);
PORTC.2=PORTD.1=0x00;
PORTA.0=PORTB.0=PORTC.1=PORTD.2=0xFF;delay_
ms(1000);
PORTB.0=PORTD.2=0x00;
PORTA.0=PORTB.2=PORTC.1=PORTD.0=0xFF;delay_
ms(1000);
PORTB.2=PORTC.1=0x00;
PORTA.0=PORTB.1=PORTC.2=PORTD.0=0xFF;delay_
ms(1000);
PORTA.0=PORTC.2=0x00;
PORTA.2=PORTB.1=PORTC.0=PORTD.0=0xFF;delay_
ms(1000);
PORTA.2=PORTB.1=0x00;
PORTA.1=PORTB.2=PORTC.0=PORTD.0=0xFF;delay_
ms(1000);
PORTB.2=PORTD.0=0x00;
PORTA.1=PORTB.0=PORTC.0=PORTD.2=0xFF;delay_
ms(1000);
PORTA.1=PORTD.2=0x00;
}

TUGAS TAMBAHAN
PERCOBAAN 2

COUNTER UP/DOWN 2 DIGIT MENGGUNAKAN PUSH BUTTON

1. GAMBAR RANGKAIAN
UP

DOWN

RESET

U1
1
2
3
4
5
6
7
8
14
15
16
17
18
19
20
21
13
12
9

PB0/T0/XCK
PB1/T1
PB2/AIN0/INT2
PB3/AIN1/OC0
PB4/SS
PB5/MOSI
PB6/MISO
PB7/SCK
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/OC1B
PD5/OC1A
PD6/ICP1
PD7/OC2
XTAL1
XTAL2
RESET

PA0/ADC0
PA1/ADC1
PA2/ADC2
PA3/ADC3
PA4/ADC4
PA5/ADC5
PA6/ADC6
PA7/ADC7
PC0/SCL
PC1/SDA
PC2
PC3
PC4
PC5
PC6/TOSC1
PC7/TOSC2

AREF
AVCC

40
39
38
37
36
35
34
33
22
23
24
25
26
27
28
29

32
30

ATMEGA8535

COUNTER UP/DOWN MENGGUNAKAN PUSH BUTTON


EDY SOEPRAJITNO : 03.2008.1.06529

2. LISTING PROGRAM COUNTER UP/DOWN


/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Evaluation
Automatic Program Generator
Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date
:
Author :
Company :
Comments:

COUNTER UP/DOWN W PB
1
1/14/2012
Edy Soeprajitno (03.2008.1.06529)
Laboratorium Mikroprosessor ITATS

Chip type
: ATmega8535
Program type
: Application
AVR Core Clock frequency: 8.000000 MHz
Memory model
: Small
External RAM size
: 0
Data Stack size
: 128
*****************************************************/
#include <mega8535.h>
#include <delay.h>
char pul,sat,i,n;
unsigned char
segment[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
void display(int data)
{
pul=data/10;
sat=data%10;
for(i=0;i<100;i++)
{
PORTC=0x01;
PORTA=segment[pul];
delay_ms(1);
PORTC=0x02;
PORTA=segment[sat];
delay_ms(1);
}
}
void main(void)
{
PORTA=0xC0;
DDRA=0xFF;
PORTB=0xFF;
DDRB=0x00;
PORTC=0xFF;

DDRC=0xFF;
PORTD=0x00;
DDRD=0x00;
while (1)
{
// Place your code here
if(PINB.0==0)
{
if(n==99){n=0;}
else{n++;}
delay_ms(70);
}
if(PINB.1==0)
{
if(n==0){n=99;}
else{n--;}
delay_ms(70);
}
if(PINB.2==0){n=0;}
display(n);
}
}

3. FLOW CHART
START

PUSH
BUTTON

PBUP
DITEKAN

YA

7 SEGMENT
COUNTERUP

YA

7 SEGMENT
COUNTER
DOWN

YA

7 SEGMENT
RESET

?
T
I
D
A
K

PBDOWN
DITEKAN ?

T
I
D
A
K

PBRESET
DITEKAN

?
T
I
D
A
K

END

4. ANALISA

Input dari program counter up/down adalah tiga buah push button yang masing
masing mempunyai fungsi, yaitu :

1. Push button 1 (counter up) :


Jika tombol ini ditekan maka angka dalam tampilan seven segment akan bertambah
satu angka (00,01,02,03,.99) secara manual, secara manual disini diartikan bahwa
dalam setiap penekanan satu kali maka bilangan hanya akan bertambah satu angka.
2. Push button 2 (counter down) :
Jika tombol ini ditekan maka angka dalam tampilan seven segment akan berkurang
satu angka (99,98,97,96.01) secara manual, secara manual disini diartikan bahwa
dalam setiap penekanan satu kali maka bilangan hanya akan berkurang satu angka.
3. Push button 3 (reset) :
Jika tombol ini ditekan maka untuk tampilan angka berapapun dalam seven
segment akan berubah menjadi tampilan awal (00).

LAPORAN RESMI
PERCOBAAN 2

1. JAM DIGITAL ATMega 8

1. GAMBAR RANGKAIAN

U4
7
1
2
6
4
5
3

U1

A
B
C
D
BI/RBO
RBI
LT

13
12
11
10
9
15
14

QA
QB
QC
QD
QE
QF
QG

7
1
2
6
4
5
3

74LS47

U3
QA
QB
QC
QD
QE
QF
QG

13
12
11
10
9
15
14

7
1
2
6
4
5
3

74LS47

C1
22n

C2
10n

A
B
C
D
BI/RBO
RBI
LT

SET MENIT
SET JAM

23
24
25
26
27
28
1

PB0/ICP
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/XTAL1/TOSC1
PB7/XTAL2/TOSC2
PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
ATMEGA8

U2
QA
QB
QC
QD
QE
QF
QG

13
12
11
10
9
15
14

74LS47

U?
14
15
16
17
18
X1
CRYSTAL 19
9
10

A
B
C
D
BI/RBO
RBI
LT

PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/XCK/T0
PD5/T1
PD6/AIN0
PD7/AIN1

AVCC
AREF

QA
QB
QC
QD
QE
QF
QG

13
12
11
10
9
15
14

74LS47

20
21

JAM DIGITAL 7 SEGMENT


EDY SOEPRAJITNO : 03.2008.1.06529

/*****************************************************
This program was produced by the
CodeWizardAVR V2.03.4 Standard
Automatic Program Generator
Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date
: 1/14/2012
Author : Edy Soeprajitno (03.2008.1.06529)
Company : Laboratorium Mikroprosessor ITATS
Comments:
:
:
:
:
:

A
B
C
D
BI/RBO
RBI
LT

2
3
4
5
6
11
12
13

2. LISTING PROGRAM

Chip type
Program type
Clock frequency
Memory model
External RAM size

7
1
2
6
4
5
3

ATmega8
Application
11.059200 MHz
Small
0

Data Stack size


: 256
*****************************************************/
#include <mega8.h>
#include <delay.h>
bit fl_timer;
unsigned int cnt=0, cnt_jam=0, kali=0;
interrupt [TIM1_OVF] void timer1_ovf_isr(void)
{
TCNT1H=0xEA;
TCNT1L=0xE8;
if(fl_timer==1)
{
PORTB.4=1;
fl_timer=0;
}
else
{
PORTB.4=0;
fl_timer=1;
}
kali++;
switch (kali)
{case 120: //...1 menit
// if(kali==10)
{
cnt=cnt+1;
switch (cnt)
{
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case

0:PORTD=0x00;break;
1:PORTD=0x01;break;
2:PORTD=0x02;break;
3:PORTD=0x03;break;
4:PORTD=0x04;break;
5:PORTD=0x05;break;
6:PORTD=0x06;break;
7:PORTD=0x07;break;
8:PORTD=0x08;break;
9:PORTD=0x09;break;
10:PORTD=0x10;break;
11:PORTD=0x11;break;
12:PORTD=0x12;break;
13:PORTD=0x13;break;
14:PORTD=0x14;break;
15:PORTD=0x15;break;
16:PORTD=0x16;break;
17:PORTD=0x17;break;
18:PORTD=0x18;break;
19:PORTD=0x19;break;
20:PORTD=0x20;break;
21:PORTD=0x21;break;
22:PORTD=0x22;break;

case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case

23:PORTD=0x23;break;
24:PORTD=0x24;break;
25:PORTD=0x25;break;
26:PORTD=0x26;break;
27:PORTD=0x27;break;
28:PORTD=0x28;break;
29:PORTD=0x29;break;
30:PORTD=0x30;break;
31:PORTD=0x31;break;
32:PORTD=0x32;break;
33:PORTD=0x33;break;
34:PORTD=0x34;break;
35:PORTD=0x35;break;
36:PORTD=0x36;break;
37:PORTD=0x37;break;
38:PORTD=0x38;break;
39:PORTD=0x39;break;
40:PORTD=0x40;break;
41:PORTD=0x41;break;
42:PORTD=0x42;break;
43:PORTD=0x43;break;
44:PORTD=0x44;break;
45:PORTD=0x45;break;
46:PORTD=0x46;break;
47:PORTD=0x47;break;
48:PORTD=0x48;break;
49:PORTD=0x49;break;
50:PORTD=0x50;break;
51:PORTD=0x51;break;
52:PORTD=0x52;break;
53:PORTD=0x53;break;
54:PORTD=0x54;break;
55:PORTD=0x55;break;
56:PORTD=0x56;break;
57:PORTD=0x57;break;
58:PORTD=0x58;break;
59:PORTD=0x59;break;
case 60:
PORTD=0x00;
cnt=0;
cnt_jam=cnt_jam+1;;
switch (cnt_jam)
{

case 0:PORTC.0=0;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=0;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 1:PORTC.0=1;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=0;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 2:PORTC.0=0;PORTC.1=1;PORTC.2=0;PORTC.3=0;PORTB.0=0;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 3:PORTC.0=1;PORTC.1=1;PORTC.2=0;PORTC.3=0;PORTB.0=0;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 4:PORTC.0=0;PORTC.1=0;PORTC.2=1;PORTC.3=0;PORTB.0=0;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;

case 5:PORTC.0=1;PORTC.1=0;PORTC.2=1;PORTC.3=0;PORTB.0=0;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 6:PORTC.0=0;PORTC.1=1;PORTC.2=1;PORTC.3=0;PORTB.0=0;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 7:PORTC.0=1;PORTC.1=1;PORTC.2=1;PORTC.3=0;PORTB.0=0;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 8:PORTC.0=0;PORTC.1=0;PORTC.2=0;PORTC.3=1;PORTB.0=0;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 9:PORTC.0=1;PORTC.1=0;PORTC.2=0;PORTC.3=1;PORTB.0=0;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 10:PORTC.0=0;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=1;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 11:PORTC.0=1;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=1;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 12:PORTC.0=0;PORTC.1=1;PORTC.2=0;PORTC.3=0;PORTB.0=1;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 13:PORTC.0=1;PORTC.1=1;PORTC.2=0;PORTC.3=0;PORTB.0=1;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 14:PORTC.0=0;PORTC.1=0;PORTC.2=1;PORTC.3=0;PORTB.0=1;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 15:PORTC.0=1;PORTC.1=0;PORTC.2=1;PORTC.3=0;PORTB.0=1;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 16:PORTC.0=0;PORTC.1=1;PORTC.2=1;PORTC.3=0;PORTB.0=1;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 17:PORTC.0=1;PORTC.1=1;PORTC.2=1;PORTC.3=0;PORTB.0=1;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 18:PORTC.0=0;PORTC.1=0;PORTC.2=0;PORTC.3=1;PORTB.0=1;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 19:PORTC.0=1;PORTC.1=0;PORTC.2=0;PORTC.3=1;PORTB.0=1;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 20:PORTC.0=0;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=0;
PORTB.1=1;PORTB.2=0;PORTB.3=0;break;
case 21:PORTC.0=1;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=0;
PORTB.1=1;PORTB.2=0;PORTB.3=0;break;
case 22:PORTC.0=0;PORTC.1=1;PORTC.2=0;PORTC.3=0;PORTB.0=0;
PORTB.1=1;PORTB.2=0;PORTB.3=0;break;
case 23:PORTC.0=1;PORTC.1=1;PORTC.2=0;PORTC.3=0;PORTB.0=0;
PORTB.1=1;PORTB.2=0;PORTB.3=0;break;
case 24:PORTC.0=0;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=0;
PORTB.1=0;PORTB.2=0;PORTB.3=0;cnt_jam=0;break;
}
break;
}
}
kali=0;break; }
}
void main(void)
{
PORTB=0x00;
DDRB=0xFF;
PORTC=0x70;
DDRC=0x0F;
PORTD=0x00;

DDRD=0xFF;
TCCR0=0x00;
TCNT0=0x00;
TCCR1A=0x00;
TCCR1B=0x05;
TCNT1H=0xEA;
TCNT1L=0xE8;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
TIMSK=0x04;
ACSR=0x80;
SFIOR=0x00;
#asm("sei")
while (1)
{
// Place your code here
if(PINC.4==0)
{
cnt=cnt+1;
delay_ms(200);
switch (cnt)
{
case 0:PORTD=0x00;break;
case 1:PORTD=0x01;break;
case 2:PORTD=0x02;break;
case 3:PORTD=0x03;break;
case 4:PORTD=0x04;break;
case 5:PORTD=0x05;break;
case 6:PORTD=0x06;break;
case 7:PORTD=0x07;break;
case 8:PORTD=0x08;break;
case 9:PORTD=0x09;break;
case 10:PORTD=0x10;break;
case 11:PORTD=0x11;break;
case 12:PORTD=0x12;break;
case 13:PORTD=0x13;break;
case 14:PORTD=0x14;break;
case 15:PORTD=0x15;break;
case 16:PORTD=0x16;break;
case 17:PORTD=0x17;break;
case 18:PORTD=0x18;break;
case 19:PORTD=0x19;break;
case 20:PORTD=0x20;break;
case 21:PORTD=0x21;break;
case 22:PORTD=0x22;break;

case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case
case

23:PORTD=0x23;break;
24:PORTD=0x24;break;
25:PORTD=0x25;break;
26:PORTD=0x26;break;
27:PORTD=0x27;break;
28:PORTD=0x28;break;
29:PORTD=0x29;break;
30:PORTD=0x30;break;
31:PORTD=0x31;break;
32:PORTD=0x32;break;
33:PORTD=0x33;break;
34:PORTD=0x34;break;
35:PORTD=0x35;break;
36:PORTD=0x36;break;
37:PORTD=0x37;break;
38:PORTD=0x38;break;
39:PORTD=0x39;break;
40:PORTD=0x40;break;
41:PORTD=0x41;break;
42:PORTD=0x42;break;
43:PORTD=0x43;break;
44:PORTD=0x44;break;
45:PORTD=0x45;break;
46:PORTD=0x46;break;
47:PORTD=0x47;break;
48:PORTD=0x48;break;
49:PORTD=0x49;break;
50:PORTD=0x50;break;
51:PORTD=0x51;break;
52:PORTD=0x52;break;
53:PORTD=0x53;break;
54:PORTD=0x54;break;
55:PORTD=0x55;break;
56:PORTD=0x56;break;
57:PORTD=0x57;break;
58:PORTD=0x58;break;
59:PORTD=0x59;break;
60:PORTD=0x00;cnt=0;break;
}
}
if(PINC.5==0)
{
cnt_jam=cnt_jam+1;
delay_ms(200);
switch (cnt_jam)
{

case 0:PORTC.0=0;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=0;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 1:PORTC.0=1;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=0;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 2:PORTC.0=0;PORTC.1=1;PORTC.2=0;PORTC.3=0;PORTB.0=0;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 3:PORTC.0=1;PORTC.1=1;PORTC.2=0;PORTC.3=0;PORTB.0=0;

PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 4:PORTC.0=0;PORTC.1=0;PORTC.2=1;PORTC.3=0;PORTB.0=0;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 5:PORTC.0=1;PORTC.1=0;PORTC.2=1;PORTC.3=0;PORTB.0=0;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 6:PORTC.0=0;PORTC.1=1;PORTC.2=1;PORTC.3=0;PORTB.0=0;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 7:PORTC.0=1;PORTC.1=1;PORTC.2=1;PORTC.3=0;PORTB.0=0;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 8:PORTC.0=0;PORTC.1=0;PORTC.2=0;PORTC.3=1;PORTB.0=0;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 9:PORTC.0=1;PORTC.1=0;PORTC.2=0;PORTC.3=1;PORTB.0=0;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 10:PORTC.0=0;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=1;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 11:PORTC.0=1;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=1;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 12:PORTC.0=0;PORTC.1=1;PORTC.2=0;PORTC.3=0;PORTB.0=1;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 13:PORTC.0=1;PORTC.1=1;PORTC.2=0;PORTC.3=0;PORTB.0=1;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 14:PORTC.0=0;PORTC.1=0;PORTC.2=1;PORTC.3=0;PORTB.0=1;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 15:PORTC.0=1;PORTC.1=0;PORTC.2=1;PORTC.3=0;PORTB.0=1;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 16:PORTC.0=0;PORTC.1=1;PORTC.2=1;PORTC.3=0;PORTB.0=1;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 17:PORTC.0=1;PORTC.1=1;PORTC.2=1;PORTC.3=0;PORTB.0=1;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 18:PORTC.0=0;PORTC.1=0;PORTC.2=0;PORTC.3=1;PORTB.0=1;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 19:PORTC.0=1;PORTC.1=0;PORTC.2=0;PORTC.3=1;PORTB.0=1;
PORTB.1=0;PORTB.2=0;PORTB.3=0;break;
case 20:PORTC.0=0;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=0;
PORTB.1=1;PORTB.2=0;PORTB.3=0;break;
case 21:PORTC.0=1;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=0;
PORTB.1=1;PORTB.2=0;PORTB.3=0;break;
case 22:PORTC.0=0;PORTC.1=1;PORTC.2=0;PORTC.3=0;PORTB.0=0;
PORTB.1=1;PORTB.2=0;PORTB.3=0;break;
case 23:PORTC.0=1;PORTC.1=1;PORTC.2=0;PORTC.3=0;PORTB.0=0;
PORTB.1=1;PORTB.2=0;PORTB.3=0;break;
case 24:PORTC.0=0;PORTC.1=0;PORTC.2=0;PORTC.3=0;PORTB.0=0;
PORTB.1=0;PORTB.2=0;PORTB.3=0;cnt_jam=0;break;
}
}
};
}

LAPORAN RESMI
PERCOBAAN 3
1. TULISAN BERGESER PADA LCD

1. GAMBAR RANGKAIAN

LCD1
LM016L

D0
D1
D2
D3
D4
D5
D6
D7
7
8
9
10
11
12
13
14

RS
RW
E
4
5
6

1
2
3

VSS
VDD
VEE

U1
1
2
3
4
5
6
7
8
14
15
16
17
18
19
20
21

RV1
29%

1k

13
12
9

PB0/T0/XCK
PB1/T1
PB2/AIN0/INT2
PB3/AIN1/OC0
PB4/SS
PB5/MOSI
PB6/MISO
PB7/SCK
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/OC1B
PD5/OC1A
PD6/ICP1
PD7/OC2

PA0/ADC0
PA1/ADC1
PA2/ADC2
PA3/ADC3
PA4/ADC4
PA5/ADC5
PA6/ADC6
PA7/ADC7
PC0/SCL
PC1/SDA
PC2
PC3
PC4
PC5
PC6/TOSC1
PC7/TOSC2

XTAL1
XTAL2
RESET
ATMEGA8535

TULISAN BERGESER PADA LCD


EDY SOEPRAJITNO : 03.2008.1.06529

2. LISTING PROGRAM

/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Evaluation
Automatic Program Generator
Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date
: 1/14/2012
Author : Edy Soeprajitno (03.2008.1.06529)
Company : Laboratorium Mikroprosessor ITATS
Comments:
Chip type
: ATmega8535
Program type
: Application
AVR Core Clock frequency: 8.000000 MHz
Memory model
: Small
External RAM size
: 0
Data Stack size
: 128
*****************************************************/
#include <mega8535.h>
#include <delay.h>
#include <string.h>
#include <alcd.h>
char buffer_lcd[]="Edy Soeprajitno : 03.2008.1.06529";

AREF
AVCC

40
39
38
37
36
35
34
33
22
23
24
25
26
27
28
29
32
30

char
void
void
void
{

lcd_number=16;
sett_regs(void);
tampilan(void);
main(void)

sett_regs();
lcd_clear();
lcd_init(16);
while (1)
{
tampilan();
}
}
void sett_regs()
{
DDRA=0xFF;PORTA=0x00;
DDRA=0x00;PORTA=0x00;
DDRA=0x00;PORTA=0x00;
}
void tampilan(void)
{
unsigned int i,j,k;
unsigned int data_len=strlen(buffer_lcd);
lcd_clear();
lcd_gotoxy(1,0);
lcd_putsf(" TEKS BERGESER");
for(i=lcd_number;i>=1;--i)
{
if(i>lcd_number)break;
lcd_gotoxy(i,1);
for(j=0;j<(lcd_number-i);j++)
{
lcd_putchar(buffer_lcd[j]);
}
delay_ms(50);
};
k=0;
for(i=0;i<=data_len;i++)
{
k++;
lcd_gotoxy(0,1);
for(j=0;j<16;j++)
{
if(buffer_lcd[j+k]==NULL){return;}
lcd_putchar(buffer_lcd[j+k]);
}
delay_ms(50);
};
}

3. FLOWCHART

START

INPUT
KARAKTER

KARAKTER
BERGESER DARI
KANAN KE KIRI

JIKA PERGESERAN
KARAKTER
MELEBIHI JUMLAH
KOLOM?

TIDAK
TAMPILAN
KARAKTER

END

YA

4. ANALISA

char buffer_lcd[]="TULISAN BERGESER LCD";.

Merupakan fungsi array string pada buffer_lcd.

char lcd_number=16;.

Deklarasi jumlah kolom LCD yang digunakan.

data_len adalah variabel untuk mengetahui panjang data pada buffer_lcd dan

fungsinya untuk perhitungan panjang kolom pada LCD yang akan ditulisi,
sedangkan fungsi strlen() adalah mengambil data nilai panjang karakter di
array string.

void sett_regs()
{
DDRA=0xFF;PORTA=0x00;
DDRA=0x00;PORTA=0x00;
DDRA=0x00;PORTA=0x00;
}

Merupakan fungsi inialisasi PORT I/O yang digunakan.


if(buffer_lcd[j+k]==NULL)
{
return;
}

script program diatas adalah salah satu rutin syntax untuk null terminated. Atau
jika data pada array[?] berisi null maka running akan diselesaikan dan memulai
dari awal.

2. JAM DIGITAL MENGGUNAKAN LCD


1. GAMBAR RANGKAIAN

LCD1
LM016L

D0
D1
D2
D3
D4
D5
D6
D7
7
8
9
10
11
12
13
14

RS
RW
E
4
5
6

1
2
3

VSS
VDD
VEE

U1
1
2
3
4
5
6
7
8
14
15
16
17
18
19
20
21

RV1
0%

1k

13
12
9

PB0/T0/XCK
PB1/T1
PB2/AIN0/INT2
PB3/AIN1/OC0
PB4/SS
PB5/MOSI
PB6/MISO
PB7/SCK
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/OC1B
PD5/OC1A
PD6/ICP1
PD7/OC2

PA0/ADC0
PA1/ADC1
PA2/ADC2
PA3/ADC3
PA4/ADC4
PA5/ADC5
PA6/ADC6
PA7/ADC7
PC0/SCL
PC1/SDA
PC2
PC3
PC4
PC5
PC6/TOSC1
PC7/TOSC2

XTAL1
XTAL2
RESET

AREF
AVCC

ATMEGA8535

JAM DIGITAL MENGGUNAKAN LCD


EDY SOEPRAJITNO : 03.2008.1.06529

2. LISTING PROGRAM

/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Evaluation
Automatic Program Generator
Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :

40
39
38
37
36
35
34
33
22
23
24
25
26
27
28
29
32
30

Version :
Date
: 1/14/2012
Author : Edy Soeprajitno (03.2008.1.06529)
Company : Laboratorium Mikroprosessor ITATS
Comments:
Chip type
: ATmega8535
Program type
: Application
AVR Core Clock frequency: 11.059200 MHz
Memory model
: Small
External RAM size
: 0
Data Stack size
: 128
*****************************************************/
#include <mega8535.h>
#include <stdlib.h>
#include <alcd.h>
unsigned int kali=0,detik=0,menit=0,jam=0;
unsigned char cdetik[10],cmenit[10],cjam[10];
interrupt [TIM2_COMP] void timer2_comp_isr(void)
{
TCNT2=0; //jika sudah compare match,set awal lagi
if(++kali==10)
{
if(++detik==60)
{ detik=0;
lcd_clear();
if(++menit==60)
{ menit=0;
lcd_clear();
if(++jam==24)
{
jam=0;
lcd_clear();
}
}
}
kali=0;
itoa(detik,cdetik);
itoa(menit,cmenit);
itoa(jam,cjam);
lcd_gotoxy(9,1);
lcd_putsf(":");
lcd_gotoxy(10,1);
lcd_puts(cdetik);

lcd_gotoxy(6,1);
lcd_putsf(":");
lcd_gotoxy(7,1);
lcd_puts(cmenit);
lcd_gotoxy(4,1);
lcd_puts(cjam);
lcd_gotoxy(1,0);
lcd_putsf(" JAM DIGITAL");
}
}
void main(void)
{
PORTA=0x00;
DDRA=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x02;
TCNT2=0x00;
OCR2=0x96;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x80;
UCSRB=0x00;
ACSR=0x80;
SFIOR=0x00;
ADCSRA=0x00;
SPCR=0x00;
TWCR=0x00;
lcd_init(16);
#asm("sei")
while (1)
{
// Place your code here
}

3. FLOWCHART
START

TIMER_2 ON

MENIT==60 ?

TIDAK

YA
MENIT=0
JAM++

TCNT2=0;
TCNT2<=1440

DETIK==60 ?

JAM==24 ?

TIDAK

YA
DETIK=0
MENIT++

4.

TIDAK

YA

JAM=0

END

ANALISA
o

TCNT2=0; Berfungsi untuk mereset awal ketika sudah sesuai konversinya.

if(++kali==1440) Meriksa apakah sudah mencapai 1440 kali interupsi timer2.

Pada listing program ini saya buat 1440 karena menyesuaikan dengan simulasi di
proteus dengan pengaturan CKSL Fuse pada proteus adalah 2MHz.
o

itoa(detik,cdetik); merupakan standart library function yang berfungsi

mengubah int detik menjadi karakter pada string cdetik.

lcd_gotoxy(7,1); merupakan fungsi untuk meletakkan karakter dalam LCD.

Pada perintah tersebut meletakkan karakter dalam kolom ke-7 dan baris ke 1.
o

lcd_puts(cmenit);

merupakan fungsi untuk menampilkan string yang

disimpan dalam SRAM pada LCD.

LAPORAN RESMI
PERCOBAAN 4
MOTOR STEPPER BIPOLAR
1. Gambar Rangkaian

16

U1
1
2
3
4
5
6
7
8
14
15
16
17
18
19
20
21
13
12
9

PB0/T0/XCK
PB1/T1
PB2/AIN0/INT2
PB3/AIN1/OC0
PB4/SS
PB5/MOSI
PB6/MISO
PB7/SCK
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/OC1B
PD5/OC1A
PD6/ICP1
PD7/OC2

PA0/ADC0
PA1/ADC1
PA2/ADC2
PA3/ADC3
PA4/ADC4
PA5/ADC5
PA6/ADC6
PA7/ADC7
PC0/SCL
PC1/SDA
PC2
PC3
PC4
PC5
PC6/TOSC1
PC7/TOSC2

XTAL1
XTAL2
RESET

AREF
AVCC

40
39
38
37
36
35
34
33
22
23
24
25
26
27
28
29
32
30

2
7
1
9
10
15

IN1
IN2
EN1
EN2
IN3
IN4

VSS

GND

8
VS OUT1
OUT2

OUT3
GND OUT4

U2
3
6

11
14

+225

L293D

MOTOR STEPPER BIPOLAR

EDY SOEPRAJITNO : 03.2008.1.06529

ATMEGA8535

2. Listing Program
Half Step
/*****************************************************
This program was produced by the

CodeWizardAVR V2.05.0 Evaluation


Automatic Program Generator
Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date
: 1/14/2012
Author : Edy Soeprajitno (03.2008.1.06529)
Company : Laboratorium Mikroprosessor ITATS
Comments:
Chip type
: ATmega8535
Program type
: Application
AVR Core Clock frequency: 8.000000 MHz
Memory model
: Small
External RAM size
: 0
Data Stack size
: 128
*****************************************************/
#include <mega8535.h>
#include <delay.h>
void main(void)
{
PORTA=0x00;
DDRA=0x0F;
while (1)
{
PORTA=0x07;delay_ms(10);
PORTA=0x03;delay_ms(10);
PORTA=0x0B;delay_ms(10);
PORTA=0x0A;delay_ms(10);
PORTA=0x0E;delay_ms(10);
PORTA=0x0C;delay_ms(10);
PORTA=0x0D;delay_ms(10);
PORTA=0x05;delay_ms(10);
}
}

Full Step

/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Evaluation
Automatic Program Generator
Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date
: 1/14/2012
Author : Edy Soeprajitno (03.2008.1.06529)
Company : Laboratorium Mikroprosessor ITATS
Comments:

Chip type
: ATmega8535
Program type
: Application
AVR Core Clock frequency: 8.000000 MHz
Memory model
: Small
External RAM size
: 0
Data Stack size
: 128
*****************************************************/
#include <mega8535.h>
#include <delay.h>
void main(void)
{
PORTA=0x00;
DDRA=0xFF;
while (1)
{
PORTA=0x01;delay_ms(100);
PORTA=0x02;delay_ms(100);
PORTA=0x0E;delay_ms(100);
PORTA=0x0D;delay_ms(100);
}
}

3. FLOWCHART

START

INIALISASI PORT
MIKROKONTROLER

FULL/HALF STEP

MOTOR
BERPUTAR

END

4. ANALISA
a. Full Step
Pada pengendalian motor stepper bipolar dengan mode full step ini, motor akan
bergerak dengan 4 step yaitu 90 , 180 , 270 , 360 . Dengan listing program sebagai
berikut :
PORTA=0x01;delay_ms(100); // berputar 90 CW
PORTA=0x02;delay_ms(100); // berputar 180 CW

PORTA=0x0E;delay_ms(100); // berputar 270 CW


PORTA=0x0D;delay_ms(100); // berputar 360 CW

b. Half Step
Pada pengendalian motor stepper bipolar dengan mode half step ini, motor akan
bergerak dengan 8 step yaitu 45 , 90 , 135 , 180 , 225, 270 , 315 , 360 .
Dengan listing program sebagai berikut :
PORTA=0x07;delay_ms(100); // berputar 45
PORTA=0x03;delay_ms(100); // berputar 90 CW
PORTA=0x0B;delay_ms(100); // berputar 135 CW
PORTA=0x0A;delay_ms(100); // berputar 180 CW
PORTA=0x0E;delay_ms(100); // berputar 225 CW
PORTA=0x0C;delay_ms(100); // berputar 270 CW
PORTA=0x0D;delay_ms(100); // berputar 315 CW
PORTA=0x05;delay_ms(100); // berputar 360 CW

LAPORAN RESMI PERCOBAAN 5


PENGATURAN KECEPATAN MOTOR DC DG SAKLAR
1. GAMBAR RANGKAIAN

U2
D3(V_MOTOR)

U1(VS)

D3

D1

1N4004

1N4004
3
6

D4

D2

1N4004

1N4004
11
14

D4(GND)

U1(VSS)

8
OUT1 VS
OUT2

OUT3
OUT4 GND

U1(GND)

U1

16
VSS

GND

IN1
IN2
EN1
EN2
IN3
IN4

2
7
1
9
10
15
L293D

1
2
3
4
5
6
7
8
14
15
16
17
18
19
20
21
13
12
9

PB0/T0/XCK
PB1/T1
PB2/AIN0/INT2
PB3/AIN1/OC0
PB4/SS
PB5/MOSI
PB6/MISO
PB7/SCK
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/OC1B
PD5/OC1A
PD6/ICP1
PD7/OC2
XTAL1
XTAL2
RESET

PA0/ADC0
PA1/ADC1
PA2/ADC2
PA3/ADC3
PA4/ADC4
PA5/ADC5
PA6/ADC6
PA7/ADC7
PC0/SCL
PC1/SDA
PC2
PC3
PC4
PC5
PC6/TOSC1
PC7/TOSC2

40
39
38
37
36
35
34
33
22
23
24
25
26
27
28
29
32
30

PENGATUR KECEPATAN MOTOR DC DG SAKLAR


EDY SOEPRAJITNO : 03.2008.1.06529

2. LISTING PROGRAM
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Evaluation
Automatic Program Generator
Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
MOTOR DC
1
1/14/2012
Edy Soeprajitno (03.2008.1.06529)
Laboratorium Mikroprosessor ITATS

Chip type
: ATmega8535
Program type
: Application
AVR Core Clock frequency: 11.059200 MHz
Memory model
: Small
External RAM size
: 0
Data Stack size
: 128
*****************************************************/
#include <mega8535.h>
#include <delay.h>
void main(void)
{
PORTC=0xFF;
DDRC=0x00;
PORTD=0x00;
DDRD=0xFF;
TCCR1A=0xA1;
TCCR1B=0x0C;

speed_down

stop

U2(AREF)
AREF
AVCC

ATMEGA8535

Project :
Version :
Date
:
Author :
Company :
Comments:

speed_up

while (1)
{
if(PINC.0==0)
{
PORTD=0x05;
if(OCR1AL>=255){OCR1AL=0;}
else{OCR1AL++;}
delay_ms(50);
}
if(PINC.1==0)
{
PORTD=0x05;
if(OCR1AL<=0){OCR1AL=0;}
else{OCR1AL--;}
delay_ms(50);
}
if(PINC.2==0){PORTD=0x00;OCR1AL=0;}
}
}

3. FLOWCHART

START

PUSH
BUTTON

JIKA
PB UP
DITEKAN ?

KECEPATAN
PUTARAN
MOTOR
BERTAMBAH

YA

OCR 1AL ++
PORTD =0x05

YA

OCR 1AL-PORTD =0x05

KECEPATAN
PUTARAN
MOTOR
BERKURANG

YA

OCR 1AL=0
PORTD =0x00

MOTOR
BERHENTI

TIDAK

JIKA
PB DOWN
DITEKAN ?
TIDAK

JIKA
PB RESET
DITEKAN ?
TIDAK

END

4. ANALISA

Ketika tombol speed_up ditekan maka PWM akan naik (OCR1AL++) dan

putaran motor semakin lama akan naik atau cepat.

Ketika tombol speed_down ditekan maka PWM akan turun (OCR1AL--)

dan putaran motor semakin lama akan turun atau pelan.

Dan ketika tombol stop di tekan maka motor akan berhenti.

LAPORAN RESMI
PERCOBAAN 6

PENGATURAN KECEPATAN MOTOR DC DG ADC


1. GAMBAR RANGKAIAN
KECEPATAN MOTOR DC MENGGUNAKAN ADC
EDY SOEPRAJITNO : 03.2008.1.06529
RV1

RV1(2)

U2
1
2
3
4
5
6
7
8

RV1(1)

1k
29%

D3(V_MOTOR)
U1(VS)

D4(GND)

D3

D1

1N4004

1N4004

D4

D2

1N4004

1N4004

U1(VSS)

U1
3
6

11
14

OUT1 VS
OUT2

OUT3
OUT4 GND

16
VSS

IN1
IN2
EN1

EN2
IN3
IN4

GND

L293D

2
7
1

9
10
15

14
15
16
17
18
19
20
21
12
13
9

PB0/T0/XCK
PB1/T1
PB2/AIN0/INT2
PB3/AIN1/OC0
PB4/SS
PB5/MOSI
PB6/MISO
PB7/SCK
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/OC1B
PD5/OC1A
PD6/ICP1
PD7/OC2
XTAL1
XTAL2
RESET
ATMEGA8535

U1(GND)

2. FLOWCHART

START

VARIABEL
RESISTOR
(tegangan )

data =read _adc (0)


OCR 1AL =OCR 1BL =data
PORTD =0x05

KECEPATAN
PUTARAN
MOTOR

END

PA0/ADC0
PA1/ADC1
PA2/ADC2
PA3/ADC3
PA4/ADC4
PA5/ADC5
PA6/ADC6
PA7/ADC7
PC0/SCL
PC1/SDA
PC2
PC3
PC4
PC5
PC6/TOSC1
PC7/TOSC2

AREF
AVCC

V=1.45
40
39 U2(PA0/ADC0)
38
37
36
35
34
33
22
23
24
25
26
27
28
29
U2(AREF)
32
30

3. LISTING PROGRAM
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Evaluation
Automatic Program Generator
Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date
:
Author :
Company :
Comments:

KECEPATAN MOTOR DG ADC


1
1/14/2012
Edy Soeprajitno (03.2008.1.06529)
Laboratorium Mikroprosessor ITATS

Chip type
: ATmega8535
Program type
: Application
AVR Core Clock frequency: 11.059200 MHz
Memory model
: Small
External RAM size
: 0
Data Stack size
: 128
*****************************************************/
#include <mega8535.h>
#include <delay.h>
unsigned char data;
#define ADC_VREF_TYPE 0x20
unsigned char read_adc(unsigned char adc_input)
{
ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
delay_us(10);
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x00;
SFIOR&=0x00;
while (1)
{
data=read_adc(1);
OCR1AL=OCR1BL=data;

PORTD=0x09;

}
}

4. ANALISA

Pengendalian PWM dengan adc ini menggunakan potensio atau variable


resistor sebagai inputnya dengan tegangan referensi ADC adalah Port AREF, dengan
setting ADC 8 bit.

Ketika potensio atau variable resistor di putar menuju +5V maka putaran
motor akan semakin cepat dan begitu juga sebaliknya. Data dari hasil pembacaan input
ADC di umpankan ke setting PWM pada PORTD yaitu pada OCR1A dan OCR1B.

Dengan bertambahnya tegangan output dari input ADC maka akan semakin
tinggi pula PWM yang dihasilkan, sehingga motor akan semakin cepat.

LAPORAN RESMI
PERCOBAAN 7
MENAMPILKAN NAMA & NPM BERGESER

12

13

10

11

U7:A 7404
U7:B 7404
U7:C 7404
U7:D 7404

U8:A 7404

PB0/ICP1
PB1/OC1A
PB2/SS/OC1B
PB3/MOSI/OC2
PB4/MISO
PB5/SCK
PB6/TOSC1/XTAL1
PB7/TOSC2/XTAL2

21
20

AREF
AVCC

10
13

PC0/ADC0
PC1/ADC1
PC2/ADC2
PC3/ADC3
PC4/ADC4/SDA
PC5/ADC5/SCL
PC6/RESET
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/T0/XCK
PD5/T1
PD6/AIN0
PD7/AIN1

ATMEGA8

NAMA & NPM BERGESER PADA DOT MATRIK


EDY SOEPRAJITNO : 03.2008.1.06529

23
24
25
26
27
28
1
2
3
4
5
6
11
12
13

74HC595

U5

Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
Q7'

74HC595

MR
OE

12
ST_CP

11
14
SH_CP
DS

U4

15
1
2
3
4
5
6
7
9

10
13
MR
OE

12
ST_CP

11
14
SH_CP
DS

74HC595

U6
14
15
16
17
18
19
9
10

U7:E 7404
U7:F 7404

U3

Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
Q7'

Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
Q7'

74HC595

15
1
2
3
4
5
6
7
9

10
13
MR
OE

12
ST_CP

11
14
SH_CP
DS

U2

15
1
2
3
4
5
6
7
9

10
13

12

15
1
2
3
4
5
6
7
9

15
1
2
3
4
5
6
7
9

Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
Q7'

74HC595

MR
OE

SH_CP
DS

ST_CP

11
14

10
13
MR
OE

12
ST_CP

U1

Q0
Q1
Q2
Q3
Q4
Q5
Q6
Q7
Q7'

SH_CP
DS

11
14

1. GAMBAR RANGKAIAN

2. LISTING PROGRAM
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Evaluation
Automatic Program Generator
Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date
:
Author :
Company :
Comments:

MENAMPILKAN NAMA & NPM BERGESER


1
1/14/2012
Edy Soeprajitno (03.2008.1.06529)
Laboratorium Mikroprosessor ITATS

Chip type
: ATmega8
Program type
: Application
AVR Core Clock frequency: 11.059200 MHz
Memory model
: Small
External RAM size
: 0
Data Stack size
: 128
*****************************************************/
#include "avr/io.h"
#include "util/delay.h"
#include "avr/pgmspace.h"
#include "string.h"
#include "matrix.h"
/******************************************************************
* Variable & RAM Mapping
*******************************************************************/
unsigned char text_buffer[100]; //Character to display max. 100
unsigned char display_buffer[700];//100 character need 100*5
character
unsigned int text_length, col_len;
unsigned char scroll_speed;

unsigned int col_count;


/*******************************************************************
* Function Prototype
*******************************************************************/
void toggle_ctr();
void fill_display_buffer();
void show_display();
/*******************************************************************
* Shift register control
*******************************************************************/
void toggle_ctr()
{
ST_CP_Hi;
ST_CP_Lo;
SH_CP_Hi;
SH_CP_Lo;
}

/*******************************************************************
* Fill display buffer, read text to display, get text data from
table, save to display buffer
********************************************************************/
void fill_display_buffer()
{
unsigned int x,c,i;
unsigned int digit;
unsigned char str_temp;
c = 0;
for(digit=0;digit<text_length;++digit)

{
str_temp = text_buffer[digit];
x = str_temp * 5;
for (i=0;i<5;++i)
{
display_buffer[c] =
pgm_read_byte(&text_data[x]);
//pgm_read_byte(&packet[i]));
++x;
++c;
}

display_buffer[c]=0;
++c;
}
}
/***************************************************************
* Show display buffer to dot matrix, data send colom by colom
***************************************************************/
void show_display()
{
unsigned int x,c,i,r;
unsigned int mychar;

if (text_length>4)
{
c=0;
for (r=1;r<scroll_speed;r++)
{
DS_Hi;

toggle_ctr();
mychar = c+col_count;
DATA_PORT = display_buffer[mychar];
_delay_ms(1);
++c;
DS_Lo;
for (i=1;i<40;i++)
{
toggle_ctr();
mychar = c+col_count;
DATA_PORT = display_buffer[mychar];
_delay_ms(1);
++c;
}
c=0;
}
++col_count;
if (col_count>col_len) col_count = 0;
}
else
{
for(col_count=0;col_count<col_len;col_count++)
{
c=0;
for(r=1;r<scroll_speed;r++);
{
DS_Hi;
toggle_ctr();
DATA_PORT = display_buffer[c];
_delay_ms(1);

c++;
for (x=1;x<39;x++)
{

DS_Lo;
toggle_ctr();
DATA_PORT = display_buffer[c];
_delay_ms(1);
++c;

}
c=0;
}
}
}
}

int main()
{
char str1[]

= "

Edy Soeprajitno (03.2008.1.06529)";

DDRB =0xFF;
DDRC = 0xFF;
DDRD = 0xFF;
strcpy (text_buffer, str1);
text_length = strlen(str1);
col_len = text_length * 6;
fill_display_buffer();
scroll_speed = 2;
col_count=0;
while (1)
{
show_display();

}
}

matrix.h
#ifndef MATRIX_H_
#define MATRIX_H_
#include "avr/pgmspace.h"
#include "avr/io.h"
#define SH_CP_Hi PORTC |= (1<<1)
#define SH_CP_Lo PORTC &=~(1<<1)
#define ST_CP_Hi PORTC |= (1<<2)
#define ST_CP_Lo PORTC &= ~(1<<2)
#define DS_Hi

PORTC |= (1<<0)

#define DS_Lo

PORTC &= ~(1<<0)

#define DATA_PORT PORTB

const char text_data[] PROGMEM ={


0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,

0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 0 , 0 , 0,
0 , 0 , 95 , 0 , 0,
0 , 7 , 0 , 7 , 0,
20 , 127 , 20 , 127 , 20,
36 , 42 , 127 , 42 , 18,
39 , 21 , 107 , 84 , 114,
54 , 73 , 86 , 32 , 80,
0 , 0 , 11 , 7 , 0,
0 , 28 , 34 , 65 , 0,
0 , 65 , 34 , 28 , 0,
42 , 28 , 127 , 28 , 42,

8 , 8 , 62 , 8 , 8,
0 , 88 , 56 , 0 , 0,
8 , 8 , 8 , 8 , 8,
0 , 96 , 96 , 0 , 0,
32 , 16 , 8 , 4 , 2,
62 , 81 , 73 , 69 , 62,
0 , 66 , 127 , 64 , 0,
114 , 73 , 73 , 73 , 70,
34 , 65 , 73 , 73 , 54,
24 , 20 , 18 , 127 , 16,
39 , 69 , 69 , 69 , 57,
60 , 74 , 73 , 73 , 48,
1 , 113 , 9 , 5 , 3,
54 , 73 , 73 , 73 , 54,
6 , 73 , 73 , 41 , 30,
0 , 54 , 54 , 0 , 0,
0 , 91 , 59 , 0 , 0,
8 , 20 , 34 , 65 , 0,
20 , 20 , 20 , 20 , 20,
0 , 65 , 34 , 20 , 8,
2 , 1 , 81 , 9 , 6,
50 , 73 , 121 , 65 , 62,
124 , 18 , 17 , 18 , 124,
65 , 127 , 73 , 73 , 62,
62 , 65 , 65 , 65 , 34,
65 , 127 , 65 , 65 , 62,
127 , 73 , 73 , 65 , 65,
127 , 9 , 9 , 1 , 1,
62 , 65 , 73 , 73 , 58,
127 , 8 , 8 , 8 , 127,

0 , 65 , 127 , 65 , 0,
32 , 64 , 65 , 63 , 1,
127 , 8 , 20 , 34 , 65,
127 , 64 , 64 , 64 , 64,
127 , 2 , 12 , 2 , 127,
127 , 2 , 4 , 8 , 127,
62 , 65 , 65 , 65 , 62,
127 , 9 , 9 , 9 , 6,
62 , 65 , 65 , 33 , 94,
127 , 9 , 25 , 41 , 70,
38 , 73 , 73 , 73 , 50,
1 , 1 , 127 , 1 , 1,
63 , 64 , 64 , 64 , 63,
7 , 24 , 96 , 24 , 7,
127 , 32 , 24 , 32 , 127,
99 , 20 , 8 , 20 , 99,
3 , 4 , 120 , 4 , 3,
97 , 81 , 73 , 69 , 67,
0 , 127 , 65 , 65 , 0,
2 , 4 , 8 , 16 , 32,
0 , 65 , 65 , 127 , 0,
4 , 2 , 1 , 2 , 4,
64 , 64 , 64 , 64 , 64,
0 , 0 , 7 , 11 , 0,
32 , 84 , 84 , 84 , 56,
127 , 40 , 68 , 68 , 56,
0 , 56 , 68 , 68 , 68,
56 , 68 , 68 , 40 , 127,
56 , 84 , 84 , 84 , 24,
8 , 126 , 9 , 9 , 2,

8 , 84 , 84 , 84 , 60,
127 , 16 , 8 , 8 , 112,
0 , 68 , 125 , 0 , 0,
32 , 64 , 68 , 61 , 0,
0 , 127 , 16 , 40 , 68,
0 , 65 , 127 , 64 , 0,
124 , 4 , 120 , 4 , 120,
124 , 8 , 4 , 4 , 120,
56 , 68 , 68 , 68 , 56,
124 , 20 , 20 , 20 , 8,
8 , 20 , 20 , 20 , 124,
124 , 8 , 4 , 4 , 8,
72 , 84 , 84 , 84 , 36,
0 , 4 , 63 , 68 , 68,
60 , 64 , 64 , 32 , 124,
28 , 32 , 64 , 32 , 28,
60 , 64 , 60 , 64 , 60,
68 , 40 , 16 , 40 , 68,
12 , 80 , 80 , 80 , 60,
68 , 100 , 84 , 76 , 68,
0 , 8 , 54 , 65 , 0,
0 , 0 , 119 , 0 , 0,
0 , 65 , 54 , 8 , 0,
2 , 1 , 2 , 4 , 2,
42 , 85 , 42 , 85 , 42};
#endif /* MATRIX_H_ */

3. FLOWCHART

4. ANALISA

Flowcaht di atas adalah untuk menjelaskan bagaimana ISR bekerja sebagai bagian
utama dari program running text ini. Yang menjadi sangat penting kali ini adalah
peranan variable CtrBaris. Variable ini di-inceremet setiap ISR dijalankan. Nilainmya
adalah dimulai dari 0 dan maksimal 7 sebelum kembalii menjadi 0 lagi. Nilainya
adalah dipadankan dengan nomor baris pada Display. Misalnya jika saat nilainya dalah
3 maka saat itu ISR akan berusaha untuk menyalakan lampu LED pada baris ke-3.
demikian seterusnya.

Rutin yang dijalankan adalah mirip. Yakni "SendToDisplay" dan "ShowBaris".


SendToDisplay adalh untuk melakukan pembacaan titik-titik karakter yang hendak
ditampilkan (yg akan dijelaskn berikutnya).Rutin ini lah yang menetukan Titik LED
mana saja yang akan dihidupkan. Dari titik-titik karakter dishifting pada 4094. Jika
kita menggunakan 10 blok LED maka dia akan melakuakn Shiftting sebanyak 80 kali.
Ditambah dengan Extra Shifting yang digunakan saat Mode Running (yg akan
dijelaskan berikutnya).

Kemudian adalah ShowBaris yakni sebuah rutin yang bertanggung jawab untuk
mengatur di baris manakan rangkaian titik-titik lampu LED tersebut hendak
dinyalakan. Karena desain yang menghubungkan / merangkaikan ke 11 chips 4094(10
kolom dan 1 baris), maka rutin ini melakuakn shifting sebanyak 8 kali lagi. hal ini
sejumlah dengan lebar data pada 4094. Walaupun kita hanya akan menggunakan 7
baris saja. Kemudian tugasnya adalah menyalakan titik-titik LED yang sebelumnya
tersimpan pada register 4094. Yakn isaat diterbutkannya sinyal STR.

Disamping itu, ada perbedaan handler dari variable CtrBaris ini. yakni pada
Ctrbaris = 0 yang rutinnya ditambahkan dengan StreamDigits. Stream digit adalah
rutin yang sanagt penting. tugasnya antara lain adalah

1. Mengatur berapa jumlah Extra-Shifting yang diperlukan saat itu.Misalnya saat itu
adalah tampilan Display bergeser 2 titik ke kiri. Nilainya berurtan 0 - 5. Dengan
demikian Text bergeser ke kiri. sejauh 5 titik. sebelum kemudian Extra-Shifting
menjadi 0 kembali, yg berarti saat berikutnya text tidak digeser.
2. Dalam peralihan Extra-Shifting dari 5 kembali ke 0, dan Displaiy tidak digeser,

karena yang digeser adalah krakter dalam buffer karakter. Misalnya semua adalah
"Edy Soeprajitno". kemudian menjadi " dy Soeprajitno ". Karakterini ditampilkan
sebanyak 6 kali dengan menggeser 1 titik-titik disetiap penampilannya. Dan
kemudian diganti lagi dengan " y Soeprajitno " dan nasibnya pun sama.

Walaupun dalam prakteknya tidak sesimple itu karena kita harus melakuakn
pengujian.apakah display masuk pada Mode Running atau tidak. Apakah ExtraShifting
sudah 5, jika ya maka diulang dari 0, dan seterusnya.
Kemudian yang terpenting adalah proses pengeseran karakter pada buffer karakter.
sebenranya tidak seperti itu juga. Kita hanya meng-increment pointer dari memory
exkternal yang menyimpan karakter-karakter AT24C08. Dan kemudian dimulaui dari
lokasi yang ditunjuk pointer tersebut kita mengambil data sebanyak 15 karakter. Dan
kemudian ditempatkan pada buffer yang sama yang hanya sanggup menampung 15
karakter saja di dalam RAM internal. Karena setiap proses pengambilan, pointernya
diincrement. Sehingga dengan cara ini karakter yangditampilkan dapat mencapai
ratusan karakter, tergantung kapasitas memory.
http://dhuzell.site90.com/mcs51/modulaplikasi/modul_matrix_faq.htm
http://www.best-microcontroller-projects.com/led-dot-matrix-display.html
http://www.toko-elektronika.com/tutorial/paralel.html

LAPORAN RESMI
PERCOBAAN 8
1. KECEPATAN MOTOR DC MELALUI SERIAL PC
1. GAMBAR RANGKAIAN

U1
40
39
38
37
36
35
34
33
22
23
24
25
26
27
28
29

32
30

PA0/ADC0
PA1/ADC1
PA2/ADC2
PA3/ADC3
PA4/ADC4
PA5/ADC5
PA6/ADC6
PA7/ADC7
PC0/SCL
PC1/SDA
PC2
PC3
PC4
PC5
PC6/TOSC1
PC7/TOSC2

AREF
AVCC
ATMEGA8535

PB0/T0/XCK
PB1/T1
PB2/AIN0/INT2
PB3/AIN1/OC0
PB4/SS
PB5/MOSI
PB6/MISO
PB7/SCK
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/OC1B
PD5/OC1A
PD6/ICP1
PD7/OC2
XTAL1
XTAL2
RESET

1
2
3
4
5
6
7
8
14
15
16
17
18
19
20
21

RXD

TXD

RTS

CTS

+12V

Q1
BD139

+175

13
12
9

KECEPATAN MOTOR DC MELALUI SERIAL PC


EDY SOEPRAJITNO : 03.2008.1.06529

2. LISTING PROGRAM

/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Evaluation
Automatic Program Generator
Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date
: 1/14/2012
Author : Edy Soeprajitno (03.2008.1.06529)
Company : Laboratorium Mikroprosessor ITATS
Comments:
Chip type
: ATmega8535
Program type
: Application
AVR Core Clock frequency: 11.095200 MHz
Memory model
: Small
External RAM size
: 0
Data Stack size
: 128
*****************************************************/
#include <mega8535.h>
#include <stdio.h>
unsigned char data;
void main(void)
{
TCCR0=0x6B;
TCNT0=0x00;
OCR0=0x00;
PORTA=0x00;
DDRA=0xFF;
PORTB=0x00;
DDRB=0x08;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x47;
printf("Kecepatan Motor melalui PC");
putchar(13);
printf("PILIH KECEPATAN");
putchar(13);
printf("1. Pelan");
putchar(13);
printf("2. Sedang");
putchar(13);
printf("3. Cepat");
putchar(13);
while (1)
{

data=getchar();
if(data=='1'){
OCR0=85;
}
else if(data=='2'){
OCR0=170;
}
else if(data=='3'){
OCR0=254;
}

2. MENGIRIM TEXT DARI SERIAL PC KE LCD


1.

GAMBAR RANGKAIAN

MENGIRIM TEKS DARI PC KE LCD


EDY SOEPRAJITNO : 03.2008.1.06529

LCD1
LM016L

RXD
TXD

CTS

7
8
9
10
11
12
13
14

D0
D1
D2
D3
D4
D5
D6
D7

RS
RW
E
4
5
6

1
2
3

VSS
VDD
VEE

RTS

U1
40
39
38
37
36
35
34
33
22
23
24
25
26
27
28
29
32
30

PA0/ADC0
PA1/ADC1
PA2/ADC2
PA3/ADC3
PA4/ADC4
PA5/ADC5
PA6/ADC6
PA7/ADC7
PC0/SCL
PC1/SDA
PC2
PC3
PC4
PC5
PC6/TOSC1
PC7/TOSC2
AREF
AVCC

PB0/T0/XCK
PB1/T1
PB2/AIN0/INT2
PB3/AIN1/OC0
PB4/SS
PB5/MOSI
PB6/MISO
PB7/SCK
PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/OC1B
PD5/OC1A
PD6/ICP1
PD7/OC2
XTAL1
XTAL2
RESET

1
2
3
4
5
6
7
8
14
15
16
17
18
19
20
21
13
12
9

ATMEGA8535

2.

LISTING PROGRAM

/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Evaluation
Automatic Program Generator
Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date
: 1/14/2012
Author : Edy Soeprajitno (03.2008.1.06529)
Company : Laboratorium Mikroprosessor ITATS
Comments:
Chip type
: ATmega8535
Program type
: Application
AVR Core Clock frequency: 11.095200 MHz
Memory model
: Small
External RAM size
: 0
Data Stack size
: 128
*****************************************************/
#include <mega8535.h>
#include <delay.h>
#include <alcd.h>
#include <stdio.h>

unsigned char data_rx;


unsigned char y,x;
void main(void)
{
Func0=In
State0=T
PORTA=0x00;
DDRA=0x00;
Func0=In
State0=T
PORTB=0x00;
DDRB=0x00;
Func0=In
State0=T
PORTC=0x00;
DDRC=0x00;
Func0=In
State0=T
PORTD=0x00;
DDRD=0x00;
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x47;
lcd_init(16);
printf("Mengirim Teks dari PC ke LCD");
putchar(13);
printf("Ketik Teks DISINI :");
putchar(13);
printf(" ");
putchar(13);
y=0;
while (1)
{
x=0;
while(x<16)
{
lcd_gotoxy(x,y);
data_rx=getchar();
printf("%c",data_rx);
lcd_gotoxy(x,y);
lcd_putchar(data_rx);
if(data_rx!=0){x++;data_rx=0;}
}
y++;
if(y==2){y=0;}
}
}

3. KECEPATAN MOTOR DC MELALUI SERIAL PC & LCD


1. GAMBAR RANGKAIAN

RXD
TXD
RTS

U1
40
39
38
37
36
35
34
33
D3(V_MOTOR)

U2(VSS)
U2(VS)

D3

D1

1N4004

1N4004
3
6

D4

D2

1N4004

1N4004
11
14

D4(GND)

U2

OUT1 VS
OUT2

OUT3
OUT4 GND

16
L293D
VSS

GND

IN1
IN2
EN1

EN2
IN3
IN4

2
7
1

22
23
24
25
26
27
28
29

32
30
9
10
15

PA0/ADC0
PA1/ADC1
PA2/ADC2
PA3/ADC3
PA4/ADC4
PA5/ADC5
PA6/ADC6
PA7/ADC7

CTS
PB0/T0/XCK
PB1/T1
PB2/AIN0/INT2
PB3/AIN1/OC0
PB4/SS
PB5/MOSI
PB6/MISO
PB7/SCK

PC0/SCL
PC1/SDA
PC2
PC3
PC4
PC5
PC6/TOSC1
PC7/TOSC2

AREF
AVCC

PD0/RXD
PD1/TXD
PD2/INT0
PD3/INT1
PD4/OC1B
PD5/OC1A
PD6/ICP1
PD7/OC2
XTAL1
XTAL2
RESET

1
2
3
4
5
6
7
8
14
15
16
17
18
19
20
21
13
12
9

ATMEGA8535

U2(GND)

KECEPATAN MOTOR DC DARI PC DENGAN DISPLAY 7SEGMENT


EDY SOEPRAJITNO : 03.2008.1.06529

2. LISTING PROGRAM
/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Evaluation
Automatic Program Generator
Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date
: 1/14/2012
Author : Edy Soeprajitno (03.2008.1.06529)
Company : Laboratorium Mikroprosessor ITATS
Comments:
Chip type
: ATmega8535
Program type
: Application
AVR Core Clock frequency: 11.095200 MHz
Memory model
: Small
External RAM size
: 0
Data Stack size
: 128
*****************************************************/
#include <mega8535.h>
#include <stdio.h>
#include <delay.h>
char rat,pul,sat;
int i;

unsigned char segment[10] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90} ;

unsigned char data;


void display(int pwm)
{

rat=pwm/100;pwm%=100;
pul=pwm/10;
sat=pwm%10;
for(i=0;i<200;i++)
{
PORTC=0b00100000;
PORTB=segment[rat];
delay_ms(1);
PORTC=0b01000000;
PORTB=segment[pul];
delay_ms(1);
PORTC=0b10000000;
PORTB=segment[sat];
delay_ms(1);
}

}
void main(void)
{
PORTA=0x00;
DDRA=0xFF;
PORTB=0xC0;
DDRB=0xFF;
PORTC=0xFF;
DDRC=0xFF;
PORTD=0x00;
DDRD=0xFF;
TCCR1A=0xA1;
TCCR1B=0x0C;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
TIMSK=0x00;
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x47;
printf("PILIH KECEPATAN");
putchar(13);
printf(" ");
putchar(13);
printf("0. STOP");
putchar(13);
printf("1. Kecepatan 1");
putchar(13);
printf("2. Kecepatan 2");
putchar(13);
printf("3. Kecepatan 3");
putchar(13);

printf("4. Kecepatan 4");


putchar(13);
while (1)
{
display(OCR1AL);
data=getchar();
if(data=='0')
{
OCR1AL=0;
PORTA=0x00;
}
else if(data=='1')
{
OCR1AL=64;
PORTA=0x01;
}
else if(data=='2')
{
OCR1AL=128;
PORTA=0x01;
}
else if(data=='3')
{
OCR1AL=192;
PORTA=0x01;
}
else if(data=='4')
{
OCR1AL=255;
PORTA=0x01;
}
}

};

You might also like