Knife
Üye
- Katılım
- 29 Kas 2007
- Mesajlar
- 5
- Puanları
- 1
- Yaş
- 40
Merhaba.
16F628 ile seri porttan haberleşme yapmaya çalışıyorum fakat uygulamada başarılı olamadım. Basit bir uygulama ile seri port olayını anlamaya çalışıyorum. Mesela seri porttan gönderilen datayı alıp porta'ya yazıyorum ve ledler üzerinde göstermeye çalışıyorum. Fakat 16F628'in uart ayarlarını yapamadığımdan dolayı mıdır bilemiyorum uygulamada seri porttan gelen bilgiyi picten düzgün bir şekilde alamıyorum.
Pic kodlarını CCS C ile yazdım. Kodlar aşağıdaki gibi.
Program.c
Program.h
Proteusta çizdiğim devrede seri port olarak Com2 koydum. Bilgisayarın Com1'i ile Com2'sini çapraz kablo ile bağladım ve Com1'den yolladığım bilgiyi Proteusa koyduğum Com2'nin RX bacağından alıyorum ve pice veriyorum. Bu şekilde Proteus uygulaması başarılı bir şekilde çalışıyor. Fakat devreyi kurup deneme yaptığımda başarılı olamıyorum. Proteus similasyonu yaparken bazı eksikleri tamamlıyor sanıyorum. Pic ve Pc 9600 baudrate ile bilgi alışverişi yapıyor. #rs232 kısmında baudrate tanımlamama rağmen kodda set_uart_speed(9600); yazarakta denedim yine sonuç alamadım. Acaba kodlarda 628'in uart ayarlarını yanlış mı yapıyoruz ? Bu konuda bana yardımcı olursanız sevinirim.
-Bir ara uarttan umudu kestim ve Proteusta Max232 ile uygulama yapmayı denedim. Max232 gelen bilgiyi eviriyor(0'ları 1, 1'leri 0). Proteusta bu sorunu inverter koyarak çözdüm ama bunu programsal olarakta yapabiliriz sanırım. Acaba bu evirme işlemini programda nasıl yapabiliriz ? Bu konuda da bilgisi olan arkadaşlar paylaşırsa sevinirim.
Şimdiden teşekkürler.
16F628 ile seri porttan haberleşme yapmaya çalışıyorum fakat uygulamada başarılı olamadım. Basit bir uygulama ile seri port olayını anlamaya çalışıyorum. Mesela seri porttan gönderilen datayı alıp porta'ya yazıyorum ve ledler üzerinde göstermeye çalışıyorum. Fakat 16F628'in uart ayarlarını yapamadığımdan dolayı mıdır bilemiyorum uygulamada seri porttan gelen bilgiyi picten düzgün bir şekilde alamıyorum.
Pic kodlarını CCS C ile yazdım. Kodlar aşağıdaki gibi.
Program.c
Kod:
#include "C:\Program Files\PICC\Projects\628yeni.h"
int deg;
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
while(1)
{
output_a(0);
deg=getc();
if(deg!="")
{
output_a(deg);
delay_ms(500);
}
}
}
Program.h
Kod:
#include <16F628.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES INTRC_IO //Internal RC Osc, no CLKOUT
#FUSES NOPUT //No Power Up Timer
#FUSES PROTECT //Code protected from reads
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOMCLR //Master Clear pin used for I/O
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)
Proteusta çizdiğim devrede seri port olarak Com2 koydum. Bilgisayarın Com1'i ile Com2'sini çapraz kablo ile bağladım ve Com1'den yolladığım bilgiyi Proteusa koyduğum Com2'nin RX bacağından alıyorum ve pice veriyorum. Bu şekilde Proteus uygulaması başarılı bir şekilde çalışıyor. Fakat devreyi kurup deneme yaptığımda başarılı olamıyorum. Proteus similasyonu yaparken bazı eksikleri tamamlıyor sanıyorum. Pic ve Pc 9600 baudrate ile bilgi alışverişi yapıyor. #rs232 kısmında baudrate tanımlamama rağmen kodda set_uart_speed(9600); yazarakta denedim yine sonuç alamadım. Acaba kodlarda 628'in uart ayarlarını yanlış mı yapıyoruz ? Bu konuda bana yardımcı olursanız sevinirim.
-Bir ara uarttan umudu kestim ve Proteusta Max232 ile uygulama yapmayı denedim. Max232 gelen bilgiyi eviriyor(0'ları 1, 1'leri 0). Proteusta bu sorunu inverter koyarak çözdüm ama bunu programsal olarakta yapabiliriz sanırım. Acaba bu evirme işlemini programda nasıl yapabiliriz ? Bu konuda da bilgisi olan arkadaşlar paylaşırsa sevinirim.
Şimdiden teşekkürler.