Professional Documents
Culture Documents
PERCOBAAN 1
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
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
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
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
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 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 :
LAPORAN RESMI
PERCOBAAN 2
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
/*****************************************************
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
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
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 lcd_number=16;.
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;
}
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.
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
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
Pada listing program ini saya buat 1440 karena menyesuaikan dengan simulasi di
proteus dengan pengaturan CKSL Fuse pada proteus adalah 2MHz.
o
Pada perintah tersebut meletakkan karakter dalam kolom ke-7 dan baris ke 1.
o
lcd_puts(cmenit);
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
ATMEGA8535
2. Listing Program
Half Step
/*****************************************************
This program was produced by the
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
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
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
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
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
LAPORAN RESMI
PERCOBAAN 6
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 )
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:
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
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
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:
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;
/*******************************************************************
* 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[]
= "
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
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.
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
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;
}
GAMBAR RANGKAIAN
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>
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)
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;
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);
};