pcbway

El çırpması İle Yanan Lamba Projesi(pıc)

Başlatan theman, 19 Ocak 2010, 04:52:44

theman

19 Ocak 2010, 04:52:44 Son düzenlenme: 10 Mart 2010, 21:01:31 gevv
merhaba arkadaşlar.öncelikle aranızda yeniyim ve gerçekten başarılı bir forum. birçok şey öğreneceğimden eminim. benim 25 ine kadar teslim etmem gereken bir proje başlığımdada belirttiğim üzere.fakat hoca yalnızca pıc devresi ile istiyor ve biz pıc programlama hakkında bir ders almıyoruz=) o yüzden sizden yardımlarını bekliyorm. netten bulduğum bir projeyi sizlerle paylaşıcam çalışırmı çalışmazmı bilmiyorum.bu kodu hangi programla nasıl compile edicem(yani çalışıp çalışmadığını anlamak için) ve çalışıyorsa nasıl hex e çevirip pıc içine atıcam. bilen birisi varsa ve anlatabilirse çok memnun olurum.en azından bu projeyi nasıl kullanablirm onu öğrenmek istiyorm. teşekkürler.
not: 2 hafta önce kayan yazı projesi verdim PIC16F877A microc kodu ile birlikte yapmıştım.az da olsa aşinalığım var bazı terimlere.ama bu kod pic basic ile yazılmış sanırım.




@   device  pic12F675, intrc_osc_noclkout, wdt_on, pwrt_on, mclr_off, protect_on   
TRISIO = %00111100
DEFINE ADC_BITS 8 \' 8 bits is voldoende
DEFINE ADC_CLOCK 3
DEFINE ADC_SAMPLEUS 50
define OSCCAL_1K 1


INTCON=0
OPTION_REG=%00001111 \'
CMCON = %00000111
WPU = %00000100

ANSEL.0=0
ANSEL.1=0
ANSEL.2=0
ANSEL.3=1

role var GPIO.0
BUTON var GPIO.2
LED var GPIO.1
acma_izni var byte
olcme var byte
x var word
LED = 0
role = 0

pause 100

DATA @0,0

\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'
Basla:

    read 0,acma_izni
    if acma_izni = 0 then pasif

aktif:
        LED = 1
       
        for x = 1 to 100
            ADCIN 3,olcme
            if olcme < 50 then role_ac
            pause 1
            if buton = 0 then role_kapat
        next
       
        LED = 0
       
        for x = 1 to 2000
            ADCIN 3,olcme
            if olcme < 50 then role_ac
            pause 1
            if buton = 0 then role_kapat
        next
goto aktif

role_ac:
    role = 1
    LED = 1
   
        for x = 1 to 400
            if buton = 0 then role_kapat
            pause 1
        next
    LED = 0
        for x = 1 to 400
            if buton = 0 then role_kapat
            pause 1
        next
goto role_ac

\'\'\'\'\'\'\'\'\'\'
role_kapat:
    role = 0
    LED = 0
   
    write 0,0
     
role_kapat2:

    for x = 1 to 100
        pause 1
        if BUTON = 0 then role_kapat2
    next 
goto pasif
\'\'\'\'\'\'\'\'\'\'\'
pasif:
    LED = 0
    role = 0
   
    if BUTON = 1 then pasif

pasif1:   
    write 0,1
   
pasif2:
    for x = 1 to 100
        pause 1
        if BUTON = 0 then pasif2
    next 
   
goto aktif

neural

Yazılmış olan kodu [1] adresindeki derleyici lite sürümü ile derleyebilirsin. Devre bu hali ile çalışır gibi görünüyor. Ama en güzel yöntem devreyi kurup deneme yapmandır.
Kolay gelsin...

[1] http://www.picbasic.org/proton_plus.php

theman

merhaba öncelikle cevabınız için teşekkürler. fakat işletim sistemim vista. verdiğiniz programı desteklemiyor yada ben başka bir sorun yaşadım. bildiğiniz başka bir program varmı acaba? birde bu kod el çırptığımızda lambayı yakıyor ve tekrar çırptığımızda söndürüyormu? teşekkürler.

neural

[1] adresindeki bilgiye göre PBP derleyicisinin vista desteklediği yazıyor.
[2] ve [3] adreslerinde de PBP demo versiyonu bulunmaktadır. İşinizi görür sanırım.
Kolay gelsin.


[1] http://www.rentron.com/PicBasic/products/PICBASIC-PRO.htm
[2] http://melabs.com/pbpdemo.htm
[3] http://www.rentron.com/PicBasic/products/PBP_Demo.htm

theman

devreyi derleyebildim hex dosyası elimde fakat kodu biraz incelediğimde sanırım ilk olarak butona basıyoruz led yanıyor ve el çırptığımızda led sönüyor. fakat ikinci el çırpmamızda led yanmıyor yani butona tekrar basmadan röleyi bırakamıyoruz.  benim istediğim ilk el çırpmamda led yanıcak, ikinci çırpmamda ise led sönecek. bunun için ne yapabiliriz.yardımcı olursanız sevinirim.

theman

 ikinci el çırpma ile led in sönme kısmında sorun var.ekteki dosyaları birşekilde kullanarak yapmam gerekiyor buraya kadar bulabildim birşeyler. bu konulardan anlayabilen varsa ve yardımcı olabilirse memnun olurum. ekteki devre ile resimlerdeki birleşicek ve kod yazılıcak sanırım.:S


neural

Yapman gereken \"toggle\" işlemidir; yani girişteki değeri okuyup yükseliş veya düşüşleri yakalaman gerekiyor. Bundan sonrası Adc ile okuduğun değerin hangi durumda değerlendirmeye alman sana kalmış. Örneğin el çırpma durumunda yükselme durumu meydana geliyorsa yükselme anını yakalayıp çıkış durumunu değiştirebilirsin. Çıkış durumu tam tersine çevirmek için önerebileceğim en kolay yöntem XOR yapmaktır.
Asm \'de şu şekilde:
toggle
movlw b\'00000001\'
xorwf GPIO,f
return
Her rutin çağırıldığında
GPIO.0 = 0
GPIO.0 = 1
GPIO.0 = 0
olur.

Kodun yaptığı iş basit, her \"toggle\" etiketli rutin çağırıldığında GPIO.0 pini durum değiştirir.
Kolay gelsin.



theman

biliyorum çok şey istemiş olucam belki ama ben baştada belirttiğim gibi pıc programlamadan hiç anlamıyorum:/ eğer ilk verdiğim devre el çırpmam da yanıcak ve ikinci el çırpmamda sönebilecek ise kodu tekrar düzenleyip hex li haliyle beraber yollayabilirseniz sevinirim ve bu nedenle şemada bir değişiklik olursa da değişikliğin nerede olduğunu söylermisin. anlasam gerçekten uğraştırmak istemezdim.teşekkürler

neural

Ekteki dosyada istediğine uygun bir program var. Proton Pic Basic ile yazıldı.
Ancak Pic \'in devreye bağlanış şeklini değiştirmen gerekir.

GPIO.0 pini ADC girişi (Opamp \'ın çıkışı)
GPIO.1 pini LED ve RÖLE çıkışı olarak kullanabilirsin.

Kolay gelsin...

theman

ufak bir sorum daha olucak bu son verdiğiniz kod benim  ilk mesajımdaki devre şeması içinmi? şemayı değiştiriyim dedm fakat opamp yok onda? zahmet olmassa şema üzerinde düzelterek gönderebilirmisiniz? teşekkürler zahmet oluyor sizede

not:ekte benim çizmeye çalıştığım ilk devre şeması mevcut.

neural

Opamp yerine senin kullandığın transistörün kollektör ucu olabilir. Yani Adc girişi senin yada herhangi bir kaynaktan gelen 0-5V arası herhangi bir analog sinyal olabilir.
Led ise senin istediğin çıkış ucu yani bir çırpmada 1 olan bir çırpmada 0 olan uç, bu ucu herhangi bir yerde kullanabilirsin. İster Röle ister Led tercih sana kalmış...

theman

teşekkürler bi şekilde çizicem artık