Institutional Repository | Satya Wacana Christian University: Pesawat Telepon pada Jaringan Wired Local Area Network (LAN) Menggunakan Protokol TCP/IP
LAMPIRAN A. Listing Program Tingkat Ethernet
void spi_eth_reset()
{
SPI_CS_ON;
spi(0xFF);
SPI_CS_OFF;
}
void spi_set_bank(char value)
{
char data;
SPI_CS_ON;
spi(SPI_READ_CON_CMD|ECON1);
data=(spi(0)&0xFC)|value;
SPI_CS_OFF;
SPI_CS_ON;
spi(SPI_WRITE_CON_CMD|ECON1);
spi(data);
SPI_CS_OFF;
}
char spi_read_con_e(char bank,char add)
{
char data;
char cmd=SPI_READ_CON_CMD|add;
spi_set_bank(bank);
SPI_CS_ON;
spi(cmd);
data=spi(0);
SPI_CS_OFF;
return data;
}
char spi_read_con_m(char bank,char add)
{
char data;
char cmd=SPI_READ_CON_CMD|add;
spi_set_bank(bank);
SPI_CS_ON;
spi(cmd);
spi(0);
data=spi(0);
SPI_CS_OFF;
return data;
}
94
95
void spi_write_con(char bank,char add,char value)
{
char cmd=SPI_WRITE_CON_CMD|add;
spi_set_bank(bank);
SPI_CS_ON;
spi(cmd);
spi(value);
SPI_CS_OFF;
}
int spi_read_phy(char add)
{
char temp;int data;
spi_write_con(BANK_2,MIREGADR,add);
temp=spi_read_con_m(BANK_2,MICMD)|0x01;
spi_write_con(BANK_2,MICMD,temp);
while((spi_read_con_m(BANK_3,MISTAT)&0x01)==0x01){};
temp=spi_read_con_m(BANK_2,MICMD)&0xFE;
spi_write_con(BANK_2,MICMD,temp);
data=spi_read_con_m(BANK_2,MIRDH)8;
spi_write_con(BANK_2,MIWRH,temp);
delay_ms(1);
}
void spi_transmit_start()
{
char temp=0;
temp=spi_read_con_e(BANK_0,EIR)&0xF7;
spi_write_con(BANK_0,EIR,temp);
//Clear Transmit Flag
temp=spi_read_con_e(BANK_0,ECON1)|0x08;
spi_write_con(BANK_0,ECON1,temp);
//Set Transmit Enable
}
void spi_wait_transmit_done()
{
while(spi_read_con_e(BANK_0,ECON1)&0x08==0x08);
}
char spi_check_transmit_stat()
{
return (spi_read_con_e(BANK_0,ESTAT)&0x02)>>1;
//return 1 if aborted, return 0 if succeed
}
96
char spi_transmit_error_cause()
{
char temp=0,error=0xFF;
temp=spi_read_con_e(BANK_0,ESTAT);
if((temp&0x40)==0x40)error=6;
else if((temp&0x10)==0x10)error=4;
else if((temp&0x04)==0x04)error=2;
else if((temp&0x02)==0x02)error=1;
else if((temp&0x01)==0x01)error=0;
return error;
}
//Buffer error
//Collision error
//Receive Busy
//Transmit abort
//OST expired
void spi_receive_start()
{
char temp=0;
temp=spi_read_con_e(BANK_0,ECON1)|0x04;
spi_write_con(BANK_0,ECON1,temp);
}
void spi_receive_stop()
{
char temp=0;
temp=spi_read_con_e(BANK_0,ECON1)&0xFB;
spi_write_con(BANK_0,ECON1,temp);
}
char spi_check_packet()
{
if(spi_read_con_e(BANK_1,EPKTCNT)>0)return 1;
else return 0;
}
void spi_wait_clk_ready()
{
while((spi_read_con_e(BANK_0,ESTAT)&0x01)==0)
{
delay_ms(50);
}
}
void spi_wait_rx_busy()
{
while((spi_read_con_e(BANK_0,ESTAT)&0x04)==1);
}
97
LAMPIRAN B. Perhitungan Matematis Low Pass Filter
Filter Chebyshev dengan passband ripple sebesar 3dB memiliki koefisien sebagai
berikut :
a1 5,6334
a2 0,7620
b2 2,6530
a3 0,1172
b3 1,0686
Untuk bagian orde 1 perhitungan frekuensi cut-off adalah sebagai berikut :
2
5,6334
2 . 12. 10 . 22. 10
5,6334. 10
2 . 264
,
Untuk bagian orde 2 dengan R1 = 1K8, R2 = 15K, C1= 100n dan C2 = 2n2 adalah
sebagai berikut :
!"
! 4#
4
0,762. 10 % ! " 0,762. 10 % ! 4.2,653. 10 % . 2,2. 10
4 . 1,8. 10 . 10 % . 2,2. 10
%
0,762. 10 ! "0,5806. 10 ' ! 23,3464. 10
15,84 . 10
%
0,762. 10 ! "34,7136. 10
15,84 . 10
0,762. 10 % ! 5,8918. 10 )
15,84 . 10
1,7282. 10 )
*+, * ,15,84 . 10
."
! 4#
4
0,762. 10 % . " 0,762. 10 % ! 4.2,653. 10 % . 2,2. 10
4 . 15. 10 . 10 % . 2,2. 10
0,762. 10 % . "0,5806. 10 ' ! 23,3464. 10
132 . 10
%
0,762. 10 . "34,7136. 10
132 . 10
0,762. 10 % . 5,8918. 10 )
132 . 10
13,5118. 10 )
+/-, +132 . 10
98
Untuk bagian orde 2 dengan R1 = 470, R2 = 5K, C1 = 1u dan C2 = 1n adalah sebagai
berikut :
!"
4
0,1172. 10
! 4#
."
4
0,1172. 10
! 4#
! " 0,1172. 10
! 4.1,0686. 10 . 10
4 . 470. 10 . 10
0,1172. 10 ! "0,0137. 10
! 4,2744. 10 0
188 . 10 '
0,1172. 10 ! "9,4256. 10 0
188 . 10 '
0,1172. 10 ! 9,7085. 10 )
188 . 10 '
2,0115. 10 )
,/, *
188 . 10 '
0,1172. 10
0,1172. 10
2
0,1172. 10
2
21,4285. 10
2 . 10
. " 0,1172. 10
! 4.1,0686. 10 . 10
4 . 5. 10 . 10 . 10
. "0,0137. 10
! 4,2744. 10 0
2 . 10
. "9,4256. 10 0
. 10
. 9,7085. 10 )
. 10
)
,, /
void spi_eth_reset()
{
SPI_CS_ON;
spi(0xFF);
SPI_CS_OFF;
}
void spi_set_bank(char value)
{
char data;
SPI_CS_ON;
spi(SPI_READ_CON_CMD|ECON1);
data=(spi(0)&0xFC)|value;
SPI_CS_OFF;
SPI_CS_ON;
spi(SPI_WRITE_CON_CMD|ECON1);
spi(data);
SPI_CS_OFF;
}
char spi_read_con_e(char bank,char add)
{
char data;
char cmd=SPI_READ_CON_CMD|add;
spi_set_bank(bank);
SPI_CS_ON;
spi(cmd);
data=spi(0);
SPI_CS_OFF;
return data;
}
char spi_read_con_m(char bank,char add)
{
char data;
char cmd=SPI_READ_CON_CMD|add;
spi_set_bank(bank);
SPI_CS_ON;
spi(cmd);
spi(0);
data=spi(0);
SPI_CS_OFF;
return data;
}
94
95
void spi_write_con(char bank,char add,char value)
{
char cmd=SPI_WRITE_CON_CMD|add;
spi_set_bank(bank);
SPI_CS_ON;
spi(cmd);
spi(value);
SPI_CS_OFF;
}
int spi_read_phy(char add)
{
char temp;int data;
spi_write_con(BANK_2,MIREGADR,add);
temp=spi_read_con_m(BANK_2,MICMD)|0x01;
spi_write_con(BANK_2,MICMD,temp);
while((spi_read_con_m(BANK_3,MISTAT)&0x01)==0x01){};
temp=spi_read_con_m(BANK_2,MICMD)&0xFE;
spi_write_con(BANK_2,MICMD,temp);
data=spi_read_con_m(BANK_2,MIRDH)8;
spi_write_con(BANK_2,MIWRH,temp);
delay_ms(1);
}
void spi_transmit_start()
{
char temp=0;
temp=spi_read_con_e(BANK_0,EIR)&0xF7;
spi_write_con(BANK_0,EIR,temp);
//Clear Transmit Flag
temp=spi_read_con_e(BANK_0,ECON1)|0x08;
spi_write_con(BANK_0,ECON1,temp);
//Set Transmit Enable
}
void spi_wait_transmit_done()
{
while(spi_read_con_e(BANK_0,ECON1)&0x08==0x08);
}
char spi_check_transmit_stat()
{
return (spi_read_con_e(BANK_0,ESTAT)&0x02)>>1;
//return 1 if aborted, return 0 if succeed
}
96
char spi_transmit_error_cause()
{
char temp=0,error=0xFF;
temp=spi_read_con_e(BANK_0,ESTAT);
if((temp&0x40)==0x40)error=6;
else if((temp&0x10)==0x10)error=4;
else if((temp&0x04)==0x04)error=2;
else if((temp&0x02)==0x02)error=1;
else if((temp&0x01)==0x01)error=0;
return error;
}
//Buffer error
//Collision error
//Receive Busy
//Transmit abort
//OST expired
void spi_receive_start()
{
char temp=0;
temp=spi_read_con_e(BANK_0,ECON1)|0x04;
spi_write_con(BANK_0,ECON1,temp);
}
void spi_receive_stop()
{
char temp=0;
temp=spi_read_con_e(BANK_0,ECON1)&0xFB;
spi_write_con(BANK_0,ECON1,temp);
}
char spi_check_packet()
{
if(spi_read_con_e(BANK_1,EPKTCNT)>0)return 1;
else return 0;
}
void spi_wait_clk_ready()
{
while((spi_read_con_e(BANK_0,ESTAT)&0x01)==0)
{
delay_ms(50);
}
}
void spi_wait_rx_busy()
{
while((spi_read_con_e(BANK_0,ESTAT)&0x04)==1);
}
97
LAMPIRAN B. Perhitungan Matematis Low Pass Filter
Filter Chebyshev dengan passband ripple sebesar 3dB memiliki koefisien sebagai
berikut :
a1 5,6334
a2 0,7620
b2 2,6530
a3 0,1172
b3 1,0686
Untuk bagian orde 1 perhitungan frekuensi cut-off adalah sebagai berikut :
2
5,6334
2 . 12. 10 . 22. 10
5,6334. 10
2 . 264
,
Untuk bagian orde 2 dengan R1 = 1K8, R2 = 15K, C1= 100n dan C2 = 2n2 adalah
sebagai berikut :
!"
! 4#
4
0,762. 10 % ! " 0,762. 10 % ! 4.2,653. 10 % . 2,2. 10
4 . 1,8. 10 . 10 % . 2,2. 10
%
0,762. 10 ! "0,5806. 10 ' ! 23,3464. 10
15,84 . 10
%
0,762. 10 ! "34,7136. 10
15,84 . 10
0,762. 10 % ! 5,8918. 10 )
15,84 . 10
1,7282. 10 )
*+, * ,15,84 . 10
."
! 4#
4
0,762. 10 % . " 0,762. 10 % ! 4.2,653. 10 % . 2,2. 10
4 . 15. 10 . 10 % . 2,2. 10
0,762. 10 % . "0,5806. 10 ' ! 23,3464. 10
132 . 10
%
0,762. 10 . "34,7136. 10
132 . 10
0,762. 10 % . 5,8918. 10 )
132 . 10
13,5118. 10 )
+/-, +132 . 10
98
Untuk bagian orde 2 dengan R1 = 470, R2 = 5K, C1 = 1u dan C2 = 1n adalah sebagai
berikut :
!"
4
0,1172. 10
! 4#
."
4
0,1172. 10
! 4#
! " 0,1172. 10
! 4.1,0686. 10 . 10
4 . 470. 10 . 10
0,1172. 10 ! "0,0137. 10
! 4,2744. 10 0
188 . 10 '
0,1172. 10 ! "9,4256. 10 0
188 . 10 '
0,1172. 10 ! 9,7085. 10 )
188 . 10 '
2,0115. 10 )
,/, *
188 . 10 '
0,1172. 10
0,1172. 10
2
0,1172. 10
2
21,4285. 10
2 . 10
. " 0,1172. 10
! 4.1,0686. 10 . 10
4 . 5. 10 . 10 . 10
. "0,0137. 10
! 4,2744. 10 0
2 . 10
. "9,4256. 10 0
. 10
. 9,7085. 10 )
. 10
)
,, /