Picproje Elektronik Sitesi

DERLEYİCİLER => PICBasic => Konuyu başlatan: Acoustica - 29 Ocak 2011, 19:51:27

Başlık: PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..
Gönderen: Acoustica - 29 Ocak 2011, 19:51:27
Herkese Hayırlı Akşamlar,

Aslında uzun zaman oldu forum sitelerinde dolaşmayalı,en son bundan 4 yıl önce eproje.com da modaratördüm.
Daha sonra hayat şartları bizi aldı biryerlerden biryerlere savurdu.Tabi kopmamak lazımdı,biz ise hayattan kopmayı seçtik.
Meslektenden de hayattanda yaşımız büyük olmasına rağmen koptuk,daha sonra şimdi eşim olan insan hayata ve elektroniğe bağladı tekrar beni.Yeniden 8 yaşından beri alaylı ve mektepli olarak devam ettiğim elektroniğe geri döndüm ve bir firmada analog kart tamircisi olarak çalışıyorum.(Alaylı,olarak Televizyon tamircisi yanında başladım 15-16yaşına kadar devam ettim,sonra meslek lisesi elektronik,daha sonra 2 adet yüksek okul birisi end.elektronik,diğeri ise elektronik haberleşme nasipse ona da daha bu yıl başladık),tabii bu vasıta ile yaş 28 oldu.


Hocalarımın beni çok sevmelerine ve bu işi iyi bildiğimi söylemelerine rağmen ve dijital elektroniğim iyi olduğu halde PIC programlamayı öğrenmeyi  reddettim.Çünkü nedeni o zaman sene 1998-1999 ve 2000 civarlarıydı ve o zaman hocalarımız bile tam vakıf değillerdi,ASM dilini sevmiyordum ve zor geliyordu,ta ki 28 yaşına kadar da zor gelmeye devam etti.


Çalıştığım firmadaki diğer arkadaşın argeci olması ağrıma gitmeye başladı,transistör ile mosfet süremeyen adam ordan burdan copy paste yapıp PICi yazıyor devreyi çalıştırıyordu,direnç hesaplamayı akım sınırlamayı,AC ve DC devre analizi bilmiyordu ama PIC yazıyordu.Ağrıma gitmeye başladı,daha mükemmel olduğum halde bu işin başında ben yoktum,bildiklerimide geri çekemezdim ve hatta hayalimdeki projeleri gerçekleştirmem için buna gerek vardı Mİmar SINAN ın  ÇIRAKLIK,KALFALIK ve USTALIK eserleri gibi benimde aklımda eserlerim vardı.(Çünkü USTAM'a ki öldü -Allah Rahmet Eylesin,söz verdim bildiğimi asla kimsenden saklamayacağım,çünkü bu meslekte kimse kimseye kolay kolay öğretmez ama öğretenler bu işi en iyi bilenlerdi demişti.)En sonunda bu işe el atmaya karar verdim.


320volt adlı (gevv in sitesidir) ETE hocanın ki eproje de de kendisi vardı hatırlıyorum PİC BASİC PRO derslerine baktım,ve benim için en iyi dilin BASIC olduğuna karar verdim.Lisede de bu dili iyi kötü öğrenmiş ve seviyordum yalın ve basitti.Kararımı verdim ve PIC BASIC öğrenip arkasından C++ ile devam edecektim.Beni tanıyan bir kaç mühendis bunu salık veriyor.


Neyse ilk kodumu yazdım bir multivibratör devresi yazdım yani diğer adı ile fliflop,
devre ARES ve ISIS ta mükemmel çalıştı derleyici kodu derledi,HEX dosyasını gösterdim ve simülasyon çalıştı.
Dünyalar benim oldu ilk kodum ve ilk devrem çalışmıştı.


Bu hevesle gittim bir adet USB PIC PROGRAMLAYICI aldım Konya Sokaktan.İçini açıp baktım 18F2550 var demek ki bu branner tip programlayıcı dedim.Neyse WİN7 kurulu olan sisteme gösterdim tanıttım programı çalıştırdım.Hemen PIC i taktım Hex dosyasını gösterdim içine attı.


Bir sevindim bir sevindim anlatamam,sanki ilk arızamı yapıyormuşum gibi oldum.
Gittim hemen pertinakstaki devreye taktım çalışmadı.5 tane PIC ve 5 kristal değiştim.Çalışmadı sanki garazi var gibi.
Çok üzüldüm küstüm kendime sonra buraya üye oldum,ustalara abilere sorayım dedim yardımcı olurlar dedim.
Bütün hepsini resim olarak koyuyorum.Yardımlarınızı bekliyorum.


Sağlıcakla ve esenlikle kalın,Allaha emanet olun.

Unutmadan bu programlayıcı 12F ve 12 C serisi programalamaz mı?


Ayrıca devre şemasında eklememişim PULLUP direnci var 8.2 K lık.

(http://www.hizliupload.com/onizleme/r1jsj.jpg) (http://www.hizliupload.com/?v=r1jsj.jpg)
(http://www.hizliupload.com/onizleme/r2ixi.jpg) (http://www.hizliupload.com/?v=r2ixi.jpg)
(http://www.hizliupload.com/onizleme/r3fdf.jpg) (http://www.hizliupload.com/?v=r3fdf.jpg)
(http://www.hizliupload.com/onizleme/r4.jpg) (http://www.hizliupload.com/?v=r4.jpg)
(http://www.hizliupload.com/onizleme/r5.jpg) (http://www.hizliupload.com/?v=r5.jpg)
(http://www.hizliupload.com/onizleme/r6.jpg) (http://www.hizliupload.com/?v=r6.jpg)
(http://www.hizliupload.com/onizleme/r7zwz.jpg) (http://www.hizliupload.com/?v=r7zwz.jpg)
(http://www.hizliupload.com/onizleme/r8.jpg) (http://www.hizliupload.com/?v=r8.jpg)
(http://www.hizliupload.com/onizleme/r9.jpg) (http://www.hizliupload.com/?v=r9.jpg)
(http://www.hizliupload.com/onizleme/r10.jpg) (http://www.hizliupload.com/?v=r10.jpg)
(http://www.hizliupload.com/onizleme/r11.jpg) (http://www.hizliupload.com/?v=r11.jpg)
Başlık: Ynt: PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..
Gönderen: adoka - 29 Ocak 2011, 21:14:44
dostum bende senin gibi acemi sayılırım flipflop olarak tanıttıgın etiketten sonra ikinonta ust uste koymalısın (flıpflop:) seklinde derlemede hata vermeyebilir ama pice atarken picbasic bunu etiket olarak gormez ve islem yapmaz ayrıca etiketin hemen altına bir bekleme suresi daha eklemeni tavsiye ederim buton arkını sondurmek icin.
Kolay gelsin...
Başlık: Ynt: PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..
Gönderen: Maxim - 31 Ocak 2011, 08:49:09
hoşgeldiniz
malesef resimler icon şeklinde ufak, normal olarak göremiyoruz.
Başlık: Ynt: PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..
Gönderen: ferit06 - 31 Ocak 2011, 09:10:55
Sizin programlayıcı ile ilgili sorunuza cevap vereyim. 12 serisini 16 serisi olarak 8 pin seçeneği ile programlayabilirsiniz.
Başlık: Ynt: PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..
Gönderen: ete - 31 Ocak 2011, 09:19:46
Bu işe yeni başladığın için kusurlarının olmasını normal olarak karşılıyorum.
Her şeyden önce unutmaman gerekenbir şey vardır. İsis de çalışan devre gerçekte de mutlaka çalışır.
Yalnızca isisin varsaydığı bazı noktalara dikket etmen gerekiyor.
Bunlardan birincisi, isis mikro işlemcilere besleme (5V) bağlı kabul eder.
İkincisi işlmecilere kristal, rezonatör yada dahili harici RC osilatörlerin bağlı olduğunu kabul eder. Ama sen gerçek devrene mutlaka bunlardan birisini bağlamak zorundasın. Bunu yapmışsın.
Her işlemcinin bir Reset (MCLR) bacağı vardır. Pic in çalışması için bu bacağın HIGH da tutulması gerekir. Bacak Low da olursa pic e reset atılmış olur. İsis bu bacağa da bir pullup direncininbağlı olduğunu kabul eder. Dolayısıyla sen gerçek devrende bu bacağa 1K-10K arası bir pullup direnci bağlaman gerekir. Bunu yapmamışsın.

İsisin varsayımlarının dışında devrendeki hataları inceleyelim.

Birincisi PortA.0'a bir buton bağlamışsın. Butonun diğer ucu +5V da olduğuna göre PortA.0 pini (Buton Pini) LOW da bekleyecek ve sen butona basınca buton pinine HIGH uygulanacaktır. Peki o pini LOW da bekletecek bir tedbir almışmısın? tabiiki hayır. O halde ne yapman gerekir. Buton pinine bir Pull-Down direnci takman gerekir idi. Bunu yapmamışsın. Diyeceksinki devre çalışıyor isisde!!!!. Tamamen rastgele çalıştığından eminim.

Tabiiki devrende MCLR bacağına bağlanması gereken pullup direnci eksik. Bunuda bağlaman gerekiyor.

Diğer bir konuda ledlere bağlamış olduğun seri dirençler. Ledlerin bir forward yani yanma voltajları vardır. Ideal çektikleri akımlar ise 10-20ma arasında olmalıdır. Diğer yandan bir pic pini en fazla 20 ma akım verebilir fazlası pini dolayısıyla pici bozar yada yanmasına sebebep olur. Sen devrende ledlere seri 82 ohm direnç bağlamışsın. Bu dirence karşılık gelen yanma voltajı ;
Vf= 5V - (82 * 0,020)= 3,36V dolayında çıkıyor. Şayet kullandığın Mavi yada beyaz led ise bu direnç değeri doğrudur ancak yinede sınırları zorluyorsun gibi geliyor bana. Bu nedenle hesaplarını yaparken led akımını 10 veya en fazla 15ma olarak al.
hesap şekli R=(5V-Led_yanma_Voltajı) / 0,015  şeklinde olsun. Kullandığın normal kırmızı yada yeşil led ise oraya en azından 220 Ohm direnç bağlaman gerekir.

Devredeki kusurların bu kadar. Gelelim programa,

Yukarıdan aşağıya doğru programa baktığımda başta sigorta ayarlarının eksik olduğunu görüyorum. Hangi programlayıcıyı kullanırsan kullan, mutlaka sigorta ayarlarını programın başına koymayı ihmal etme. Pek çok programın sırf bu yüzden çalışmadığına dikkatini çekmek isterim.
Bu program için olması gereken sigorta ayarları ve komutların yazılış biçimi aşağıdaki şekildedir.

@ DEVICE pic16F628                     'hangi işlemciyi kullandığımızı belirliyor
@ DEVICE pic16F628, WDT_ON             'bekçi köpeği denilen geri plan sayıcısının aktif ediyor, WDT_OFF olursa da kapatıyor
@ DEVICE pic16F628, PWRT_ON            'Power On Timer özelliğini aktif ediyor. Pic beslemesi belirli voltaja ulaşıncaya kadar pic reset de tutulur.
@ DEVICE pic16F628, PROTECT_OFF        'kod koruması kapalı, açık olursa pic kopyalanamaz.
@ DEVICE pic16F628, MCLR_OFF           'Reset bacağı iptal edilebiliyor bu picde. Dolayısıyla Pullup direncine gerek yok.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT 'Pic ini içindeki dahili OSC si kullanılıyor dolayısıyla kristal bağlanması gerekmez.

BU ayarlarları vermiş olsa idin devren en azından isis deki gibi çalışacak idi. Bir temel kriter devrenin çalışmasını engelliyor idi. Oda MCLR bacağına bağlamadığın pullup direnci bu ayarlarla iptal edildiği için devren muhtemelen çalışacak idi.

Kullandığın 16F628A işlemcisinde önseçimli (default) olarak açılan Komparatör pinleri vardır. AYnen bir opamp komparatörü gibi bu pinler komparatör amaçlı kullanılabilir. PortA nın ilk 5 pini bu iş için ayrılmıştır. Şayet tedbir almaz isen bu pinler analog komparatör olarak çalışır ve programında buna bağlı olarak çalışmaz. Bu pinlerin digital giriş-çıkış pini olaak kullanılabilmesi için CMCON=7 komutunun programın başına eklenmesi gerekirdi. Bunu eklemen gerekiyor.

Pic işlemcilerinde digital pinlerin girişemi yoksa çıkışamı çalışacağı TRIS registerlerine verilen değerlerle tanımlanır.
Her bir portun bir TRIS registeri vardır (12F serisinde bunun adı TRISIO registeridir). Bu registerin her bir biti sırasına göre ilgili pinin ne yönde çalışacağını belirler. Bit değeri sıfır (0) ise o pin Çıkış, bit değeri bir (1) ise o pin giriş olarak çalışır. Örnekle açıklar isek;
TRISB=%10001001 şeklindeki komut da yer alan ilk bit (sağdan sola doğru ilk bit) 1 değerini taşır. Bu PORTB.0'a denk gelen bitdir.
Değeri 1 olduğu için bu pin Giriş ("I"nput) olarak çalışacak demektir. Bir sonraki yani PortB.1 pini ise sıfır değerini taşımaktadır. O halde bu pin Çıkış yani ("O"utput) olarak çalışacaktır. Tırnak içine aldığım karekterler yaklaşık olarak değerlerin şekillerine karşılık gelmesi açısından hatırlatıcı rol oynar. Output için "0" yani sıfır , Input için "1" yani bir değeri verilmektedir. Şimdi senin devrene bakalım. PortA.0 da bir buton bağlı ve PortB de ise ledler bağlı.
Buton, bir giriş elemanıdır. O halde PortA.0 pini giriş olarak ayarlanmalıdır. Peki sen ne yapmışsın TrisA=%0000000 şeklinde verdiğin komut bütün PortA yı çıkış olarak ayarlamış Bu yanlış işte. Doğru komut TRISA=%00000001 şeklinde olmalı idi.

PortB de ledler bağlı idi. Led bir çıkış elemanıdır. Peki sen ne değer vermişsin TRISB ye ?. TRISB=%11111111 şeklinde verdiğin komut bütün B portunu giriş olarak ayarlamış. Buda tamamen yanlış bir komut tabiiki. O halde TRISB nasıl olmalı ?
TRISB=%00000000 şeklinde verilmeli idi.

BAsic de program satır takip eder. Bir satırdaki komutların yerine getirilmesinden sonra aksine bir komut (Goto ) yok ise bir sonraki satıra otomatik olarak atlar.
Etiketler Basicde bir isim ile tanımlanır ve ardından ":" işareti ile sonlandırılır. Sen bu kurala uymamışsın. Bu şekilde de çalışıyor ama doğrusu etiket adından sonra ":" işaretini kullanmandır.

Goto FlipFlop
FlipFlop:

şeklinde bir komut dizisi gereksizdir. Burada gereksiz olan Goto Flipflop komutudur. Çünki o komutu oraya yazmasan zaten program o satıra atlayacak. Başka bir alternatifi yok ki. Programın tabii akışını takip eden satırlar için ayrıca goto komutunu eklemek gereksiz ve fazladan komut satırı demek olur.

IF - ENDIF çevrimi içine aldığın komutların işlenmesinden sonra program satırların sonuna ulaşmaktadır. Orada bekleyecek ve muhtemelen WDT tarafından program resetlenip yeniden baştan başlatılacaktır. Buda yanlış bir uygulamadır.
Bu komut dizisini bir kerelik işletmek istersen program sonuna bir   END   komutu ilave etmen gerekir.
KOmutların yeniden değerlendirilmesini istersen ENDIF den sonra  GOTO FLIPFLOP  şeklinde bir yönlendirme komutu eklemen gerekir idi.
GOTO FLIPFLOP olmadan ne olur bir inceleyelim.
Programı ilk çalıştırdığında daha sen elini butona atmadan program satırları icra etmeye başlayacak ve butona basılıp basılmadığını kontrol edip ve basılmadığını da görüp anında ENDIF satırının bir sonrasına atlayacaktır. Orada bekleyecek ve sonuşta WDT tarafından resetlenip yeniden başlatılacaktır. Halbuki GOTO FLIPFLOP satırını eklersen program yeniden tuşa basılmışmı basılmamışmı kontrol edecek ve basılınca yazdığın komutları icra edecektir.

Son olarak, devrendeki ve programdaki eksikliklere ve hatalara rağmen program isisde rastgele çalışabilir. Çalışırkende isis sana hataları sıralar aslında onları görebilmen gerekir. Ama dediğim değişiklikleri ve düzeltmeleri yaparsan sistem düzgün çalışacaktır.

Pic işlemcileri genelde 5V ile çalışırlar. Devreye bağlanırken Voltaj bacaklarına çok dikkat etmelisin. Çok yapılan hataların başında işlemcilerin sokete ters takılması gelmektedir. Bazıları anında yanar ve bozulur bazıları ise pek etkilenmez. Ben yinede içlerinde bir yerlerin ters voltajdan bozulduğu kanaatindeyim. Pic'i yerine takmadan evvel on defa kontrol etmende yarar var.
Gerçek devrelerde picin besleme bacaklarına mutlaka 100nf kondansatör bağlamayı ihmal etme Hayat kurtarır. Çalışmayan yada abuk subuk çalışan devreleri çalışır hale getirir.

Bütün bu açıklamaları dikkatlice okumanı uygulamanı ve bundan sonraki programlarındada uygulamak üzere kafana yazmanı öneririm.

Kolay Gelsin
Ete
Başlık: Ynt: PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..
Gönderen: mufitsozen - 31 Ocak 2011, 12:36:19
Bravo Ete hocam,

Mukemmel bir egitmen ve ogretmen olarak yazmissin.

Keske bende bu kadar duzgun bir cevap yazabilsem dedirtdin bana.

Saglicakla kal,
Başlık: Ynt: PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..
Gönderen: Ruzgarbey - 31 Ocak 2011, 12:43:22
Merhaba.devrenizin Çalışmamasının büyük bir nedeni USB pic programlayıcılarında Sigortaların Tam Yapılması gerektiğidir.pic progmlamada sigorta ayarlarınızı kontrol ediniz.benimde daha öncebaşıma geldi 18f serisinde.aramıza katılmandan mutluluk duyuyorum.ülkemiz insanlarının bu güzel aileye katılmaları beni gerçekten seviniyorum.hiç elektronik bilgim olmamasına rağmen,okulunda okumama rağmen hobi olarak başladığım elektroniği pic yüzünden çok sevdim.piclerle uğraşırken elektronik bilgim oldu.araştırmak öğrenmenin bana göre hepsidir :) PBP diğer dillere nazaran daha görsel bir dildir.Pic e yeni başlamıssan bu dili ETE hocamızın dersleri ile çok kolay öğrenebilirsin.saygılarımla kolay gelsin.
Başlık: Ynt: PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..
Gönderen: frederic - 31 Ocak 2011, 13:21:29
Örnek alınması gereken nadide insanlardansınız ETE hocam,yaptıklarınız bildikleri üç beş satır bilgiyi nimetten sanıp saklayan budalalara ders oluyor her defasında.Sağlıcakla kalın,saygılar...
Başlık: Ynt: PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..
Gönderen: ihun - 16 Şubat 2011, 20:11:04
sayın ETE hocam, yazdığınız yazıları okuyunca, saygıyı fazlası ile hak ettiğinizi düşünüyorum. ben de PİC e yeni başlamış sayılırım. Assembly' i biraz öğrendikten sonra hangi dil ile ilerleyeceğime karar vermemde, yazmış olduğunuz yazıların etkisi inanılmaz. eğitim notlarınızı internetten indirdim ve onlar üzerinden ilerlemeye çalışıyorum. ve size en azından minnet borçlu olduğumu da bilmenizi isterim. hemen hemen internetten bulunabilecek nadir türkçe kaynaklardan ve önemlilerdendi.

bu yazıyı da sizin emekleriniz ve Pİc eğitimine olan katkınız sayesinde, bu alanda birşeyler yapmaya çalışan insanlara olan yardımınızın hiç de küçümsenmeyecek olduğunu bir kez daha idrak etmeniz ve kendinizle gurur duyulacak bir iş ortaya koyduğunuzu bilmeniz açısından yolluyorum.

siz ve sizin gibi insanlara çok çok TEŞEKKÜR etmek istiyorum.

Birçok insanın basit görüp cevap bile yazmaya gerek duymayacağı bir konuda, PİC öğrenmeye çalışan saygıdeğer kardeşimize böylesine yapmış olduğunuz açıklamalar yeni başlayan bizlerinde faydalanmasına vesile oluyor. Tekrar ALLAH sizlerden razı olsun.
Başlık: Ynt: PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..
Gönderen: ete - 16 Şubat 2011, 22:50:10
Bu sözleri hak etti isem ne mutlu bana.
Teşekkür ederim.
Ete
Başlık: Ynt: PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..
Gönderen: Acoustica - 22 Şubat 2011, 17:23:58
Herkese yardımları için çok teşekkürler,ilk 3 derse göre birşeyler yapmaya çalıştığım için olmadı.
Ama şimdi başardığıma inanıyorum,arkadaşımla bir iddaya girdik ve bunun sonucunda 12C508 İle  220 voltta bir lambayı
kontrol etmemi istedi.Bende kabul edip şu şekilde birşey yazdım.
İşyerinde olduğumuzdan deneyemedik,foruma sormayı kabul ettik,
Sizce bu devre çalışır mı?
[IMG]http://www.hizliupload.com/img/66855335841848089807.jpg[/img] (http://www.hizliupload.com/)
Başlık: Ynt: PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..
Gönderen: ete - 22 Şubat 2011, 17:50:13
Program ve devre genel anlamda doğru. Ancak bu program bu devrede çalışmayacaktır.
Muhtemelen derlenirken hata verecektir.  Nedendir dersiniz?
Tabiiki data sheet incelemesi yapmadığınız için 12C508 de Analog pinler ile Comparatör varmış gibi gerekli komutları oraya koymuşsunuz.
Her ikiside 12C508 de mevcut olmayan özelliklerdir.
Kısaca CMCON komutu ile ANSEL komutunu oradan kaldırırsanız program çalışır.
Ancak bana göre bir diğer eksiklik,  tuş basılmış ise role çıkışını high yaptıktan sonra 200 ms lik bir gecikme koymanız uygun olacaktır.
Aksi halde tuş basmada sıklıkla görülen bas-bırak olayı nedeni ile röle anlamsız şekilde çalışır.

Ete
Başlık: Ynt: PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..
Gönderen: Acoustica - 22 Şubat 2011, 22:28:42
Sevgili ete hocam,
Program çalışmadı.Sadece butona bastığım an voltaj oluyor.
Elimi butondan çekince o volta çekiyor.İç osilatör frekansını 4.00Mhz ayarladım.
Dediğiniz gibi comparatör ve ADC ile ilgili komutları ANSEL VE CMCON kaldırdım.
Geri kalan kısmı birebir aynı.
Sistem tamamen çizdiğim şema ile aynı.Ama çalışmıyor.
Nerde yanlış yapıyoruım?
Yardımcı olursanız çok sevinirim.
Tufan Han DAĞ
Başlık: Ynt: PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..
Gönderen: Maxim - 22 Şubat 2011, 23:01:11
sanırım kodu bu şekilde değiştirirseniz çalışacaktır

ete hoca da onaylarsa eğer

ONOFF:

IF SWITCH=1 THEN
PAUSE 300
TOGGLE ROLE
ENDIF

GOTO ONOFF
Başlık: Ynt: PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..
Gönderen: muhittin_kaplan - 22 Şubat 2011, 23:13:57
Hocam Devre Doğru Programda Doğru Yanlız Mantık Yanlış
Siz Basınca Yanmasını ve Yanık Kalmasını, Tekrar Bastığınızda Sönmesini ve sönük kalmasını istiyorsunuz sanırım ?
Bunun İçin Maxim Hocanın yazdığını yazmanız yeterli olur.
Başlık: programdaki hata nedir?
Gönderen: ihun - 23 Şubat 2011, 18:38:39
selamın aleyküm arkadaşlar.

bende yeniyim ve 16f84 için yazıp derlediğim bir programla ilgili bir hatayı sormak istedim. ilk yazdığım program şu;

TRISA=255
TRISB=0

DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
DEFINE LCD_RWREG PORTB
DEFINE LCD_RWBIT 2
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 1
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2

SAY VAR BYTE
SYMBOL YUKARI=PORTA.1
SYMBOL ASAGI=PORTA.0

SAY=0

LOW PORTB.2
LCDOUT $FE,1
PAUSE 200

BASLA:

IF YUKARI=0 THEN
    IF say<255 THEN
    say=say+1
    PAUSE 20
    else
    say=255
    endIF
ENDIF
   

IF ASAGI=0 THEN
    IF say>0 THEN
    SAY=SAY-1
    PAUSE 20
    ELSE
    SAY=0
    ENDIF
ENDIF


LCDOUT $FE,2,"SAYI=",#SAY
GOTO BASLA
END


ancak proteus taki denemede, sayılan değer yukarı sayarken problem yok. ancak aşağı doğru saydırırken 100 e kadar problem yok ancak devamında 990,980,970,960........ gibi aşağıya doğru iniyor. anladımki, 099 yazacağına 990 diye aşağıya sayıyor (doğrumu anladım bilemiyorum). daha sonra şu düzeltmeyi yaptım

TRISA=255
TRISB=0

DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 3
DEFINE LCD_RWREG PORTB
DEFINE LCD_RWBIT 2
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 1
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2

SAY VAR BYTE
SYMBOL YUKARI=PORTA.1
SYMBOL ASAGI=PORTA.0

SAY=0

LOW PORTB.2
LCDOUT $FE,1
PAUSE 200

BASLA:

IF YUKARI=0 THEN
    IF say<255 THEN
    say=say+1
    PAUSE 20
    else
    say=255
    endIF
ENDIF
   

IF ASAGI=0 THEN
    IF say>0 THEN
    SAY=SAY-1
    PAUSE 20
    ELSE
    SAY=0
    ENDIF
ENDIF


LCDOUT $FE,2,"SAYI=",DEC3 SAY
GOTO BASLA
END

yani en sondaki LCDOUT kısmında #sayı yerine dec3 sayı yazdım. ve problem düzeldi. ben şimdi bu sorunun oluşma sebebini ve dec3 yazınca neden düzeldiğini merak ediyorum.

ve ayrıca

bir de programın başında DEVICE tanımlamalarını yazınca microcode studio da bir hata mesajı alıyorum;

@ DEVICE pic16F84
@ DEVICE pic16F84, WDT_on
@ DEVICE pic16F84, PWRT_ON
@ DEVICE pic16F84, PROTECT_OFF
@ DEVICE pic16F84, XT_OSC

bunun sebebi MPLAB programının hasarlı olmasından kaynaklı olabilirmi?


Başlık: Ynt: PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..
Gönderen: omereliusuk - 23 Şubat 2011, 20:02:19
SAY VAR BYTE
IF YUKARI=0 THEN
    IF say<255 THEN '
    say=say+1
    PAUSE 20
   else '
    say=255 '
    endIF
ENDIF

kırmızı kodlar fazla neden dersen zaten say byte tipi değişken dolayısıyla say değeri 255 ten fazla olamaz. bu değeri 1 daha artırırsan 0 değerine ulaşır. yani 256 olmaz.

#say
sayının değerini gösterir. şöyle
sayın 1 ise 1; 2 ise 2; 99 ise 99 ; 100 ise 100
şimdi 100 e kadar geldin ve geriye 99 dedin. sonraki bir hanede işlem yapılmıyor. dolayısıyla senin sayın 990 oluyor. aslında sayında sorun yok ama sayının görüntüsünde sorun var.
dec3 dediğin zaman ise her seferinde sayın 3hane olarak yazılıyor.
yani sayı 1 ise gösterim 001 ; sayı 3 ise 003;
ama eğer sayın 4 hane olursa bu sefer görünen sayı 000 olarak gösterime giriyor. yani 4. hane gösterimde değil. onun için dec4 ifadesi kullanmalısın.

bir de illaki pbp kullanacağım diyorsan bunu yerine Proton kullan benzer kodlar daha çok işlev. yok daha iyi bir şey kullanmak istiyorsan ben C dilini yeni yeni öğreniyorum. baktıgım zaman harika işler çıkacak gibi. protonda yazdığım 1 sayfa kodu ccs ile neredeyse 1 satırda hallediyorum <en azından hallettiğmi sanıyorum>.
Başlık: Ynt: PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..
Gönderen: dombilik - 23 Şubat 2011, 22:19:10
Röleniz de boş bir kontak,mikrokontrolörünüzde de
rezerve bir giriş bacağınız varsa kontağı bu girişle
irtibatlayıp "TOGGLE" komutunu kullanmadan;

RÖLE ON  and BUTON BASILI ise   RÖLE bıraksın
RÖLE OFF  and BUTON BASILI ise   RÖLE çeksin

mantığı ile de yazılımınızı ve devrenizi gerçekleştirebilirsiniz.
Ayrıca 12 serisi PIC hiç kullanmadım ama kenar seçim (yükselen,düşen) olayı varsa
düşen kenarda buton u kontrol etmek de devreyi kararlı bir hale getirebilir.
Bu arada mesleğe tekrar dönmenizden dolayı sizi tebrik ederim.Aramıza hoşgeldiniz.

Başlık: Ynt: PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..
Gönderen: ihun - 23 Şubat 2011, 22:43:05
omereliusuk kardesim, acıklaman için teşekkür ederim, faydası oldu. sanırım LCDOUT kısmında $FE,2 ........   yazacağıma, LCDOUT $FE,1 ile yapmaya çalışmış olsaydım bu sorunu görmeyecektim ancak, ekran sürekli olarak silinip yazılacağından dolayı kırpışacaktı (denemedim şimdi düşündüm).

bir de
SAY VAR BYTE
IF YUKARI=0 THEN
    IF say<255 THEN '
    say=say+1
    PAUSE 20
    else '
    say=255 '
    endIF
ENDIF
koddan sonra 0' a gitmesini değil de, 255 de sabit kalması için bu şartı koymuştum. denememde de isatediğimi elde etmiş oldum. ancak başka bir türlü bunu elde edebilirmiyim düşünmedim..

bu amaç için başka bir kod kullanabilirmiydim sizce? yani sayma işlemi sonucunda 255 te (veya 100, 50, 43 vs. de olabilir) durdurabileceğim daha kısa bir kod.....
Başlık: Ynt: PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..
Gönderen: omereliusuk - 23 Şubat 2011, 23:14:19
IF YUKARI=0 THEN
    IF say<255 THEN say=say+1'
   PAUSE 20
endif


sayı 255 ten küçükse sayıya bir ekleyecek; 254+1 =255 işlem doğru
sayı 255 olduğu zaman sayı 255 ten küçük olmayacağı için sayıyı artıramayacak. dolayısıyla sayı 255'te kalacak. en azından else kalkmış oldu.
Başlık: Ynt: PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..
Gönderen: Acoustica - 24 Şubat 2011, 21:49:07
Alıntı yapılan: dombilik - 23 Şubat 2011, 22:19:10
Röleniz de boş bir kontak,mikrokontrolörünüzde de
rezerve bir giriş bacağınız varsa kontağı bu girişle
irtibatlayıp "TOGGLE" komutunu kullanmadan;

RÖLE ON  and BUTON BASILI ise   RÖLE bıraksın
RÖLE OFF  and BUTON BASILI ise   RÖLE çeksin

mantığı ile de yazılımınızı ve devrenizi gerçekleştirebilirsiniz.
Ayrıca 12 serisi PIC hiç kullanmadım ama kenar seçim (yükselen,düşen) olayı varsa
düşen kenarda buton u kontrol etmek de devreyi kararlı bir hale getirebilir.
Bu arada mesleğe tekrar dönmenizden dolayı sizi tebrik ederim.Aramıza hoşgeldiniz.
Hocam Yükselen ve alçalan mantığı nedir tam manası ile kavrayamadım,Anlatırsanız sevinirim.
Bu arada aranızda olmak benim için bir onur,bir mutluluk sizin gibi vefalı ve fedakar dostlar sayesinde bir yerlere varabilirsek
ne mutlu bize.
Yardımlarınız için teşekkürler.
Tufan Han DAĞ
Başlık: Ynt: PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..
Gönderen: Acoustica - 28 Şubat 2011, 13:22:36
S.a ete hocam,maxim,dombilik,gevv ve adini veremedigim diger arkadaşlar, yardimlari miz icin o kadar mutesekkiri  ki...anlamadigim bir konuvar dombilik arkadasimiz bahsetmis, yukselen ve alcalan kenar nedir birisianlatabilir mi?
Başlık: Ynt: PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..
Gönderen: Mucit23 - 28 Şubat 2011, 13:49:01
Yükselen kenar herhangi bir bacağın(ucun,pinin,portun vs vs vs :) ) sıfır konumundayken 1 yani +5v konumuna geçtiği andır. Bu noktaya yükselen kenar derler. Düşen kenar ise tam tersidir.
Resim daha iyi anlatacaktır.
[IMG]http://img822.imageshack.us/img822/6570/karedalga.gif[/img] (http://img822.imageshack.us/i/karedalga.gif/)

Uploaded with ImageShack.us (http://imageshack.us)
Başlık: Ynt: PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..
Gönderen: dombilik - 01 Mart 2011, 00:35:29
Sorunuzu şimdi gördüm.Ama geç kalmışım cevaplamakta..
Fakat mucit23 ustam gayet güzel açıklamış..
Başlık: Ynt: PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..
Gönderen: Acoustica - 01 Mart 2011, 09:32:57
S.a yeniden gunaydin,olayi tam manasi ile kavradim yalniz soyle bir durum var mantiken kafama yatmayan nokta da bu " dusen kenar devreyi daha kararli hale getirebilir " aciklamalara gore dusen kenar 5 volttan yani 1 den 0 volta yani 0 noktasina dusen nokta ise,ve benim devrem ise porta uygulanan data 1 ise diger portu 1 yap seklinde oldugundan yukselen kenar devreyi daha kararli hala getirmez mi?
Yardimlariniz icin tesekkurler,iyi calismalar.
Tufan Han DAĞ
Başlık: Ynt: PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..
Gönderen: ete - 01 Mart 2011, 11:11:58
Özellikle buton ve diğer girişlerde düşen kenar kullanılması her zaman avantajlıdır. Çünki pinlere uygulanacak değer GND seviyesindedir.
Bu seçimin bir diğer avantajıda B portunu kullandığınızda dahili pullup dirençlerini kulllanabilme imkanınız olmasıdır. Böylece bu porta yapılacak girişlerde ayrıca bir pullup direnci kullanmamış olursunuz. Bu nedenle kendinizi daima düşen kenar tetiklemesi kullanımı konusunda alıştırımanız menfaatinize olacaktır.

Düşen yada yükselen kenar uygulamaları devrenin kararlı yada kararsız çalışmasını etkilemez. Bu nedenle tercihinizi başka faktörlere göre yapmanız gerekir. En önemli etken yukarıda açıkladıklarım.
Bunlar benim aklıma gelenler. Başkaları daha farklı yaklaşım içinde olabilirler.  Fikri olan söyleyebilir.

Ete
Başlık: Ynt: PIC BASIC PRO'ya GİRİŞ ve YAŞADIĞIM SIKINTI..
Gönderen: dombilik - 01 Mart 2011, 12:05:46
Alıntı yapılan: TufanHan - 22 Şubat 2011, 22:28:42
Sevgili ete hocam,
Program çalışmadı.Sadece butona bastığım an voltaj oluyor.
Elimi butondan çekince o volta çekiyor.İç osilatör frekansını 4.00Mhz ayarladım.
Dediğiniz gibi comparatör ve ADC ile ilgili komutları ANSEL VE CMCON kaldırdım.
Geri kalan kısmı birebir aynı.
Sistem tamamen çizdiğim şema ile aynı.Ama çalışmıyor.
Nerde yanlış yapıyoruım?
Yardımcı olursanız çok sevinirim.
Tufan Han DAĞ


"Butona bastığım an lamba yanıyor çektiğimde sönüyor"
Bu açıklamanıza göre söylemiştim düşen kenarı da kullanabilirsiniz diye..