Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: Yeniüye1234 - 08 Haziran 2022, 22:20:22

Başlık: Python ile RS232 üzerinden string gönderme
Gönderen: Yeniüye1234 - 08 Haziran 2022, 22:20:22
Arkadaşlar herkese selam. Python ile RS232 üzerinden PIC' e string ifade nasıl gönderebilirim? örnek verebilirseniz sevinirim. Karakter göndermede sorun yok ancak string ifade gönderme işlemi yapamadım. CCS C' de gets( ) komutunu kullandım.

    Örnek verecek olursam:     char gelen[ ];
                                               char veri[ ]="asd"
                                           ..........
                                          gets(gelen);
                                              if(strcmp(gelen,veri)==0)
                                               .........

                                        şeklinde yazdım. Ancak çalışmıyor. Python' dan string ifadeyi nasıl göndereceğim? CCS C ile nasıl alacağım? yardımcı olursanız sevinirim.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: muhittin_kaplan - 08 Haziran 2022, 22:28:07
https://muhittinkaplan.com/2017/09/09/python-serial-pyqt5-and-stm32f4/
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: Yeniüye1234 - 08 Haziran 2022, 22:38:37
Hocam teşekkür ederim ama başta gelen 'b' den dolayı PIC bunu algılamaz. Ben normalde karakterleri seriport.write("1".encode()) şeklinde gönderiyorum ve sorunsuz çalışıyor. ancak seriport.write("26".encode()) yazdığımda hiçbir işlem yapılmıyor.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: muhittin_kaplan - 08 Haziran 2022, 23:03:59
string ardına \r\n koymayı deneyebilirsin.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: Yeniüye1234 - 09 Haziran 2022, 06:53:43
Denemiştim ama olmadı
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: fide - 09 Haziran 2022, 07:13:43
.encode("utf8") deneyin.
Aldığınız string için de .decode("utf8") deneyin.

string = "abc".encode("utf8")
serial.write(string)

ESC kodu gönderecek sen ord(26) ord(27) dene
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: fide - 09 Haziran 2022, 08:07:43
Yalnız dikkat etmen gereken bir nokta var.
Serial.write(1)

ifadesi karşıya 0x00000001 gönderirken


string="1".encode('utf8')
serial.write(string )

İfadesi karşıya 0x00030001 gönderir.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: kudretuzuner - 09 Haziran 2022, 13:41:33
Merhaba, Pyhton dilini bilmiyorum ama PIC'e PC'den string yolladığımız zaman(dil önemli değil) veya her klavyeye bastığımızda PIC'te sadece stringin sıra ile giden HEX kodları görülmez mi? Teşekkürler.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: fide - 09 Haziran 2022, 15:12:25
Alıntı yapılan: kudretuzuner - 09 Haziran 2022, 13:41:33Merhaba, Pyhton dilini bilmiyorum ama PIC'e PC'den string yolladığımız zaman(dil önemli değil) veya her klavyeye bastığımızda PIC'te sadece stringin sıra ile giden HEX kodları görülmez mi? Teşekkürler.
Hocam hex kodları değil ama binary kod gidiyor. Bu yüzden 1'i sayı olarak gönderince b00000001 olarak gidiyor. 1'i string olarak yazdırınca 1 yerine ASCII karşılığı olan 49 değerini yazıyor. Bu da b00030001 değerine karşılık geliyor.
İki cihaz arasında text gönderirken sıkıntı yok ama sayı gönderirken buna dikkat etmek gerekir.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: mehmet - 09 Haziran 2022, 17:26:12
https://www.mehmetbilgi.net.tr/arduino-ile-seri-port-uzerinden-7-segment-display/
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: kudretuzuner - 09 Haziran 2022, 18:13:17
Alıntı yapılan: fide - 09 Haziran 2022, 15:12:25Hocam hex kodları değil ama binary kod gidiyor. Bu yüzden 1'i sayı olarak gönderince b00000001 olarak gidiyor. 1'i string olarak yazdırınca 1 yerine ASCII karşılığı olan 49 değerini yazıyor. Bu da b00030001 değerine karşılık geliyor.
İki cihaz arasında text gönderirken sıkıntı yok ama sayı gönderirken buna dikkat etmek gerekir.
Merhaba, benim kafam yine karıştı 1'i string olarak yazdırınca 1 yerine ASCII karşılığı olan DEC 49 değerini yazıyor bu DEC değeridir. Ama PIC "ASCII değeri H'31' algılaması gerekmiyor mu? HEX'31' i b00030001 şeklinde algılaması demek ki benim PIC'teki bilmediğim bir özellikmiş. 
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: Yeniüye1234 - 09 Haziran 2022, 19:15:54
Hocam pythonda ...write("1".encode()) yazdığınızda karakter olarak 1 gönderiyor.

Bunu da CCS C de:   char data; // şeklinde bir değişken tanımladıktan sonra

                    data=getc();
                    if(data=='1')
                       ..............     şeklinde kontrol edildiğinde program sıkıntısız çalışıyor.

Peki pythondan "26" ifadesini nasıl göndereceğim? bunu CCS C ile nasıl alacağım? benim sorum bu. 
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: kudretuzuner - 09 Haziran 2022, 19:35:06
Merhaba, yukarıda da yazdığım gibi Python sintaksını bilmiyorum. Lâkin PIC'in anlıyacağı dili biliyorum. Siz 26 yı ister rakkam olarak kabul edin ister string olarak kabul edin PIC bunu ancak önce HEX'32' yani ASCII rakkam 2 olarak sonra da HEX'36'olarak algılayabilir diye biliyorum. Yani özetle PC'den MCU'ya 26 yollayabilmeniz için PC'de yazacağınız python programda HEX'32' ve de HEX'36' göndermeniz gerekir diye düşünüyorum.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: Yeniüye1234 - 09 Haziran 2022, 21:10:06
Şöyle sorayım: PIC' e string ifade gönderirken string ifade yazıldıktan sonra enter tuşuna basmak gerekiyor. CCS C' de gets( ); komutu ile string ifadeyi almak için Pythondan string ifadeyi nasıl gönderebilirim? 
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: kudretuzuner - 09 Haziran 2022, 22:32:20
Alıntı yapılan: eskişehir26 - 09 Haziran 2022, 21:10:06Şöyle sorayım: PIC' e string ifade gönderirken string ifade yazıldıktan sonra enter tuşuna basmak gerekiyor. CCS C' de gets( ); komutu ile string ifadeyi almak için Pythondan string ifadeyi nasıl gönderebilirim? 
Vallahi ne CCS C ne de python diline vakıf değilim. Ben PC'den PIC'e VB.Net 2010 express edition ile data yollamaktayım. PIC tarafında ise assembly dili ile gelen hex kodlarını görebilmekteyim. Arzu ederseniz 18F4550 ile yaptığım bir uygulamamın dosyasını yollayayım. Ama PC'den ASCII kodlarını hex olarak yollarsanız çevirme sıkıntısı olmadan direk PIC'te görebilmeniz lâzım.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: fide - 09 Haziran 2022, 22:36:33
Ccs c de gets komutu enter (chr13 yada /r) gelene kadar gelen karakterleri alır. Enter gelince alma işlemi biter. Ama sadece bir karakter almak istiyorsanız getc yada getchar diye bir komut var.

@eskişehir26 siz yapmak istediğiniz işlemi tam olarak anlatın. Ona göre bir çözüm bulmaya çalışalım.

@kudretuzuner abi aslında h31 de b00030001 de "1" de aynı şey. Sadece bizim binary / hex yada string olarak değerlendirmemiz işi değiştiriyor.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: z - 09 Haziran 2022, 22:38:08
b00110001
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: Yeniüye1234 - 09 Haziran 2022, 22:45:20
Benim istediğim Pythondan "asd" ifadesini PIC' e göndermek. PIC kodları CCS C ile yazıldı. gets( ); komutu ile de Python' dan gelen stringi almak.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: kudretuzuner - 09 Haziran 2022, 22:58:11
Yazdığım gibi bağlantı kurup python dili ile PIC'e bu kodları sıra ile yollarsanız PIC'te dizayn ettiğiniz donanımda bu değerleri görebilmeniz gerekir.
"        HEX'22' dir
a        HEX'61' dir
s        HEX'73' tür
d        HEX'64' tür
"        HEX'22' dir
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: fide - 10 Haziran 2022, 08:48:35
text = "asd/r".encode("utf-8")
serial.write(text)

Python da bunu deneyin.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: Yeniüye1234 - 10 Haziran 2022, 10:51:07
Yazılan hepsini daha önce denedim. Python gönderse bile PIC bunu almıyor. Daha önce yazdığım gibi gets komutuyla stringi almak için string ifade yazıldıktan sonra enter tuşuna basmak lazım. "asd"ifadesinden sonra enter tuşu nasıl gönderebilirim?
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: mehmet - 10 Haziran 2022, 11:28:06
"asd\n\r"

https://en.m.wikipedia.org/wiki/Escape_sequences_in_C
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: Yeniüye1234 - 10 Haziran 2022, 18:59:55
Alıntı yapılan: mehmet - 10 Haziran 2022, 11:28:06"asd\n\r"

https://en.m.wikipedia.org/wiki/Escape_sequences_in_C


Hocam olmuyor malesef. Peki CCS C' de RS232 üzerinden string ifade alma işlemi nasıl yapılır?

Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: fide - 10 Haziran 2022, 19:09:57
getc, getchar ile karakter karakter yapılır.
gets ile enter ile biten stringler alınır. 
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: mehmet - 10 Haziran 2022, 19:13:11
Alıntı yapılan: eskişehir26 - 10 Haziran 2022, 18:59:55Hocam olmuyor malesef. Peki CCS C' de RS232 üzerinden string ifade alma işlemi nasıl yapılır?

https://www.kitapyurdu.com/kitap/ccs-c-ile--pic-programlama/101934.html
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: Yeniüye1234 - 10 Haziran 2022, 20:11:39
Alıntı yapılan: fide - 10 Haziran 2022, 19:09:57getc, getchar ile karakter karakter yapılır.
gets ile enter ile biten stringler alınır. 

CCS C de bir örnek verirmisiniz?

10 Haziran 2022, 20:16:22
Alıntı yapılan: mehmet - 10 Haziran 2022, 19:13:11https://www.kitapyurdu.com/kitap/ccs-c-ile--pic-programlama/101934.html

Hocam bende o kitapta var o kitaba göre daha geniş kapsamlı notlarım da var. Ben gets komutu ile string alamıyorum. Yada python dan gönderemiyorum. Sorun orda. O kitapta RS232 ile tek bir örnek var. O da gets( ); koomutu ile ancak kalvyeden girilen string ile işlem yapıyor. Ben Python üzerinden string göndermeye çalışıyorum.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: mehmet - 10 Haziran 2022, 20:43:08
Lojik analizör ile gönderilen
paketi inceleyin. Buna göre
düzenleme yapın.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: Yeniüye1234 - 10 Haziran 2022, 21:31:10
Normalde "asd\r" yazılması gerekiyor. Ancak hiç bir işlem yapmıyor.

   
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: fide - 11 Haziran 2022, 05:16:53
Siz yazdığınız kodu yükleyin buraya. Onun üzerinde konuşalım.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: Yeniüye1234 - 11 Haziran 2022, 06:52:41
Alıntı yapılan: fide - 11 Haziran 2022, 05:16:53Siz yazdığınız kodu yükleyin buraya. Onun üzerinde konuşalım.

char data[10];
char veri[ ]="asd"
....
....
gets(data);
if(strcmp(data,veri)==0)
....
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: fide - 11 Haziran 2022, 22:01:56
İlk önce adım adım gidelim.

1)Python kodunun çalıştığı pc/laptop Pic seri porta ne ile bağlı?
Olası seçenekler: rs232 +max232, USB-seri çevirici

USB - seri çevirici kullandığınızı varsayarak devam edelim.

2)Pythonda doğru seri port, baudrate seçili mi?

3)Pc tarafındaki USB-seri çeviricinin Rx ve tx uçları kısadevre yapınca Python ile gönderdiğiniz veriyi yine Python ile okuyabiliyor musun?

4)Picden gönderdiğiniz herhangi bir stringi Python ile okuyabiliyor  musunuz? Aynı baudrate ve pic tarafında doğru comm şortu seçili mi? 25k22,26k22 gibi çiplerde çift seri port var.

5)Bütün bu sorulara cevabın evet ise
Seri port kesme oluşturup kesme meydana gelince veri almak için kesme rutini hazırladın mı?

Eğer veriyi kesme rutini içinde almıyorsan (ki öyle görünüyor) veri kaybı yaşayabilirsin. Bu yüzden de verileri düzgün alamayabilirsin.
Bu işlemleri yap. Doğruluklarını kontrol et. Eğer hala hata var ise tekrar düşünelim.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: Yeniüye1234 - 11 Haziran 2022, 23:02:31
Alıntı yapılan: fide - 11 Haziran 2022, 22:01:56İlk önce adım adım gidelim.

1)Python kodunun çalıştığı pc/laptop Pic seri porta ne ile bağlı?
Olası seçenekler: rs232 +max232, USB-seri çevirici

USB - seri çevirici kullandığınızı varsayarak devam edelim.

2)Pythonda doğru seri port, baudrate seçili mi?

3)Pc tarafındaki USB-seri çeviricinin Rx ve tx uçları kısadevre yapınca Python ile gönderdiğiniz veriyi yine Python ile okuyabiliyor musun?

4)Picden gönderdiğiniz herhangi bir stringi Python ile okuyabiliyor  musunuz? Aynı baudrate ve pic tarafında doğru comm şortu seçili mi? 25k22,26k22 gibi çiplerde çift seri port var.

5)Bütün bu sorulara cevabın evet ise
Seri port kesme oluşturup kesme meydana gelince veri almak için kesme rutini hazırladın mı?

Eğer veriyi kesme rutini içinde almıyorsan (ki öyle görünüyor) veri kaybı yaşayabilirsin. Bu yüzden de verileri düzgün alamayabilirsin.
Bu işlemleri yap. Doğruluklarını kontrol et. Eğer hala hata var ise tekrar düşünelim.

USB kullanıyorum, baudrate comport falan hepsi doğru sıkıntı yok. PIC' ten Python' a string gönderiyorum. Python' dan PIC' e karakter gönderiyorum. Bunlarda hiçbir sorun yok. Sorun Python' dan PIC' e string göndermek. Mesela RD2' ye led bağladım. 300 ms aralıklarla yanıp sönüyor. Pythondan string gönderdiğimde RD0' ın yanmasını RD2'nin sönmesini istiyorum ancak string gönderdiğim anda RD2 ledi sabit yanar vaziyette kalıyor RD0 yanmıyor.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: mehmet - 12 Haziran 2022, 01:50:31
Karakter dizisini yollarken,
başlık karakteri yada başlık
dizisi yolluyor musunuz?

Mesela:
"eskasd\n" yollayın. "esk"
dizisi geldikten sonra "asd"
gelirse öyle işlem yapın.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: fide - 12 Haziran 2022, 10:22:14
Uart interrupt kullanmayı deneyin.
Alıntı yapılan: eskişehir26 - 11 Haziran 2022, 23:02:31USB kullanıyorum, baudrate comport falan hepsi doğru sıkıntı yok. PIC' ten Python' a string gönderiyorum. Python' dan PIC' e karakter gönderiyorum. Bunlarda hiçbir sorun yok. Sorun Python' dan PIC' e string göndermek. Mesela RD2' ye led bağladım. 300 ms aralıklarla yanıp sönüyor. Pythondan string gönderdiğimde RD0' ın yanmasını RD2'nin sönmesini istiyorum ancak string gönderdiğim anda RD2 ledi sabit yanar vaziyette kalıyor RD0 yanmıyor.

Rd2 ledin yanık kalması gets() komutunun enter karakterini beklediği anlamına gelir. Ya enter gönderilmiyor yada pic bunu alamıyor.
İlk ihtimal daha kuvvetli.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: Yeniüye1234 - 12 Haziran 2022, 11:21:11
Alıntı yapılan: fide - 12 Haziran 2022, 10:22:14Uart interrupt kullanmayı deneyin.
Rd2 ledin yanık kalması gets() komutunun enter karakterini beklediği anlamına gelir. Ya enter gönderilmiyor yada pic bunu alamıyor.
İlk ihtimal daha kuvvetli.

Kesme kullanarak yapıyorum. ...write("asd\n".encode( )) yazdığımda yukarıdaki durum oluyor. Onun dışındaki durumlarda bir tepki olmuyor.


char gelen[10];
char veri="asd";
char data="567";


#int_rda             
void kesme ( )
{
disable_interrupts (int_rda);  // bu komutun yazılıp yazılmaması da bir şey değiştirmiyor. 
             gets(gelen);   

                  if (strcmp(gelen,veri)==0)   
                   {
                      output_high (pin_d0);
                      output_toggle (pin_d2);
                    }

                     
                   if (strcmp(gelen,data)==0)   
                     {output_high (pin_d1);
                     output_toggle (pin_d2);
                     }
}

CCS C kodu da bu. Yani nasıl yapılacağını deneme amaçlı olarak basit şekilde string gönderme işlemi yapmaya çalışıyorum.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: kudretuzuner - 12 Haziran 2022, 12:12:40
Merhaba, yine ustaların arasında laf söylemek bana düşmez ama yine bildiklerimi yazayım. PIC string algılamaz. Sadece gelen stringin tek tek hex değerleri algılar o da sadece sekiz pinli bir portu buna tahsis etmeniz gerekir. Siz, string ile PIC'te bir eylem yapmak istiyorsanız PIC'e gelen stringin her karakterlerini tek tek kontrol etmeniz gerekir. Bu da yazılım ile olacaktır. Yazdığım gibi CCS C sintaksını bilmediğim için kod veremiyeceğim. İsterseniz örnek olması bakımından assembly olarak klavye "a12"  yolladığınız zaman PIC'in algılamasını sağlayacak kodu vereyim.
TEST00
MOVLW B'01100001' BU DEĞERİ W YA "a" NIN HEX KODUNU YÜKLERİZ
XORWF PORTA,W  BURADA PIC'in PORTA SINA "a" GELİP GELMEDİĞİNİ KARŞILAŞTIRIR
BTFSS STATUS,2
GOTO TEST01
BSF PORTB,7  BURADA DA "a" nın geldiğini ve PORTB NİN 7 NOLU PİN ÇIKIŞ VERİR


TEST01
MOVLW B'00000001'
XORWF PORTA,W
BTFSS STATUS,2
GOTO TEST02
BSF PORTD,0

TEST02
MOVLW B'00000010'
XORWF PORTA,W
BTFSS STATUS,2
GOTO TEST03
BSF PORTD,1

isis şemasını bilmediğim için portlar rastgele seçilmiştir. Özet olarak PIC'e bir port atayacaksınız Bu porta stringin tek tek hex kodlarını göndereceksiniz gönderilen her hex kodu yazılımda bulunan değerler ile karşılaştırılıp eşit olup olmadıklarını kontrol edecek eşit ise ona göre PIC'e eylem yaptıracaksınız.Fikir vermesi bakımından belki işinize yarar.

Yaşlandık galiba, (13.06.2022)
Yukarıda yazdığım bilgiler doğru fakat sorunun yanıtı değil. Ben dış ortamdan PORT'  a giren 8 bitlik datayı karşılaştırmışım. Soru ise PIC' in RX' sine gelen dataların ayıklanmasıdır. RX' e  gelen her bir hex kodunu RCREG registerini MOVLW B'01100001' BU DEĞERİ W YA "a" NIN HEX KODUNU YÜKLERİZ XORWF RCREG  BURADA PIC'in RX PİNİNE "a" GELİP GELMEDİĞİNİ karşılaştırabiliriz. Şablon kod parçacıklarını da vereyim.


TEST00
MOVLW B'01100001' BU DEĞERİ W YA "a" NIN HEX KODUNU YÜKLERİZ
XORWF RCREG  BURADA PIC'in RX PİNİNE "a" GELİP GELMEDİĞİNİ KARŞILAŞTIRIR
BTFSS STATUS,2
GOTO TEST01
BSF PORTB,7  BURADA DA "a" nın geldiğini ve PORTB NİN 7 NOLU PİN ÇIKIŞ VERİR


TEST01
MOVLW B'00000001'
XORWF RCREG
BTFSS STATUS,2
GOTO TEST02
BSF PORTD,0

TEST02
MOVLW B'00000010'
XORWF RCREG
BTFSS STATUS,2
GOTO TEST03
BSF PORTD,1
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: fide - 12 Haziran 2022, 13:03:34
Alıntı yapılan: eskişehir26 - 12 Haziran 2022, 11:21:11Kesme kullanarak yapıyorum. ...write("asd\n".encode( )) yazdığımda yukarıdaki durum oluyor. Onun dışındaki durumlarda bir tepki olmuyor.


char gelen[10];
char veri="asd";
char data="567";


#int_rda           
void kesme ( )
{
disable_interrupts (int_rda);  // bu komutun yazılıp yazılmaması da bir şey değiştirmiyor. 
            gets(gelen); 

                  if (strcmp(gelen,veri)==0) 
                  {
                      output_high (pin_d0);
                      output_toggle (pin_d2);
                    }

                     
                  if (strcmp(gelen,data)==0) 
                    {output_high (pin_d1);
                    output_toggle (pin_d2);
                    }
}

CCS C kodu da bu. Yani nasıl yapılacağını deneme amaçlı olarak basit şekilde string gönderme işlemi yapmaya çalışıyorum.
write("asd\n".encode( ))

Öncelikle bu kısmı düzeltelim.
text="asd\r".encode("utf-8")
serial.write(text)

disable_interrupts (int_rda);  // bu komutun yazılıp yazılmaması da bir şey değiştirmiyor.
Bu komut şimdilik dursun  burada.
while bloğu içinde {'den sonra
enable_interrupts (int_rda);  komutu yoksa ekle. İnterrupt içindeyken tekrar int gelmesi durumunda bunu görmezden gel anlamında kullanılır. İşe yaramaz değil.

seri port ile deneme yaparken her zaman ilk önce verinin düzgün gönderilip gönderilmediğine bak. Bunun en güzel yolu veriyi hex olarak okuyabileceğin bir program kullanmaktır. Burada problem enter karakterinin gitmemesi. "asd\n" gönderdiğin stringde karşıya binary olarak 97 115 100 ve 10 sayıları gidiyor. gets komutu ise 13 (enter) beklediği için while (yada repeat until) döngüsünden çıkamıyor. Sen de bunu pic kilitlendi olarak algılıyorsun. Aslında pic mcu senden enter göndermeni bekliyor sadece.

Ben xctu'nun bir programını kullanıyorum. Çeşitli terminal programları var hex (yada binary) gösterebilen.

https://www.dosyaupload.com/2Mvj0/40002637_b.exe (https://www.dosyaupload.com/2Mvj0/40002637_b.exe)
indirmek için yukardaki linki kullanabilirsin.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: Yeniüye1234 - 12 Haziran 2022, 13:18:35
Alıntı yapılan: fide - 12 Haziran 2022, 13:03:34write("asd\n".encode( ))

Öncelikle bu kısmı düzeltelim.
text="asd\r".encode("utf-8")
serial.write(text)

disable_interrupts (int_rda);  // bu komutun yazılıp yazılmaması da bir şey değiştirmiyor.
Bu komut şimdilik dursun  burada.
while bloğu içinde {'den sonra
enable_interrupts (int_rda);  komutu yoksa ekle. İnterrupt içindeyken tekrar int gelmesi durumunda bunu görmezden gel anlamında kullanılır. İşe yaramaz değil.

seri port ile deneme yaparken her zaman ilk önce verinin düzgün gönderilip gönderilmediğine bak. Bunun en güzel yolu veriyi hex olarak okuyabileceğin bir program kullanmaktır. Burada problem enter karakterinin gitmemesi. "asd\n" gönderdiğin stringde karşıya binary olarak 97 115 100 ve 10 sayıları gidiyor. gets komutu ise 13 (enter) beklediği için while (yada repeat until) döngüsünden çıkamıyor. Sen de bunu pic kilitlendi olarak algılıyorsun. Aslında pic mcu senden enter göndermeni bekliyor sadece.

Ben xctu'nun bir programını kullanıyorum. Çeşitli terminal programları var hex (yada binary) gösterebilen.

https://www.dosyaupload.com/2Mvj0/40002637_b.exe (https://www.dosyaupload.com/2Mvj0/40002637_b.exe)
indirmek için yukardaki linki kullanabilirsin.

zaten başlarda onu da sordum python da enter karakterini nasıl göndereceğim diye. string almada program enter karakterini bekliyor.

Gönderdiğiniz program ile nasıl test edeceğim?daha önce hiç kullanmadım.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: fide - 12 Haziran 2022, 13:59:38
Python kodunu kapat.
Pici seri porta bağla.
Xctuyu aç
Port ve hız seç

(https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRbJIMX14X6_IO8gBqYwN_1eiVEUXE-x4Z_Tg&usqp=CAU)
Terminal yazan karta geç.
Xctu üzerinde hex yazan bir buton var.
Pic ledleri toggle yaparken klavyeden asd ve enter tuşlarına bas.
Pic tarafı kod doğru ise istediğin işlemi yapacaktır.
Sorunu Python kodunda ararsın o halde.

Python kodu için ise elinde bir adet daha usb seri dönüştürücü lazım.
Rx->TX
Tx->rx şeklinde iki dönüştürücüyü çapraz bağlayıp birini Python diğerini Xctu ile aç.
Python dan gönderdiğin stringi Xctu üzerinde görmen gerekir
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: Yeniüye1234 - 12 Haziran 2022, 17:00:54
#include <16F877a.h>   

#FUSES XT, NOWDT

#use delay (clock=4000000)

#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1)

#use fast_io (c)
#use fast_io (d)

#include <string.h>


char gelen[10];

char veri[]="asd";

#INT_RDA
void  RDA()
{
  gets(gelen);
     
      if(stricmp(gelen,veri)==0)
      {
         output_high(pin_d2);
      }
   
}


void main ( )
{
setup_psp(PSP_DISABLED) ;
setup_timer_1(T1_DISABLED) ;
setup_timer_2(T2_DISABLED,0,1) ;

setup_adc_ports(NO_ANALOGS) ;
setup_adc(ADC_OFF) ;
setup_CCP1(CCP_OFF) ;
setup_CCP2(CCP_OFF) ;
setup_vref (FALSE);


enable_interrupts(GLOBAL);

set_tris_c (0x80);   
set_tris_d (0x00); 

output_d(0x00);
output_c(0x00);

   while(1)
         {
         enable_interrupts (int_rda);
     
          output_toggle(pin_d2);
          delay_ms(300);
         
         }
}

benim yazdığım deneme amaçlı kod bu. Hata nerde? X-TCU da da çalışmıyor.

(https://i.ibb.co/qYx2Yxg/Ekran-g-r-nt-s-2022-06-12-165932.png) (https://ibb.co/qYx2Yxg)
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: fide - 12 Haziran 2022, 17:30:55
Alıntı yapılan: eskişehir26 - 12 Haziran 2022, 17:00:54#use fast_io (c)


Bu satırı kapatıp dener misin?
Önce seri port sonra gpio ayarı yaptığın için bişeyler karışıyor gibi geldi bana.
Herşey düzgün görünüyor.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: Yeniüye1234 - 12 Haziran 2022, 17:39:03
Alıntı yapılan: fide - 12 Haziran 2022, 17:30:55Bu satırı kapatıp dener misin?
Önce seri port sonra gpio ayarı yaptığın için bişeyler karışıyor gibi geldi bana.
Herşey düzgün görünüyor.

#use fast_io (c) bunu iptal edersem hiç çalışmaz.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: fide - 12 Haziran 2022, 17:47:29
Alıntı yapılan: eskişehir26 - 12 Haziran 2022, 17:39:03#use fast_io (c) bunu iptal edersem hiç çalışmaz.
Neden?

#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1)

Burada port ayarı yaptın zaten.
Neden çalışmasın?

Use fast_io yerine
float_input()
Yada
output_drive() kullanın. Çoğu zaman portun birkaç pinini kullanırsınız. Bunu da yukarıdaki iki komutla kolayca yaparsınız.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: Yeniüye1234 - 12 Haziran 2022, 17:52:20
Alıntı yapılan: fide - 12 Haziran 2022, 17:47:29Neden?

#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1)

Burada port ayarı yaptın zaten.
Neden çalışmasın?

Use fast_io yerine
float_input()
Yada
output_drive() kullanın. Çoğu zaman portun birkaç pinini kullanırsınız. Bunu da yukarıdaki iki komutla kolayca yaparsınız.

herhangi bir değişiklik olmadı.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: fide - 12 Haziran 2022, 18:10:23
set_tris_c (0x80); 

Bu satırı da kapatır mısın? Biraz önce gözümden kaçmış.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: Yeniüye1234 - 12 Haziran 2022, 18:11:16
Alıntı yapılan: fide - 12 Haziran 2022, 18:10:23set_tris_c (0x80); 

Bu satırı da kapatır mısın? Biraz önce gözümden kaçmış.

Onu da kapatmıştım.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: fide - 12 Haziran 2022, 18:35:59
Rda rutin içinde output_high(rd2) yapıyorsun. Oputput_high(rd0) değil.
Yani kodun çalışıyor. Led o anda low ise high oluyor. Sonra main rutinine gidip tekrar low oluyor. Rd0 hiçbir yerde high olmadığı için kod çalışmıyor şeklinde düşünüyorsun.
Rda rutin içindekini rd0 olarak düzelt.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: Yeniüye1234 - 12 Haziran 2022, 19:10:24
Alıntı yapılan: fide - 12 Haziran 2022, 18:35:59Rda rutin içinde output_high(rd2) yapıyorsun. Oputput_high(rd0) değil.
Yani kodun çalışıyor. Led o anda low ise high oluyor. Sonra main rutinine gidip tekrar low oluyor. Rd0 hiçbir yerde high olmadığı için kod çalışmıyor şeklinde düşünüyorsun.
Rda rutin içindekini rd0 olarak düzelt.

Aynen hata oradan kaynaklanıyormuş  :D  :D çok şükür çalıştı. Allah razı olsun hocam
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: fide - 12 Haziran 2022, 20:18:12
Copy - paste kod yazanlar için çok tehlikeli bir yöntemdir.

Bundan sonrası için sana kolay gelsin. Daha yolun başındasın.  ::ok  ::ok
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: Yeniüye1234 - 12 Haziran 2022, 21:16:42
Alıntı yapılan: fide - 12 Haziran 2022, 20:18:12Copy - paste kod yazanlar için çok tehlikeli bir yöntemdir.

Bundan sonrası için sana kolay gelsin. Daha yolun başındasın.  ::ok  ::ok

yolun başı değil de dikkatsizlik diyelim :)). Teşekkürler
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: fide - 12 Haziran 2022, 21:42:07
Alıntı yapılan: eskişehir26 - 12 Haziran 2022, 21:16:42yolun başı değil de dikkatsizlik diyelim :)). Teşekkürler
Uygulama nedir? Yazılım geliştirme mi yoksa veri toplayıp Python ile loglamak mı? İkincisi çok güzel bir alan. Yaş /tecrübe/ilgi nedir bilmiyorum ama ilerlemek için güzel bir yol.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: Yeniüye1234 - 13 Haziran 2022, 02:27:38
Alıntı yapılan: fide - 12 Haziran 2022, 21:42:07Uygulama nedir? Yazılım geliştirme mi yoksa veri toplayıp Python ile loglamak mı? İkincisi çok güzel bir alan. Yaş /tecrübe/ilgi nedir bilmiyorum ama ilerlemek için güzel bir yol.

Python ile uygulama geliştirip veri toplama, loglama, pıc kontrolü vb. gibi işlemler yapmak.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: fide - 13 Haziran 2022, 08:38:37
Alıntı yapılan: eskişehir26 - 13 Haziran 2022, 02:27:38Python ile uygulama geliştirip veri toplama, loglama, pıc kontrolü vb. gibi işlemler yapmak.
Aynı işlemi şu anda raspberry pi3 + esp32 modül + sensor ler + role ile yapıyorum. Çok keyifli bir süreç.
Başlık: Ynt: Python ile RS232 üzerinden string gönderme
Gönderen: Yeniüye1234 - 16 Haziran 2022, 07:10:15
Alıntı yapılan: fide - 13 Haziran 2022, 08:38:37Aynı işlemi şu anda raspberry pi3 + esp32 modül + sensor ler + role ile yapıyorum. Çok keyifli bir süreç.

Bende bunu PIC ve python ile yapıyorum. 24V DC PLC kart tarzı bir kart tasarladım. Bunun üzerinden gidiyorum