Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

16f628a seri haberleşme

Başlatan ibrahim96, 17 Mart 2018, 10:48:55

ibrahim96

Max485 ile rs232 iletişim standartında iletişim kuran bir sistem tasarlıyorum 49 adet olan bu sistem şuan için 1 adet ile deneme yapıyorum bir veri yollandında sistem önceden ayarlanmış şekilde motoru sürüyor fakat motorun yön tur gibi bilgilerini seri haberleşme ile karta gönderemedim bunu nasıl yapabiliriz?

kudretuzuner

Merhaba,
Yön ve tur eylemleri için de ayrıca değişik datalar yollamanız gerekir.
Amatör

ibrahim96

Data yollamasına yolluyorum araştır dım kadarı ile bir paket halinde gönderilmeli ve de no tur yon isimli 3 adet degişkenim var fakat gelen bilgileri nasıl ayırt edip bunlara aktaracagım çözemedim örnek bir kod varmı acaba ?

kudretuzuner

#3
Merhaba,
PIC ve PC arasındaki data alışverişlerini PIC tarafına  asm  PC tarafına ise VB.Net 2010 express edition ile yazmaktayım.PC tarafındaki programı da sizin mi?(siz mi yazdınız?)Bu tür projelerde hem PIC hem de PC tarafındaki yazılımları kendiniz yazarsanız ne yolladığınızı ve de ne aldığınızı bilir devrenizi ona göre dizayn edebilirsiniz.Ben size çok basit de olsa bazı çalışmalarımı arşivden bulup çıkarayım drobbox'a yükleyip linklerini vereyim fikir sahibi olacaksınız.Kolay gelsin.

Amatör

ibrahim96

Sagolun inceleyecegim ben projede bilgisayar yok master bir pic olacak


ibrahim96


tekosis

Sizin aradığınız bilgi string parçalama(split) işlemi. bu işi strtok komutu yapar. aşağıdaki forumda tam istediğiniz şey paylaşılmış.

https://ccsinfo.com/forum/viewtopic.php?p=184332

ayrıca CCSC nin help kısmında bu komutun kullanımı ile ilgili örnek mevcut.


char string[30], term[3], *ptr;  
strcpy(string,"one,two,three;");
strcpy(term,",;");
 
ptr = strtok(string, term);
while(ptr!=0) {
   puts(ptr);
   ptr = strtok(0, term);
   }
          // Prints:
             one
             two
             three
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

ibrahim96

Şimdi iletişimi gerçekliştiriyorum fakat değişken tipi olarak chardan int e nasıl aktarabilirim?

tekosis

İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

Murat Mert


S.A.
Haberleşmen için önce senin alma ve verme için protokol yapman lazım. Sorgu süren önemli. Yazma emri için bir dizi kod ve değerler okuma içinde dizi değerler yollaman lazım.
mert07

ibrahim96

Anlıyorum fakat internet de aradım taradım ama şöyle adam akıllı bir kodlar açıklama bulamadım tüm forumlarda konular hep yarım bırakılmış konular sonlandırılmamış rda kesmeli bir kod lazım ve step motor çalştıracagım yön ve tur bilgilerini seri iletişim ile alacagım bu kadar ama bir türlü iki degişkene de aktaramadım gelen bilgileri not seri iletişim ile bir data gönder dimde slave de bu data geldinde motor 1 tur atıp durucak fonksiyonu yaptım fakat 2 data geldiginde ilk önce yön sonra tur bilgisi gelecek bunu nasıl yaparım işin içinden çıkamadım

tekosis

aşağıdaki kodlar serdar çiçeğin ccs c kitabında anlattığı kodlardır.
/******************************************************
      PIC16F877 ile RS232 Seri İletişim Uygulaması
PIC PROG/DEKA     : Port B jumper'ı LCD konumunda olmalı
*******************************************************/


#include <16f877.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.


// Denetleyici konfigürasyon ayarları
#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD


#use delay (clock=4000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.


#define use_portb_lcd TRUE   // LCD B portuna bağlı


#include <lcd.c>   // lcd.c dosyası tanıtılıyor


#use rs232 (baud=9600, xmit=pin_C6, rcv=pin_C7, parity=N, stop=1) // RS232 protokolünün 9600 bit/sn baud hızında olacağını ve
                                                                  // TX,RX uçlarının hangi pinler olacağını tanımlıyor
                                                                  // parity bitinin olmadığını, stop bitinin 1 bit olacağı belirtiliyor


char   klavye[80];  // klavye isminde 80 üyeli bir dizi tanımlanıyor


#int_rda   // RX ucuna veri gelince meydane gelen kesme
void serihaberlesme_kesmesi ()
{
   disable_interrupts(int_rda); // int_rda kesmesini pasif yap
   gets(klavye); // String ifadeyi al ve "klavye" adlı dizi değişkenine aktar.
   printf(lcd_putc,"\f%s",klavye);  //LCD'yi temizle ve klavye string ifadesini LCD'de göster
}


/********* ANA PROGRAM FONKSİYONU********/


void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_timer_1(T1_DISABLED);     // T1 zamanlayıcısı devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
   setup_adc_ports(NO_ANALOGS);    // ANALOG giriş yok
   setup_adc(ADC_OFF);             // ADC birimi devre dışı
   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı


   output_low(pin_c5); // RC5 çıkışı ilk anda sıfırlanıyor
   lcd_init();   // LCD'yi hazırla


   printf("\r**************** Merhaba *********************"); // Yeni satır, RS232 üzerinden belirtilen metni gönder ve satır atla.
   printf("\n\rKlavyeden girdiginiz bilgiler LCD'de gorunecektir\n\n"); // Satır atla, yeni satır, RS232 üzerinden belirtilen metni gönder
   printf("\n\rKlavyeden bir metin giriniz ve enter tusuna basiniz>"); // Satır atla, yeni satır,RS232 üzerinden belirtilen metni gönder


   enable_interrupts(GLOBAL);  // Aktif edilen tüm kesmelere izin ver


   while(1) // Sonsuz döngü
   {
      enable_interrupts(int_rda); // int_rda kesmesi aktif
   }
}

program sürekli while içinde dönerken rs232 den bir veri gelirse kesme oluşur ve #RDA kesmesinde gets komutu ile enter kararkteri gelene kadar klavye stringine veri yüklenir. siz de gelen bu verinin içinden istediğiniz kısmı çekebilirsiniz.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

ibrahim96

Bu kitap elimde var kodları denedim sorunum gelen veriyi degişkenlere bölmek char tipini int aktararak motorun tur hesapı yapılıyor birde yön hesapı için int degişkeni var ama char tipinde almaz isem işlem yapmıyor char tipinde alırsam ise iki şekildede degişkenlere aktarmıyor

ibrahim96

Devreyi yapabildim putc ile gönderiyorum ve slave den de getch ile verileri alıyorum sıkıntıları çözdüm de putc ile veri geldinde getch aldım da orda takılı kalıyor getch komutu enter görene kadar mı bekliyordu açıklaya bilirmisiniz?