Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

Pin Okuma

Başlatan xoom, 03 Aralık 2016, 23:08:17

xoom

if(buton){
         output_high(pin_A0);  
         delay_ms(500);
         x=input(pin_A0); 
         write_eeprom(2,x); 
            
         }

Yukarıdaki işlemde butona basılınca A0 pini High oluyor fakat x=input(pin_A0); satırı işleyince A0 pini Low'a düşüyor.
Bunun sebebi hakkında bilgisi olan var mı?

*x=input(pin_A0); satırını yorum satırına dönüştürüp tekrar derlediğimde butona basılınca A0 high konumda kalmaya devam ediyor.
aksi durumda bu satırı okuyunca low'a düşüyor.

Salih

#1
Sen aksini belirtmediğin sürece CCS'de,
pinlerle ilgili kullanılan giriş çıkış komutlarında,
tris ayarları otomatik olarak ayarlanır.
Örneğin,
input(Pin_A0) yazdığında Pin_A0 pini giriş özelliği olacak şekilde ayarlanır.
Çıkışla ilgili komutlarda da, ilgili pinler çıkış özelliği olacak şekilde ayarlanır.
Eğer çıkış olarak kullandığın bir pinin lojik değerini okumak istiyorsan,
input_state() komutunu kullanmak gerekir.
Bu komut okuma yaparken pinin tris ayarını değiştirmez.
Bence güzel bir özellik.

xoom

Alıntı yapılan: Salih - 04 Aralık 2016, 00:34:14
Sen aksini belirtmediğin sürece CCS'de,
pinlerle ilgili kullanılan giriş çıkış komutlarında,
tris ayarları otomatik olarak ayarlanır.
Örneğin,
input(Pin_A0) yazdığında Pin_A0 pini giriş özelliği olacak şekilde ayarlanır.
Çıkışla ilgili komutlarda da, ilgili pinler çıkış özelliği olacak şekilde ayarlanır.
Eğer çıkış olarak kullandığın bir pinin lojik değerini okumak istiyorsan,
input_state() komutunu kullanmak gerekir.
Bu komut okuma yaparken pinin tris ayarını değiştirmez.
Bence güzel bir özellik.
Bunu öğrenddiğim iyi oldu. Teşekkür ediyorum. Bu konu altında bir soru daha sormak istiyorum.
Tx ve Rx pinlerini seri iletişimde kullandığım zaman eğer diğer pinlerim C7 hariç çıkış olduğu zaman. Set_tris_c(0x80); ve output_c(0x00); kullandığım zaman seri iletişimde sorun yaşıyorum. Eğer sigorta ayarlarını c portu için hiç yapmazsam sorunsuz çalışıyor. Burada atladığım konu ne olabilir?

Salih

CCS seri haberleşme ayarlarında Tris ayarlaması yapmıyor olabilir.
Ben her ihtimale karşı,
aşağıdaki komutları başlangıç ayarlarında kullanırım.

input(Pin_C7);
Output_low(Pin_C6);


Z80

CCS C' de RCV pinini tris ayarlarından giriş yapmazsanız kendi ayarlamıyor.
Ayrıca, RCV pini RS-232 tanımlamalarında kullanılmazsa UART pinini tanımlasanız bile soft modda çalışıyor. Çipin içindeki UART'ı kullanmak için RCV pinini de tanımlamak gerekiyor.
#use   rs232(baud=115200, xmit=PIN_C4, rcv=PIN_C5,ERRORS) gibi...

output_high, input gibi komutlar kullanıldığında CCS her seferinde tris pinlerini ayarlıyor.
Bundan kurtulmak isterseniz programın başına bütün portlar için #use fast_io(ALL) sadece A portu için #use fast_io(A)
ekleyin. Ama bu sefer de Tris registerlerini siz ayarlamak zorundasınız.

TRISA= 0b00000000;
   
Bu seferde TRISA 'yı önceden tanımlamanız gerekir.
#BYTE PORTA    = 0x05


xoom

o zaman sizleri yakalamışken bir sorum daha olacak.
+CMT: "+xxxxxxxxxxxx","","16/11/22,19:06:58+12"
YES


pic'in RX pinine gelen verim bu? getc(); fonksiyonu ile bunu diziye atmak istiyorum ama dizi boyunu nasıl hesaplayacağım? yani YES kelimesinden sonra Veri almanın bitmesi gerekiyor. ve YES kelimesi Alt satırda geliyor. Daha sonra gelen Veri içinde  işlemeler yapacağım

Not: Gets() ile veriyi almak istemiyorum.

Salih

getc() ile veri al,
eğer gelen karakter C ise diziye kaydetmeye başla,
Y ile karşılaştığında diziye kaydetmeyi durdur.
Aradaki verileri ayrıştırıp kullanabilirsin.

xoom

Alıntı yapılan: Salih - 04 Aralık 2016, 13:40:02
getc() ile veri al,
eğer gelen karakter C ise diziye kaydetmeye başla,
Y ile karşılaştığında diziye kaydetmeyi durdur.
Aradaki verileri ayrıştırıp kullanabilirsin.
O şekilde kullanıyorum ama Çeşitli sorunlara sebep olduğu için Son 3 Karaktere göre bitirmek istiyorum.
Buffer[32]='Y' Buffer[33]='E' Buffer[34]='S' gibi..  ama 32 33 34 gibi dizideki yerler dizide standart değil. Bazen YES/NO/EVET/HAYIR gibi kelimeler almak istiyorum.
Örneğin: Gelen dizi içindeki "Yeni Dünya YES" gibi bir dizide ilk gelen Y'de dizi sonlansın istemiyorum gibi..

Salih

Gelen karakterler ASCII ise şöyle bir önerim var,
+C ile dizi kaydını başlat.
YES alt satıra geçiyor demiştin.
Alt satıra geçirmek için
#13 veya #13#10 gibi sayı değerleri gelir.
#13 sayısını gördüğünde,
gelenleri ayrı yorumla. YES, NO v.s.