Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: ossyle - 02 Aralık 2007, 18:59:38

Başlık: CSS C ile bilginin tersini almak
Gönderen: ossyle - 02 Aralık 2007, 18:59:38
Merhaba.

CSS C ile bir bilginin tersini nasıl alabiliriz acaba ? Seri porttan Max232 yardımı ile haberleşmeye çalışıyorum fakat Max232 bilgiyi tersliyor. Bunu programda tekrar tersleyip gerçek bilgiyi elde etmeye çalışıyorum. Bu konuda yardımcı olursanız sevinirim.

Şimdiden teşekkürler.
Başlık: CSS C ile bilginin tersini almak
Gönderen: piedos - 02 Aralık 2007, 19:58:53
gelenByte = ~gelenByte;
Başlık: CSS C ile bilginin tersini almak
Gönderen: ossyle - 02 Aralık 2007, 20:01:37
Teşekkürler bu gece deneyeceğim.
Başlık: CSS C ile bilginin tersini almak
Gönderen: SpeedyX - 02 Aralık 2007, 21:57:35
#use RS232 direktifinde "invert" diye bir seçenek bulunuyor zaten
Başlık: CSS C ile bilginin tersini almak
Gönderen: ferdem - 03 Aralık 2007, 00:00:28
Siz kodunuzda herhangi bir ek bildirimde bulunmadıysanız max232 nin terslememesi lazım, zaten max232 nin tersleme gibi bir huyu yoktur:)

Terslediğini nasıl tesbit ettiniz? Osiloskopla mı baktınız? Seri iletişimi gerçeklemeden önce simülasyonunu yaptınız değil mi? Enteresandır bir defasında ben de verinin terslendiğine şahit olmuştum(osiloskopta) ancak sonra kodda herhangi bir değişiklik yapmaksızın düzelmişti ancak olanları pek iyi hatırlamıyorum(!) Sonrasındaki uygulamalarda hiç olmadı sanırım o zaman da iyi yapılamamış bağlantılardan olmuştu.
Başlık: CSS C ile bilginin tersini almak
Gönderen: ossyle - 03 Aralık 2007, 15:31:57
Alıntı yapılan: "ferdem"Siz kodunuzda herhangi bir ek bildirimde bulunmadıysanız max232 nin terslememesi lazım, zaten max232 nin tersleme gibi bir huyu yoktur:)

Terslediğini nasıl tesbit ettiniz? Osiloskopla mı baktınız? Seri iletişimi gerçeklemeden önce simülasyonunu yaptınız değil mi? Enteresandır bir defasında ben de verinin terslendiğine şahit olmuştum(osiloskopta) ancak sonra kodda herhangi bir değişiklik yapmaksızın düzelmişti ancak olanları pek iyi hatırlamıyorum(!) Sonrasındaki uygulamalarda hiç olmadı sanırım o zaman da iyi yapılamamış bağlantılardan olmuştu.

Bende ilk defa seri haberleşme ile uğraşıyorum ondan dolayı zorlanıyorum. Max232'yi aşağıdaki gibi bir devrede deniyorum. Max232'ye verdiğim data ve aldığım dataya Proteusta virtual teminal ile bakıyorum birbirinden farklılar. Bir yerde okudum datayı tersliyor max232 diye bende onun üzerine araştırma yapıyordum. #rs232 inverti ilede sayi=~sayi; ilede başarılı olamadım. Mesela max232'nin çıkışına not kapısı koyup not çıkışına virtual terminal ile baktığımda gönderdiğim veriyi görüyorum. İşte devre ve kodlar bir yanlışlık varsa yardımlarınızı bekliyorum.

Max232 terslemesini kontrol ettiğim devre: Not kapısı varken gönderdiğimi alıyorum. Yokken değişik saçma bişiler alıyorum.



Program için kullandığım devre:


Program.c
#include "C:\Program Files\PICC\Projects\628max232.h"

int deg;
 
void main()
{
  setup_oscillator(OSC_4MHZ);
  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)
{
deg=getc();
putc(deg);
}
}

Program.h
#include <16F628A.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_B0,rcv=PIN_B1,bits=8)
Başlık: CSS C ile bilginin tersini almak
Gönderen: Ziya - 03 Aralık 2007, 15:38:23
Alıntı yapılan: "SpeedyX"#use RS232 direktifinde "invert" diye bir seçenek bulunuyor zaten
Bu soft uartta geçerli değil mi? Hardware uartta da geçerliyse verinin önce tümleyenini alıyor demektir.
Başlık: CSS C ile bilginin tersini almak
Gönderen: MURSEL - 03 Aralık 2007, 17:57:30
arkadaşım picin rx tx uçlarını  10 k ile + uca cekermisin  şekilde göremedim de
Başlık: CSS C ile bilginin tersini almak
Gönderen: ossyle - 03 Aralık 2007, 18:25:09
Şekle tıklarsanız yeni sayfada büyük hali açılıyor. Kolay gözüküyor. İlginiz için teşekkürler. Yardım bekliyorum cıldıracam yoksa   :(
Başlık: CSS C ile bilginin tersini almak
Gönderen: MURSEL - 03 Aralık 2007, 19:12:07
görebildigim şekillerde  bahsettigim olay yok  direncler cekilmemiş
Başlık: CSS C ile bilginin tersini almak
Gönderen: SpeedyX - 03 Aralık 2007, 19:28:01
Alıntı yapılan: "Ziya"
Alıntı yapılan: "SpeedyX"#use RS232 direktifinde "invert" diye bir seçenek bulunuyor zaten
Bu soft uartta geçerli değil mi? Hardware uartta da geçerliyse verinin önce tümleyenini alıyor demektir.

Invert the polarity of the serial pins (normally not needed when level converter, such as the MAX232). May not be used with the internal UART.
demiş.

MAX232 terslemez demiş oda..
Belki yeni versiyonlarında içeride comf yapacağı için may not be used... demişlerdir.
Başlık: CSS C ile bilginin tersini almak
Gönderen: ferdem - 04 Aralık 2007, 16:53:38
Devre şemasını verince mesele çözüldü :)
(http://img403.imageshack.us/img403/4559/max232eb2.th.gif) (http://img403.imageshack.us/my.php?image=max232eb2.gif)

Seri portun pinlerinin yerini karıştırmışsınız, seri portta gördüğünüz TX(transmitter) bilgisayardan gelen(transmitted) veriyi temsil ediyor, dolayısıyla MAX232 entegresinin RS232 inputlarından birine verilmeli. Aynı şekilde RX pini bilgisayara giden ya da bilgisayar tarafından alınan(received) veriyi temsil edeceğinden MAX232 nin RS232 outputlarından birine verilmeli. Sizin devrenizde bu tam tersi, pic ten gelen TTL verinin RS232 karşılığını seri portun outputuna bağlamışsınız(inputuna bağlamanız gerekirken), aynı şekilde receiver de ters.

Bu durumda seri porta giden TX, RX pinlerine giren kabloların yerini değiştirirseniz bu problem hallolur, diğer durumlarda problem yoksa çalışması gerekir. Tabi toprağı bağlamayı unutmayın, bilgisayar+max232+pic li devrenin bir toprağı olacak(ki anlaşabilsinler), bir de "bilgisayar-picli devre bağlantısı yapılırken her iki tarafın da enerjili olmaması gerekir" uyarısı yapılır, aksi halde seri portunuza veya picinize zarar gelebilir, yani tüm bağlantıları yapın en son pice enerji verin(ben bu durumla hiç karşılaşmadım, bir araşıtırın isterseniz).

Son olarak:

#use rs232(baud=9600,xmit=PIN_B0,rcv=PIN_B1) işinizi görecektir parity bitle uğraşmayın, parity bit kontrolü için seri portun diğer pinlerini de bağlamanız gerekiyor olabilir(!) çünkü bir şekilde parity bit uyuşmazsa alıcı taraf "tekrar gönder" diyecek, pic bunu hangi pinden diyecek(!) bilgisayarınız bunu nasıl anlayacak(!) bağlantıları olmadan. Bu yüzden parity kontrol şu durumda anlamsız.

Kolay gelsin, iyi çalışmalar.
Başlık: CSS C ile bilginin tersini almak
Gönderen: ossyle - 05 Aralık 2007, 15:46:03
Alıntı yapılan: "ferdem"Devre şemasını verince mesele çözüldü :)


Seri portun pinlerinin yerini karıştırmışsınız, seri portta gördüğünüz TX(transmitter) bilgisayardan gelen(transmitted) veriyi temsil ediyor, dolayısıyla MAX232 entegresinin RS232 inputlarından birine verilmeli. Aynı şekilde RX pini bilgisayara giden ya da bilgisayar tarafından alınan(received) veriyi temsil edeceğinden MAX232 nin RS232 outputlarından birine verilmeli. Sizin devrenizde bu tam tersi, pic ten gelen TTL verinin RS232 karşılığını seri portun outputuna bağlamışsınız(inputuna bağlamanız gerekirken), aynı şekilde receiver de ters.

Pinlerde bir karışıklık yok. Evet ters bağlı çünkü similasyonda kullandığım port com2 portu. Proteus çalıştığında com2 portunu sadece kendi kullanımına ayırıyor, başka bir program ile com2 portuna bilgi yollayamıyoruz. Bunun için com1 ve com2 bağlantılarını çapraz kablo ile birbirine bağladım. Bu şekilde com1 den yolladığımı com2 den alıyorum. Similasyondada com1'den com2'ye gelen bilgiyi almam gerekyiği için RX bacağını gelen bilgi için, TX bacağını göndereceğim bilgi için kullanıyorum.
Başlık: CSS C ile bilginin tersini almak
Gönderen: ferdem - 05 Aralık 2007, 19:59:42
Hımm, bilemeyeceğim. Eğer gelen veriyi tersleyip okuduğunuzda doğru okuyorsanız demek ki veri bir şekilde tersleniyor. Ben zamanında terslemeden kullanmıştım, düzgün çalışıyordu, hatta baskı devresi hala duruyor, lazım oldukça kullanıyorum, baskısı burda : https://www.picproje.org/index.php/topic,17573
Başlık: CSS C ile bilginin tersini almak
Gönderen: ossyle - 06 Aralık 2007, 11:27:15
Max232 kullanarak devre üzerinde deneme yapmadım henüz ama Proteus'a güvenerek söylüyorum terslerdiğini. Dün gece PIC'in dahili osilatörü yerine 4Mhz kristal osilatör yaptım ve bu şekilde deneme yaptım. Arada max232 olmadan direk rs232 porta bağladım. Pic devamlı porta "Sayı" yazıyor, bilgisayarda manasız birşeyler çıkıyor. Dikkat ettim S harfinin HEX karşılığını alıyor ve HEX karşılığına denk gelen DEC harfi basıyor. Mesela S harfinin HEX değeri xx, bunu alıyor ve decimal xx olan harfi basıyor.

S-- 01010011 bunun tersini alıyor 10101100 ve ¬ karakterini ekrana basıyor.  Programda bilgiyi terslemek istedim rs232 tanımlamalarına invert seçeneğini ekledim bilgi yine düzelmedi. Gönderdiğim bilgi gonder=~gonder; diyerek gonderdim yine olmadı. Bu akşam araya bir max232 koyarak devrede deneyeceğim bakalım sonuç ne olacak. Dün gece denemeler sırasında saat gece yarısını geçtiği için max232 ile denemeye zamanım olmadı :) Bu akşam inşallah.

rs232 tanımlamalarındaki invert ve gonder=~gonder; şeklinde programda neden tersleyemediğim konusunda yorumu olan var mı acaba ?
Başlık: CSS C ile bilginin tersini almak
Gönderen: ossyle - 07 Aralık 2007, 12:35:53
Devreyi harici osilatör ile yaptığım zaman bilginin tersinin bilgisayara geldiğini yazmıştım. Dün gece yeni programlar ile deneme yaptım ve bir türlü bilginin tersini almayı başaramadım. Max232 kullanmıyacağım diye inat ediyordum fakat mecbur max232 kullandım. Araya max232 koyunca bilgisayardan bilgiyi düzgün bir şekilde okuyup pic'e yollayabiliyorum. Proteusta bu şeklide kurduğum zaman çalışmıyor. Seri iletişim konusunda Proteus'a güvenmemek lazım sanırım.

Ama şu bitirmeyi kazasız belasız verdikten sonra uart işine tekrar el atacağım. Yorumlarınız ve fikirleriniz için teşekkür ederim. Uart konusundaki gelişmeleri sizinle paylaşacağım.
Başlık: CSS C ile bilginin tersini almak
Gönderen: uguryendi - 04 Ocak 2008, 09:43:49
MAX232 yi neden kullanırız diye bi araştırma yapmıştım  SONUÇ;


bilgisayarlarımızın arkasındaki COM port rs232
mantıksal 1 için +3 +12 V
mantıksal 0 için -3 -12 V

pic gibi TTL bir entegre
mantıksal 1 için 5 V
mantıksal 0 için 0 V

kullanıyor.

bundan benm çıkarttğım anlam 1 de sorun yok ama sıfırlarımızda rs232 Portu(PCnin arkasında ki) logic sıfır için kararsız kalıyor çünkü seviye tutmuyor.

MAX232 diagramına terkrar bakarsak
from TTL To rs232
from rs232 to TTL     ifadesini göreceğiz