Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: Nedenler - 20 Ekim 2014, 11:55:57

Başlık: #use rs232 parametrelerini sonradan değiştirme?
Gönderen: Nedenler - 20 Ekim 2014, 11:55:57

#define _BAUD   9600
#define _BITS   8
#define _STOP   1
#define _PARITY E
#use rs232(baud=_BAUD, xmit=pin_D6, rcv=pin_D7, bits=_BITS, stop=_STOP, parity=_PARITY, stream=ASCII)

Kullanıcı kendi cihazının haberleşme ayarlarına göre stop bit, parity, baud değerlerini değiştirsin istiyorum.
Fakat ne #use rs232 komutu bir fonksiyon içinde kullanılıyor ne de parametre olarak bir değişken alıyor.
Ne yapabilirim?
Başlık: Ynt: #use rs232 parametrelerini sonradan değiştirme?
Gönderen: Gökhan BEKEN - 20 Ekim 2014, 12:36:46
Madem değişkenden alıyor, siz de bu tanımları:
#define _BAUD   9600
#define _BITS   8
#define _STOP   1
#define _PARITY E

önce değişkene aktarın sonra, parametre olarak o değişkeni verin.

unsigned char baudrate=_BAUD;
unsigned char kacBitlik=_BITS;
unsigned char stopBiti=_STOP;
unsigned char eslik=_PARITY;
#use rs232(baud=baudrate, xmit=pin_D6, rcv=pin_D7, bits=kacBitlik, stop=stopBiti, parity=eslik, stream=ASCII)
Başlık: Ynt: #use rs232 parametrelerini sonradan değiştirme?
Gönderen: Nedenler - 20 Ekim 2014, 12:56:26
Yok hocam yanlış anlaşılma oldu tam tersine değişkenden almıyor, sabit istiyor.
Programın başında tanıtıyorum sabitle sıkıntı yok.
Fakat program çalışma durumundayken kullanıcı "benim cihazımın paritisi none ayarlı bunun da paritisi none olsun, stop biti 2 olsun" diye değişmek istediğinde kalıyorum öyle.
Başlık: Ynt: #use rs232 parametrelerini sonradan değiştirme?
Gönderen: sadogan - 20 Ekim 2014, 12:59:07
Çalışma anında uart hızınıdeğiştirmek için ccs de fonksiyon var

set_uart_speed(baud speed);
Başlık: Ynt: #use rs232 parametrelerini sonradan değiştirme?
Gönderen: Nedenler - 20 Ekim 2014, 13:02:42
Baudrate cepte. Stop bit ve parity bilgilerini de değiştirmek istersem ne yapmaliyim?
Başlık: Ynt: #use rs232 parametrelerini sonradan değiştirme?
Gönderen: RaMu - 20 Ekim 2014, 13:11:15
#define ....
bir derleyici preprocessor (önişlemci) bildirimidir,
yani sadece program derlenirken kullanılabilir
sabit birşeydir,
derleyiciye şunu şöyle yap burayı şunlarla derle gibi şeyler söyler,
program çalışırken o görevini çoktan yapmıştır,
çalışma esnasında bir müdahalesi söz konusu değildir.

CcsC nin helpini inceleyin,
"set_uart_speed(istediğin baudrate )"
bu fonksiyonla program çalışırken (runtime) baud değerini değiştirebilirsin.

Parity değiştirmek için fonksiyon var mı bilmiyorum ama
aslında olmaması gereken bir durum yani gereksiz diyebiliriz,
yinede parity ayarını değiştirmek için sonradan yazılmış fonksiyon var,
bunun yanında kullandığım mcunun daasheetini inceleyip
hangi registerının hangi bitini değiştirirsen parity ayarını değiştirmiş olursun
bilgisine ulaşabilir bu şekilde runtime parity ayarı yapabilirsin.
Aşağıdaki linklerdede belirtildiği gibi
rs232 de karşındaki cihazın özelliklerini genelde önceden biliyor olursun
hatta biliyor olman gerekir,
yinede karşısındaki cihazın baudrate ine göre kendi baudrae ini
otomatik ayarlayan programlarda yazılmış zamanında.

http://www.ccsinfo.com/forum/viewtopic.php?t=45937&view=previous (http://www.ccsinfo.com/forum/viewtopic.php?t=45937&view=previous)
http://www.ccsinfo.com/forum/viewtopic.php?t=26561 (http://www.ccsinfo.com/forum/viewtopic.php?t=26561)
http://www.ccsinfo.com/forum/viewtopic.php?t=52349 (http://www.ccsinfo.com/forum/viewtopic.php?t=52349)
https://www.ccsinfo.com/forum/viewtopic.php?p=52966 (https://www.ccsinfo.com/forum/viewtopic.php?p=52966)
https://pic-c.com/forum/viewtopic.php?t=48765&view=next (https://pic-c.com/forum/viewtopic.php?t=48765&view=next)
Başlık: Ynt: #use rs232 parametrelerini sonradan değiştirme?
Gönderen: oyaz - 20 Ekim 2014, 13:11:55
Sisteminde Modbus vb. bir haberleşme var ise stop bit, parity gibi bilgileri register olarak dışarı çıkarırsan kullanıcı bunları istediği gibi değiştirebilir.

Sende be değişen değerleri alıp haberleşme ayarlarında kullanabilirsin.

Alıntı Yap#define ....
bir derleyici birdirimidir,

Ayrıca #define derleyici değil, preprocessor birimidir.
Başlık: Ynt: #use rs232 parametrelerini sonradan değiştirme?
Gönderen: RaMu - 20 Ekim 2014, 16:21:34
Alıntı yapılan: oyaz - 20 Ekim 2014, 13:11:55
Ayrıca #define derleyici değil, preprocessor birimidir.
Teşekkür ederim, mesajı düzelttim.
Başlık: Ynt: #use rs232 parametrelerini sonradan değiştirme?
Gönderen: justice_for_all - 20 Ekim 2014, 18:32:33
#byte variable_name = getenv("Register_Name")

yukarıdaki kodla registere ulaşabilirsiniz ordan ilgili registerin ilgili bitini değiştirebilirsiniz.
Başlık: Ynt: #use rs232 parametrelerini sonradan değiştirme?
Gönderen: Nedenler - 19 Kasım 2014, 17:02:05
Bu konuya yeniden değinmek istiyorum. Cevaplar beni bir yere kadar getirdi fakat tıkandım. CCS C üzerinde bulunan modbus kütüphanesini kullanıyorum. RTU Slave olacak cihazım.

TXSTAx registerının TX9 biti 0 olursa None Parity 1 olursa Even veya Odd parity olacak demek.
TXSTAx registerının TX9D biti de gönderilecek datadaki 1 değerinde olan bitlerin sayısına göre haberleşme hattı even kurulduysa çifte odd kurulduysa 1 veya 0 belirlenerek teke tamamlanıyor.

Ancak ben runtime'da parity'yi değiştirdiğimde TX9D değerini nerede değiştireceğim?
Data geldiğinde programın neresinde bunu karşılaştıracağım tüm bunları manuel yapacaksam kütüphaneler, derleyiciler neye yarıyor?

Kullanıcı cihazı alıp enerji verecek ve kendi master cihazına göre benim cihazımın haberleşme ayarlarını değiştirecek. Nasıl?
Bu son derece makul bir istek halbuki.
Başlık: Ynt: #use rs232 parametrelerini sonradan değiştirme?
Gönderen: Nedenler - 12 Aralık 2014, 11:40:34
Bu konuda yardımcı olabilecek biri yok mu?
Runtime'da parity ve stop bit değerlerini değiştirmek istiyorum.
Yabancı forumlara da baktım çözümler yeterli değil.
Başlık: Ynt: #use rs232 parametrelerini sonradan değiştirme?
Gönderen: Gökhan BEKEN - 28 Aralık 2014, 17:20:49
@Nedenler ccs c'de registerlara kolayca ulaşamıyorsun. Bu yüzden datasheetten ilgili register'ın hex adresine bak.
Sonra bir pointer tanımla, adres olarak datasheetten bulduğun adresi göster. Sonra istediğin gibi değer ver.
örn:
unsigned char * TXSTAx; // pointer tanımlıyoruz
TXSTAx = (unsigned char *)0xABCD; // registerin adresini gösteriyoruz
TXSTAx = 0x39; // değer veriyoruz
Başlık: Ynt: #use rs232 parametrelerini sonradan değiştirme?
Gönderen: Nedenler - 29 Aralık 2014, 13:22:59
@meftun
Hocam malesef PIC'de stop bit ve parity değerlerini tutan bir register yok. Varsa da ben bulamadım. Bu değerler değiştirilecekse manuel olarak aktarılacak datadaki bitleri saymak uygun bir yerde parity hesaplayıp değiştirmek stop bitini ayarlamak vs gerekiyor. Bunlarla henüz uğraşamadım. Keşke öyle bir biti değiştirip stop biti 1 veya 2 olarak ayarlayabilsek parity'yi değiştirebilsek falan.
Başlık: Ynt: #use rs232 parametrelerini sonradan değiştirme?
Gönderen: Salih - 29 Aralık 2014, 14:14:02
Alıntı yapılan: Nedenler - 29 Aralık 2014, 13:22:59
@meftun
Hocam malesef PIC'de stop bit ve parity değerlerini tutan bir register yok. Varsa da ben bulamadım. Bu değerler değiştirilecekse manuel olarak aktarılacak datadaki bitleri saymak uygun bir yerde parity hesaplayıp değiştirmek stop bitini ayarlamak vs gerekiyor. Bunlarla henüz uğraşamadım. Keşke öyle bir biti değiştirip stop biti 1 veya 2 olarak ayarlayabilsek parity'yi değiştirebilsek falan.

Hangi PIC için soruyorsun?
Başlık: Ynt: #use rs232 parametrelerini sonradan değiştirme?
Gönderen: Nedenler - 30 Aralık 2014, 09:33:52
18F46K22 kullanıyorum.