Elektronik / Mikrodenetleyici Projeleri/

ARX34 ATX34 Seri Porttan 2X16 Lcd Data Gönderimi

Sponsorlu Bağlantılar

Hazırlayan : Çagatay BÜYÜKTOPÇU (UDEA Elektronik) Emeği geçen kişilere Teşekkürler

ARX-34 ve ATX-34 kullanarak bilgisayarın seri portundan 2×16 alphanumeric lcd’ye data göndermek için gerekli yazılım ve donanım

Verici Devresi MAX232 ATX34

max232_atx-34_verici

Konnektör bilgisayarın COM portuna takilirken, PIC16F84’lü devrenin enerjili olmamasına dikkat edilmelidir.

Seri porttan göndermek istediğimiz datadan önce preamble ve sencron gönderilmelidir. Bu uygulamada preamble 5 byte 0x55, sencron ise 5 byte 0x00’dir. Örnegin LCD’ye “UDEA Elektronik” stringini göndermek için ;

UUUUU$00$00$00$00$00UDEA Elektronik.

Burada 0x55’in ASCII karşılığı olarak U, ve mesaj sonu bilgisi için ‘nokta’ karakteri kullanılmıştır. Mesaj sonu bilgisi, istege bağlı olarak herhangi bir karakter seçilebilir (yazilimda gerekli değişikliği yaparak). Seri portu kullanacağınız programda yapmanız gereken diğer ayarlar da şunlardır:

Baudrate : 300
Parity : Yok
Byte size : 8
Stop bits : 1

Alıcı Devresi PIC16F84 ARX34

arx-34_pic16f84_lcd

ARX-34 içerisinde bir voltaj regülatorü bulunmamaktadır. Tasarim pil kullanımı düşünülerek yapılmıştır. Bu nedenle besleme voltajinda belirtilen değerlere dikkat edilmelidir.

Modül belirtilen değerlerin altinda bir besleme yapıldığında kararsız çalışacaktır. Besleme voltaji +5 VDC ve tapraklama GND bağlantısı belirtilen değerlerin üzerinde veya ters olursa, modülde kalıcı tahribatlara yolaçabilir.

Modül basit bir anten bağlantı pinine sahiptir. Uygun bir UHF anten doğrudan bu pine bağlanabilir. ARX-34 modülüne bağlanabilecek en basit anten 17.3cm uzunluğundaki bir kablonun anten girişine lehimlenmesidir. Anteni, modülden uzak bir yere bağlamanız gerekiyorsa 50 Ohm Coax anten kablosu kullanmanız gerekmektedir. Anten kablosunun topraklaması, modulun anten girişine yakın bir yerden yapılmalıdır.

Asağıdaki kurallar size yardımcı olacaktır:

* Anten 50 ohm empedancli,ı olmalıdır.
* Lambda/4 whip anten boyu 433MHz. için yaklaşık 17.3 cm dir.
* Anteni modül dik gelecek şekilde yukarıya veya aşagıya doğru monte ediniz.
* Anteni metal bir hazne içine koymayınız.
* Insan vücudu metal objeler gibi etkiler gösterebilirler. Taşınabilir alıcı veya vericiler vücuttan uzak bir şekilde elde tutulmalıdır.

* En iyi iletişim mesafesi her iki taraftaki antenlerin birbirini görmesi ile elde edilebilir. Herhangi bir obje veya metal bir engel iletişim mesafesini düşürecektir.

* Sinyal göndermeleri, gönderilen sinyallerin metal yüzeylerden, binalardan vb. gelen yansımalardan etkilenirler. Bu yanlış data alımlarına yolaçabilir.

Aşağıdaki yazılımla bilgisayardan yollanan datanın sencron bilgisi yakalanıp sonraki karakterler LCD’ye yazdırılmaktadır. Mesaj sonu bilgisi (bu yazılımda nokta karakteri) gelene kadar her karakter LCD’ye yazdırılır. Mesaj sonu bilgisi geldiginde gönderilen mesaj 3 saniye kadar ekranda bekletilir. Daha sonra yeni bir mesaj için LCD temizlenir ve mikroişlemci sencron aramaya devam eder.

Yazılım

/*****************************************************************************/
/* Uygulama Notu UN-0405v01_PC-LCD
/* SOFTWARE
/*
/* File: UN-2608v01_ASKRX.c
/*
/* Microcontroller:
/* Microchip PIC16F84
/*
/* Bu yazilim bilgisayardan alphanumeric LCD'ye
/* RF data göndermek için yazilmis basit bir uygulama notudur.
/*
/* Yazilimin içinde bir çok bekleme rutini kullanilmistir.
/* Crystal frekansi ve compiler farkliligindan dogacak
/* degisiklikler kullanici tarafindan dikkate alinmalidir.
/* Compiler olarak HI-TECH Software kullanilmistir.
/* XT=4MHz
/*
/*Baudrate 300, None parity, Byte size 8, Stop bit 1
/*
/*
/* Yazan: Çagatay BÜYÜKTOPÇU, UDEA
/*
/* Contact: UDEA Elektronik 0.312.395 68 75
/* info@udea.com.tr
/*****************************************************************************/
#include 
#include 
#define RS RA0
#define RW RA1
#define EN RA2
#define RX RB7
#define bit_set(var,bitno) ((var) |= (1<<(bitno)))
#define bit_reset(var,bitno) ((var) &= ~(1<<(bitno)))
__CONFIG( XT&WDTDIS&PWRTDIS);
void lcd_reset(void);
void clear(void);
void function_set(void);

void on_off(void);
void entry_mode(void);
void data_gonder(unsigned char lcd);
void baud(void);
unsigned char karakter, lcd;
unsigned char x, y, say;
main()
{
TRISB=0b10000000; //PORTB<0:6> çikis,PORTB<7> giris(RX)
TRISA=0; //PORTA çikis
PORTA=0;
PORTB=0;
RW=0; //LCD'ye yaz
T0CS=0; //Timer için clock internal
PSA=0; //Prescaler TMR0 için
PS2=1;
PS1=1;
PS0=1; //TMR0, prescale 256
DelayMs(100); //LCD'yi bekle
lcd_reset(); //LCD initialization
function_set(); //
on_off(); //
entry_mode(); //
clear();
RS=1; //Data
for(;;)
{
clear();
while(y<=3)
{
TMR0=0; //Timer'i baslat
while(RX==0); //Start bitinin geçmesini bekle
if(TMR0>95) //24ms geçtiyse
{
y++;
while(RX==1); //Stop bitini bekle
}
else
{
y=0;
}
}
y=0;
while(karakter!='.') //Mesaj sonu bilgisi gelmedigi sürece
{ //gelen datalari LCD'ye yaz
karakter=0;
say=0;
while(RX==0); //Start bitini bekle
baud();
while(say<=7)
{
if(RX==1)
bit_set(karakter,7); //Gelen bit 1
else
bit_reset(karakter,7); //Gelen bit 0
karakter=karakter>>1; //Bir bit saga kaydir

say++; //8 kere tekrar et
baud(); //Diger bite geç
}
data_gonder(karakter); //Gelen datayi LCD'ye yaz
while(RX==1); //Stop bitinin geçmesini bekle
}
for(x=0;x<=14;x++) //3 saniye kadar ekranda görüntüle
{
DelayMs(200);
}
clear(); //Yeni bir mesaj için LCD'yi temizle
} //Kursoru en basa al
}
void lcd_reset(void)
{
RS=0; //Komut
karakter=1;
for(x=0;x<=2;x++)
{
PORTB=0;
EN=1;
NOP();
EN=0;
DelayMs(1);
}
}
void clear(void)
{
RS=0; //Komut
karakter=0b00000001; //Displayi temizle ve kursoru sayfa basina al
PORTB=(karakter>>4)&(0b00001111); //Önce üst 4 biti gönder
EN=1;
NOP();
EN=0;
PORTB=(karakter&0b00001111); //Sonra da alt 4 biti
EN=1;
NOP();
EN=0;
DelayUs(250);
}
void function_set(void)
{
RS=0; //Komut
karakter=0b00101000; //4-bit veri aktarimi, 2 satir, 5*7 font
PORTB=(karakter>>4)&(0b00001111);
EN=1;
NOP();
EN=0;
PORTB=(karakter&0b00001111);
EN=1;
NOP();
EN=0;
DelayMs(1);

}
void on_off(void)
{
RS=0; //Komut
karakter=0b00001111; //Display on, kursor on
PORTB=(karakter>>4)&(0b00001111);
EN=1;
NOP();
EN=0;
PORTB=(karakter&0b00001111);
EN=1;
NOP();
EN=0;
DelayMs(1);
}
void entry_mode(void)
{
RS=0; //Komut
karakter=0b00000110; //Kursor saga dogru hareket eder
PORTB=(karakter>>4)&(0b00001111);
EN=1;
NOP();
EN=0;
PORTB=(karakter&0b00001111);
EN=1;
NOP();
EN=0;
DelayMs(1);
}
void data_gonder(unsigned char lcd)
{
RS=1;
karakter=lcd;
PORTB=(karakter>>4)&(0b00001111);
EN=1;
NOP();
EN=0;
PORTB=(karakter&0b00001111);
EN=1;
NOP();
EN=0;
}
void baud(void) //Baud rate 300
{
for(x=0;x<16;x++)
{
DelayUs(215);
}
}

Kaynak dosya: ARX34 ATX34 Seri Porttan 2X16 Lcd Data Gönderimi

Dosya indirme LINK listesi (TXT formatında) link-2192.zip şifre-pass: 320volt.com