avatar_ete

PIC Basic Ders-07 (Seri İletişim)

Başlatan ete, 28 Ağustos 2011, 16:14:39

ete

Aynen öyle olacak idi. Ancak unutmayın bu komut yalnızca bir kere ve oda Pic'e programı yazdırırken kullanılıyor. Amaç da Pic epromuna programın çalışması esnasında kullanılabilecek sabit bilgiler yazdırmaktır. Dolayısıyla pic programlandığı zaman bu bilgilerde epromunda hazır bekler.
Ete

Adem AYDIN

Hocam proteüsta deniyorum, simülasyon programı proteusu (7.7) açıp kapatınca bu eeprom sıfırlanıyor. Yani ilk değere dönüyor örneğin eeprom 0da 3 çıkıyor bunu değiştirip picin enerjisini kesiyorum değiştirdiğim değer kayıt edilip enerji verdiğimde tekrar bu değerden başlıyor ama programı yeniden açtığında hep 3ten başlıyor ama ben 3değil başka bir değer veriyorum ama 3 çıkıyor, eeprom 1de de 0 çıkıyor ama yine ben 0 yapmadığım halde oluyor. Bu eeprom 0ve1 de bu sorun var ama eeprom 2ve3 te ilk okunan değer 255 bu 0ve1de niye böyle yapıyor anlamadım geçici olarak 2,3ü kullanıyorum.
ALLAH 'ın Dini Galip Gelmesi İçin (Malınızla ve Canınızla) Çalışın.

Adem AYDIN

Arkadaşın sorusuna birde bu yöntemi vereyim,

EEPROM 0,[0,255,12,38,255,255,255]
İlk eeprom 0 sonraki 255 3. eeprom 12 ... diye devam edeyor.

EEPROM 5,[10,20]
eeprom 5'e 10, 6'ya 20 yazar.
ALLAH 'ın Dini Galip Gelmesi İçin (Malınızla ve Canınızla) Çalışın.

ete

EEPROM ve DATA komutları tamamen bir birinin aynı işi yapar. Biri diğerinin yerine kullanılabilir.
Bu iki komutu da program çalışıyor iken kullanamazsınız. Yani RUN-TIME komutu değillerdir.

Ete

temha43

Selamun aleyküm

arduino ile seri iletişm ile yapılmış olan bir apartman diafon sisteminin kodlarını okumak istiyorum. isadece rx bağlantısıyla okuyabilirmiyim. if (Serial.available() > 0 bu komut bağlantı olduğunda manasına geriyormuş. bağlantı olduğunu tek pinle mi anlıyor. yoksa rx tx iki bağlantının da olmas gerekiyormu. şimdiden teşekkürler.

ete

Arduino nasıl davranıyor bilmem. Olayın iki yüzü var. Şayet donanımsal seri port pinleri haberleşme amacı ile kullanılıyor ise tx bacağını kullanmasanız bile haberleşme için ayırmanız gerekir ama tek rx bacağı ile bilgi alırsınız.
Şayet herhangi bir pin rx olarak kullanılıyor ise tx bacağının önemi yoktur.

Ete

Elektronikprojem

#51
Merhabalar,
Ete hocanın seri iletişim pdf ini de inceledim yalnız 115200 baudrate haberleşmek için verilen değeri göremedim. Bunun için donanımsal usart ı mı kullanmak gereklidir. ESP8266 ile haberleşeceğim ve esp modülünün hızı malesef ki ayarlanamıyor.
Ete hocam şöyle bir formül vermiş. Haberlesme Hızı= (1.000.000/Baud Rate)-20 buradaki 1000000 osilatör frekansıyla mı alakalı onu anlamadım.bu formule 115200 ü koyduğum zaman -11 gibi bi rakam çıkıyor.
teşekkürler 

ete

Bu tür hesapalrın içinde boğulmamak için PicMicroCalc.exe isimli küçük program parçasını kullanın diye defalarca öneride bulunmuştum. O programda USART yada Eusart seçeneklerinde direk 115200 baud rate bulunuyor.
Ancak dikkat etmek gerekiyor. Baud rate birim zaman içinde yollanan bit sayısını belirliyor. Her osilatör frekansı he rbaud rate için uygun olmuyor. Doğru seçim için işlemci data sheetlerinde yer alan baud rate tablosuna bakmak gerekir. Ders notlarında verdiğim formül elbette 4 Mhz içindir.
Asıl formüller data sheetlerde yer alıyor. Birini rastgele açtım. Mesela 16F1827 işlemcide bu nasıl oluyor bir bakalım istersen.
İstenen Baud Rate= FOSC/64 ( [SPBRGH:SPBRGL] + 1)  şeklinde bir formül vermişler.
Şimd bir örnek hesap yapalım. Hesaplarda amaç hata oranının 1 in altında çıkmasını sağlayacak değerler elde etmektir.

16 Mhz işlemci frekansımız olsun. İstediğimiz baud rate de 115200 olsun. Öncelikle PicMultiCalc bu değerlere karşılık bize ne veriyor önce ona bakalım
DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_CLROERR 1 ' Clear overflow automatically
DEFINE HSER_SPBRG 34  ' 115200 Baud @ 16MHz, -0,79%
SPBRGH = 0
BAUDCON.3 = 1         ' Enable 16 bit baudrate generator

Bu yukarıdaki Eusart Yani gelişmiş Usart modülü bulunan yeni nesil işlemcilere ait bir ayar seçeneği.
Bir de standart USart seçeneğine bakalım.

DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA 24h ' Enable transmit, BRGH = 1
DEFINE HSER_SPBRG 8   ' 115200 Baud @ 16MHz, -3,55%
DEFINE HSER_CLROERR 1 ' Clear overflow automatically


Şimdi Yukarıdaki formülden   [SPBRGH:SPBRGL] yazmaçlarına verilecek değeri çeker ve buna X dersek.
X=((FOSC/İstenenBaudRate) / 64)-1 şekline bir formül elde ederiz.
Elimizdekileri yerine koyalım,
X=((16000000/115200)/64)-1 =1 sonucunu buluruz.
Şimdi bu değeri kullanarak asıl baud rate değerini hesaplayalım.
BR=(16000000/64*(1+1)=125000 olarak bulunur. Bu aslında olması gereken 115200 den büyük bir değerdir ve hata oranı da,
Hata=(Hesaplanan BR-OlmasıGereken BR)/OLması Gereken BR şeklinde hesaplanıyor.
Hata=(125000-115200)/115200 =%8,5 gibi bir hata çıkıyor epeyce yüksek bir değer.
Aynı data sheet de 16 bitlik Asenkron mod için şu formülü öneriyor. Birde buna bakalım. Formül;
İstenen Baud Rate= FOSC/16 ( [SPBRGH:SPBRGL] + 1) şeklinde buna göre hesap yapınca SPBRG değeri 8 çıkıyor.
Buna göre BR hesaplayalım.
BR=111.111 gibi bir rakam çıkıyor.
Hata ise %3,5 gibi bir değer diğerine göre daha uygun gözüküyor.
Sonuçta tavsiye edebileceğim yöntem şu. Data sheet'i açıp BR tablosundan çalışma frekansına göre istenine hız için en uygun parametreleri seçmek olur.
Belirttiğim işlemci için verilen tabloya baktığımda en uygun işlemci frekansının 18,432 Mhz ile 11,0592 Mhz olduğunu görüyorum. Bu frekanslarda hata oranları sıfır oluyor. Buradand aişlemciyi en azından ya 11 yada 18Mhz de çalıştırmak gerektiğini çıkartıyorum. Yada hata oranı en az bir frekans seçip sonuca bakmak gerekir. Mesela aynı tabloda 32Mhz de %2,5 luk bir hata oranı elde edilebiliyor. Bu da iyi bir sonu verebilir.

Ete



Elektronikprojem


coco

merhaba
rs485 üzerinden 9600 baud hızında 9bitlik veriyi 2x16 ekranda görmek için devre mi tasarlamak
gerekir yoksa gelen datayı görebilmek adına hangi programla gelen 9 bitlik datayı bilgisayarda görebiliriz?

ete

PC lerde hyperterminal gibi COM port izleyici programlar var. Ancak bu programlar RS485 çıkışını değil RS232 çıkışını izleyebilir. Aradaki fark Max485 entegresinin kontrolünden gelir.
2x16 LCd de görebilmek için bir devrey yapman daha uygun olur.
Ete

coco

#56
pc için
http://aquaticus.info/rs485_to_rs232
bu devreyi kurmam gerekiyor sanırım 2x16 display var elimde fakat forumda bulamadım hazır bir devre  ve kod

ete

Verdiğin linkteki kart yalnızca RS485'i  PC yada Pic in anlayabileceği RS232 formatına çeviriyor. Bilgileri PC den izlemek istersen sisteme birde Max232 entegresi ilave edilerek PC-RS232 formatına çevrilmesi gerekiyor. Ama gelen bilgileri direk Pic yardımı ile okuyacak isen Max232 ye hiç gerek yok.
Bu kart yalnızca bilgi formatını değiştiriyor.
Bu arada PC ile Pic arasındaki RS232 farkınıda açıklayayım daha iyi anlarsın.
PC de HIGH bilgisi -10V  , pic de ise +5V dur.
PC de LOW bilgisi +10V, pic de ise 0 V dur.
Max232 entegresi her iki yönde bu bilgileri bir birine çevirebilir. İçinde 5V ile çalışan Voltaj pompası vardır bahsi geçen voltajları direk 5V dan üretebilir .Kondansatörlere özellikle kutuplarına dikkat etmek gerekir. Zira o entegrede +10V - 0V ve -10V voltajları olduğu için pek çok kişiye kutuplar ters bağlanmış gibi geliyor aslında değildir.

Sonuçta bilgileri Pic yardımı ile inceleyecek ise RS485 hattından gelen bilgiyi yine bir Max485 enteresine girip oradan çıkan bilgiyi direk USART pinlerine bağlaman yeterli olacaktır. RS485 entegresinin kontrol bacağı giriş çıkış işlemini kontrol eder. Şu anda hatırlamıyorum ama verdiğim linkteki çalışmada Isis şemasına yazdığımı hatırlıyorum kontrol bacaklarının ne olması gerektiğini.
LOW iken yalnızca alış HIGH iken yalnızca Veriş yaptığını hatırlıyorum ama bakmak lazım.

Ete

coco

Gerçek devre elemanlarına Bugünden sonra uzakta olacağım (pic+lcd+max485...)
usart pinleri deyince PortB1/B2  Rx,Tx, kullanılacak.
Bu arada Hserin, komutlarıyla yapılan dosyalarımı incelemem lazım?

veli dayı

Arkadaşlar RF kullanarak yapılan seri iletişimde frekans sınırı var mıdır.Örneğin 27 mhzde haberleşme yapılabilinir mi?yada 10 mhz yani bunun bir alt frekans sınırı var mı varsa neye göre belirlenir

Powered by EzPortal