Seri Port RS232 veriler düzgün gelmiyor ?

Başlatan handybest06, 02 Temmuz 2012, 12:27:46

handybest06

Seri port denemesi yapıyordum elimdeki usb-rs232 modul ile verileri gönderiyorum ama veriler düzgün gelmiyor.Mesela 1 e basınca g . basınca 4 , 2 ye basınca 3 gibi.
Sorunu nasıl çözebilirim.Yardımlarınızı bekliyorum.

serhat1990

Devre şeması , yazılım , vs vs...

handybest06

#2
elimdeki ilk modulde sıkıntı yoktu herşey mükemmel diğer seri port dönüştürücüde böyle oldu.

1. si yani çalışan direk PIC in rx-tx pinlerine bağladım.


2.si yani bozuk karakter çıkaran aynı şekilde bağladım


mesaj birleştirme:: 02 Temmuz 2012, 15:29:39

Şeması


#include <htc.h>
#include <stdio.h> // printf için gerekli C standart giriG çıkıG kütüphanesi
#include "delay.h" // Gecikme kütüphanesi tanımlanıyor
#include "lcd.h" // LCD kütüphanesi tanımlanıyor

__CONFIG(FOSC_HS & WDTE_OFF & BOREN_OFF& PWRTE_ON & BOREN_OFF);

#define BAUD 19200 //Boudrate
#define FOSC 4000000L //Kristal hızı
#define NINE 0 //9 bit iletiGim kullanılacaksa 1 yapılmalı
#define HIGH_SPEED 1 //Hızlı iletiGim yapılacaksa 1 yapılmalı
#define RX_PIN TRISC7 //Seri port pinleri
#define TX_PIN TRISC6
#define DIVIDER ((int)(FOSC/(16UL * BAUD) -1))
extern void usart_init(void);
extern void putch(unsigned char byte);
extern unsigned char getch(void);


void usart_init(void)
{
unsigned char speed,nine_bits;
unsigned int divider;
RX_PIN = 1; // Seri iletiGim pinleri giriG olarak tanımlanıyor
TX_PIN = 1;
if(HIGH_SPEED==1) // Hızlı iletiGim yapılacaksa
speed=0x4;
else // Yaval iletiGim yapılacaksa
speed=0x00;
if(NINE==1) // 9 bitlik iletiGim yapılacaksa
nine_bits=0x04;
else // 8 bitlik iletiGim yapılacaksa
nine_bits=0x00;
SPBRG = DIVIDER; // Hız değeri SPBRG'ye yükleniyor
RCSTA = (nine_bits|0x90); // Alım kaydedicisi ayarlanıyor
TXSTA = (speed|nine_bits|0x20); // Gönderim kaydedicisi ayarlanıyor
}
void putch(unsigned char byte)
{
// Tek byte gönder
while(!TXIF); // Transfer tamponu boG mu
TXREG = byte; // Tek byte gönderiliyor
}
unsigned char getch(void)
{
// Tek byte al
while(!RCIF); // Alım tamponu boG mu
return RCREG; // Tek byte alınıyor
}

void main(void) // Ana fonksiyon alanı
{
char i,j;
TRISB=0x00; // LCD için çıkıG
TRISC=0xF0; // USART pinleri giriG olarak kabul ediliyor
PORTB=0x00;
lcd_init(); // LCD ilk ayarları yapılıyor
usart_init(); // USART ilk ayarları yapılıyor
lcd_yaz(" LCD   ");
lcd_gotoxy(2,1);
lcd_yaz(" USART  ");
DelayMs(250);DelayMs(250);DelayMs(250);DelayMs(250);
lcd_clear();
lcd_komut(ImlecYanSon); // Imlec yanıp sönecek
printf("1x16:");
for(;;)
{
j++;
i=getch(); // Karekter alınıyor
veri_yolla(i); // LCD'ye basılıyor
putch(i); // Virtual terminal'e basılıyor
if(j==16) // Glk satıra geçiliyor
{
printf("\n\r2x16:");
lcd_gotoxy(2,1);
}
else if(j==32) // 2. satıra geçiliyor
{
veri_yolla(i);
lcd_clear();
printf("\n\r1x16:");
j=0;
}
}
}

serhat1990

2.resimdeki dönüştürücüyü direk pic'e mi bağladın arada max232 kullanmadınmı ?

handybest06

#4
kullanmadım direk rx tx gnd pinlerini bağladım ???

serhat1990

#5
TTL seviyesi ayarı için kullanman gerekir , kolay gelsin ...

kudretuzuner

Alıntı yapılan: handybest06 - 02 Temmuz 2012, 15:17:48
elimdeki ilk modulde sıkıntı yoktu herşey mükemmel diğer seri port dönüştürücüde böyle oldu.

1. si yani çalışan direk PIC in rx-tx pinlerine bağladım.


2.si yani bozuk karakter çıkaran aynı şekilde bağladım


mesaj birleştirme:: 02 Temmuz 2012, 15:29:39

Şeması


#include <htc.h>
#include <stdio.h> // printf için gerekli C standart giriG çıkıG kütüphanesi
#include "delay.h" // Gecikme kütüphanesi tanımlanıyor
#include "lcd.h" // LCD kütüphanesi tanımlanıyor

__CONFIG(FOSC_HS & WDTE_OFF & BOREN_OFF& PWRTE_ON & BOREN_OFF);

#define BAUD 19200 //Boudrate
#define FOSC 4000000L //Kristal hızı
#define NINE 0 //9 bit iletiGim kullanılacaksa 1 yapılmalı
#define HIGH_SPEED 1 //Hızlı iletiGim yapılacaksa 1 yapılmalı
#define RX_PIN TRISC7 //Seri port pinleri
#define TX_PIN TRISC6
#define DIVIDER ((int)(FOSC/(16UL * BAUD) -1))
extern void usart_init(void);
extern void putch(unsigned char byte);
extern unsigned char getch(void);


void usart_init(void)
{
unsigned char speed,nine_bits;
unsigned int divider;
RX_PIN = 1; // Seri iletiGim pinleri giriG olarak tanımlanıyor
TX_PIN = 1;
if(HIGH_SPEED==1) // Hızlı iletiGim yapılacaksa
speed=0x4;
else // Yaval iletiGim yapılacaksa
speed=0x00;
if(NINE==1) // 9 bitlik iletiGim yapılacaksa
nine_bits=0x04;
else // 8 bitlik iletiGim yapılacaksa
nine_bits=0x00;
SPBRG = DIVIDER; // Hız değeri SPBRG'ye yükleniyor
RCSTA = (nine_bits|0x90); // Alım kaydedicisi ayarlanıyor
TXSTA = (speed|nine_bits|0x20); // Gönderim kaydedicisi ayarlanıyor
}
void putch(unsigned char byte)
{
// Tek byte gönder
while(!TXIF); // Transfer tamponu boG mu
TXREG = byte; // Tek byte gönderiliyor
}
unsigned char getch(void)
{
// Tek byte al
while(!RCIF); // Alım tamponu boG mu
return RCREG; // Tek byte alınıyor
}

void main(void) // Ana fonksiyon alanı
{
char i,j;
TRISB=0x00; // LCD için çıkıG
TRISC=0xF0; // USART pinleri giriG olarak kabul ediliyor
PORTB=0x00;
lcd_init(); // LCD ilk ayarları yapılıyor
usart_init(); // USART ilk ayarları yapılıyor
lcd_yaz(" LCD   ");
lcd_gotoxy(2,1);
lcd_yaz(" USART  ");
DelayMs(250);DelayMs(250);DelayMs(250);DelayMs(250);
lcd_clear();
lcd_komut(ImlecYanSon); // Imlec yanıp sönecek
printf("1x16:");
for(;;)
{
j++;
i=getch(); // Karekter alınıyor
veri_yolla(i); // LCD'ye basılıyor
putch(i); // Virtual terminal'e basılıyor
if(j==16) // Glk satıra geçiliyor
{
printf("\n\r2x16:");
lcd_gotoxy(2,1);
}
else if(j==32) // 2. satıra geçiliyor
{
veri_yolla(i);
lcd_clear();
printf("\n\r1x16:");
j=0;
}
}
}

Merhaba
1.modül Türkiyede var mı?Veya link verebilir misiniz?Teşekkürler.
Amatör

handybest06

Çin'den getirtmiştim Türkiye de yok sanırsam.

Veli B.

#8
Alıntı yapılan: kudretuzuner - 02 Temmuz 2012, 17:43:04
Merhaba
1.modül Türkiyede var mı?Veya link verebilir misiniz?Teşekkürler.

SonMicro' yu ziyaretimde görmüştüm ve çok hoşuma gittiği için yüzsüzlük edip "bende istiyorum bundan" demiştim ve 2 tane almıştım. 2-3 tane için pcb çiz bas uğraş sıkıntı olduğu için aslında pek çok meslektaşın da ihtiyacı olabileceğini konuşmuştuk. Çalıştığımız MCU larla direkt haberleşme konusunda 3.3 ve 5V sorunsuz çalışıyor, devreye 5V sağlıyor  ve ben çok beğenerek kullanıyorum.Ticari olarak satıyorlar mı veya piyasaya sürecekler mi bilmiyorum. İsterseniz bir mail atın kendilerine.

stapan

degerli kardesim pic18f4550 veya  pic18f452 ile direk usb programlasana kardesim hic rs232 ugrasma  yardim istiyorsanda yaz ne istedigini