16F628 Yardım

Başlatan alien876, 07 Haziran 2013, 22:19:08

alien876

merhaba arkadaşlar herkese kolay gelsin bobin sarmak için bir devre yaptım iside sorunsuz çalışıyor devrede ise ana ekranda kalıyor hiçbir fonksyonu  çalışmıyor 2gündür sorunu çözmeye çalışıyorum ama yapamadım picbasic  yeni öğreniyorum yardımcı olursanız sevinir yapmaya çalıştığım menuden tur sayısını ayarlamak baslattığımda bu tur sayısı kadar sarıp durması birde menuden hız ayarı isis ve pbp dosyasını ekte iyi çalışmalar

F®T

#1
port a ya bağlı butonları 10k direnç ile eksi ye çek.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

alien876

#2
İlgin için teşekkür ederim ustam porta ya bağlı butonlar 10k dirençle gndye bağlı zaten heyşey normal görünüyor ama devre tur sayma ekranına gelince kalıyor başka işlem yapmıyor isiste normal çalışıyor  sanırım yazılımda bişeyleri eksik yaptım ama neyi eksik yaptığımı bulamıyorum

F®T

DEFINE OSC 4  osc yi tanımlamamışşın.bu şekil configden sonra tanımla.eğer kristalin 4 mhz se
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

pwm.c

pull-down için dirençleri küçük değerde kullanmak gerekiyor. 10k fazla gelebilir.
1k veya daha alt değerde dene bakalım.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

alien876

#5
Alıntı yapılan: F.T - 08 Haziran 2013, 00:13:32
DEFINE OSC 4  osc yi tanımlamamışşın.bu şekil configden sonra tanımla.eğer kristalin 4 mhz se

Dediğinizide denedim ama sonuç aynı

Alıntı yapılan: pwm.c - 08 Haziran 2013, 01:29:55
pull-down için dirençleri küçük değerde kullanmak gerekiyor. 10k fazla gelebilir.
1k veya daha alt değerde dene bakalım.

birde bunu deneyeyim
ustalarım birde ilk iki label'i inceleyebilirmisiniz program burda takılıyor sanırım çünkü lcdye BOBİN SARIM yazısı geliyor ondan sonra ilerlemiyor

pwm.c

ilk:
read 1,oku.BYTE0
READ 2,OKU.BYTE1
  if oku<0 or oku > bitis then oku = 1
read 3,bitis.byte0
read 4,bitis.byte1
if sifir<0 or sifir > 1 then sifir = 0
read 5,hiz.byte0
read 6,hiz.byte1
if hiz<0 or hiz > 1000 then hiz = 0
pause 500


evet ilk etikette birtakın hatalar mevcut.
öncelikle şunu söyleyim ki, bir değişken atadığın zaman bunun içeriğini sıfırlamassan bulunduğu adresin değerini alır. sen ise değişiklik yapmadan test etmişin.
önce eeprom adreslerini okuyup ilgili değişkenlere kaydet daha sonra içeriğini konrol et.
ayrıca "oku<0" , "sifir<0" , "hiz<0" ne demek oluyor? 0'dan küçük ise anlamına gelen bir ifade bu.
birde, "sifir" adında bir değişken var ama sadece ilk başta kullanılmış. bunun işlevi ne anlamadım. sanırım kodları bize tam vermemişin.
son olarak, okuduğun eeprom adreslerinde herhangibi değer yoksa "00" yada "FF" sayısı görülür. programı ilk çalıştırmada bu kontrolleride yapmalısın.



_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

alien876

#7
Ustam o bölümde alabileceği değer aralığını vermeye çalıştım örneğin 0tur ile 1000tur arası yanlışmı kullanmışım yeni öğreniyorum ustam başka projeleri inceleyerek yapmaya çalışıyorum hatalarımı söylerseniz yada hatalı bölümleri olması gerektiği halini yazabilirseniz daha rahat öğrenirim

alien876

Ustam  dediğiniz gibi yaptım sorunu çözdüm teşekkür ederim ama şimdide hpwm de sorun var porta.3 bastığımda hpwm başlıyor
ama ne hız kotrolü yapabiliyorum nede durdurabiliyorum sana zahmet vermessem birde bun sorunu düzeltmem için yardımcı olabilirmisin dosyanın son hali ekte

F®T

hwma ve hwmk gibi etiketlere gosub ile gidip return ile dönersen programı basla ve goto basla arasında yürütürsün.etikete dallandırıp etiketten baslaya gitmen iyi değil.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

pwm.c

Arkadaşım, şimdi senin bu program ile ne yapmak istediğini bilmediğim için tek tek okuyup mantık hatalarını çıkaramam. ayrıca PBP ile pek aram yok. şuanda CCS C kullanıyorum.
genel olarak program yazarken bazı kurallara dikkat etmen gerekiyor.
örneğin, bir değişkenin değerini arttırdıktan yada azalttıktan sonra son durumunu test etmenlisin. gereğinden fazla sayı oluşmuşsa hemen değiştir.
eeprom adrese ise sürekli veri yazma. bunun belirli bir yazıp silme ömrü olduğunu hatırlatayım.
donanımsal pwm için istersen HPWM komutunu kullan. bu sayede registerler ile uğraşmassın. eğer 10 bit pwm istiyorsan şu şekilde ayarla:


HPWM 1,0,4000
CCP1CON.4=HIZ.0
CCP1CON.5=HIZ.1
CCPR1L=HIZ>>2


Buradaki HPWM 1,0,4000 komutunu program başında 1 kere kullanman yeterli. diğer ayarlamalarda CCPR1L, CCP1CON.5, CCP1CON.4 registerlerine değer vermen yeterli.
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

alien876

Çok teşşekür ederim cevaplarınız için söylediklerinizi deniycem inş sorun çözülür birde hpwm başlıyor 1dk geçmeden mosfet el değmeyecek kadar ısınıyor irf840 kullandım bunun sebebi ne olabilir isis dosyası ilk mesajımda var

İlyas KAYA

sayın alien876; Mosfet bu şekilde sürülmez malesef.

PWM frekansını 8 khz yap yalnız.

Ekte bir devreni tekrar düzeltip verdim. Birde bu şekilde denersin.
Eğer yine ısınırsa haber ver bir ek daha yapacağım.





Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

pwm.c

Alıntı yapılan: alien876 - 09 Haziran 2013, 13:55:59
Çok teşşekür ederim cevaplarınız için söylediklerinizi deniycem inş sorun çözülür birde hpwm başlıyor 1dk geçmeden mosfet el değmeyecek kadar ısınıyor irf840 kullandım bunun sebebi ne olabilir isis dosyası ilk mesajımda var
Bahsettiğin mosfeti sürmek için 5v yeterli değil. bunun için lojik girişli sürücü entegrelerinden kullanmalısın yada lojik mosfet bulabilirsen bunlar 5v ile sürülebilinir. olmadı BDX53 gibi darlington transistörlerden tercih edebilirsin.



Alıntı yapılan: İlyas KAYA - 09 Haziran 2013, 17:41:18
sayın alien876; Mosfet bu şekilde sürülmez malesef.

PWM frekansını 8 khz yap yalnız.

Ekte bir devreni tekrar düzeltip verdim. Birde bu şekilde denersin.
Eğer yine ısınırsa haber ver bir ek daha yapacağım.


İlyas Bey, opamplı sürücü devresinde opampı yükseltej değilde comparatör olarak bağlasak daha iyi olmaz mı? çünkü yükseltej bağlantısında, giriş lojik 0 konumunda iken port üzerinde oluşan düşük seviyeli voltajı çıkışa aktarma ihtimali olabilir diye düşündüm.
ben 2,5v referans oluşturup karşılaştıcı ile lojik giriş verebiliyorum. bu sayede port gerilimi 2,5v üzerine çıkmadan çıkış vermiyor.
örnek bağlantı:
_/\/\/\_ -[ı- -ı>|- -|ı|ı|ı- -ı< -||- -l[]l-

İlyas KAYA

Sayın pwm.c; Dediğiniz gibi eğer karşılaştırıcı olarak koyarsak referans voltajının üstünde ancak çıkış verecektir.

0-5volt olan pwm sinyalini terslemeyen yükselteç olarak kullanırsak PWM sinyalimiz bu sefer 0-12volt olacaktır. Böylece Mosfet için tam doyum ve tam  kesim sağlanmış olur.

Şuan bu şekilde kullanıyorum ve en düşük devirden en yüksek devire hatta motoru tutsam dahi güç düşmeyip motor akım çekse de mosfet ısınmayıp adaptörü zorlamaktadır.

Tavsiye ederim.


Aslında bu sürüşü ticari sistemlerde kullanıyoruz ama amaç işiniz görülsün :)

Saygılar.

Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

Powered by EzPortal