Picproje Elektronik Sitesi

DERLEYİCİLER => Microchip MPLAB C serisi => Microchip C18 => Konuyu başlatan: Gökhan BEKEN - 24 Haziran 2013, 10:35:12

Başlık: c18 seri port sorunum
Gönderen: Gökhan BEKEN - 24 Haziran 2013, 10:35:12
Burdaki kodları kullanıp bir deneme yaptım:
http://elkitabim.net/2012/09/19/c18-diliyle-robot-programlama-rs232-seri-haberlesme-usart/ (http://elkitabim.net/2012/09/19/c18-diliyle-robot-programlama-rs232-seri-haberlesme-usart/)
kristal 10mhz, picin frekansıda 10mhz, virtual driver baud rate: 9600
sonuç olarak yazdığım şeylerden farklı sonuç alıyorum.

Kodları ve isis dosyasını buraya yükledim: http://www.4shared.com/rar/W6tETTQK/c18_seri_port.html (http://www.4shared.com/rar/W6tETTQK/c18_seri_port.html)

(http://s10.postimg.cc/vssksehop/terminal.png)
Başlık: Ynt: c18 seri port sorunum
Gönderen: kenan_re - 24 Haziran 2013, 13:15:10
BAUDCON ayarlarınıza dikkat edin bende aynı sorunu yaşamıştım. Derleyicim olmadığı için deneyemedim ama kod da bu adresin ayarı yapılmamış

XC8 derleyicide ki ayarım bu benim.

   baudUSART (BAUD_IDLE_RX_PIN_STATE_HIGH & BAUD_IDLE_TX_PIN_STATE_HIGH &   BAUD_IDLE_CLK_LOW & BAUD_16_BIT_RATE & BAUD_WAKEUP_OFF & BAUD_AUTO_OFF);
Başlık: Ynt: c18 seri port sorunum
Gönderen: Gökhan BEKEN - 24 Haziran 2013, 13:34:50
Teşekkürler.
4mhz ile denedim sorun yok. Yüksek frekansta sorun çıkıyormuş ancak benim yüksek frekansta çalıştırmam lazım.
putrsUSART("yazı"); komutu ile gönderebiliyorum sadece, diğerleri göndermiyor.
Başlık: Ynt: c18 seri port sorunum
Gönderen: jackal183 - 24 Haziran 2013, 13:39:05
yüksek frekansta sorun çıkacağını sanmıyorum, 18f452 ve 18lf25k22 ile hem 4 mhz hem 10 mhz hem de 16 mhz de usatr ile çalıştım, brgh ve pll kavramları önemlidir baud rate ayarların için. linkte vermiş olduğun kodları bilmiyorum , ben c18 de kütüphaneleri kullanmıyorum registerları kendim ayarlıyorum. ama koda baktığında brgh high yapılmış ve spbrgye 25 yüklenmiş galiba. bu değerleri datashetten kontrol edip uygun olanı seçmen gerekli
Başlık: Ynt: c18 seri port sorunum
Gönderen: kenan_re - 24 Haziran 2013, 14:34:42
benim içinde benzer bir durum gerkliydi. ilk 600baud ile sonradan 9600 baud çıkmam gerekiyordu BAUDCON ile SPBRG ve SPBRGH değerlerini 16 Bit olarak ayarlıyarak çok geniş bir yelpazede veri hızı ayarlıyabiliyorsun. Yukarıda verdiğim ayarlar ile 16 Bit olarak ayarlı.

Aşağıda verdiğim kodlar ise 877A için c18 yazdıklarım tanımlı olan init_comms_9600() makrosunu setup anında çağırsan otamatik olarka gerekli değerleri sana 8 Mhz için ayarlıyacaktır.


#ifndef _SERIAL_H_
#define _SERIAL_H_
     
#define FOSC 8000000L
#define NINE 0     /* Use 9bit communication? FALSE=8bit */
#define HIGH_SPEED 0
#define DIVIDER_9600 ((int)(FOSC/(16UL * 9600) -1)) //BRGH=0 hızına göre baud hesabı
#define DIVIDER_600 ((int)(FOSC/(64UL * 600) -1)) //BRGH=1 hızına göre baud hesabı
#define NINE_BITS_1 0x40
#define NINE_BITS_0 0
#define SPEED_9600 0x4
#define SPEED_600 0
#define RX_PIN TRISC7
#define TX_PIN TRISC6

/* Serial initialization */
#define init_comms_600()\
RX_PIN = 1; \
TX_PIN = 1;   \
SPBRG = DIVIDER_600;      \
RCSTA = (NINE_BITS_0|0x90); \
TXSTA = (SPEED_600|NINE_BITS_0|0x20)

#define init_comms_9600()\
RX_PIN = 1; \
TX_PIN = 1;   \
SPBRG = DIVIDER_9600;      \
RCSTA = (NINE_BITS_0|0x90); \
TXSTA = (SPEED_9600|NINE_BITS_0|0x20)

void putch(unsigned char);
unsigned char getch(void);
unsigned char getche(void);

#endif
Başlık: Ynt: c18 seri port sorunum
Gönderen: Gökhan BEKEN - 26 Haziran 2013, 11:50:57
@kenan_re
hocam çok teşekkür ederim

SPBRG = ((int)(8000000L/(16UL * 9600) -1)); // 8mhz için bunu yaptım oldu
SPBRG = ((int)(20000000L/(16UL * 9600) -1)); // 20mhz için bunu yaptım oldu