• Tidak ada hasil yang ditemukan

Rancangan Pengolah Tampilan Dan Penyimpan Hasil Alat Timbang Berbasis Serat Optik Menggunakan Mikrokontroler ATMEGA32

N/A
N/A
Protected

Academic year: 2019

Membagikan "Rancangan Pengolah Tampilan Dan Penyimpan Hasil Alat Timbang Berbasis Serat Optik Menggunakan Mikrokontroler ATMEGA32"

Copied!
18
0
0

Teks penuh

(1)

LAMPIRAN A

Program

#include <mega32.h> #include <stdio.h> #include <delay.h> #include "mmc.c" #if TINY_FAT #include "tff.c" #else

#include "ff.c" #endif

#include <delay.h>

// DS1307 Real Time Clock functions #include <ds1307.h>

// Alphanumeric LCD functions //#include <alcd.h>

#asm

.equ __lcd_port=0x15 // untuk port c #endasm

/* now you can include the LCD Functions */ #include <lcd4x40.h>

//variabel global

#define RTC_ADDR 0xD0

char *day[7]={"Senin","Selasa","Rabu","Kamis","Jum'at","Sabtu","Minggu"}; char

*month[12]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","N ov","Dec"};

unsigned char hari, tanggal,bulan,tahun,jam,menit,detik;

char text[16];

unsigned int j=1; float sum=0; bit start,stop=0;

// External Interrupt 0 service routine

(2)

// Place your code here start=1;

stop=0; j=1; }

// External Interrupt 1 service routine

interrupt [EXT_INT1] void ext_int1_isr(void) {

// Place your code here start=0;

stop=1; sum=0;

lcd_gotoxy(0,2); lcd_clear(); lcd_gotoxy(0,0);

lcd_puts("SENSOR BEBAN BERBASIS FIBER OPTIK"); }

#define ADC_VREF_TYPE 0x40

// Read the AD conversion result

unsigned int read_adc(unsigned char adc_input) {

ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);

// Delay needed for the stabilization of the ADC input voltage delay_us(10);

// Start the AD conversion ADCSRA|=0x40;

// Wait for the AD conversion to complete while ((ADCSRA & 0x10)==0);

ADCSRA|=0x10; return ADCW; }

char filename[15]="data/tes.csv"; //char filename[15];

char i,FBuffer[100]; char *file;;

unsigned char data;

char foldername[10]="data"; unsigned char dta[25],loop; unsigned int cobi;

FRESULT report;

unsigned char command,a,b,flag,sreg,bcd,cek; //char FBuffer[100];

(3)

unsigned int bw; //unsigned long bw;

FATFS fs; // Work area (file system object) for logical drive FIL ftest; // file objects

FILINFO finfo;

#ifndef RXB8 #define RXB8 1 #endif

#ifndef TXB8 #define TXB8 0 #endif

#ifndef UPE #define UPE 2 #endif

#ifndef DOR #define DOR 3 #endif

#ifndef FE #define FE 4 #endif

#ifndef UDRE #define UDRE 5 #endif

#ifndef RXC #define RXC 7 #endif

#define FRAMING_ERROR (1<<FE) #define PARITY_ERROR (1<<UPE) #define DATA_OVERRUN (1<<DOR)

#define DATA_REGISTER_EMPTY (1<<UDRE) #define RX_COMPLETE (1<<RXC)

// USART Receiver buffer #define RX_BUFFER_SIZE 24 char rx_buffer[RX_BUFFER_SIZE];

#if RX_BUFFER_SIZE <= 256

(4)

unsigned int rx_wr_index,rx_rd_index,rx_counter; #endif

// This flag is set on USART Receiver buffer overflow bit rx_buffer_overflow;

// USART Receiver interrupt service routine interrupt [USART_RXC] void usart_rx_isr(void) {

char status,data; status=UCSRA; data=UDR;

if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)

{

rx_buffer[rx_wr_index++]=data; #if RX_BUFFER_SIZE == 256

// special case for receiver buffer size=256 if (++rx_counter == 0) rx_buffer_overflow=1; #else

if (rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0; if (++rx_counter == RX_BUFFER_SIZE)

{

// Get a character from the USART Receiver buffer #define _ALTERNATE_GETCHAR_ #if RX_BUFFER_SIZE != 256

(5)

#endif

// USART Transmitter buffer #define TX_BUFFER_SIZE 24 char tx_buffer[TX_BUFFER_SIZE];

#if TX_BUFFER_SIZE <= 256

unsigned char tx_wr_index,tx_rd_index,tx_counter; #else

unsigned int tx_wr_index,tx_rd_index,tx_counter; #endif

// USART Transmitter interrupt service routine interrupt [USART_TXC] void usart_tx_isr(void) {

if (tx_counter) {

--tx_counter;

UDR=tx_buffer[tx_rd_index++]; #if TX_BUFFER_SIZE != 256

if (tx_rd_index == TX_BUFFER_SIZE) tx_rd_index=0; #endif

} }

#ifndef _DEBUG_TERMINAL_IO_

// Write a character to the USART Transmitter buffer #define _ALTERNATE_PUTCHAR_

#pragma used+ void putchar(char c) {

while (tx_counter == TX_BUFFER_SIZE); #asm("cli")

if (tx_counter || ((UCSRA & DATA_REGISTER_EMPTY)==0)) {

tx_buffer[tx_wr_index++]=c; #if TX_BUFFER_SIZE != 256

if (tx_wr_index == TX_BUFFER_SIZE) tx_wr_index=0; #endif

++tx_counter; }

else UDR=c; #asm("sei") }

(6)

void clear_buffer()

interrupt [TIM2_COMP] void timer2_comp_isr(void) {

(7)

}

putchar(0x0d);

//} }

void reading() {

f_mount(0,&fs);

report=f_open(&ftest,filename, FA_OPEN_EXISTING | FA_READ); if (report==FR_NO_PATH)

{

printf("NO PATH");

}

else if (report==FR_NO_FILE) {

printf("NO FILE");

} else {

take_data(200); }

f_close(&ftest); f_mount(0, NULL); }

void mount_on() {

f_mount(0,&fs); }

void display_status(char *file_name) {

if ((report=f_stat(file_name,&finfo))==FR_OK) {

} }

void mk_dir() {

f_mkdir(foldername); }

(8)

report=0; do {

report=f_open(&ftest,filename, FA_CREATE_ALWAYS | FA_WRITE);

}

while(report!=FR_OK); }

//========================================================= ===

void isi_file(void) {

unsigned char ulang; unsigned char status_tulis; status_tulis=0;

//reset_filename(); //file_data(); //mk_dir();

//mk_file(); display_status(filename);

for(ulang=0;ulang<10;ulang++) {

//timer_mmc(); if

((report=f_open(&ftest,filename,FA_WRITE))==FR_OK)status_tulis=1; else status_tulis=0;

if(status_tulis==1)

{

if ((report=f_lseek(&ftest,finfo.fsize))==FR_OK)status_tulis=1; else status_tulis=0;

}

if(status_tulis==1) {

if

((report=f_write(&ftest,FBuffer,strlen(FBuffer),&bw))==FR_OK)status_tulis=1; else status_tulis=0;

}

(9)
(10)

| (30U << 5) // Min = 30

// Declare your local variables here unsigned int dt_adc;

float rata_rata, v, BEBAN; char buf [33];

unsigned char second_akhir=0,time_transmit=0; // Input/Output Ports initialization

// Port A initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTA=0x00;

DDRA=0x00;

// Port B initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTB=0x00;

DDRB=0x00;

// Port C initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00;

DDRC=0x00;

// Port D initialization

// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In

// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00;

DDRD=0x00;

(11)

TCNT0=0x00; OCR0=0x00;

// Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer1 Stopped // Mode: Normal top=0xFFFF // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off

// Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0x00;

// Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Mode: Normal top=0xFF // OC0 output: Disconnected TCCR0=0x00;

TCNT0=0x00; OCR0=0x00;

// Timer/Counter 1 initialization // Clock source: System Clock // Clock value: Timer1 Stopped // Mode: Normal top=0xFFFF // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off

(12)

TCCR1B=0x00; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00;

// Analog Comparator initialization // Analog Comparator: Off

// Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80;

SFIOR=0x00;

// ADC initialization

// ADC Clock frequency: 1000.000 kHz // ADC Voltage Reference: AVCC pin ADMUX=ADC_VREF_TYPE & 0xff; ADCSRA=0x83;

// SPI initialization // SPI disabled SPCR=0x00;

// TWI initialization // TWI disabled TWCR=0x00;

OCR2 = 77-1; // Timer2: 100Hz interval (OC2) TCCR2 = 0b00001111; //CTC mode,

TIMSK=0x80; DDRB=1;

#asm("sei") PORTD=0x00; DDRD=0x04; UCSRA=0x00; UCSRB=0xD8; UCSRC=0x86; UBRRH=0x00; UBRRL=0x19;

// I2C Bus initialization // I2C Port: PORTA // I2C SDA bit: 1 // I2C SCL bit: 0 // Bit Rate: 100 kHz

(13)

// Project|Configure|C Compiler|Libraries|I2C menu. i2c_init();

// DS1307 Real Time Clock initialization // Square wave output on pin SQW/OUT: On // Square wave frequency: 1Hz

rtc_init(0,1,0);

rtc_set_time(10,00,00); // jam 6:00:00 rtc_set_date(22,26,05,12);

printf("serial init\n\r");

if(disk_initialize(0)==STA_NOINIT)

{ printf("MMC not init\n\r");

printf("PleaseInsertSDCard!!\r"); printf("RestartY'rInstrument\r");

while(1); // stop! if card was not present or was not detected currectly }

//filename="data/awal.csv"; mount_on();

mk_dir(); mk_file(); //file_baru();

sprintf(FBuffer,"Tanggal, Waktu, Data\n"); //write_data();

isi_file(); //mount_off(); printf("done\n\r");

printf("Coba SD Card\r");

// Alphanumeric LCD initialization // Connections are specified in the

// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu: // RS - PORTC Bit 0

// RD - PORTC Bit 1 // EN - PORTC Bit 2 // D4 - PORTC Bit 4 // D5 - PORTC Bit 5 // D6 - PORTC Bit 6 // D7 - PORTC Bit 7 // Characters/line: 40 lcd_init();

lcd_gotoxy(0,0);

lcd_puts("SENSOR BEBAN BERBASIS FIBER OPTIK");

(14)

while(1) {

// Place your code here

rtc_get_date(&hari,&tanggal, &bulan, &tahun); rtc_get_time(&jam, &menit, &detik);

lcd_gotoxy(0,1);

sprintf(text,"%s/%02d/%s/%02d",day[hari],tanggal,month[bulan],tahun);

lcd_puts(text); lcd_gotoxy(20,1);

(15)

sprintf(buf, "R = %.2f volt", rata_rata); lcd_puts(buf);

j++;

delay_ms(500); }

}

lcd_gotoxy(0,3);

BEBAN = (21.94*rata_rata*rata_rata*rata_rata)- 176.3*rata_rata*rata_rata)+ (476.3*rata_rata )-328 ;

sprintf(buf, "BEBAN = %.2f kg",BEBAN); lcd_puts(buf);

rtc_get_time(&jam,&menit,&detik); if(second_akhir!=detik)time_transmit+=1; second_akhir=detik;

if (time_transmit==60) {

for (j=0;j<100;j++) {

rtc_get_time(&jam,&menit,&detik);

rtc_get_date(&hari,&tanggal, &bulan, &tahun);

sprintf(FBuffer,"%02d/%02d/%02d/%02d, %02d:%02d:%02d, %d\n",hari,tanggal,bulan,tahun,jam,menit,detik,j);

isi_file(); take_data(30); delay_ms(1000); }

printf("selesai\n"); j=0;

second_akhir=0;

rtc_get_time(&jam,&menit,&detik); time_transmit=detik;

(16)

LAMPIRAN B

Gambar

Rangkaian Mikrokontroler dan PC

(17)

Rangkaian Mikrokontroler

(18)

Kabel serat Optik

Gambar

Gambar

Referensi

Dokumen terkait

Kesimpulan: Penelitian membuktikan bahwa ada hubungan antara pengetahuan tentang masalah pada masa neonatal dengan kepatuhan melakukan kunjungan neonatal sehingga sangat penting

(As Reynie had already completed all the textbooks on his own, even those for high school students, the orphanage director had assigned him a special tutor while the other children

It also correlates positively with few cardiovascular risk factors, such as C-reactive protein (CRP) (15), fibrinogen, F2-isoprostane, and inversely related with the

Kondisi ini dapat terlihat dalam perwilayahan komoditas, aktivitas pertanian kurang mendapat sorotan yang lebih mendetail mengenai jenis pertanian pada tataran Rencana Tata Ruang

Sistem kendali open loop adalah suatu sistem yang output-nya tidak akan memiliki pengaruh terhadap input-nya kembali sehingga hasil pada output tidak dapat

anggota standing dengan jasa usaha yang dilakukan oleh, masing-masing anggota dengan Koperasi, serta digunakan untuk keperluan pendidikan perkoperasian dan keperluan lain dari

sehingga dibutuhkan suatu media informasi tentang bagaimana belajar tentang teknik dasar dari bermain futsal yang dapat diajadikan sebagai suatu metode pembelajaran untuk

Menurut UU No 28 tahun 2009 Pajak Daerah, yang selanjutnya disebut Pajak, adalah kontribusi wajib kepada Daerah yang terutang oleh orang pribadi atau badan yang