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?
Merhaba,
Yön ve tur eylemleri için de ayrıca değişik datalar yollamanız gerekir.
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 ?
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.
Sagolun inceleyecegim ben projede bilgisayar yok master bir pic olacak
https://www.youtube.com/watch?v=Tiui1lmiJG4 (https://www.youtube.com/watch?v=Tiui1lmiJG4)
Alıntı yapılan: selimkoc - 17 Mart 2018, 15:00:10
https://www.youtube.com/watch?v=Tiui1lmiJG4 (https://www.youtube.com/watch?v=Tiui1lmiJG4)
ccsc ile ilgili kodlar gerekli yinede sağolun.
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 (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
Şimdi iletişimi gerçekliştiriyorum fakat değişken tipi olarak chardan int e nasıl aktarabilirim?
Anahtar arama yöntemi: https://www.google.com.tr/search?q=how+to+char+to+int+ccs+c&oq=how+to+char+to+int+ccs&aqs=chrome.1.69i57j33.17088j0j7&client=ms-android-asus&sourceid=chrome-mobile&ie=UTF-8 (https://www.google.com.tr/search?q=how+to+char+to+int+ccs+c&oq=how+to+char+to+int+ccs&aqs=chrome.1.69i57j33.17088j0j7&client=ms-android-asus&sourceid=chrome-mobile&ie=UTF-8)
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.
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
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.
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
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?