pic pasic ile led animasyon hk

Başlatan yolcu27, 09 Şubat 2016, 21:25:13

yolcu27

sayın arkadaşlar kendi çapımda yavas yavas pic programlama öğrenmek istiyorum basic ile başladım.

bir sorum olacak kurduğum devre ile simüle ettiğimde çalışan kod devre üzerinde denediğimde nedense kararsızlık göteriyor şöyleki

4 animasyondan oluşan kodumda son animasyona kadar sıkıntı yok ama son  animasyonda bazen devam ediyor bazen devam etmiyor bunun sebebi nedir acaba sürekli aynı yerde durmuyor yani bazen 3 4 sn bazen 5 6 sn sürüyor yanmaları ,  devrede acemilikten dolayı sadece 7805 kullandım . 7805 in girişine 47 uf cıkısına 47 uf + 100n koyacağım bir daha ki sefere. ama bu devremde sadece 7805 ile besliyorum. psu güç kaynağından 12v alarak. acaba ledleri yakmak için güç yeterli gelmiyor mu kondansatör olmadığı için? bu aklıma geldi kodu ekliyorum. kodda sıkıntı yoksa pcb altından kondansatör lehimleyip deneyeceğim birde.

ete hocamın 5. dersine kadar tekrar tekrar okudum çok faydası oldu açıkcası
buradan sonra nasıl devam etmem gerekiyor acaba?
yani pic basic ile termometre ve takvim projesi gibi
set değeri olan termostan üstüne cıkınca yada altına inince röle kontrol etmek
rf kontrollü devreler
engel algılayan çizgi izleyen robot vs.
bu gibi devreler yapmak için hangi konulara daha çok eğilmem gerekiyor

sorun yaşadığım kısım genel olarak ledler bir taraftan yanmaya başlıyor diğer uca kadar yanıyor hepsi. 11111111 olunca tam tersi yönde  yanmaya başlayınca sönüyor hepsi.
yada bir taraftan gelip 11111111 olup diğer tarafa gidip 11111111 olunca bu sefer tüm ledlerin yanıp sönmesini tekrarlarken toplamda 10 kere yanıp sönecek ledler ama 2 yada 3 defa yanıp hepsi sönüyor bir kararlılık yok yani

şimdiden teşekkür ederim iyi forumlar

SON:

PAUSE 150
portb=%00000001
pause 150
if porta.1=0 then basla

portb=%00000011
pause 150
if porta.1=0 then basla

portb=%00000111
pause 150
if porta.1=0 then basla

portb=%00001111
pause 150
if porta.1=0 then basla

portb=%00011111
pause 150
if porta.1=0 then basla

portb=%00111111
pause 150
if porta.1=0 then basla

portb=%01111111
pause 150
if porta.1=0 then basla

portb=%11111111
pause 150
if porta.1=0 then basla

portb=%10000000
pause 150
if porta.1=0 then basla

portb=%11000000
pause 150
if porta.1=0 then basla

portb=%11100000
pause 150
if porta.1=0 then basla

portb=%11110000
pause 150
if porta.1=0 then basla

portb=%11111000
pause 150
if porta.1=0 then basla

portb=%11111100
pause 150
if porta.1=0 then basla

portb=%11111110
pause 150
if porta.1=0 then basla

portb=%11111111
pause 150
if porta.1=0 then basla
pause 150
t var byte 

for t =1 to 10 ' 10 defa alttaki kodları çalışmasını istediğim için for next döngüsü kullandım
portb=0         ' port b nin tümünü sıfıra çekti ledler söndü
pause 100
portb=255     ' port b nin tümü 1 e çekti ledler yandı
pause 100
if porta.1=0 then basla
next t
goto son

serkan_esk

Telefondan yazdigin icin cok yazamayacagim. Ben basla goremedim kodlarin tamamini koymadin mi? Ayrica neden hep if porta.1 then dongusunu kullaniyorsun birak program siradan gitsin.

yolcu27

Alıntı yapılan: serkan_esk - 09 Şubat 2016, 21:52:35
Telefondan yazdigin icin cok yazamayacagim. Ben basla goremedim kodlarin tamamini koymadin mi? Ayrica neden hep if porta.1 then dongusunu kullaniyorsun birak program siradan gitsin.

hocam sadece bu kısmını ekledim basla etiketini ve diğer 2 etiketi yazmadım sorun çıkartan kısım bu kodlarda.

if porta.1=0 then ......  bunuda animasyon sırasında butona basıldığında bir sonraki etikete yani animasyona geçmesi için kullandım.

dediğim gibi programlama konusunda çok yeniyim uzun uzun yazmak yerine eminim değişkenler ve bilmediğim diğer kodlar ile daha da kısaltılabilir kodlar diye tahmin ediyorum en azından bir kaç video da  öyle gördüm.

ete

Muhtemelen sorunu yaratan şey PORTA.1 pini.
Programın tamamını görmeyince kesin yorum yapmak zor. Genelde her kes aynı hatayı yapıyor. Yalnızca çalışan kodu veriyorlar ve asıl sorunun gerisinde olduğunu düşünemiyorlar. Sende öye yapmışsın.
Kullandığın işlemci 16F628A muhtemelen (bu da belli değil) ve bu işlemcinin A portu aynı zamanda Komparatördür. Aksine bir komut olmadığı sürece A portu komparatör olarak çalışır ve senin IF PORTA.1=0 komutunu çalışmaz hale getirebilir.
Her şeyden önce bu pin giriş pini olarak ayarlanması ve komparatör özelliğinin kapatılarak portun digital giriş çıkış portu haline getirilmesi gerekir.

Bilerek bende açıklamamı eksik yazdım.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

yolcu27

#4
Alıntı yapılan: ete - 10 Şubat 2016, 07:33:20
Muhtemelen sorunu yaratan şey PORTA.1 pini.
Programın tamamını görmeyince kesin yorum yapmak zor. Genelde her kes aynı hatayı yapıyor. Yalnızca çalışan kodu veriyorlar ve asıl sorunun gerisinde olduğunu düşünemiyorlar. Sende öye yapmışsın.
Kullandığın işlemci 16F628A muhtemelen (bu da belli değil) ve bu işlemcinin A portu aynı zamanda Komparatördür. Aksine bir komut olmadığı sürece A portu komparatör olarak çalışır ve senin IF PORTA.1=0 komutunu çalışmaz hale getirebilir.
Her şeyden önce bu pin giriş pini olarak ayarlanması ve komparatör özelliğinin kapatılarak portun digital giriş çıkış portu haline getirilmesi gerekir.

Bilerek bende açıklamamı eksik yazdım.

Ete

Hocam evet 16f628a picim. cmcon=7 kodu ile komprator kullanımını iptal etmiştim program başında.
Şimdi telefondan yazıyorum akşam kodun tamamını yazarım.
Porta.1 e bağlı butonda sıkıntı olsa diğer animasyonlar da da sıkıntı yaratmaz miydi , yanı başarıyla çalışan 3 etiketim var bu son adlı etikette sıkıntı çıkıyor sadece.

Dediğim gibi acemiyim kodlar  uzun konuda fazla kod gorunmesin diye koymamıştım.
Ama akşam kodun tamamını yeniden yazarım.
İyi günler

yolcu27

Alıntı yapılan: ete - 10 Şubat 2016, 07:33:20
Muhtemelen sorunu yaratan şey PORTA.1 pini.
Programın tamamını görmeyince kesin yorum yapmak zor. Genelde her kes aynı hatayı yapıyor. Yalnızca çalışan kodu veriyorlar ve asıl sorunun gerisinde olduğunu düşünemiyorlar. Sende öye yapmışsın.
Kullandığın işlemci 16F628A muhtemelen (bu da belli değil) ve bu işlemcinin A portu aynı zamanda Komparatördür. Aksine bir komut olmadığı sürece A portu komparatör olarak çalışır ve senin IF PORTA.1=0 komutunu çalışmaz hale getirebilir.
Her şeyden önce bu pin giriş pini olarak ayarlanması ve komparatör özelliğinin kapatılarak portun digital giriş çıkış portu haline getirilmesi gerekir.

Bilerek bende açıklamamı eksik yazdım.

Ete


hocam yeniden merhaba  kodların tamamını ekliyorum.

'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : [select VIEW...EDITOR OPTIONS]                    *
'*  Notice  : Copyright (c) 2016 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 2.2.2016                                          *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ DEVICE pic16F628A                      'işlemci 16F628                                
@ DEVICE pic16F628A, WDT_ON              'Watch Dog timer açık
@ DEVICE pic16F628A, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628A, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628A, MCLR_off            'MCLR pini kullanılMIYOR.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak

cmcon=7
trisa=%00000010
trisb=%00000000
portb=%00000000
x var word : a var byte : x=1
t var byte 
basla:
    portb=0
    pause 300
    if porta.1=0 then yakk
    goto basla
yakk:
pause 350
yak:
    if x=512 then x=1
    portb=x
    pause 150
    if porta.1=0 then yak11
    x=x*2
    goto yak
yak11:
pause 350
yak1:
    if x<1 then x=512
    portb=x
    pause 150
    if porta.1=0 then yak22
    x=x/2
    goto yak1
yak22:
  pause 150

a=1
for a=1 to 3
portb=%11110000
pause 125
if porta.1=0 then son
portb=%00000000
pause 125
if porta.1=0 then son
next a
a=1 
for a=1 to 3
portb=%00001111
pause 125
if porta.1=0 then son
portb=%00000000
pause 125
if porta.1=0 then son
next a
goto yak22

SON:
     
PAUSE 150
portb=%00000001
pause 150
if porta.1=0 then basla

portb=%00000011
pause 150
if porta.1=0 then basla

portb=%00000111
pause 150
if porta.1=0 then basla

portb=%00001111
pause 150
if porta.1=0 then basla

portb=%00011111
pause 150
if porta.1=0 then basla

portb=%00111111
pause 150
if porta.1=0 then basla

portb=%01111111
pause 150
if porta.1=0 then basla

portb=%11111111
pause 150
if porta.1=0 then basla

portb=%10000000
pause 150
if porta.1=0 then basla

portb=%11000000
pause 150
if porta.1=0 then basla

portb=%11100000
pause 150
if porta.1=0 then basla

portb=%11110000
pause 150
if porta.1=0 then basla

portb=%11111000
pause 150
if porta.1=0 then basla

portb=%11111100
pause 150
if porta.1=0 then basla

portb=%11111110
pause 150
if porta.1=0 then basla

portb=%11111111
pause 150
if porta.1=0 then basla
pause 150



for t =1 to 10 ' 10 defa alttaki kodları çalışmasını istediğim için for next döngüsü kullandım
portb=0         ' port b nin tümünü sıfıra çekti ledler söndü
pause 100
portb=255     ' port b nin tümü 1 e çekti ledler yandı
pause 100
if porta.1=0 then basla
next t
goto son



hocam sizden bir ricam olacaktı. şu aşağıda verdiğim kodları bir başka çalışmadan kopyaladım ama açıklama yazmadığı için tam olarak çözemedim siz kodların yanına not düşüp ekleyebilir misiniz boş bir vaktinizde. aşağıdaki eklediğim kodlar ile sağa ve sola birer kayarak led yanıp sönüyor .


Alıntı Yapyakk:
pause 350
yak:
    if x=512 then x=1
    portb=x
    pause 150
    if porta.1=0 then yak11
    x=x*2
    goto yak
yak11:
pause 350
yak1:
    if x<1 then x=512
    portb=x
    pause 150
    if porta.1=0 then yak22
    x=x/2
    goto yak1