15 ledli bir karaşimşek devresi yaptım ama picbasicte nasıl yaparım

Başlatan murat11h1, 11 Aralık 2010, 13:54:50

murat11h1

Arkadaşlar merhaba. Bu sitenin müdavimi olacağım kesin. Engin bilgi ve tecrübelerinizden yararlanmaki için kervanınıza katıldım. Bol mikrodenetleyicili günler dileğiyle...

Bu kısa tanışma faslından sonra hemen derdimi dökeyim. Picbasicte daha yeniyim onun için soracağım-size göre saçma-soruları mazur görürsünüz umarım.

15 ledli bir karaşimşek devresi yaptım ama picbasicte nasıl yaparım bu işi mplab ı ve microcode'u kurana kadar göbeğim çatladı zaten.

ŞİMDİDEN TEŞEKKÜRLER.....

Bildiğini söylemeyen dilsiz şeytandır. (Hadis)

t2

Önce tek ledli yanıp sönen devre yaparak işe başlayabilirsin. 1 ledi yakıp söndürebilirsen diğerlerini de yapabilirsin. led ykıp söndürme örneği pbp örnekleriarasında vardır. ismi blink.bas olabilir. yoksa da google'da bulursun

http://www.microengineeringlabs.com/resources/samples/pbp/blink.bas
http://www.rentron.com/picbasic/products/picbasic-pro.htm

serdararikan

altaş yayınlarında yayınlanan bir kitap var.picbasic kitabı bunu alıp oradaki örnekleri denemekle başlamanı tavsiye ederim.unutma bu iş emek ister....

murat11h1

gençler aslında asm kodunda sorun var kodda mantıksal bir hatamı var portb ve porta lardan 15 led çıkışı olacak
bu sorunun bi aciliyeti var
internetten 8 ledlisini indirdim b
kodla biraz oynadım 15 ledli olsun dedim ama mantıksal hata var sanırım.
bi de kodun   MOVWF CMCON kodu ne manaya geliyo.


;=============================================
;Pic 16F628 ile 15 ledli Karaşimşek Devresi
;=============================================

LIST P=16F628
INCLUDE "P16F628.INC"

__config _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BODEN_ON & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_CLKOUT

SAYAC1 EQU h'20'
SAYAC2 EQU h'21'

;=====PORTLARIN GİRİŞ VE ÇIKIŞLARI AYARLANIYOR=====
CLRF PORTB
BCF STATUS, 0
BSF STATUS, 5
CLRF TRISB
BCF STATUS, 5

MOVLW h'01'
MOVWF CMCON

;=====BAŞLANGIÇ AYARLARI YAPILIYOR=====
MOVLW h'01'
MOVWF PORTB

;=====PROGRAM ÇALIŞMAYA BAŞLIYOR=====
SOL ;SOLA KAYDIRMA İŞLEMİ YAPILIYOR
CALL BEKLE
RLF PORTB, F
BTFSS PORTB, F
RLF PORTA, F
BTFSS PORTA, F
GOTO SOL

SAG ;SAĞA KAYDIRMA İŞLEMİ YAPILIYOR
CALL BEKLE
RRF PORTA, F
BTFSS PORTB, 0
RRF PORTB, F
BTFSS PORTB, 0
GOTO SAG
GOTO SOL

;=====GECİKME YAPTIRILIYOR=====
BEKLE
MOVLW h'5F'
MOVWF SAYAC1
DONGU1
MOVLW h'FF'
MOVWF SAYAC2
DONGU2
DECFSZ SAYAC2, F
GOTO DONGU2
DECFSZ SAYAC1, F
GOTO DONGU1
RETURN

;=====PROGRAMIN SONU=====
END

Bildiğini söylemeyen dilsiz şeytandır. (Hadis)

t2

Amca,işi zorlaştırmışsın:)

Yeni başlayan biri olarak, ASM ile bunu 1 haftada zor yaparsınız. Bunu yerine neden  picbasic veya proton kullanmıyorsunuz?

Öncelikle 15 tane çıkışınızın her birini tek tek yakabiiyor musunuz? gerisi çok kolay?
Toplam 18 pin var, 2 tanesi besleme biri reset. Dahili osc kullanırsak ledler için 15 pin hazır demektir.
15 pinin her biri portb üzerinde olamayacağından 8 ledden sonra  porta üzerinde kaydırma yapılması gerekir.

low portb   ' portb çıkış olsun, hem de  sıfır olsun
low porta    'porta çıkış olsun ..
git
portb =%00000001 : pause 500 ' 0.5sn bekle
portb =%00000010 : pause 500 ' 0.5sn bekle
portb =%00000100 : pause 500 ' 0.5sn bekle
..
porta =%00000001 : pause 500 ' 0.5sn bekle
porta =%00000010 : pause 500 ' 0.5sn bekle

goto git
...
bak gördüğümüz gibi 1 olan kısım kayıyor. portb bitince porta daki uygun pini kaydırıyoruz. tabi basic içinde hazır olan sola kaydır sağa kaydır komutları da kullanılabilir.

İşin aciliyeti nedir merak ettim? Acilse 1 saatte yapıverirsiniz işte. Altaş yayınlarından kitap alsanız kitap 5-10 TL ancak tutar. acil olarak tamamlayabilirsiniz.

murat11h1

peki bu kodla olmaz mı ya da burda ne hata var derleyici herhangi bir hata vermiyor. aslında hex dosyası adım adım çalıştıracak ve çıkışların durumunu gösterecek bir program yok mu?
'-----------------------
TRISB =%00000000
TRISA =%00000000
'-----------------------
PORTB=0
TEKRAR
       PORTB=%00000001
       SOL:
          PAUSE 200
          PORTB=PORTB<<1
          IF PORTB=%100000000 THEN SAG
          GOTO SOL
         
       SAG:
          PAUSE 200
          PORTB=PORTB>>1
          IF PORTA=%00000001 THEN SOL
          GOTO SAG
END
Bildiğini söylemeyen dilsiz şeytandır. (Hadis)

Ruzgarbey

TRISB =%00000000
TRISA =%00000000
'-----------------------
PORTB=0 :PORTA=0
I VAR BYTE
CIKIS VAR BYTE
CLEAR
BASLA:
FOR I=0 TO 7 'A PORTLARI SÜRÜLÜYOR
CIKIS.0[I]=1
PORTA=CIKIS
PAUSE 500
NEXT
CIKIS=0
FOR I=0 TO 7 'B PORTLARI SÜRÜLÜYOR
CIKIS.0[I]=1
PORTB=CIKIS
PAUSE 500
NEXT
CIKIS=0
FOR I=7 TO 0 STEP -1 'B PORTUNDAN GERİYE DÖNÜLÜYOR
CIKIS.0[I]=1
PORTB=CIKIS
PAUSE 500
NEXT
CIKIS=0
FOR I=7 TO 0 STEP -1 'A PORTUNDAN GERİYE DÖNÜLÜYOR
CIKIS.0[I]=1
PORTA=CIKIS
PAUSE 500
NEXT
CIKIS=0
GOTO BASLA


kodları kısalmak veya başka şekilde kullanmak mümkündür.ama yeni başladığınız için önce kodların çalışma şeklini anlamanız gerekiyor.bunu anladıktan sonra çok güzel kodlar yazacağınızdan eminim.yukardaki kodlarda for next döngüsü kurulmuştur.portlara çıkışı CIKIS ismindeki bir değişiken kullanarak verildi.bazen direk PORT komutu kullanmak sıkıntı yaratıyor.umarım başlangıcı ve mantığı anlamışsınızdır.saygılarımla..
Hayatta En Hakiki Mürşid İlimdir. M.K. ATATÜRK

murat11h1

Alıntı yapılan: Ruzgarbey - 18 Aralık 2010, 11:27:53
TRISB =%00000000
TRISA =%00000000
'-----------------------
PORTB=0 :PORTA=0
I VAR BYTE
CIKIS VAR BYTE
CLEAR
BASLA:
FOR I=0 TO 7 'A PORTLARI SÜRÜLÜYOR
CIKIS.0[I]=1
PORTA=CIKIS
PAUSE 500
NEXT
CIKIS=0
FOR I=0 TO 7 'B PORTLARI SÜRÜLÜYOR
CIKIS.0[I]=1
PORTB=CIKIS
PAUSE 500
NEXT
CIKIS=0
FOR I=7 TO 0 STEP -1 'B PORTUNDAN GERİYE DÖNÜLÜYOR
CIKIS.0[I]=1
PORTB=CIKIS
PAUSE 500
NEXT
CIKIS=0
FOR I=7 TO 0 STEP -1 'A PORTUNDAN GERİYE DÖNÜLÜYOR
CIKIS.0[I]=1
PORTA=CIKIS
PAUSE 500
NEXT
CIKIS=0
GOTO BASLA


kodları kısalmak veya başka şekilde kullanmak mümkündür.ama yeni başladığınız için önce kodların çalışma şeklini anlamanız gerekiyor.bunu anladıktan sonra çok güzel kodlar yazacağınızdan eminim.yukardaki kodlarda for next döngüsü kurulmuştur.portlara çıkışı CIKIS ismindeki bir değişiken kullanarak verildi.bazen direk PORT komutu kullanmak sıkıntı yaratıyor.umarım başlangıcı ve mantığı anlamışsınızdır.saygılarımla..

Rüzgarbey ilginiz için çok teşekkürler. Kodunuz yanyana yanan ledler var anladığım kadarıyla. Karaşimşek efekti için arada diğer ledleri söndürmek gerekiyor sanırım.
Bildiğini söylemeyen dilsiz şeytandır. (Hadis)

murat11h1

Kafayı yiyecem olmuyor olmuyor olmuyooor. kodlar isiste çalışıyor ama pic'e atınca tık yok.


TRISB =%00000000
TRISA =%00000000
PORTB=0 :PORTA=0
git
portb =%00000001 : pause 500 ' 0.5sn bekle
portb =%00000010 : pause 500 ' 0.5sn bekle
portb =%00000100 : pause 500 ' 0.5sn bekle
portb =%00001000 : pause 500 ' 0.5sn bekle
portb =%00010000 : pause 500 ' 0.5sn bekle
portb =%00100000 : pause 500 ' 0.5sn bekle
portb =%01000000 : pause 500 ' 0.5sn bekle
portb =%10000000 : pause 500 ' 0.5sn bekle

porta =%00000001 : pause 500 ' 0.5sn bekle
porta =%00000010 : pause 500 ' 0.5sn bekle
porta =%00000100 : pause 500 ' 0.5sn bekle
porta =%00001000 : pause 500 ' 0.5sn bekle
porta =%00010000 : pause 500 ' 0.5sn bekle
porta =%01000000 : pause 500 ' 0.5sn bekle
porta =%10000000 : pause 500 ' 0.5sn bekle

porta =%01000000 : pause 500 ' 0.5sn bekle
porta =%00100000 : pause 500 ' 0.5sn bekle
porta =%00001000 : pause 500 ' 0.5sn bekle
porta =%00000100 : pause 500 ' 0.5sn bekle
porta =%00000010 : pause 500 ' 0.5sn bekle
porta =%00000001 : pause 500 ' 0.5sn bekle

portb =%10000000 : pause 500 ' 0.5sn bekle
portb =%01000000 : pause 500 ' 0.5sn bekle
portb =%00100000 : pause 500 ' 0.5sn bekle
portb =%00010000 : pause 500 ' 0.5sn bekle
portb =%00001000 : pause 500 ' 0.5sn bekle
portb =%00000100 : pause 500 ' 0.5sn bekle
portb =%00000010 : pause 500 ' 0.5sn bekle
portb =%00000001 : pause 200 ' 0.5sn bekle


goto git
Bildiğini söylemeyen dilsiz şeytandır. (Hadis)

Maxim


Mucit23

Simülasyonda çalışması gerçektede kesin olarak çalışacağı anlamına gelmez.
Maxim arkdaşında dediği gibi configürasyon ayarlarını yapmamışsın
programın başına  aşağıdaki kodları ekle çalışır.
@ DEVICE pic16F628  'işlemci 16F628
@ DEVICE pic16F628, WDT_Off 'Watch Dog timer açık
@ DEVICE pic16F628, PWRT_ON 'Power on timer açık
@ DEVICE pic16F628, PROTECT_OFF 'Kod Protek kapalı
@ DEVICE pic16F628, XT_OSC
@ DEVICE pic16F628, MCLR_OFF
DEFINE OSC 4
CMCON=7

murat11h1

arkadaşlar şu devreyi yaptım.Yani devremde kristal yok kondansatör ve dirençle yapılmış osilatör var.

@device larıda ekledim ve Microcode Studio "illegal opcode" diyor. Balatayı sıyıracam. İbrahim tatlıses'in Ben nerde yanlış yaptım şarkısını söylüyorum şimdilerde...  :-\ Bu arkadaşın yaptığıdı devrenin jal kodu var bense basicle yazmak istedim hızı yavaştı biraz hızlandıramadıkta.
Bildiğini söylemeyen dilsiz şeytandır. (Hadis)

Mucit23

Öncelikle biraz sakin ol!
Sorunu çözmeye odaklanmak yerine bişeyler öğrenmeye odaklansan senin için iyi olur.
Verdiğin şemada dahili osilatör kullanılmış. Yani dışarıdan kristal bağlamana gerek yok ve dikkat edersen osilatör uclarınada led bağlanmış.

Aşağıdaki kodu configürasyon kodlarının yanına ekle.

@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT

chaoss

Pic e Hexi yüklerken osilatör seçeneklerini ayarlıyormusun??? XT seçeneğinde kalmış olabilir... Bende ilk 20Mhz osilatör kullandığımda beni epeyce üzmüştü bu durum bi kontrol etmeni tavsiye ederim ii gcler..... kolay gele
\\\In Tolerance Be like the Sea/ // Hz. Mevlana

kudretuzuner

Merhaba
Şemada ledler şaselenmemiş.RA4 pininden çıkan led ters bağlanması lazım yani sink akımı ile çalışır.
PIC'in sağlam olup olmadığını kontrol etmek için tasarladığım çok basit bir devrem var.ledlerin bağlanış şekli hakkında bilgi verir.Programı da dikkatlice incelerseniz akış diyagramının ne kadar basit olduğunu göreceksiniz.Siz bu programı şablon gibi kullanıp istediğiniz miktardaki ledleri istediğiniz gibi yakıp söndürebilirsiniz.Kolay gelsin.
http://www.4shared.com/file/AoxqBXaq/TEST_ARALIK.html
Amatör