Rabu, 23 November 2011

Tutorial Komunikasi Serial dengan Code Vision

Sebelumnya saya sudah menjelaskan Tutorial Komunikasi Serial dengan AVR GCC dan untuk Tutorial Komunikasi Serial dengan Bascom AVR dapat dilihat diartikel tentang Tutorial RFID with Microcontroller, sekarang saya akan menjelaskan Tutorial Komunikasi Serial dengan Code Vision. Jika Anda pemula dan ingin belajar dari awal tentang Code Vision bisa dilihat pada Tutorial Menampilkan LCD.

Rangkaian skematik simulasi dengan proteus untuk tutorial ini adalah sbb:

Simulasi tersebut juga bisa di download disini.

Pada CodeWizardAVR lakukan pengaturan sbb:



 



Jangan lupa untuk memilih data float pada Tools --> Configure:


Listing programnya dengan Code Vision sebagai berikut:
/****************************************************
TUTORIAL KOMUNIKASI SERIAL CODE VISION
Programmer: WAHYU RAHMANIAR
Company   : TECHNOLOGINATION
****************************************************/

#include <mega32.h>
#asm
   .equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
#include <stdio.h> 
#include <delay.h>

#define ADC_VREF_TYPE 0x00
#define Tombol PINB.0


//deklarasi variabel
char buf[33];
float vin;
unsigned int temp;
char serial;
int flag;
char datas[20];
int i;
int j;

//deklarasi Fungsi
char terimadata(void);
void kirim(void);
void baca(void);

unsigned int 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;
}

char terimadata (void)
{
while(!(UCSRA & 0x80));
serial=getchar();  
return serial;
}

void main(void)
{
PORTA=0x00;
DDRA=0x00;

PORTB=0x01;
DDRB=0x00;

PORTC=0x00;
DDRC=0x00;

PORTD=0x00;
DDRD=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=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;

// 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: AREF pin
ADMUX=ADC_VREF_TYPE & 0xff;
ADCSRA=0x83;

lcd_init(16);
lcd_clear();
lcd_gotoxy(1,0);
lcd_putsf("Serial CV AVR");
lcd_gotoxy(0,1);
lcd_putsf("WAHYU RAHMANIAR");
delay_ms(1000);


while(1)
      {
        temp=read_adc(0);
        vin=((float)temp*5/1023);
        lcd_clear();
        lcd_gotoxy(0,0);
        lcd_putsf("Data Tegangan:");
        lcd_gotoxy(0,1);
        sprintf(buf,"%0.1f Volt",vin);
        lcd_puts(buf);
        printf("Data Tegangan: %0.1f Volt\r\n", vin); 
        delay_ms(1000); 
       
        if (Tombol==0)
        {
        flag=0;
        printf("Kirim data... \r\n");
        lcd_clear();
        lcd_gotoxy(0,0);
        lcd_putsf("Tombol Ditekan..");
        delay_ms(1000);
        kirim();
        }   
       
      };
}

void kirim(void)
{
i=0;
//input="";
while(1)
 {
  datas[i]=terimadata();
  printf("%c",datas[i]);
   if(datas[i]==13)//ENTER
   {   
    i=i-1;
    printf("\r\n");
    baca();
   }  
  i++;   
 };


void baca(void)
{
j=0;                  
///printf("%c",datas[j]);
 if(datas[j]==79)//ascii O
 {            
 j=j+1;
 //printf("%c",datas[j]);
   if(datas[j]==75)//ascii K
   {
   i=0;
   j=0;
   lcd_clear();
   lcd_gotoxy(0,0);
   lcd_putsf("Sistem Aktif");
   delay_ms(1000);
   main();
   }
   else
   {
    printf("Perintah Salah...");
    delay_ms(1000);
    main();                 
   }
  }
  else
  {
   printf("Perintah Salah...");
   delay_ms(1000);
   main();                 
  }
}


Atau bisa didownload disini.

Program tersebut akan menampilkan data tegangan potensiometer pada LCD 16x2 dan mengirimkannya ke port serial (dapat dilihat pada Hyperterminal), jika tombol ditekan maka serial siap menerima data.

Jika data yang diketikkan adalah "OK" kemudian enter maka LCD akan menampilkan tulisan "Sistem Aktif" dan selain itu akan ditampilkan tulisan "Perintah Salah...".

Tempat Jual Komponen dan Elektronik.
-ayuchan-