avatar_McB

proglamlama yardım

Başlatan McB, 19 Nisan 2014, 20:48:19

McB

Merhaba.
pic16f777 için aşağıda yazdığım kodu bir türlü çalıştıramadım. Toplam 6 adet çıkışı aktif ettiğim halde sadece ikisi aktif oluyor. pwm lerde sorun yok. Derleyici olarak mikrobasic kullanıyorum. projeyi oluştururken osilatör için HS yi (20 mhz kullanıyorum) pwm çıkışı için B.3 pinini aktif ediyorum. acaba başka ayar mı yapmam gerekiyor? yoksa programda mı sorun var?




program deneme
symbol l0 = portc.3
symbol l1 = portd.0
symbol l2 = portd.1
symbol l3 = portd.2
symbol l4 = portd.3
symbol l5 = portc.4

symbol r5 = portc.5
symbol r4 = portc.6
symbol r3 = portc.7
symbol r2 = portd.4
symbol r1 = portd.5
symbol r0 = portd.6


symbol ain2  = portd.7
symbol ain1  = portb.0
symbol stby1 = portb.1

symbol stby2 = porte.2
symbol bin1  = porte.1
symbol bin2  = porte.0

symbol sensor = porta.5

dim hata          as integer
dim eski_hata     as integer
dim turev         as integer
dim integral      as integer
dim KP            as integer
dim KD            as integer
dim KI            as integer
dim pid_cikis     as integer
dim sol_motor     as integer
dim sag_motor     as integer
dim set_sol       as integer
dim set_sag       as integer
dim set_sol2      as integer
dim set_sag2      as integer

main:
  trisa=255
  trisb=0
  trisc=%11111000
  trisd=%01111111
  trise=%11111000

  portc=0
  portd=0
  turev=0
  KP=10
  KD=110
  KI=1
  set_sol=0
  set_sag=0


  pwm1_init(100000)
  pwm1_start
  Pwm1_Change_Duty(0)
  pwm2_init(100000)
  pwm2_start
  Pwm2_Change_Duty(0)

  stby1 = 1
  stby2 = 1
  bin1  = 1
  bin2  = 1
  ain1  = 1
  ain2  = 1
 


while(1)
       Pwm1_Change_Duty(200)
       Pwm2_Change_Duty(200)
wend
end.
İmkanın sınırını görmek için imkansızı denemek lazım.
Fatih Sultan Mehmet

ete

İşlemcinin açılışta default olarak gelen bazı özellikleri var ve bunlar muhtemelen çalışmanızı etkiliyor. Birincisi sizinle çok alakalı olmasada komparatör açılışıdır. A portunu kullanır. Kapatmak için Cmcon=7 vermeniz gerekir. İkincisi asıl sizi ilgilendiren özellik olan ADC pinleridir. İptal etmek için Adcon1 registerine 15 değerini vermeniz gerekir.
Tabiiki konu mikrobasic olunca çok şey söyleyemiyorum çünki derleyicinin bu tür şeyleri nasıl değerlendirdiğini bilemiyorum.
Dediklerimi deneyi birde hangi pinler çalışmıyor onu söylerseniz nokta atışı ile sorunu bulmak kolaylaşmış olur.

Ete

McB

Dediklerinizi uyguladım hocam. d.7 pini haricinde diğerleri düzeldi fakat d.7 pini hala aktif olmuyor.
İmkanın sınırını görmek için imkansızı denemek lazım.
Fatih Sultan Mehmet

ete

Hemen baktım. PortD.7 de başka ne özellikler var diye (Data Sheet den) . Gördümki bu işlemcide aynı zamanda Paralel/Slave Port varmış ve onun 7. biti PORTD.7 oluyormuş. Peki bu durumda mutlak bir yerlerde Bu paralel/Slave port aktif edilmiştir yada default aktif geliyordur. Baktım TRISE registerinin 4.biti bu paralel portu aktif ediyormuş. E portu normalde 3 pinden oluşuyor ve böylece TrisE registerinin ilk 3 biti önemli diğerleri önemsiz oluyor. Ama bu işlemcide bir işe yaramayan TrisE registerinin 4. bitine Paralel/Slave port aktivasyon bitini yerleştirmişler. Bu bit=1 olursa port paralel port olarak kullanılması gerekiyor. Hemen programa batım sende TRISE=%11111000 şeklinde değer vermişsin. Hata buradan kaynaklanıyor. O halde TRISE=0 verirsen düzelecektir.

Ete

McB

Aslında ilk dediklerinizi uyguladıkdan sonra datasheete bende bakmıştım fakat anlayamamıştım. Datasheet okumayı geliştirmem gerekiyor sanırım. Yardımınız için çok teşekkür ederim hocam.
İmkanın sınırını görmek için imkansızı denemek lazım.
Fatih Sultan Mehmet

McB

Hocam tekrardan merhaba.

pic 16f777 de AN11 ve AN8 den analog okuma yapıcam. sadece bu ikisini analog pin olarak ayarlıya biliyomuyum? Çünkü AN10 u dijital olarak kullanıyorum.



Bu görüntüyü datasheetden aldım. Bu görüntüye göre yapamıyorum en azından ben öyle anladım. Yapmanın bi yolu var mı?
İmkanın sınırını görmek için imkansızı denemek lazım.
Fatih Sultan Mehmet

ete

Tablo ne diyorsa ona uymak zorundasın maalesef. Bu istediğin tabloya göre mümkün değil.
Yeni nesil işlemcilerde mesela 16f887 de ansel registeri ile istediğini analog yapabiliyorsun. 777 de 3 kanal hpwm var idi şayet üçünüde kullanmıyorsan tavsiyem 887 kullanmandır.
Ete

McB

peki hocam an11 e olan kısmı aktif etmem için 0011 olarak göstermiş. Yani programda adcon = 3 yazmam gerekiyor değil mi?
İmkanın sınırını görmek için imkansızı denemek lazım.
Fatih Sultan Mehmet

ete

O değer An0 dan An11 e kadar olan pinleri analog yapmaktadır. Register adı sadece Adcon olmaması gerek Adcon1 diye hatırlıyorum.  Bu çok basit bir konu çok mu zor geliyor sana? Tablo her şeyi görsel açıklıyor. Verilen değerin hangi bitler olduğu belli tablonun başında hangi register olduğu belli. O halde sana düşen ihtiyacına bağlı olarak uygun değeri verip gerekli ayarlamayı yapmak olmalı değilmi?

Biraz kendine ve aklına güvenmen lazım.

Ete

Powered by EzPortal